ROM-Reader for Super Nintendo / Super Famicom Game Cartridges

AngryHelder:
.sch and .brd files of the main pcb?

Uploaded. :slight_smile:

Androxilogin:
It looks as those these connections are incorrectly placed backwards?

Yes that would explain why it doesn't work. The pins go on the other side.

sanni:
Yes that would explain why it doesn't work. The pins go on the other side.

Haha, thanks. Just thought I'd share my ignorance.

Androxilogin:
I'd offer to assemble it for you but I would just feel guilty the whole time being that it wasn't my idea in the first place. I've seen one of these go for $250 on eBay. I felt that wasn't right.

Don't worry about that. The more people built and sell the Cart Reader the more affordable it is going to get for everyone. Supply & Demand. That's why I released the PCB files in the first place, so there will never be a supply shortage since everyone can just build the Cart Reader on their own.

Androxilogin:
Just thought I'd share my ignorance.

Well I have to thank because that's exactly how the Cart Reader Wiki is going to get better and better. Just added a note about the clock gen's pinheaders. :slight_smile:

sanni:
Uploaded. :slight_smile:

Great thank you. I have 2 questions though why are you removing the 5v regulator (or is it 3.3v regulator?) on the atmega board? and what are the 2 clock frequencies used by the switches?

Thanks

Androxilogin:
I'd say just go for it. This was my first time soldering SMDs and all those pins seemed intimidating but as long as you have a good tip on your iron, set that thing to 750 and go. I'd offer to assemble it for you but I would just feel guilty the whole time being that it wasn't my idea in the first place. I've seen one of these go for $250 on eBay. I felt that wasn't right.

Thank you for the encouragement! I did buy a soldering iron and still might do it myself. I was simply curious if anyone was actively building. It is good to know someone with a little technical skill shouldn't have a problem with it. I hope I don't overthink it too.

It would be a lot of fun to try and build/code something like Retro Freak, where you can play game cartridges on the TV, but also dump them onto an SD card. Kind of like a 2-in-1. I am super excited to start building this.

I found two "issues" with the enclosure. The one stand off that allows the arduino to set is a little too big to fit through the hole. As usual with most 3d prints, this was filed down but took a little effort being circular without a lot of space to work with. More importantly, there are screws going to nowhere from both sides of the case. A spacer would be great for some of these but the guide stated 2*8 screws for this build and the spacers I bought are for the revision. The buttons, I tried to push through where the button sits but it's a little too tough so I tried self tapping screws but applied too much pressure and slipped, poked a hole in my fold away desk.

While installing the RGB LED I didn't quite understand the way the legs went by the diagram so I used a multimeter to figure it out. I felt putting positive and negative would be helpful here. I've also had trouble with the new N64 sleeve I printed. I remember reading somewhere throughout the guide to set the walls at 0.1 I think it was. I did this the first time so ended up just swapping out for the old sleeve.

I also realized with this enclosure I will not be able to install a battery. I suppose that's probably one of the main reasons for the revision but my first time around I wanted to build something to make it feel 'complete'. Can you suggest any ideas to make this thing more solid? I don't want to put too much pressure on the board and pulling carts causes me feel as though I'm going to break it.

And one last technical thing slightly off topic. The Legend of Zelda: The Minish Cap. I'm trying to convert a RetroArch .srm to .eep as used by the cart. Simply renaming it to .sav worked with mGBA. It IS a repro cart as far as I know. I've tried GBA Tool Advance as mentioned somewhere throughout the wiki but I don't see a lot of save options.

AngryHelder:
Great thank you. I have 2 questions though why are you removing the 5v regulator (or is it 3.3v regulator?) on the atmega board? and what are the 2 clock frequencies used by the switches?

Thanks

Removing the 5V regulator from the Arduino was meant as a safety precaution so plugging a power supply into the barrel plug won't power the Arduino anymore while the voltage from the barrel plug still can get routed to the N64's 12V pin in case I ever get hold of an N64 proto cartridge. It can probably be ignored in future versions since the proto carts are getting ridiculously expensive anyway.

The clock generator supplies 3 frequencies to the SNES slot and snesCIC needed for SNES cartridges with the SA-1 special chip: expansion clock(CLK0 set to 21.477272Mhz), CPU clock(CLK1 set to 3.579545Mhz) and CIC clock(CLK2 set to 3.072Mhz). The clock generator is not used for any other system.

Here is my current To-Do list, maybe it helps:

  • remove the two 10k pull-up resistors from buttons, pull up the pins in software instead
  • remove EEP switch and just leave 1K resistor enabled all the time
  • remove CLK0 switch, connect SNES Pin 1 (CLK) permanently to Clock Gen Clk0 pin
  • remove CLK1 switch, connect SNES Pin 57 (CPU Clock) permanently to Clock Gen Clk1 pin, connect N64 Pin 19 (CLK) and GBA Pin 2 (CLK) to Arduino Pin 16 (PH1)
  • remove 3.3/5V switch, use currently un-used Arduino Pins 18,19 (PD3,PD2) and some IC like NLAS4157(see GBxCart_RW_v1.3_Schematic.sch) to switch between voltages, Arduino should not reset if switched fast enough
  • change pinout of flash_adapter to not use Arduino Pin 7(PH4) and 16(PH1) for WE and OE but instead Arduino Pin 8(PH5) and 6(PH3) like the Chinese SNES repros do.
  • integrate sd_adapter.sch, nes_adapter.sch and famicom_adapter.sch into main PCB
  • integrate Mega2560 and CH340 chips into main PCB instead of using a complete Arduino Mega
  • change board layout to something simpler, similar to INF NES Lives dumper and make any 3D printed parts optional
  • remove solder jumpers for choosing between the two different OLED pinouts and just specify the needed OLED pinout
  • change RGB LED to SMD
  • try using the 16Mhz clock output of the Atmega(must be enabled through fuse setting) and a frequency divider to 4Mhz instead of the clock generator to power SNES Expansion Clock, snesCIC and SNES CPU Clock, 4Mhz should be "close enough"
  • integrate battery charging circuit and LiPo battery like on makho's portable GBA version
  • check if any of the currently unconnected pins on the different cart slots needs to be connected for some special carts
  • move all SMD parts to a single PCB side

Androxilogin:
The one stand off that allows the arduino to set is a little too big to fit through the hole.

I will make the pin a bit smaller in the next design revision.

Androxilogin:
there are screws going to nowhere from both sides of the case.

Could it be that you forgot to install this part? https://github.com/sanni/cartreader/blob/master/case/sidewall_tabs.stl

Androxilogin:
The buttons, I tried to push through where the button sits but it's a little too tough

This sounds like either wrong print settings or your 3D printer is not calibrated perfectly. Check the belt tension of your 3D printer and print a calibration cube, then measure all three sides to make sure all are 20.00mm. It could also be over extrusion.

Androxilogin:
I felt putting positive and negative would be helpful here.

I have added "Red, green and blue are negative. The longer leg of the LED is positive. The positve pin is marked on the PCB with a circle around the hole." to the Wiki, thanks.

Androxilogin:
I remember reading somewhere throughout the guide to set the walls at 0.1 I think it was.

I now put the print settings at the top of the github page to make them easier to find, thanks.
https://github.com/sanni/cartreader/tree/master/case

Androxilogin:
I also realized with this enclosure I will not be able to install a battery.

There is a case design for the battery in the cartreader.skp (open with Sketchup). I just have not tested that design yet since I no longer have a working 3D printer. You can use Sketchup Export STL to get a printable design.

Thanks for your detailed feedback. :slight_smile:

Ah, the side walls! I thought they were simply for the more open case. Okay, that makes sense now.

My 3d printer could very well need calibrated. I'm also having problems with it and just realigned the bed/cleaned it to get this print out.

I'm glad some of my post can help you to simplify things for other users at least.

As for the Minish Cap, I found where I got the info about GBA Tool and after having this thing working it makes a bit more sense. I understand now that the save writes to a portion of the flashrom so patching is necessary, but..

Have you ever come across this sort of chip? Will I be able to write to it? I was just reading up on all of these things and a tree hit a pole down the street and a transformer exploded so I have been without power to test anything for now but I'm anxious to get back to it.

This S29GL128N chip is currently only supported with N64 repros but adding support for GBA based on the N64 code should not be too hard since the MX29GL128E chip that is already supported by the GBA code should be somewhat similar.

So basically you would need to change the current code until you got it working. I have stopped adding new chips by myself since there are just too many different variants, so that's something users will have to do on their own and then hopefully share their working code.

Trying to support the Chinese fakes like that GBA cart is crazy. There's no end.

sanni:
Removing the 5V regulator from the Arduino was meant as a safety precaution so plugging a power supply into the barrel plug won't power the Arduino anymore while the voltage from the barrel plug still can get routed to the N64's 12V pin in case I ever get hold of an N64 proto cartridge. It can probably be ignored in future versions since the proto carts are getting ridiculously expensive anyway.

The clock generator supplies 3 frequencies to the SNES slot and snesCIC needed for SNES cartridges with the SA-1 special chip: expansion clock(CLK0 set to 21.477272Mhz), CPU clock(CLK1 set to 3.579545Mhz) and CIC clock(CLK2 set to 3.072Mhz). The clock generator is not used for any other system.

Here is my current To-Do list, maybe it helps:

  • remove the two 10k pull-up resistors from buttons, pull up the pins in software instead
  • remove EEP switch and just leave 1K resistor enabled all the time
  • remove CLK0 switch, connect SNES Pin 1 (CLK) permanently to Clock Gen Clk0 pin
  • remove CLK1 switch, connect SNES Pin 57 (CPU Clock) permanently to Clock Gen Clk1 pin, connect N64 Pin 19 (CLK) and GBA Pin 2 (CLK) to Arduino Pin 16 (PH1)
  • remove 3.3/5V switch, use currently un-used Arduino Pins 18,19 (PD3,PD2) and some form of transistor or mosfet to switch between voltages, Arduino should not reset if switched fast enough
  • change pinout of flash_adapter to not use Arduino Pin 7(PH4) and 16(PH1) for WE and OE but instead Arduino Pin 8(PH5) and 6(PH3) like the Chinese SNES repros do.
  • integrate sd_adapter.sch, nes_adapter.sch and famicom_adapter.sch into main PCB
  • integrate Mega2560 and CH340 chips into main PCB instead of using a complete Arduino Mega
  • change board layout to something simpler, similar to INF NES Lives dumper and make any 3D printed parts optional
  • remove solder jumpers for choosing between the two different OLED pinouts and just specify the needed OLED pinout
  • change RGB LED to SMD
  • try using the 16Mhz clock output of the Atmega(must be enabled through fuse setting) and a frequency divider to 4Mhz instead of the clock generator to power SNES Expansion Clock, snesCIC and SNES CPU Clock, 4Mhz should be "close enough"
  • integrate battery charging circuit and Lipo battery like on makho's portable GBA version

Ok I plan to add some of these things to my version of this like the lipo battery option as well as a 5v boost circuit so it will have 3.3v as well as 5v. Now to get rid of some of these switches it helps to know some things.

-Does the n64 cart reader use only 3.3v? I know the controller does but unsure of the cart reader.

-GBA slot I assume needs both voltages since it is dumping GB/GBC games along side the GBA which needs the 3.3v. How do you propose we do this? I know there were some cart readers that had like a built in switch that can help in doing the voltage swaps based upon the cart inserted but I don't think this is what people are using.

-What is the use of the EEP switch? does the n64 need this tied high or low at any time specifically? It must have been important at some time to dedicate a switch to it.

-Is it ok to have those clocks hard wired into those pins at all times on the SNES Socket? As for the PH1 those 3 cart readers (Genesis,GBA,N64) all use the same clock and can be tied together?

-How do you plan to integrate the Famicom adapter to this board? another socket?

Ultimately I want to integrate almost everything if not everything into a board and alot of this including the OLED can be easily added as well as the clock gen chips and of course the Mega2560. Would love to chat better with you about some of this and hopefully help each other get to a better end product.

I will post the version with the boost and lipo circuits which use easy parts to solder for people who really want a portable solution once I'm done.

sanni:
This S29GL128N chip is currently only supported with N64 repros but adding support for GBA based on the N64 code should not be too hard since the MX29GL128E chip that is already supported by the GBA code should be somewhat similar.

So basically you would need to change the current code until you got it working. I have stopped adding new chips by myself since there are just too many different variants, so that's something users will have to do on their own and then hopefully share their working code.

I see, hopefully this does catch on and chip compatibility continues to rise! I'm sure it will.

I was taking photos, messing around in Photoshop and edited your PICKit3 Diagram to be more accurate to the one I received. Feel free to add it to your wiki:

And also this addition for the SOIC socket:

AngryHelder:
-Does the n64 cart reader use only 3.3v? I know the controller does but unsure of the cart reader.

Yes only 3.3V needed for everything concerning the N64. Only the longer development carts by Nintendo need an additional 12V but I would just ignore them.

AngryHelder:
-GBA slot I assume needs both voltages since it is dumping GB/GBC games alongside the GBA which needs the 3.3v. How do you propose we do this? I know there were some cart readers that had like a built in switch that can help in doing the voltage swaps based upon the cart inserted but I don't think this is what people are using.

I thought something like always starting the Atmega and all the slots at 3.3V and then when the user selects a 5V system in the OLED menu let the Atmega send a signal to a mosfet or transitor or relay to switch the Atmega and everything else to 5V. That way no voltage level converters are needed since the Atmega will always run at the same voltage as the target system.

AngryHelder:
-What is the use of the EEP switch? does the n64 need this tied high or low at any time specifically? It must have been important at some time to dedicate a switch to it.

The N64's EEPROM needs this pin pulled high at all times or else it doesn't work right. Since the Atmega pin is shared between the different consoles I have included a switch to remove the pullup resistor from the circuit in case it interferes with other systems. But I have not encounteredd any issues so far.

AngryHelder:
-Is it ok to have those clocks hard wired into those pins at all times on the SNES Socket? As for the PH1 those 3 cart readers (Genesis, GBA, N64) all use the same clock and can be tied together?

Yes, a real SNES console does the same thing, so I would leave the Adafruit clock generator permanently connected to the 3 SNES CLK pins.
On the N64 slot, I manually clock the N64 EEPROM's CLK pin using the Atmega PH1 pin, on GBA and Genesis no clock is used but the PH1 pin is still connected just in case. So it's ok if these three share the same Atmega pin.
And ofc the pins connected to PH1 are not connected to the Adafruit clock generator.

AngryHelder:
-How do you plan to integrate the Famicom adapter to this board? another socket?

Another socket, just like on the INF NES Lives Dumper, would probably be the easiest.

This is the internals of the Conker repro I purchased. I've had problems with saves vanishing until I pull the cart from the system and pop it back in. Then I may resume my progress.

I have (half)successfully wrote Majora's Mask to the cart since it was listed to have the same CIC chip. The issue I saw was when finally able to control Link my inventory was full of Ocarinas.

Down the side of the board it says 2x512m and the chip reads S29GL512N11TF102. They wouldn't have wasted 512mbs on this would they?

Conker is 512Mbit so using a 512Mbit chip makes sense. Also Conker uses a 16K eeprom while Majoras Mask uses 1M flashram to save. So you can't use this repro for Majoras Mask since you can't save.

Any idea why saves would disappear and come back whenever the cart is taken out then reinserted?

Flash Perfect Dark and try if the save is behaving weird there too. If yes then the eeprom is probably bad. You can buy a cheap game with 16k eeprom like Starwars Racer and steal its eeprom to repair the repro.

Or just open message the seller for a replacement.

I actually have a copy of Star Wars Racer I recently purchased. Strange problem there- when inserted into the console it has no sound but when dumped it does. I really haven't gone over it extensively but found that interesting.

I did mention to the repro seller and he said I could send it back but I got it for a pretty good price and didn't want to go through the hassle of mailing it back and forth. Also it has been about a month or so now. Right now I'm writing Perfect Dark. If a bad chip is the case I'll replace it as you stated.

[EDIT]

While writing a new save game it locks up at this screen with the music still playing:

A second test brings this up:

So it looks like no more silent pod races for me.

[EDIT]

Replaced EEPROM with Star Wars Racer chip, wouldn't boot up. There's a chip size difference but holes for both variations. Frustrated with things outside of this so I'm ending this for the night.

Another thing is, my whole idea for doing this project was to dump 40 Winks that was released not long ago simply for emulating on my Playstation Classic because it had two-player support. I respected that people were against sharing the completed rom online and thought I'd have my own copy for myself. It dumped properly as far as I know but I'm wondering how I could get the information to enter into the n64.txt document so it doesn't come up with errors. On the screen it says:

GAMEPAK ERROR

Name: 40WINKS
ID: N4W2

Cartridge unknown

And also, can I sort folders to top? Say, I pick N64- I have to scroll through the list of files each time.

Sorry for all the questions, but I'm trying to keep them to a minimum and figure out what I can for myself.

Also thank you for the SketchUp file. I'll test it out and see how it goes.

Could you upgrade or add another chip to expand the memory on a sf nintendo power cart? I opened the cartridge and saw it had another spot for a chip.

20191209-062900 hosted at ImgBB — ImgBB