ROM-Reader for Super Nintendo / Super Famicom Game Cartridges

sanni:
Nowadays there are much better products on the market, so unless you can solder it together for cheap yourself there is no reason to even want to buy an Arduino Cart Reader.

Yours is the only one that doesn’t require a PC to use, making it much more conducive to portable use.

Would love a plastic case for it, but since you’ve done so many versions and mine is now two versions old I’m guessing that won’t happen :slight_smile:

If you tell me the exact PCB version I can upload the Sketchup file so you can build an enclosure around it and have it 3D printed.

The one currently uploaded on Github is PCB V17 and missing from the above picture.

Hey, I have an Nintendo Power cart and can't figure out how to add/change the game that's currently on.
I have a backup of the mapping and flash. The installed games are the menu and derby stallion 98.
I'd like to use this cart to translate the Japanese SFC games I have (FF, DQ, Chrono trigger, Zelda, ...).
Can anyone tell me how I can change or add the games onto the NP cart ?

Also, Sanni, while messing around with the NP menu of your cart reader I saw that the ROM name isn't cleared.
Instead of showing "MENUPROGRAM" it shows "MENUPROGRAM98", with the 98 from Derby Stallion 98.
Fixed it by adding a memset at the top of function getCartInfo_SNES() to clear the romName string.

The NP cart is a complicated beast. All roms need to have valid checksums or they won't launch. They also can't have an emulation/copy station header. So the first thing to do is to check your roms with a program like NSRT and if needed fix the checksum with Snes Rom Checksum Fixer.

Case 1: Single Game
The NP cart has 4MByte, the menu needs 512KByte of that. So for a 4MB like Chrono Trigger you can't have a menu, just the game. In this case just flash the translated Chrono Trigger rom and then flash the hirom64.map file. Your NP cart should now act as if it was a Chrono Trigger cartridge.

Case 2: Multiple Games
If the sum of your roms does not exceed 3.5MByte you can flash multiple roms including the menu. In this case you need to extract the menu from your NP backup, it's the first 512KB of the 4MB file. I wrote a small program that splits the NP file automatically or you can split it manually using a hex editor.
Next you'll need to download and start SF Memory Binary Maker to create the mapping and the combined menu/rom file.

I have made a small code change to the SF Memory Binary Maker that lets you manually select HiRom/LoRom since some roms get the wrong type assigned sometimes.

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SF_Memory
{
public static class Processing
{

public static ROM ParseROM(MemoryStream Data, String File = null)
{
ROM Output = new ROM();
Output.ROMFileSize = Data.Length;

DialogResult dialogResult = MessageBox.Show("Press yes for hiROM and no for loROM", "Select ROM type", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
Data.Position = 0xFFD5;
}
else if (dialogResult == DialogResult.No)
{
Data.Position = 0x7FD5;
}

Output.CartridgeType = (byte)Data.ReadByte();

Awesome thanks!

EDIT:
Flashing the original Chrono Trigger + hirom map works great, but the translated version gets modified to ext hirom, from what I can tell in NSRT, for some reason.
Still have to try multiple games, but it's cool to see it working.

Thanks for the cart reader Sanni!

sanni:
Make sure the N64 carts are plugged in perfectly centered, that the voltage is 3.3V and that the n64.txt was copied to the SD card. You can also try out a different SD card.

Hmm, sanni, would it be best for the SD card to have no other files besides all the required files and the save files I want to copy to the various cartridges I might use the cart reader with. Since moldov set up my cart reader to only accept micro SD cards and not full-sized SD cards, the Micro SD card I have been using is a Kingston 8GB SDHC card.

I have been using the correct voltage and I have n64.txt on the micro SD card, though I can't quite understand why the cart reader still isn't reading my Nintendo 64 cartridges correctly even after I cleaned them all earlier today (I've been putting them in the center of the Nintendo 64 slot too). While I'm thinking of it, can other files on the SD card cause problems for the cart reader if they (1) have nothing to do with the cart reader, and (2) are not save files?

Edit: One thing I almost forgot about, when it comes to a power source, would an Apple phone charger work? It's what my mom has, but since I'm just a little nervous it only works 100% for Apple products compatible with it, I can't help but wonder if I'd be better off purchasing a different 5V power source, like an Amazon brand from Amazon.ca or Amazon.com?

Copying everything from your SD card to your PC and then formatting the SD card with FAT32 Format and only copying the n64.txt to the root of the SD would be worth a try.

Any 5V/1A USB 2.0 phone charger from a reputable manufacturer should work. Just stay away from the $2 Chinese clones.

I just tried an original Apple Charger from an Iphone 4 or 5 and that worked flawlessly too, even for unlocking SA-1 SNES carts.

I've got my reader up and running. I just have one question though. When I dump my cartridges, the MD5 doesn't match with known good dumps. The ROMs run fine in emulator and I assume the difference had to do with the way the game is dumped. I'm just curious what's causing the difference. Also, I dumped about 15 games last night without problem, this morning I've had 3 games with CRC errors in a row. I reflowed all the pins on the PCB just in case that was the issue but I'm still getting CRC errors on a lot of games. Anything in particular I should look at?

Does it happen with games for all supported systems or just with one type?
I know that sometimes GBA games don't dump correctly right if they have eeprom save, must be a bug somewhere.

I've only dumped N64 cartridges so far. I spent the better part of today dumping my 73 N64 games. Most dumped fine, a few had CRC errors but after cleaning and adjusting they dumped fine. At the end of the day, I had 3 games that failed the CRC checks. I've tried cleaning and adjusting and dumping each of them about 5 times and it fails every time. The games are Glover, Golden Nugget 64, and Pokemon Stadium if that matters. I don't know what else to do, the pins look super clean and they play in an N64 without problem.

Do the 3 games have anything in common like all the maskrom chips being of the same make?
I guess you have already googled the CRC in case it's just a variant not present in my database?

I do know that Pokemon Stadium only dumps correctly with 3.3V and gives errors with 5V, never found out why though.
I also made the experience that N64 games don't dump correctly if one of the on/off or voltage switches has a resistance higher than 0.6 Ohm or something like that.

I'll probably have to adjust the timing in the code somewhat to make those edge cases dump correctly.

I'll open the cartridges tonight and see if there are any similarities with the ROMs. As for checking the CRC against ones online, they don't match so it looks like something is going wrong. I've been dumping everything on 3.3V. I'll check the resistance of the switches tonight as well. I'll reply when I've got some more info.

Alright so I've looked at the ROMs and it seems they are all different, or at least they are in sizes. 4, 8, and 32. I ran the 3 failed CRC dumps through GoodN64 and Pokemon Stadium actually passed verification which makes me think that it dumped correctly even though it gave a CRC error. It boots up fine in an emulator. Golden Nugget 64 and Glover do not pass GoodN64 verification. Golden Nugget 64 does boot in and emulator though but Glover refuses to boot at all. I checked the resistance on my switches (I think I did it correctly correctly) but I am getting something around .8 Ohm. Anything else I can check to help you out? I know nothing about coding but am willing to provide as much information I can.

Edit: I have found out the reason my Pokemon Stadium dump is not matching the CRC is because it's revision 2 which doesn't appear in the n64.txt. I have verified this with CRC information online. One more solved. Still looking into the other 2.

Edit edit: The Glover dump file size is 4,096KB instead of 8,192KB which I believe is what it should be comparing it to other dumps. Not sure why it is doing that.

Thanks for the detailed report. :slight_smile:

I added three new CRCs for different versions of Pokemon Stadium and fixed Glover's size to 8MB in the n64.txt database file. So after replacing the file on your SD those two should get valid CRCs now.

As for Golden Nugget 64 you can try if slowing down the Cart Reader has any effect.
In Cart_Reader.ino change:

/******************************************
Define SD Speed
******************************************/
// Change to half speed if you get an sd error or it hangs when writing
#define sdSpeed SPI_FULL_SPEED
//#define sdSpeed SPI_HALF_SPEED

to

/******************************************
Define SD Speed
******************************************/
// Change to half speed if you get an sd error or it hangs when writing
//#define sdSpeed SPI_FULL_SPEED
#define sdSpeed SPI_HALF_SPEED

and upload it to the Arduino.

That seemed to do the trick with Glover. Golden Nugget is the last one that I am having issues with. Slowing the SD speed resulted in no changes. The game seems to play fine in an emulator which makes me think it is being dumped somewhat correctly but it doesn't match CRC checksums I have found online and it doesn't pass GoodN64 checks. The only think I can think of is I have a version that has never been dumped before which I find highly unlikely.

I've been trying to adapt 27c801 eproms to work with the cartreader, no success tho.
Could you try to make it program 27c801 eproms? I'm a newbie in arduino and in writing code.

JCreazy:
which makes me think it is being dumped somewhat correctly

You could use a Hex Editor like HxD, open both the dumped and the known good rom and compare them to see where they differ. CTRL+K and then F6 to move to the next difference.

RyoHazuki:
Could you try to make it program 27c801 eproms?

I use my TL866 to program 27C801 eproms. It's a very cheap Chinese programmer that can do a lot of stuff.

Just recieved my repro of conker's bad fur day, i tried to make a backup of the game and my current save file, it backups both successfully but when i try to write the save back to the cartridge it looks like nothing happened, it writes and verifies successfully but when i put it in the console it still has my last save file.

Edit: Tried reflashing my cartridge, and all i get is a black screen. Tried changing the file in an hex editor, tried using patches and still nothing the only game that worked was banjo tooie. I have a PAL N64.

Perfect Dark and Donkey Kong 64 should also work since they also have 16K eeprom and 6105 CIC just like Conker and Banjo Tooie.

sanni:
Perfect Dark and Donkey Kong 64 should also work since they also have 16K eeprom and 6105 CIC just like Conker and Banjo Tooie.

Is there any way to play smaller games like Super Mario 64?