DSx86 is a PC/DOS emulator for Nintendo DS written by Patrick Aalto. It’s purpose is to allow you to run old DOS games on your Nintendo DS game console. Some of the older games run quite good and bring back memories.
Release notes:
Sorry for this unscheduled release, but as this is the day of the original Homebrew Bounty deadline, I decided to release a quick fix version to address a couple of issues introduced in the previous 0.33 version. This version supports ‘sudokuhax’ for running in DSi mode again, and it also has the screen blitting and keyboard reading code in the same order as in the 0.32 version.
I had reports about DSx86 missing keyboard events in 0.33 when using Smooth scaling mode, and the only thing I had changed that could cause this was that I moved the keyboard reading before the screen blitting in the VBlank interrupt. The reason I did this was that reading the keys also reads the scrolling buttons L and R, and scrolling the screen must happen within the VBlank period or the screen will tear. However, adding the Smooth scaling options make the screen blitting take so much time that the VBlank period has ended before the code gets to keyboard reading. I still don’t quite see how swapping the order of the subroutines would cause key events to get missed, but it seems that changing the order back and just making sure the screen scrolling actually takes place only during the NEXT VBlank period fixes this problem.
The other problem introduced in version 0.33 was that I had to remove the DSi SD slot access code from libNDS 1.5.0 to make my AdLib emulation run without crashing. I now found a way to include that back in and still have my AdLib code run properly. I still need to dig into the original problem further to see what actually causes the hang. I originally got rid of the problem after I removed the SD reading code, the i2c handling code, and all the additional DSi mode ARM7 interrupt and FIFO handling. Now I managed to add the SD reading code (along with the FIFO stuff that that needs) back in, so I plan to check whether it is the interrupt, some remaining FIFO or i2c code that actually causes the problem. I have already tested the original libNDS 1.5.0 by only removing the i2c code, but that still caused a hang.
Anyways, I think I’ll need to make some final touches also to DS2x86 before the actual Homebrew Bounty deadline, so this might very well be the final DSx86 Homebrew Bounty version.