![]() ![]() It all started when I was looking for a Dosbox solution with Networking and found Dosbox-x, three or four years ago, even the one-line solution mentioned here for NE2000 was given to me by someone (Jokia, was it you?) on VOGONS forums back in 2019. Interesting read! But that page fault issue with dynamic core was exactly the reason why months ago I went after QEMU and UTM, but QEMU itself needs patches to support 3dfx/Glide (unlikely, given how the dev of the patch isn’t too keen in working out for an easier way to the general public to use it), while DosBox-X does run it and also emulates a voodoo 1 if I am not mistaken. It happens to work with 32-bit Windows because of how Win32 defined C++ exceptions through the Thread Information Block via the FS: segment register, but that's the only known exception. None of those structures define how to deal with the code generated by dynamic core, so 99% of the time the C++ runtime aborts DOSBox-X as if nobody had any catch statements (even if functions higher up did!). Unfortunately C++ exceptions do not work with dynamic core because most platforms, including Linux, have static data structures that the C++ runtime uses to determine how to handle an exception. The problem is that in Windows 95 onwards, the preemptive multitasking can switch tasks while userspace is processing a page fault, thus the assumptions fall apart and emulation gets itself crossed up with inconsistent CPU state and eventually Windows 9x/ME crashes.ĭOSBox-X solved this issue with normal core by making a guest page fault a C++ exception that the CPU core throws and the normal execution loop catches, and by modifying all normal core instruction handling so that the instruction either completes, or leaves CPU state as it was at the start if interrupted by a page fault (solving the corrupted CPU state issues). The problem DOSBox SVN, and DOSBox-X dynamic core have, is that the page fault handling is written to assume the page fault exception handler will do it's thing and then return right back to the location the fault occurred. This forces Windows 98 to page fault and use the swap file a lot, and that can help reveal any page fault handling problems with the CPU core of your choice. The way I test reliability is by starting DOSBox-X with as little RAM as necessary for Windows 98 to run. It's possible everything seems to work fine because Windows has yet to make any moderate to serious use of the swap file. Problems with dynamic core and Windows 95/98/ME often have to do with page fault handling and preemptive multitasking.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |