Just tried running EMM386.EXE from MS-DOS 6.22 again. It seems to crash somewhere, then crash in the VM monitor executing opcode 0xFF14? So there's a problem with the 0xFF /2 CALL opcode?
I see that the invalid value is caused by ECX being 0xFF(DS:[disp32+ECX*2]), where it's lower in all other cases? So the ECX register is the problem here? Then the question is: what causes the 0xFF value in the ECX register?
Edit: One little question: Is EMM386 supposed to run in 16-bit protected mode? Is the VM86 monitor supposed to run in 16-bit protected mode instead of 32-bit protected mode?
I see the loaded CS descriptor in the monitor being loaded with descriptor 0x00009a121400ffff which is a 16-bit CS descriptor? Is this correct for EMM386?
Edit: Hmmmm.... After adding some simple logging for leaving Virtual 8086 mode, I see the last INT21h before a bunch of text output instructions and video calls(probably the EMM386 fault handler showing it's information about the 06h crash) being AX=0659h.
Edit: Maybe that's already the fault handler of EMM386.EXE? The last call before that was AX=4B00. So MS-DOS was trying to load and execute a program(which after the device drivers itself(which load and show themselves loaded) should just be COMMAND.COM being loaded afaik?). This happens at timestamp 00:05:33:46.01056 .
- Filename
- debugger.log
- File size
- 554.16 KiB
- Downloads
- 279 downloads
- File comment
- Log of the Virtual 8086 mode being leaved from EMM386.EXE being loaded and afterwards.
- File license
- Fair use/fair dealing exception
The format in the log is: INT [intnr](opcode(0F:[is0Fopcode])),immb=[immediate byte(if any)],AX=[AXvalue])