Pages: [1]   Go Down
Author Topic: ROM-Reader for Super Nintendo / Super Famicom Game Cartridges  (Read 3187 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Arduino community,

would you like to read the ROM-contents of your Super Nintendo / Super Famicom game cartridges?

Using an Arduino and some 74HC595 shift-out registers, you can build a game cartridge-reader. Schematics and source code are included (please login to get access to the attachments). It even reads the Japanese game cartridge "Star Ocean" (one of the few game cartridges that utilise the "S-DD1" chip for graphics compression).

Have fun & best regards,
Michael
PS: This is my first Arduino-based project and I am an amateur in electrical engineering - it may contain severe errors and blow up your entire equipment, but at least it worked fine for me without doing any damage to my equipment... smiley


* Cart_ROM_Reader_in_action.jpg (34.78 KB, 320x240 - viewed 341 times.)
* Cart_ROM_Reader_v0.1_2013-04-07.zip (34.37 KB - downloaded 147 times.)
« Last Edit: April 07, 2013, 10:20:00 am by MichlK » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I followed your instructions and build the dumper myself. It's working great.  smiley

Did you ever implement sram reading?

« Last Edit: May 30, 2014, 12:05:16 pm by sanni » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nice!  smiley

Sorry, I did never dump actual SRAM-data from my carts.

However, using the same sources as I did, you should be able to implement it quite easily:
1. Cartridge addressing scheme, i.e. which lines you have to set low / high to tell the cartridge that you want to read SRAM:
http://www.emulatronia.com/doctec/consolas/snes/sneskart.html#cartridgeaddressing
2. Code in Python for the Raspberry Pi by waterbury that includes SRAM-reading (just do a text-search for SRAM on this page):
https://github.com/waterbury/SNES-Pi/blob/master/MCP23017_CartReader/cart_reader.py
3. Reading SRAM-size and decoding Romtype (lorom / hirom) from the cart-header is already implemented in my code...

HTH  smiley & best regards
Michael
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

With the help of the SdFat library and by changing "Serial.write(dumpByte(currBank, currByte));" to "myFile.write(dumpByte(currBank, currByte));" it was very easy to dump the rom to an SD card instead of sending it over serial to a PC.
It takes 12.5 minutes for a 1MB LoROM/SlowROM game compared to 18 minutes over serial.
And 100 minutes for a 8MB ExHiROM/FastROM.

You just got to love the arduino smiley


* P5080001.JPG (97.2 KB, 640x480 - viewed 105 times.)
« Last Edit: May 08, 2014, 12:08:22 pm by sanni » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah, nice speed boost!

Sorry, I am curious  smiley-wink : Is it an Arduino Pro Mini and did you use the analog pins for SPI-communication to the sd card reader?

Best regards
Michael
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Yes it's one of those $4 Arduino Pro Mini's from ebay with the Atmega328.
I'm using pins 10 to 13 for the SD card and the analog pins for the shift register.
Had to remove the debug features though because the Arduino IDE complained about low memory now that the SdFat lib is also in use.

« Last Edit: May 14, 2014, 01:11:52 pm by sanni » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Guys!

@MichlK: Thanks for posting this project, I have been fantasizing over a snes hardware sampler for ages!

I ordered the parts to make your reader and have already been studiying how the audio is stored. Hope to parse the rom and dump the samples onto an sd to play back afterwards via midi.

This is going to be fun and exciting! I'll definitely keep you posted

Thanks again,
Alex
« Last Edit: May 14, 2014, 04:56:06 am by nutty » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I played a little bit more with your code as a base  smiley-mr-green





Components I used:
- Arduino Pro Mini (2€)
- SD cart slot (1€)
- 4x 74HC59 shift register (1€)
- 16x2 LCD (2€)
- I2C adapter for the LCD (1,50€)
- FT232RL module (2,50€)
- 2x 10K Resistor
- 2x push button
- old VHS tape case



The pinout differs a little bit from the original schematic. The cart reader is now connected to the Arduino using the A0-A3 pins to free up pins 10-13 for the SD card. The LCD is connected to the I2C bus (SDA/A4 and SCL/A5).
Lastly the two buttons are active low and connected to the pins 0 and 1.

I also made a short video:
https://www.youtube.com/watch?v=WPCpU4fDsA0

Here is a list of it's features (might not work with every game so use with caution):
- show some information about the cartridge on the lcd screen
- dump games to SD card
- dump save file to SD card
- write save file back to cartridge sram
- it also uses the CONF.TXT file on the sd card to prevent overdumps by manually setting the rom size if the checksum of the cart is found in the text file
- calculate checksum of the dumped rom (might not work with roms bigger than 32Mbit)







* pinout.png (20.5 KB, 753x457 - viewed 49 times.)
* CONF.TXT (0.02 KB - downloaded 15 times.)
* Cart_ROM_Reader_SD_V8.zip (7.75 KB - downloaded 26 times.)
« Last Edit: June 02, 2014, 09:06:10 am by sanni » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I played a little bit more with your code as a base  smiley-mr-green

Wow - amazing what you have done there! smiley-cool Thanks for sharing!!!

Best regards
Michael
PS: From Chrono Trigger to EarthBound - the dumper is in very good company... smiley-wink
Logged

Pages: [1]   Go Up
Jump to: