ROM-Reader for Super Nintendo / Super Famicom Game Cartridges

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.

Are there concerns about the Mega getting discontinued or replaced at all? It seems like it has been around forever and I've always wondered if they would ever "retire" it.

I don't think the ATMEGA2560 is going anywhere any time soon with how many Chinese clones there are. There's even a relatively new formfactor for the Arduino Mega that uses the same CPU on a board with a smaller footprint.

Digikey has over 100,000 Atmega2560 chips available, that can make a ton of boards.
https://www.digikey.com/products/en/integrated-circuits-ics/embedded-microcontrollers/685?k=atmega2560&k=&pkeyword=atmega2560&sv=0&pv1291=2491&sf=0&FV=ffe002ad&quantity=&ColumnSort=0&page=1&stock=1&pageSize=25

I even offer boards in a smaller form factor, no 5V regulator or USB interface on board for flexibility.

Hello Sanni,

I saw the update on the github, you added the PCB for the SNES2NES!
Great work, all you need or is a 72 pin cardrige slot, like the one like this ?:

https://nl.aliexpress.com/item/33029711948.html?spm=a2g0o.cart.0.0.776d3c00igd5Jl&mp=1

Nes is 2.5mm pin pitch, like this one: https://www.aliexpress.com/item/32827561164.html

I use TE AMP 5530843-8 on my NES-FC adapters.

Can anyone help me out with this? I'm trying to flash AM29F016D chips either with the 8 bit flash adapter or when soldered to a Game Boy flash cart but my cart reader won't recognize the chips as flashable. They always come up as 04AD so at least it's consistent. The reader works both ways with AM29F016B chips but I was under the impression that if one works, the other should too (assuming the chips themselves are fine). The reader works with none of my AM29F016D chips (six tested) and all but one of my AM29F016B chips (seven tested). Is the solution as simple as adding the ID to the correct table in the firmware?

BTW, the cart in the picture was successfully flashed with a GBxCart RW even though my big reader won't recognize it.

Thank you.

0x01 means AMD, 0x04 means Fujitsu. According to the datasheet both manufactured AM29F016D chips, so the 0x04AD ID makes sense. They should behave identically to the AMD chips.

So in flash.ino below the AMD and ST entrys:

  else if (strcmp(flashid, "01AD") == 0) {
    println_Msg(F("AM29F016B detected"));
    flashSize = 2097152;
    flashromType = 1;
  }
  else if (strcmp(flashid, "20AD") == 0) {
    println_Msg(F("AM29F016D detected"));
    flashSize = 2097152;
    flashromType = 1;
  }

Add a third entry for Fujitsu:

  else if (strcmp(flashid, "04AD") == 0) {
    println_Msg(F("AM29F016D detected"));
    flashSize = 2097152;
    flashromType = 1;
  }

.

Then in GB.ino below:

    else if (strcmp(flashid, "01AD") == 0) {
      println_Msg(F("AM29F016B"));
      print_Msg(F("Banks: "));
      print_Msg(romBanks);
      println_Msg(F("/128"));
      display_Update();
    }

Add:

    else if (strcmp(flashid, "04AD") == 0) {
      println_Msg(F("AM29F016D"));
      print_Msg(F("Banks: "));
      print_Msg(romBanks);
      println_Msg(F("/128"));
      display_Update();
    }

Then test if flashing works, if yes I'll add it to github. :slight_smile:

That works perfectly, thanks again sanni!

Hi Sanni,

I'm working on this now, but if anyone beats me to finishing it, I won't complain.

The GameShark reflashing code for N64 handles SST 29LE010 chips, and the GameSharks were programmed to support those as well as SST 28LF040 chips. You can occasionally find one in the wild with the SST 28LF040's. I've upgraded all of mine to the SST 28LF040's, so the program doesn't currently work for me.

I wanted to make everyone aware of this, and hopefully I'll have a solution soon.