ROM-Reader for Super Nintendo / Super Famicom Game Cartridges

sanni's adapter interfaces with the Arduino MEGA 2560 R3.

As for the CIC, snesCIC Lock uses PIC12F629 and SuperCIC Lock uses PIC16F630. You can use either one. I've had better success with the snesCIC using the resync code that was linked to. I've tested both on my adapter as I built the boards to be interchangeable. sanni's new PCB is setup for the 12F629.

Good luck!

The Arduino Mega does have a 5V 1A power supply onboard that takes a 9-12V barrel plug type power supply. If you have both USB and the 9V-12V external power supply plugged in the Arduino will automaticly use the external supply for power instead the USB.

There are 3 different versions of the Arduino Mega 2560 that have different chips for USB communication: - the old official design with a FTDI chip - the new official design with an ATMEGA16U2 - and an unofficial chinese redesign with a CH340

The unofficial chinese redesign is the cheapest but since you can also get a clone following the official design for about ~$10 (like ebay #360790082588) I would just buy that instead. Especially since all shields and cases are designed with the official design in mind.

As soon as I have received the pcbs and can confirm that I didn't mess up, I'll post the Eagle files.

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)