ROM-Reader for Super Nintendo / Super Famicom Game Cartridges

Just finished copy&pasting all of skaman's Famicom functions into the NES.ino. It was basically plug&play and the code was really easy to work with, thanks again to skaman. 8)

I haven't tested it yet but the adapter PCBs are already in production at JLCPCB so in 10 days we will know more. :slight_smile:

Also on a side note, the Arduino Mega is a real champ, only ~70% flash and ~52% sram are used right now. Probably enough room for even more systems.

And finally, I thought of an alternative to the cartridge adapters: An expansion port.

It's a little PCB that gets soldered to the underside of the Arduino and that duplicates all its ports so you can plug-in expansion modules.
Not sure if I should pursue this idea though since it looks complicated. :sweat_smile:

sanni:
Just finished copy&pasting all of skaman's Famicom functions into the NES.ino. It was basically plug&play and the code was really easy to work with, thanks again to skaman. 8)

I haven't tested it yet but the adapter PCBs are already in production at JLCPCB so in 10 days we will know more. :slight_smile:

Also on a side note, the Arduino Mega is a real champ, only ~70% flash and ~52% sram are used right now. Probably enough room for even more systems.

And finally, I thought of an alternative to the cartridge adapters: An expansion port.

It's a little PCB that gets soldered to the underside of the Arduino and that duplicates all its ports so you can plug-in expansion modules.
Not sure if I should pursue this idea though since it looks complicated. :sweat_smile:

That looks really great, amazing work i am loving it !
I also love the new case, i bought a 3D printer just to make this.

Thank you all for the work you put in !

Hi Sanni, great product! I've finished building mine, and I'm very satisfied with it.

I do have a problem, though, and I was hoping you could help me figure out what I have done wrong.

The cart reader dumps GBA and N64 games flawlessly. Those work every time. However, none of the other games will dump or even read correctly. GB (Color), Sega, and SNES all fail to correctly identify which cartridge is inserted and all appear to have a similar problem: every other byte read is corrupt. I attempted to dump sonic spinball, for example, and the info screen displays:

Name: sncs0ibl
Size: 7 Mbit
CHKS: A3F
SRAM: None

If I attempt to read a GB cart (Super Mario Land 2: 6 Golden Coins), this typically happens:

Name:
Rom Type: MBC1+RAM
Rom Size: 512 KB
Banks: 32
SRAM Size: 8 KB
Checksum: FAAE

The one common factor I saw was these are all of the 5V systems, but I verified that 5V is reliably coming out of VCC for these systems when the switch is flipped to it, so I don't know what else they could all have in common. Do they share a specific pin on the arduino that the other systems don't?

Issues with every other byte would indicate a short circuit on address A0.

Please test the release version V2.7 just to make sure it's not a software issue as we are currently restructuring and optimizing the code which can introduce new bugs: https://github.com/sanni/cartreader/releases/tag/V2.7

I tried the 2.7 firmware, but I'm still having the same problems.

I'll see if I can track down where there might be a short on the PCB. Thanks for the tip of where to start, I'll let you know if I have any success.

Here is a file comparison between my attempt to dump sonic spinball and a good dump:

https://imgur.com/a/uaqZkm1

Ok that looks more like an error with the D0-D7 Pins.

It is a error with D6. Check the pins on the cart connectors and the header pins. D6 is connected to Arduino PC6 (Pin 31). Something must be bridged.

Thank you skaman! I just checked, and there is no connection between pin 31 and D6 on the PCB im using. I suspect the pcb was manufactured incorrectly. Luckily, there are more that came in the order, and they do have a connection between those pins. So I will construct a second reader.

Edit: I just bridged D6 and Pin 31 manually, and now everything is dumping properly. Thank you both for your help!

Glad you could fix the issue. Also mad props to skaman for doing the maths on the data pins and figuring out the exact pin. 8)

This is the trace in question, if you find the time could you please check where it's broken, maybe it's just a cold solder joint.

imgur.com/a/Fygl3Yj

So, I discovered that there is a very small cut on the board directly on that trace right by where it enters the pins. I've attached photos of where it's located above. I never would have noticed it if I hadn't been following that specific trace. I also am very grateful for Skaman letting me know to investigate that specific trace, because I was going crazy trying to find a short somewhere.

There is a distinct possibility that I caused that cut when I was opening the packaging that the PCBs arrived in. I definitely can't attribute that to production.

skaman:
I've been looking into the writes to the Sega CD Backup RAM cart. Reads worked without a problem but the cart did not respond to writes.

Thank You for this, it is definitely something I had been trying to look into. But sadly, studying pinouts and designs of the SegaCD RAMcarts mostly thought me that I don't really fully understood hot it works. Going to need to try this soon.

sanni:
It's a little PCB that gets soldered to the underside of the Arduino and that duplicates all its ports so you can plug-in expansion modules.
Not sure if I should pursue this idea though since it looks complicated. :sweat_smile:

Hmmm..... personally, I think this would be a great idea to have a sort of "blank" mini-board for those who only need support for a specific system or two, but it would be a mess for someone who wants all supported systems.

I think it would be best to have both this and the All-In-One version, the AIO for those who want support for all systems, and the blank miniature version for those who would just want one or two systems supported, it sure beats making multiple specific versions that all only support one system.

By the way, really happy to hear about the work being done on NES/Famicom support. I had been looking into the INLretro Dumper-Programmer for NES/Famicom support, not just so I can dump my carts and saves, but also since I wanted to dabble with NESMaker and try to create my own software as well. Would it be possible to use this to write to Mapper 30 carts that NESMaker uses?

Is there a standardized cart that uses Mapper 30? If there are multiple manufacturers, then it tends to be difficult to support due to hardware differences between versions.

I used the base read functions from the CoolArduino sketch which has support for Coolboy/Coolgirl carts. I didn't include the Coolboy/Coolgirl stuff as it would require testing and I'm not interested in supporting bootleg carts.

I did include support for one unlicensed mapper (71) as I happened to have a Codemasters cart to test.

Well, Mapper 30 is a homebrew mapper designed to make carts that operate on modern flashrom, which is why that is the mapper that NESMaker supports. I cam see why that would be a bit tricky to standardize but I do believe there are some standards to it. All of them rely on it being modern flash memory instead of anything older though.

sanni:
Just finished copy&pasting all of skaman's Famicom functions into the NES.ino. It was basically plug&play and the code was really easy to work with, thanks again to skaman. 8)

I haven't tested it yet but the adapter PCBs are already in production at JLCPCB so in 10 days we will know more. :slight_smile:

Also on a side note, the Arduino Mega is a real champ, only ~70% flash and ~52% sram are used right now. Probably enough room for even more systems.

And finally, I thought of an alternative to the cartridge adapters: An expansion port.

It's a little PCB that gets soldered to the underside of the Arduino and that duplicates all its ports so you can plug-in expansion modules.
Not sure if I should pursue this idea though since it looks complicated. :sweat_smile:

Hi there, I love the work and this is a cool project, I just have some questions :slight_smile:

I see you have an option to reflash the Gameshark for the N64, I was wondering if it would be possible to do this with the GBA ones. Specifically the Gen 1 versions. Picture attached below.

I have one which I can use to test it for you if you would like. Mine, unfortunately, has crashed from using too many cheats though so I am not sure if you would be able to use my ROM in that case, I'm not even sure how you would fix it, so if you know of a fix in that regard I'd love to give it a go. Otherwise, yeah I'm happy to help test anything if you can recommend or if you want me to test regarding the Gameshark.

Cheers

Can't see the picture but don't they have a GBA to USB cable and PC software just for that reason?

sanni:
Can't see the picture but don't they have a GBA to USB cable and PC software just for that reason?

To be honest, I am not too sure, I have been looking for some time for an answer but have come short.

When I bought mine I did not get the cable or PC software, so cannot confirm. Not much info on the web either apart from "Buy a new one" lol verry helpful forums back then.

From what I have read through, apparently, if you plug a bricked one into a good one, it will copy the flash or something over to the bricked one and repair it? I know that the ROM for the GBA is also available on the webs so was not sure if we would be able to use that with your tool?

Cheers

Hi Sanni,

I think I've found and fixed a slight bug in the N64 checksum code. It appears that checksum comparison is case sensitive. There are two checksums in the N64.txt with uppercase characters in them, and they seem to be causing checksum comparisons to fail, even though they are technically the same checksum. I had this issue for a few hours tonight, and managed to get the reader to show a matching checksum after I changed the uppercase characters to lowercase.

9FA5C095,NP3I,64,4
235B1842,NPOE,32,4

Thanks, fixed. :slight_smile:

sanni, my concern with this design is that it doesn't account for the battery module.

sanni:
And finally, I thought of an alternative to the cartridge adapters: An expansion port.

It's a little PCB that gets soldered to the underside of the Arduino and that duplicates all its ports so you can plug-in expansion modules.
Not sure if I should pursue this idea though since it looks complicated. :sweat_smile:

Have you considered creating a new design that is more modular? For example, one PCB for the aduino and interface (buttons, SD, screen, power, etc) and then another PCB with the connectors (SNES, N64, GBA, etc)? Or didn't you have an older revision that worked that way?

Regardless, this is still super cool and I'm excited to update mine.

Well, let's say I thought about thinking about it. :grinning:

My current idea is adding a co-processor because the Arduino is getting a little outdated but at the same time completely replacing it would need way too much work adjusting timings and stuff.
An ESP-12 module can be bought for just $1.50 and would not only lend the Cart Reader additional processing power when needed, mainly for calculating checksums, but it would also add WiFi capabilities.
But yeah, that's also just an idea.