Skip to content
a Nintendo DS emulator
C++ C
Find file

README.md

dasShiny

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 if you hand-edit the time)

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

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

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

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

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

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

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.

Something went wrong with that request. Please try again.