Go Down

Topic: ROM-Reader for Super Nintendo / Super Famicom Game Cartridges (Read 238749 times) previous topic - next topic

wildBcat

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.

wildBcat

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.

Androxilogin

#992
Dec 02, 2019, 03:18 am Last Edit: Dec 02, 2019, 06:54 am by Androxilogin
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.


sanni

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

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.

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



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.

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.



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

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.  :)

Androxilogin

#994
Dec 02, 2019, 12:19 pm Last Edit: Dec 02, 2019, 01:29 pm by Androxilogin
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.

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.

skaman

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


AngryHelder

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.

Androxilogin

#998
Dec 03, 2019, 05:20 am Last Edit: Dec 03, 2019, 05:54 am by Androxilogin
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:




sanni

-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.

-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.

-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.

-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.

-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.

Go Up