Pate has released a new version of his Dos Emulator for the Nintendo DS, heres todays news:
This is mostly a fix version after the somewhat buggy version 0.20. This version includes the finished AdLib emulation, and I fixed the problem introduced in 0.20 with the Direct SB mode where the start of the BIOS F000 segment was overwritten with corrupt data. This version also has a lot more of the opcodes refactored to use the new more robust memory handling, which also means that this version will run slower than the previous version. Norton SysInfo tells that this version runs at 9.9 times original PC, while the version before any of these internal changes ran at 11.5 times original PC. I am still not even half way done with the internal refactoring, so the next version might still be slower, until I get all the refactoring done and can again start optimizing things.
I spent about half my time working on the internal refactoring, and the other half with debugging and testing programs that behaved badly in the previous version. Here is a list of the specific programs I tested and the changes they required, where applicable.
Adventures of Robin Hood needed a better Stack Pointer handling.
Silpheed needed refactored string opcodes, which are now mostly done. The common REP MOVS and REP STOS variants now use the new improved memory access handling, while the less common REP SCAS and REP CMPS, and the really rare REP INS and REP OUTS still use the old method. I also fixed a problem in the internal debugger and a rather nasty bug in the port input emulation that could crash DSx86 completely, both of which happened with Silpheed. It should now run pretty much perfectly, including the complete intro.
SimAnt also needed the refactored string opcodes, but this time for EMS memory handling. I have only played the tutorial game for a little while, but it runs at least that far without problems.
Catacomb gave an "Unsupported INT" call whenever a key was pressed. This was caused by it calling the original BIOS INT9 handler without pushing the flags, so when the INT9 call returned it popped flags from a location in stack that could contain whatever data. The data it popped happened to contain 1 in the bit that went into the CPU Trap Flag. So, the next opcode caused a CPU single step trap, which then caused an unsupported INT call when there was no handler for the single step interrupt. I fixed this problem by turning the Trap Flag back off and ignoring the Single Step interrupt when no handler is present.
Castle Master had stopped working in version 0.15. This was due to my improved Vertical Blank handling. I am still not quite sure why my swapping the Vertical Blank bit hanged Castle Master, but in any case I adjusted the Vertical Blank bit reporting once more. Now it reports Vertical Blank during DS hardware screen scanlines 128..191 (just before the real vertical blank interval). This seemed to still keep the horizontal smooth scrolling in Supaplex, but also allowed Castle Master to run. This fix should also help with the slow palette animation in History Line, and possibly other games.
F29 Retaliator needed quite a few JPE and JPO opcode hacks. It used those opcodes (which are not natively supported by DSx86, so I need to add game-specific code for each game that uses those opcodes) in several locations in the code, so I am still not sure I found and added them all. The game does get in-game fine now, though. Please send me debug logs if you get this game to drop into a debugger with "Unsupported opcode".
Operation Wolf had an unsupported EGA opcode in the demo game. I refactored this opcode to use the new memory handling, and the demo game seemed to perform fine. I couldn't figure out how to start the actual game, though, so I'm not sure if this game works properly yet.
Super Solvers: Challenge of the Ancient Empires! also had a problem with it needing a JPO opcode. I added support for this opcode at the start of the "India & China" part of the game, but haven't tested whether the problems in other parts were fixed by this also. Please send me a debug log if you still get opcode errors in this game.
Windows 3.0. This is perhaps the biggest new application that runs in this version. I had seen a YouTube video of someone testing Windows 3.0 on DSx86, and it seemed to report that "DOS version 3.1 or newer is required", which did not make much sense when DSx86 reports DOS 5.00 by default. So, I decided to install my old Windows 3.00a floppy disks in DOSBox and see what is going on with it in DSx86. Here is a list of the things I needed to fix to make Windows 3.0 run.
After Windows queried the DOS version (5.00) it proceeded to scan the low memory for a string "CON". When found, it looked for the three next occurences of this string in memory, and reported "Incorrect DOS version" if all three of these occurences were not at equal distance from each other. A rather peculiar check for a DOS version... Anyways, it found the text "CON" in the System File Table in DSx86, for stdin
...
Catherine: Full Body’s English translation for the Vita