First post, by superfury
When I try to run Windows 3.0 in Standard Mode on UniPCemu's 80386 emulation, I see it do something strange(it's an endless loop with invalid return point, seeing as the call instruction keeps retriggering infinitely until stack will overflow) at 51:FE1 in plain protected mode. It keeps returning to the same instruction(through RETF, which returns to the E8 (near) CALL opcode)? The subroutine substracts 2 from ESP and then starts doing some stack operations after emulating a ENTER instruction, finally popping BP (and restoring the previously saved DS on the stack before returning using RETF). I see the stack keeps decreasing more and more(which will eventually overflow, causing a stack fault).
Anyone knows anything about this odd routine?
Edit: Trying to load EMM386.SYS NOEMS and running Windows 3.0 in 386 enhanced mode(default afaik) causes it to infinitely fault because Paging is disabled and the TSS descriptor is pointing to an invalid location(0x80002XXX range, which isn't in physical memory)?
Edit: I see it's enabling Paging when starting Windows 3.0 in 386 Enhanced mode, but then clearing the upper 16 bits of CR0, disabling Paging, at instruction address 8:2F8? Why would it disable, only to crash immediately after?
I'm using a required file(WinA20.386) which was downloaded from http://www.filewatcher.com/m/WINA20.386.9354-0.html
Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io