PDA

View Full Version : DS2x86 version 0.36 released!



wraggster
March 25th, 2012, 23:35
This version has mostly fixes for Borland RTM extender and Jazz Jackrabbit. The full list of changes looks like this:

Implemented "rep stosd" for Mode-X with irregular map mask (Micro Machines 2)
Forced INT 15 AH=88 to report no extended memory (Borland RTM DOS Extender)
Implemented "LAST_FIT" memory allocation strategy handling (Borland RTM DOS Extender)
Implemented "LES reg,m16:16" page fault handling (Borland RTM DOS Extender)
Implemented INT 21 AH=4D proper return mode reporting (Borland RTM DOS Extender)
Improved SB emulation to not hang after invalid SB command (Jazz Jackrabbit)
Implemented support for reading data from file to Mode-X VRAM (Jazz Jackrabbit)
Implemented proper AdLib timer handling (Mortal Kombat etc SB detection)
Fixed a bug in ARM9 SB audio buffering scheme (Mortal Kombat, Supaplex, etc)
During the last week I managed to fix the graphics problems in Jazz Jackrabbit. Those were caused by the game reading data from file directly to Mode-X graphics memory. So far I had only supported reading data directly to EGA memory (which is done by Heimdall, for example), but not to Mode-X graphics memory as I have not had a suitable program to test this with. Now both EGA and Mode-X direct reading is supported. I also finally implemented proper AdLib timer handling. That is used by many games to detect the presence of AdLib-compatible audio system, including SoundBlaster FM audio. Now the AdLib timers increment at the proper speed, so that the AdLib/SoundBlaster detection in various games should now be more reliable.
After I got Jazz Jackrabbit working, I also spent some time trying to track down the bug that causes various games to crash after a while, especially if SoundBlaster digital audio is in use. I did not manage to find the problem, though. I added various counters and tracing features, but the problem is that even when I let the games run for up to half an hour, they did not crash, and my counters showed that the SB IRQ emulation had been executed for hundreds of thousands of times. It is really difficult to find a problem that happens so rarely that executing the potential problem code works fine for thousands of times before failing.
I did however managed to find and fix a bug in SoundBlaster digital audio buffering scheme, that in certain situations could cause the whole ARM9 side to hang. I encountered this problem when testing Mortal Kombat after the AdLib detection change, so I used that game to track down the cause for the bug. I had earlier noticed that this hang also happens occasionally in Supaplex, but at that time I was not able to track the bug down. Now neither of those games should cause a hang any more.
Next I would like to study Windows 3.11, as it would be interesting to get it running. I have already logged it in DOSBox, so I just need to trace and compare that log with the behaviour of DS2x86, similar to what I did with Jazz Jackrabbit, to find out why it currently crashes. I suspect there are still various features in my protected mode and paging support that are missing, so it is not a big surprise that Windows 3.11 does not work quite yet.

http://dsx86.patrickaalto.com/DSblog.html