ROM-Reader for Super Nintendo / Super Famicom Game Cartridges

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.

I'm working on a few enhancements.

I added Realtec mapper support to MD.ino. I've got Funny World & Balloon Boy dumping properly. I'm waiting on a Whac-A-Critter cart to test.

I picked up an INL NESmaker board that uses Mapper 30. The board uses a 39SF040 chip. I've worked with carts that use the 39SF010 chip on a related project. I've got the flash chip responding with the Software ID. I'm hoping that adding the rest of the flash commands goes smoothly.

I ordered copies of StarTropics and StarTropics II to look into adding MMC6 PRG-RAM support. Mapper 4 includes both MMC3 and MMC6. Only MMC3 PRG-RAM is currently supported in the code. I'll need to separate the MMC3 and MMC6 as they access PRG-RAM differently.

You rock, Skaman. I'm glad you're working on this project, too. I'm not 100% certain, but it appears the 28LF040's I'm dealing with don't support page writes like the 29LE010's do. I may have to write all bytes individually for that chip. I'm still in the early stages of research, though.

True that. I can't even express how grateful I am for skaman's support over all the years. And ofc all the others that contribute to the project too. 8)