News
DSx86 v0.21 (Beta) (DOS emu for NDS)

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.

Release notes:

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 file handle, and also another instance in the table for stdout, but it didn’t find a third instance, as there was none in DSx86. Well, normally there should be three instances, stdin, stdout and stderr, so I added the missing “CON” file into the System File Table, and Windows 3.0 progressed further.
The next problem was that it ran into a protected-mode opcode, which is not supported in DSx86 as it only emulates a 80186 processor. I tried to start Windows with “WIN /r” command, to force it to go into Real Mode, but that did not help, it still attempted to use the protected mode opcode. I then debugged the code before this opcode, and noticed that Windows 3.0 detects the CPU type it is running on by first shifting a register value 32 bits left. The old 8088/8086 processors did not mask the shift count, so when shifting a 16-bit register 32 bits, the result is always zero. Processors from 80186 onwards mask the shift count to 5 bits, so shifting by 32 bits is the same as shifting by 0 bits, so the original value of the registers stays intact. This was OK in DSx86, the register value stayed intact, so Windows 3.0 noticed it was not running on 8088/8086 processor. Next Windows 3.0 pushed the stack pointer, and checked whether the pushed value was the original stack pointer value. This is where DSx86 did not work as it should. My Turbo Assembler 3.0 Reference Guide states that 8086 pushed the decremented value, while processors from 80286 and up push the original value. It does not mention 80186 processor at all, so I had assumed it works like 80286. Now I found out that 80186 has the same bug as the 8086 processor, it pushes the already decremented value. I changed this, and got Windows 3.0 to load up fine. Hopefully this change does not break any games that might try to detect the processor type and want a 286 or newer processor.

Next I tried to make Windows 3.0 detect a mouse, but it looked like any other options besides PS/2 mouse makes Windows 3.0 go thru the serial ports and try to forcibly detect the mouse type connected to the serial port. So, I decided to look into finally emulating a PS/2 mouse as well. DOSBox was again quite a good reference for this, so after a few tries I got the PS/2 mouse emulation working. I haven’t tested this in any other software besides Windows 3.0, so it might not work properly anywhere else, and there is also a risk that the normal mouse handling does not work any more in games that suddenly see a PS/2 mouse.

I fought for a long time with the touchpad mouse emulation, trying to match the position DSx86 thinks the mouse is at with the position where Windows 3.0 wants to display the mouse cursor. I think the biggest problem is that if the mouse moves more than a certain number of pixels per a single mouse interrupt, the move goes over the Doublespeed Threshold, and Windows 3.0 moves the mouse a double distance. This is pretty hard to take into account when just clicking around the screen, so instead of the Touchpad Mouse I focused on trying to make at least the D-Pad mouse working properly. After several tries and doublespeed threshold adjustments I finally got the D-Pad mouse to stay in sync between Windows and DSx86.

I also got annoyed with the awkwardness of moving the mouse out of the visible screen area in Zoom mode, and then having to scroll the screen, and then continue with the mouse movement, so now the screen scrolls automatically also in D-Pad mode when the cursor goes near the screen border. There is again a risk that this breaks some games, but I trust you will let me know if this happened. 🙂

Anyways, I’m not quite sure how useful Windows 3.0 in Real Mode is, and I also haven’t looked into how to enable EMS support in it (which I believe it should be able to use), but I’ll let you testers experiment with it. I found one program that runs in Windows 3.0 Real Mode, Moontool by John Walker, so I immediately downloaded that and tested it, and indeed it runs fine also in DSx86. The Garbo Windows 3.1 Archives might also have some programs that run also in Windows 3.0, so feel free to test if you are interested.

Future plans
The internal refactoring continues, and as you might have noticed, this version is quite a bit smaller than the previous version. That is due to refactored code no longer requiring separate graphics and normal RAM opcodes, but instead only the memory handlers are separate. So even though the code size gets smaller, more and more “graphics opcodes” get supported by every refactoring change I do. I am looking forward to a point where I can get rid of the separate graphics opcode framework completely, as that will free several kilobytes of ITCM for other more beneficial use.

I also hope to finally look into the mouse emulation improvements during the next couple of weeks. Adding smoother screen scaling could also help some games, but the problem with that is that it takes a lot of CPU cycles, during which time no interrupts are sent to the running x86 program, so especially Direct SB audio would become pretty much unusable. But, I’ll see what I can do about that. There are also many games remaining in the Compatibility Wiki that I should look at, so I don’t think I will run out of things to do in DSx86 for a while yet. 🙂

Thanks again to all of you for your interest in DSx86!

http://dsx86.patrickaalto.com/

By with 0 comments
The 700 Club (SNES Musicdisk)

The 700 Club is a music disk for the Super Nintend Entertainment System / Super Famicom by mic.

Release notes:

A while back I wrote a VGM playback driver for the SPC (S-SMP/S-DSP, i.e. the sound chip found in the SNES), which I released along with a tool that converted .vgm/.vgz files into .spc files. You can find it here ( http://jiggawatt.org/badc0de/vgm2spc-2.zip ) (source code included).

Anyway, I decided to put together a SNES-side GUI and create a musicdisk with some hand-picked tunes from the Sega Master System & Game Gear, much like Oxygene ( http://www.pouet.net/prod.php?which=3816 ) and Censor ( http://www.pouet.net/prod.php?which=2462 ) have done in the past for other formats.

This is the result of that work. Tested only on a PAL SNES unit, and in BSNES. Please don’t use ZSNES or Snes9x – both of them had atrocious sound emulation last time I checked.

Here’s a youtube clip ( https://www.youtube.com/watch?v=RxY61EPvREU ) recorded from my SNES for those of you who can’t be arsed to run BSNES or put the ROM on a flash cart.

http://pouet.net/prod.php?which=55319

By with 0 comments
A Dawgs Bitches (GP2x Demo)

“A Dawg’s Bitches” by bawlz & Northern Dragons, released at “@Party” 2010.

http://pouet.net/prod.php?which=55347

By with 0 comments
Bits 2005 (GBA Demo)

BITS #2005 by BITS

http://pouet.net/prod.php?which=55391

By with 0 comments
MissedCallReminder v1.4.1 (Beta) (PPC Application)

MissedCallReminder adds the missing “missed call” and “missed sms” reminder to WM 6.

Changes:

bugfix: Reminders are given for a notification even if the notification is not selected in the notifications tab. (second attempt )
bugfix: If no reminder between is used the program does not correctly follow the time rule
bugfix: program still vibrates the phone if phone sound is set to silent

http://forum.xda-developers.com/showthread.php?t=441593

By with 0 comments
Anuvadak v1.1 (PPC Application)

Anuvadak derives it functionality from Google translation service.

The new version packs in some real good features and above all : a solution to display ~all languages. No more boxes for Arabic, Persian, Hebrew , Hindi, Chinese or Japanese.

http://forum.xda-developers.com/showthread.php?t=711232

By with 0 comments
Counting Sheep v0.2 (PPC misc)

Do you consume lots of caffeine, or just sleep poorly? This Counting Sheep is a exercise, where you have to drag identical white sheep over the bridge (while they are doing backflips). The idea, presumably, is to induce boredom while occupying the mind with something simple, repetitive, and rhythmic, all of which are known to help humans sleep.

Changes:

+ App will not stay open all night anymore. When you stop counting for 10 minutes, you will be asked if you are sleeping and if you do not start to count again in 15 seconds, the app will end, so the device can sleep too. (tip by simzz)
+ Larger exit button (tip by TrillionChampion)
+ Semitransparent numbers

http://forum.xda-developers.com/showthread.php?t=716586

By with 0 comments
Kheb v1.1 (PPC Application)

Kheb allows you to see exactly what changes any software makes on your Pocket PC. It works by taking complete snapshots of your PPC’s state, and creating a diff file that shows the changes between snapshots.

Kheb is a useful tool for software developers, ROM chefs, and advanced users.

Changes:

* Improved storage card detection algorithm.
* Improved error reporting – info about the exact problematic registry keyfile is written to error.log file.
* Improved error handling – Kheb recovers from most IO problems (permissions, unconnected network filesystems, etc) and continues running.
* New icon
* “Generate OEM from diff” item is only enabled if there are existing diffs.
* Latest diff is auto selected
* More entries in kheb.ini

http://forum.xda-developers.com/showthread.php?t=724692

By with 0 comments
Slide2Unlock2 (S2U2) v2.42 (PPC Application)

S2U2 (Slide2Unlock2) is a simple lock/unlock application which has the iPhone style slide unlocking. It can be used as a screensaver while you don’t use your device. It has a CallerID function (but some devices may not work, so please try it first); S2P control plugin; and volume control.

Changes:

– directly uses S2P buttons graphic files.
– added support to show current/today weather from Elecont Weather (S2U2 Settings > Information).
(make sure you have updated Elecont Weather to the latest version, v1.5.9 or later)
– fixed the “Shuffle Password keypad” option could not be turned on/off in v2.41.
– fixed the graphics issue when an analog clock was aligned to right in v2.41.
– fixed “Slide text mirror” did not work on the InCall lock screen.
– fixed the occasional problem that Task list could not be shown.
– a few minor bugs fixed.

http://forum.xda-developers.com/showthread.php?t=668415

By with 0 comments
WiiMC v1.0.6 (Wii Application)

WiiMC (Wii Media Centre) is an open source media player for the Nintendo Wii. The GUI is powered by libwiigui.

Features:

Ability to play virtually any video or audio format
DVD playback, with DVD menu support
Picture viewer
Music player
Online media support, courtesy of Navi-X
SD, USB 2.0, SMB, HTTP, and FTP support
Attractive libwiigui-based interface, designed with the Wii in mind

Changes:

* Reverted USB2 changes
* Synced to MPlayer r31761
* Fixed display of radio stream information
* Other minor changes

http://www.wiimc.org/

By with 0 comments