/dsaver

Hardware Nintendo DS Cartridge savegame tool PoC using arduino

Primary LanguageC++GNU General Public License v3.0GPL-3.0

dsaver

Arduino based Nintendo DS savegame hardware tool

Description

dsaver is a hardware solution to dump and modify Nintendo DS cartridges savegames. It is based on the popular and extended Arduino board; it works perfectly on clone and unofficial boards.

Hardware required

to build a dsaver device compatible with the code provided in the ARDUINO folder you will need:

  • Arduino board, official or clone (ie: freaduino)
  • Nintendo DS slot 1 header
  • Jumper Wires
  • (optional)(recommennded) i2c oled display

Wiring

Arduino Slot 1 Description
PIN 13 (ICSP) 2 CLK
PIN 10 (ICSP) 6 CS (or SS)
Any VCC 3.3v 8 VCC 3.3v
PIN 11 MOSI 15 (MISO) ***
PIN 12 MISO 16 (MOSI) ***
Any GND 17 GND
  • Arduino PIN 11 is MOSI and should be connected to pin 15 of the slot1 (MISO)
  • Arduino PIN 12 is MISO and should be connected to pin 15 of the slot1 (MOSI)

If you don't understand why it is this way check the SPI Protocol or the dsaver writeup

software

Provided in this repository you will find all software required to build a dsaver device:

  • ARDUINO : C code to be flashed on the board. .ino .h and .cpp files.
  • PC : File dsaver.py contains python3 data receiver for the PC side.

Requeriments

dsaver.py requires PySerial:

  • pip3 install pyserial

dsaver.ino requires U8g2lib and U8x8lib for OLED support

  • #include <U8g2lib.h>
  • #include <U8x8lib.h>

Known Issues

  • Not really an issue, but actually dsaver has only been tested with 64kb carts
  • Due to the different clock domains (SPI: 4MHz / UART: 115200 b/s) dsaver uses the OLED writing procedures to balance processor usage. This balancing has a very low rate of failure, but sometimes one (1) byte of data at the end of the file could be lost.