DSx86 is a PC emulator for Nintendo DS. It's purpose is to allow you to run old DOS games on your Nintendo DS game console. There are two versions of DSx86, the original DSx86.nds for all common flash carts, and a new version called DS2x86.plg for the SuperCard DSTwo flash cart. The difference is in the CPU and memory emulation available (and since DS2x86 is much newer, it is still missing some features that are supported in the original DSx86). Also, the original DSx86 can be run on a Nintendo DSi in a DSi mode, if you have a suitable flash cart (like the CycloDS iEvolution). This mode gives more CPU speed and more memory available to DSx86.
Changes in both DSx86 and DS2x86
I implemented a couple of fixes that affect both DSx86 and DS2x86, as the fixes were implemented into the C language code that is very similar in both. I will perhaps at some point attempt to combine the C codes for real (using ifdefs), but for now they are separate files with mostly similar content. Anyways, the changes that affect both programs are:
Changes specific to DSx86
- New TPMXScale and TPMYScale ini file parameters. These can be used to adjust the TouchPad Mouse scaling for each game. The default values (when the parameters have not been given in the INI file) are 1.0 for both. You need to experiment with different values to find the best scaling factor for each game. Note that changing these might still not make the TPM work in a certain game, as the game might not use the mouse in a way that is compatible with the touchpad mouse emulation. These new parameters should help in some games, though.
- The key repeat function in the keyboard emulation was fixed so that it repeats the actual key that was pressed, not just the non-enhanced version of the key. This will help with the stuck cursor key problem in Frontier.
- The graphics mode detection code has been enhanced, so that both methods of entering 240-row Mode-X graphics modes (either 320x240 or 360x240 as in Albion) will be detected, and the correct graphics mode initiated.
DSx86 has been built with libNDS 1.5.3, which should allow write access to the SD card when using Sudokuhax. I have no way of testing this feature, so it might work, not work, or corrupt your SD card completely! Please use caution and back up your SD card before using this version with Sudokuhax!
This new libNDS version 1.5.3 had the same problem as the 1.5.0 version I had been using, where ARM7 (or at least the AdLib audio emulation) freezed after a few seconds of playing AdLib audio. In 1.5.0 I got everything to work when I disabled all references to the i2C code, commented out the secondary ARM7 IRQ table handling, and removed the whole i2c.c source module from the libnds7.a sources. I did the same thing with the 1.5.3 version sources and built the libraries again, and that seemed to help again. I don't know why the i2C code is incompatible with my AdLib emulation, but as long as this hack works it is not a big problem for me.
DSx86 also has much faster Smooth scaling routines in the 320x200 256-color modes (MCGA and Mode-X). The new code is courtesy of "sverx", who kindly spent some time looking at my scaling code and inventing various speed tricks that hadn't occurred to me. For example, the new code uses DTCM for the palette lookup table, instead of the actual (and slow) BG_PALETTE VRAM memory I had been using. The 75%/25% weighted average calculation is also much faster. The new smooth scaling code is still a lot slower than Zoom, Scale or Jitter modes, but it is noticeably faster than before. Thanks again to "sverx"!
Changes specific to DS2x86
There should be no other noticeable changes (besides the common enhancements mentioned above) in DS2x86, even though the program size has increased somewhat. The size increase is due to the new paging / virtual memory -enhanced opcode handlers. This work is still in progress and thus games that use virtual memory will still not work. The updated opcodes should work like before, and the slowdown caused by the new code should be very marginal, but let me know if you find something that worked before but does not work any more. There is a chance that I have broken something when doing the virtual memory support changes.
I plan to continue working on the virtual memory support for DS2x86. This will take a while yet, so I might not be able to make any other major enhancements to the next version. I don't know yet how long it will take to make the virtual memory working, I might still run into some major obstacles. Until now it has progressed reasonably well, many opcodes already support virtual memory.
Download Both via Comments