ROM-Reader for Super Nintendo / Super Famicom Game Cartridges

Awesome! Thanks guys for the responses and looking forward to the eagle files as well. One last question on parts: What socket are you guys using or recommend (besides stripping it from an SNES or Retron)? I have found the ones mentioned by another user in this thread:

62pin= http://www.ebay.com/itm/131137330390 46pin= http://www.ebay.com/itm/131416146382

and from his comments they seem to work. Wondering what are your recommendations and what is the pitch of the SNES pins? I might try alibaba to see if there is some distributor with the official specs (once I know them).

Official ones are 2.5mm pin pitch. I have one from a Retrode and a short one from a HoneyBee Super Game Converter. Both also have the correct 2.5mm.

Any of the commonly available connectors with 0.1" (2.54mm) spacing will be off. For the center 46 pins, it doesn't matter too much. Once you get to the ends of the full length connector, the spacing will be noticeably off.

The Wonderco (Centronic) 46 pin connector listed on eBay will work but the spacing will be off. My adapter uses the 46 pin connector and I cut an extra connector to add the end section. I tried to shift the end section more into alignment when attaching it to the adapter.

The SNES Game Genie has a proper spaced 46 pin connector. The Retron 3 has a proper spaced full length connector. The later SNES consoles have thru-hole cart connectors - they're the ones with the black plastic mounting tabs on the end.

Good luck!

There seem to be two types of cart connectors, the official with 6.8mm vertical spacing and 3rd party clones that have 5mm.

Just checked the Retron 3 connector and it is the narrow 5mm spacing too.

I redesigned the cart slot so that both the 5mm china version and the wider official should fit. I used the FreeRouting Autorouter for Eagle: Github Forum

sanni: I used the FreeRouting Autorouter for Eagle: Github Forum

Any info on how to open FreeRoute? I can't find any site that will open the java program and I tried to run the file freeroute.jnlp offline I get a java program error. This looks like a really cool program I'd like to try on some of my projects, if it's going to be a problem posting such info about it (copyright?) please send me a PM.

Thank you for all the files.

Found an error in my romType code in getCartInfo(). If the romType is 0x32 (or 0x3A), then the code currently sets it to HiROM. This works for SDD1 (and SPC7110) carts.

While dumping Nintendo Power carts, I ran across "Super Momotarou Dentetsu 2" which is romType 0x32 but LoROM. This was the NP game that I was dumping wrong because I had flagged it based on romType as HiROM.

EDIT: Here's the modified code:

void getCartInfo () {
  ...
  // Check if LoROM or HiROM
  romType = dumpByte(0, 0xFFD5 + offsetEx, false);

  // Check RomSpeed
  romSpeed = (dumpByte(0, 0xFFD5 + offsetEx, false) >> 4);

  // Check RomChips
  romChips = dumpByte(0, 0xFFD6 + offsetEx, false);

  // Identify LoROM or HiROM or ExHiROM
  if (romType == 0x35) // ExHiROM
    romType = 2;
  else if (romType == 0x32) {
    if ((romChips == 0x43) || (romChips == 0x45)) // SDD1
      romType = 1;  //HiROM
    else
      romType = 0;
  }
  else if (romType == 0x3A) // SPC7110
    romType = 1;  //HiROM
  else
    romType = romType & 1; // 0xFFD5
  ...
}

I moved the section that modifies the romType to after the romChips check. We'll use the romChips 0x43 or 0x45 to flag the SDD1 carts as HiROM.

Good Luck!

Very awesome stuff in here! I’d like to build one myself now. Could you share the eagle file (or gerbers) for your board sanni? (Assuming that the electrical test really passed of course :))

There were some problems with my design so I took the files down. Mainly clearance issues that could lead to short circuits. I will refine the design and upload it again.

In other news, I added a MX29L3211 flashrom programmer to my previous post. Now you can program all interesting(in terms of SNES) flashroms with the Arduino. :)

Ah, sorry to hear.. Yeah, autorouter strikes again. Good luck on the next generation. Eagle has some useful drc options, which help run some checks that prevent you from having clearance issues. Oshpark and sseedstudio (and probably many more) provide them, iirc.

Thanks, I'll try that.

I've used quite a few manufacturers and have a collection of DRU files from them and most Chinese fabricators teds to use 8mil for spacing where as OSHPark uses 6mil.

Here is my collection for anyone to use and they are accompanied by the fabricators name.

https://www.mediafire.com/?remkbqbjgpb08yb

Someone asked about reading and writing SRAM for the Nintendo Power carts.

As I mentioned previously, reading the savegame out of SRAM is possible once a cart is switched out of the menu into game mode. I've dumped all of the savegames off of my NP carts.

I finally ran some tests writing savegames to SRAM. Using an NP cart with Super Mario World, I was able to write a new 96* savegame to the SRAM. After testing the 96* savegame, I then wrote back the original savegame. Everything works without a problem.

Once the NP cart switches from menu to the selected game, then the cart essentially becomes that game. The read/write code for ROM and SRAM should work.

I'm still trying to improve the reliability of the menu to game mode switching. I'll be doing more testing until I figure it out.

Good Luck!

That’s so awesome skaman! I’m waiting for my parts now, am really excited to build this

I made some short videos :grin:

Cool!! Did you already receive the revised board or did you patch up the first batch? I should have the boards from the 2nd revision back from oshpark in about a week now. Can't wait :D

I'm still using the 1st revision, works fine after you carefully bend the pins of the cart slot so it fits the spacing. :)

Remember that the pinout has changed between the perfboard-and-wire version and the pcb shield version, I uploaded skamans enhanced code with those pinout changes already made for the pcb in post #68.

The reason for changing the pinout was that now everything is grouped into the same ports, so that you could use direct port manipulation quite easily instead of digitalwrite to gain a speed boost if needed.

Please post pictures once your build is completed, that purple pcb will surely looks nice 8)

Thanks to nocash (Martin Korth) the Nintendo Power code is finally working smoothly. I was having difficulty getting the reader to switch reliably from the Menu mode to Game mode. With a few pointers (and much patience) from Martin, I was able to identify the cause of the problem.

Switching the NP cart from Menu mode to Game mode requires a specific sequence to be sent (read more in nocash's Fullsnes document here: http://problemkaputt.de/fullsnes.txt). The final command is the game selection (Slot # + 0x80) sent to 0x2400. When the game selection is sent, then the cart immediately becomes the game selected.

The problem with the switching code was the 21.477272MHz Master Clock running the NP cart too fast for the Arduino. In order to ensure that the NP commands work properly on the reader, the Master Clock needs to be slowed down before the NP sequence is sent. After the sequence is sent to the cart, then the Master Clock is restored back to 21.477272MHz. My initial test of 2.68MHz (21.477272/8) for the slowdown works and the cart now switches back and forth between game and menu without a problem.

For optimal results, the Nintendo Power cart requires the clock generator and the snesCIC/SuperCIC.

I'll clean up my code and post it sometime soon.

Good Luck!

I got the oshpark boards in the mail today :) Hopefully I have all the parts now so I can build the adapter tonight. When it's working I want to add another way of navigating the menu using something like this: