Hello.
"Vlad Romascanu (LMC)" wrote:
> No good; most of the games patched using cli2nop crash after a few seconds;
> -- if the game uses sti/cli for mutual exclusion then keeping interrupts
> enabled all the time won't guarantee any mutual exclusion. If DosEmu *does*
> disable interrupts but forcefully re-enables them later (as opposed to
> always keeping them enabled), then you're somewhat safer.
I agree.
> > receive signals anymore, nothing, only kill -9.
> Linux timer. All the rest (i.e. keyboard) should be dead except for magic
> key combinations, this is normal.
I can continue: it stops DMA, it stops logging (even timer events), it ignores
dosdebug connections, it ignores window closing when it is under X.
Not what I could call "normal" behavior:)
Anyway, I have just found a cure, see attachment. So I think if this is applied,
it would be possible to do also what you suggest.
> independently of the CPU's frequency). If the program reads several times
Yes, 4 times.
> in a row from port 0x226 (I think that's the reset one) then it's just a
> delay trick.
Thanks.
> Command 0xe2 was a pain to reverse-engineer. Are 0x06 and 0x6b actual
> commands, or arguments to a command (e.g. 0xe2)?
Exactly, that were arguments to 0xe2:) Anyway, until 0xe2 is unknown, this
Millenium game doesn't produce any sound under dosemu.
But atleast it doesn't lock now, when arguents are handled "correctly", i.e.
known what is to ignore.
> Get a sound card! Or are you out of ISA/PCI slots? :)
Exactly, you guessed also this. How are you doing it?:)
Damn this engineers who put only 1 ISA (or even 0!) to the MB!
> There is a PC-speaker driver for Windows, but it is fully synchronous (i.e.
I knew it was for win95 but never seen it for NT.
--- src/dosext/dpmi/dpmi.c Mon Oct 29 23:01:37 2001
+++ src/dosext/dpmi/dpmi.c Thu Nov 22 03:08:48 2001
@@ -2502,13 +2519,17 @@
#else
if (_cs != UCODESEL){
#endif
-#if 1
+#if 0
if (in_win31 || (dpmi_eflags & IF)) {
D_printf("DPMI: return to dosemu code for handling signals\n");
Return_to_dosemu_code(scp,0);
} else dpmi_eflags |= VIP;
#else
/* DANG_FIXTHIS We shouldn't return to dosemu code if IF=0, but it helps - WHY? */
+/*
+ Because IF is not set by popf and because dosemu have to do some background
+ job (like DMA transfer) regardless whether IF is set or not.
+*/
D_printf("DPMI: return to dosemu code for handling signals\n");
Return_to_dosemu_code(scp,0);
#endif