Posted By: wraggster
Pate has today released a new version of his Dos emulator for the nintendo DS:
This version has the following major changes:
No more need for the LOADFIX command! See the previous blog post for more info about how I changed the code to enable this, if you are interested.
EGA horizontal smooth scrolling fixed. The horizontal scrolling was very jittery in games like Supaplex, Heimdall and Crystal Caves, for example. Again more info in my previous blog post.
The BIOS window scrolling functions (up/down) are now implemented for each supported graphics mode and for both directions.
Removed the check for running zeroed data, as this prevented the Great Escape game from starting. Now you won't get an Unsupported Opcode error in this situation, the game will probably just hang.
Fixed a bug in MOV SP,SReg opcode. For example a game called Berlin 1948 used SP as a loop index with SS as the initial value, and the buggy opcode caused SP to get zeroed, which in turn caused the game to fill the entire screen when it only wanted to write a few pixels.
Various game-specific fixes, as mentioned in my previous blog post.
All the missing opcodes (that weren't caused by the game executing data) in the debug logs I have received have been implemented. So quite a few games should now progress further than before.
Since the last blog post I have also debugged a couple of new games. I spent many hours (including the whole of yesterday) debugging the memory allocation problem in Abandoned Places, but still could not figure out why it skips allocating a 64KB block of memory (that it does allocate in DOSBox) and then crashes when it clears this block that it never allocated in the first place! It is quite difficult to trace something that does not happen, so I still need to think up new ways to approach this problem.
Another game that I only started debugging today is Gods. It seemed to hang at the beginning with a black screen, and it didn't even respond to the user breakpoint request. Luckily this was not a problem when running it in iDeaS, and with it I was able to find out that my VGA Display Status Register emulation was still not correct. The bit that returns whether the display is in Horizontal Blank should also return the Vertical Blank time. When I added that, I got Gods to progress up to the start menu, but the graphics were completely garbled. After some debugging I noticed that it goes to 640x350 EGA mode, but then directly writes new values to the CRTC registers so that the display size is actually 320x200! My screen blitting functions are based on the graphics mode byte, so the game used the graphics memory like it was 320x200 pixels while my blitting routines used it like a 640x350 layout. Btw, the game does not look correct on DOSBox either (at least on my rather old version), but as DOSBox uses the real CRTC registers it is not as broken as it was in DSx86.
I added a quick hack to the CRTC register setting so that if the mode is 640x350 but the new CRTC register value tells the horizontal size to be 320, I change the graphics mode to 320x200. This allowed the game to display a properly-sized screen, but there are still some severe problems with scrolling and paging, so the game is not playable yet. I believe I need to change my blitting method completely to read the current CRTC register values instead of the graphics mode, to properly handle situations where the game accesses the CRTC registers directly.
Anyways, this version is yet another fix version without any major new features. My summer vacation starts within a week (Yippee!), so after next week I'll start working on the bigger issues, like improving the AdLib emulation, implementing the missing SB DSP commands, adding better screen scaling methods, improving the mouse emulation etc etc. I am very much looking forward to being able to really focus on adding the missing features to DSx86.
Thanks for your interest in DSx86, and please send me debug logs and update the Compatibility Wiki as you test games on this new version! Here below are pictures of the Great Escape and Berlin 1948, which should now run in DSx86.
http://dsx86.patrickaalto.com/DSblog.html