Skip to content
a Nintendo DS emulator
C++ C
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
data Remove default pause/fast-forward hotkeys Aug 3, 2013
emulator Add host keyboard/time hooks for homebrew and custom firmware Aug 2, 2013
libco Initial import Jul 12, 2012
nds Make input names valid as BML settings Aug 3, 2013
phoenix Update nall, phoenix, and ruby to latest versions (except OpenGL driver) Aug 3, 2013
ruby Update nall, phoenix, and ruby to latest versions (except OpenGL driver) Aug 3, 2013
ui Support drag and drop of games and BIOS files Aug 3, 2013
.gitignore Attempt to simplify Makefile Aug 3, 2013
LICENSE.txt Initial import Jul 12, 2012
Makefile Attempt to simplify Makefile Aug 3, 2013
Platform.make Update nall, phoenix, and ruby to latest versions (except OpenGL driver) Aug 3, 2013 Update master Jul 15, 2012


The motivation for this project comes from experimenting with homebrew several years ago. I ran into some nasty situations and I would've killed for a fast, stable DS emulator—something with decent timing, largely feature complete, and a strong debugger.

dasShiny isn't of course that program, not by far. Most of it's highly experimental—this is the first I've tried out libco, the first time I've written a 3D engine (!), and... for that matter it's the first third-party ethos core. The timing might be described as "scarcely better than ZSNES." ... Nonetheless, the project hasn't turned out to be a complete disaster, so I thought people might like to see it. :)

Please note, this release is aimed at those already familiar with cartridge folders and recent incarnations of BSNES. In fact, the GUI is little more than a standard ethos build. It looks for "gamefolder.nds/manifest.xml".

Getting Started

Copy profiles/Nintendo DS.sys/ to ~/.config/dasShiny/. You'll need some additional files:

  • "arm7 bios", "arm9 bios"
  • "firmware" (make backups: this one is rewritable flash!)
  • "clock.xml" (will be autogenerated; delete <saved ... /> if you hand-edit the time)

I don't have a tool to generate XML yet, but here are some examples:

<!-- Super Mario 64 -->
    <rom name="rom" size="0x1000000" />
    <save name="save" size="0x2000" type="EEPROM" />

<!-- New Super Mario Bros. -->
    <rom name="rom" size="0x2000000" />
    <save name="save" size="0x2000" type="EEPROM" />

<!-- Mario Kart, Animal Crossing -->
    <rom name="rom" size="0x2000000" />
    <save name="save" size="0x40000" type="Flash" id="0x204012" />

<!-- Chrono Trigger, Final Fantasy IV -->
    <rom name="rom" size="0x8000000" />
    <save name="save" size="0x10000" type="EEPROM" />

<!-- Pokemon Diamond/Pearl -->
    <rom name="rom" size="0x4000000" />
    <save name="save" size="0x80000" type="Flash" id="0x204013" />

If you have a completely blank manifest, the emulator looks for "gamefolder.nds/rom", which can be up to 1GB. This is suitable for most demos and homebrew, but there isn't any DLDI yet. Don't expect anything that needs FAT access to work.

Some games which are known to run:

  • Super Mario 64
  • Mario Kart DS
  • Animal Crossing: Wild World
  • New Super Mario Bros. (some missing 3D bits)
  • Pokemon Diamond/Pearl (warning: will save, but crashes at the load menu!)
  • Chrono Trigger (up until the copy protection fails)
  • Final Fantasy IV (not well tested)
  • Many of the DS Download Play demos
  • Most of devkitPro's libnds examples

There are others; you'll need to look up save types online. Unfortunately, I don't know of an obvious heuristic to generate the proper XML... and because flashcards are so cheap and easy to get ahold of, I have the feeling we might encounter more bootleg protection to throw us off. A database of some kind is going to be preferable here.

Finally, be warned: a high-end Core 2, i5 or i7 is pretty much mandatory for 3D at the moment. A lot of the rendering code is still very messy and unoptimized so this isn't for the faint of heart. If you're running Windows, try to use XAudio2 over DirectSound. For whatever reason I found framerates to be considerably higher under load.

You can’t perform that action at this time.