Reply 340 of 2419, by TheGreatCodeholio
- Rank
- Oldbie
I have another interim experimental release up (no Win32 build for that reason).
http://hackipedia.org/Projects/DOSBox-X/dosbo … df3f-src.tar.xz
Changes include:
Fixes to the code to compile properly for 64-bit Linux.
CTRL+C and CTRL+BREAK support in DOSBox DOS kernel.
Typing CTRL+C should now trigger CTRL+C instead of typing hearts.
If you use DOSBox to run ancient DOS development IDEs and compilers, being able to CTRL+C out is vital.
Added support for resetting the CPU and system through the keyboard controller or port 0x92. Windows ME no longer complains about not being able to reset the computer when you restart windows. It turns out Windows 95 and 98 were able to reset DOSBox regardless because they contain fallback code to call INT 19h should the keyboard method fail, while Windows ME doesn't use that fallback anymore.
Changed #defines in cpu.cpp to enable exceptions for segment loading when privilege levels differ (RPL != DPL). The defaults between C_DEBUG and normal seemed kind of silly to me (either ignore them entirely, or E_Exit() when it happens--why?) Seems to have no effect on Windows 9x/ME, but the change actually makes it possible to boot Windows NT 3.1 in DOSBox! (why it crashes at the login prompt or when I move the mouse is another issue to look into).
New experimental "non-recursive" page fault mode added. It's not 100% stable, so it's disabled by default. Enable by adding 'non-recursive page fault=1' to the cpu section of your dosbox.conf. When enabled, the hack if possible triggers the page fault exception in a way that aborts the CPU instruction and throws control back up to the Normal_Loop() where the CPU exception can be set up and executed non-recursively. There seem to be a few corner cases with core=dynamic where bugs show up especially if the page fault was caused by a floating point instruction in the guest. Otherwise, the non-recursive mode seems to resolve the issue with page faults building up and overflowing the PF queue. I'm able to use Windows 98 SE now without the PF queue case triggering and slowing down the whole virtual machine. Even Windows ME is usable now (though you still have to forcibly bypass the first-boot setup stage that seems to reliably crash DOSBox).
Also confirmed:
The non-recursive mode makes it possible to use Windows 98 with IDE enabled for all drives and the S3 driver without page fault issues.
APM BIOS emulation works fine when Windows ME shuts down, but the APM BIOS driver always causes a BSOD and should be disabled from the System control panel applet.
I would also like to point out that in the NOTES and BUGS directories of the source tree I've been taking notes and writing wish lists as well as plans and a list of bugs and issues I would like to address if possible. One big concern of mine is that core=dynamic is essentially required to run Windows 9x/ME. core=normal and other settings don't work. I will be away from the project for the next week or two. If anyone here would like to help me with what I've noted in those files, go for it.
In some of the spare time I've had I've also been testing miscellaneous things in DOSBox-X running Windows 95:
https://www.youtube.com/watch?v=mcdPk6ExOd0
https://www.youtube.com/watch?v=IhmcWjmn0eo
Enjoy.
commit 925ee125517bb6e380c4a05886b153d252f1df3f
Author: Jonathan Campbell <jonathan@castus.tv>
Date: Sun Apr 13 16:32:49 2014 -0700
change default cpu.cpp exception handling to actually carry out the
exception. doing this (and enabling the non-recursive page faults)
allows DOSBox to actually boot into Windows NT 3.1!
commit cf52e950462493b4a7381817a8d818f6970e2d4a
Author: Jonathan Campbell <jonathan@castus.tv>
Date: Sun Apr 13 16:11:19 2014 -0700
E_Exit: print to STDERR
commit a9d791d3c98ff919b19a117d4a5741a0d5dc96bd
Author: Jonathan Campbell <jonathan@castus.tv>
Date: Sun Apr 13 16:07:55 2014 -0700
add support for system reset via port 92h
commit 4aef7cf5f3a235bd923c4f00dead7eb8f4d0beb8
Author: Jonathan Campbell <jonathan@castus.tv>
Date: Sun Apr 13 14:58:35 2014 -0700
more
commit 277b6d0b16325d65d4068bfdf60f16da5ba6865e
Author: Jonathan Campbell <jonathan@castus.tv>
Date: Sun Apr 13 14:35:20 2014 -0700
add option (enabled by default) to allow resetting the DOSBox emulator
if the guest OS or application uses the standard method through the
keyboard controller. This fixes Windows ME's inability to reboot the
system when you select "restart system". Windows 95 and 98 apparently
happened to work regardless because they contained code to fallback to
calling INT 19h from real mode... or something.
commit 49f72786d4d2dbcd2320552e6924bcce2521b6e2
Author: Jonathan Campbell <jonathan@castus.tv>
Date: Sun Apr 13 14:08:21 2014 -0700
add more bug report
commit 5bf3e55509bfe67d724de04a5a034a01ae916ac2
Author: Jonathan Campbell <jonathan@castus.tv>
Date: Sun Apr 13 09:35:38 2014 -0700
add commentary
commit 09f7efc66f2ae5a62755a57d3c15bfec44e18bc8
Author: Jonathan Campbell <jonathan@castus.tv>
Date: Sun Apr 13 05:34:41 2014 -0700
hm, the non-recursive page fault code isn't 100% stable with dynamic.
default off.
commit 2069888c1c6608decf8375df0fdb68115d3b4bf0
Author: Jonathan Campbell <jonathan@castus.tv>
Date: Sun Apr 13 05:05:42 2014 -0700
comment out assertion in IDE emulation that triggers if not word
aligned. Apparently Windows 98 can trigger it when installing Visual
Studio 4.0 or something.
commit 33b84d7d66fc502e709324812f011d48c992cbd1
Author: Jonathan Campbell <jonathan@castus.tv>
Date: Sun Apr 13 03:13:32 2014 -0700
add experimental non-recursive pagefault mode. so far, so good.
it doesn't seem to have any effect on problems with IDE and S3 graphics
emulation, but it does seem to lessen to probability that Windows 98
triggers the pagefault recursion issue that causes it to slow down so
much.
commit e14e3d9966b006be4b8a617b9ef71d0b3cf90a04
Author: Jonathan Campbell <jonathan@castus.tv>
Date: Sat Apr 12 18:32:27 2014 -0700
remove save state code that typecast function pointers to Bit32u for
some reason. added code to conditionally call into the dynamic core only
IF the dynamic core was compiled in. This fixes several compile issues
with x86_64.