Pi in a Super Famicom Build
-
Woo hoo! My screen showed up today!
Next Steps
- Figure out how to wire it up (This blog looks like a good start, someone linked to it in another post.)
- Get it to display something while still having video working via HDMI
- Figure out how to get a script to show something on it when I'm in EmulationStation (which system's files I'm in would be sweet, but even a static image while in EmulationStation would be better than nothing)
- When I'm playing a game have it show some kind of game info
- Go back to the EmulationStation info when I'm done playing the game
I was thinking about maybe having the Reset button on the console act as a trigger to switch display modes for the secondary display, between game art, some kind of stats for the Pi (temperature, uptime, time of day, I dunno) and then another press to just turn it off if it's annoying when playing in a dark room or something. Something to ponder for a later time after I get the first stuff taken care of and I actually have the console here to wire up.
-
Woo hoo! The Super Famicom has arrived from Japan!
It's in really good shape and looks just like it did in the photos on eBay.
I still can't get my 2.2" screen to turn on, so I think I'll crack open the Super Famicom and start measuring for cables.
-
With the right security screwdriver it was really easy to get the Super Famicom apart. The board is dated 1994, which I am guessing is why the case isn't as brown as others I've seen. (I read somewhere that over time Nintendo got their plastic mix figured out.)
-
Progress! I finally got the secondary 2.2" screen working. I figured out how to get the screen to turn on with the Pi, display a default image, then, using runcommand, show an image for each game as it's being played, if the game doesn't have game art, to display a default for the system, and then go back to the default when in EmulationStation.
-
@demesauce Can you tell me where you got those white mounts to hold the Pi in place?
-
@demesauce Thanks for this post, I'm planning on doing the same with a Pi3 and a SNES. Just wondering, what did you use for the USB ports on the front? What does the blue and white cables going onto the mausberry circuit do?
-
I bought them on eBay. Try a search for standoffs or motherboard standoffs
The USB ports on the front are a small 4 port usb hub, also found on ebay (I bought a shit ton of them) The blue and white cables go from the GPIO to a Mausberry Circuits: http://mausberrycircuits.com/collections/frontpage/products/shutdown-circuit-use-your-own-switch
It allows you to use the original power and reset buttons to safely turn on/off the system
-
@Cheeturbo
With my Super Nintemu build, i reused pieces of the original SNES mounts. I like the idea of using as much as possible of the console i'm working with.@obsidianspider
I hope this is helpful, i hope you don't mind me posting this in your topic. -
@Morph-X It's very helpful to see how others have done their builds.
-
@demesauce Okay thanks. Would you be able to link the USB hub you used? I can't find any which look like they'll fit as nicely as that one.
-
@lorc34 Here are the ones I use: http://www.ebay.com/itm/Hub-4-Port-USB-2-0-Portable-9-5-cable-HB-MCRM-Sabrent-/162048515762?hash=item25bad81eb2:g:eBkAAOSwjKpXHGQH But they are about a 1/2" too short, so I use some black plastic (mine is from a CarMax license place frame) on either side
-
Another baby step:
The Reset switch is functional!
While waiting for some more parts to arrive I decided to work on the Reset switch functionality. I decided that I want to have the Reset switch control the backlight of the secondary screen. One press to turn it off, another press to turn it back on, etc. After some searching I wrote a simple Python script to detect the button press and shut off the backlight. Below is the script, with my comments, in case anyone else wants to do this and learn from how I did it. (If there are better ways to go about doing this, I'm open to hearing about it.)
#!/usr/bin/python import RPi.GPIO as GPIO import time # set up BCM GPIO numbering GPIO.setmode(GPIO.BCM) # turn off warnings GPIO.setwarnings(False) # tell the script that we're going to output data on GPIO 23 GPIO.setup(23,GPIO.OUT) # tell the script we're going to use GPIO 27 for input and act as a pull up resistor GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP) # the default state of the light is on light = 1 # run this unless there's an exception try: # Turn ON Backlight by default GPIO.output(23,GPIO.HIGH) # do this forever while True: # use interrupt to wait for button to be pressed GPIO.wait_for_edge(27, GPIO.FALLING) # if the light is on, turn the light off if light == 1: #Turn OFF Backlight GPIO.output(23,GPIO.LOW) #change the state of the light variable so the script knows the light is off light = 0 # if the light is off, turn the light on elif light == 0: # Turn ON Backlight GPIO.output(23,GPIO.HIGH) #change the state of the light variable so the script knows the light is on light = 1 # wait a little while to account for bounce in the button time.sleep(0.2) # keep running unless you Ctrl+C to break out of it except KeyboardInterrupt: # reset the GPIO pins used in this program GPIO.cleanup()
I soldered up some test wires to the switch and connected it to my breadboard and things seemed to work. That was encouraging. The next step was to cut out just the corner of the board (Tip: tin snips work great for this) because the Pi won't fit with the SNES main board in place. The board was going to have to be taken apart to get the cartridge slot off anyway, so while I didn't like crunching through a little piece of history, it's in the spirit of giving this console new life.
I reconnected the switch to my breadboard and the switch seemed to be malfunctioning. The backlight kept turning on and off and from what I could tell the script was detecting that the switch was constantly being pressed. By this point it was almost 1 AM, so I went to bed to work in it again before work in the morning.
I decided to remove the switch from the remaining piece of the main board to see what was going on. The "top" two pins are just a piece of wire that are there to anchor the switch to the board. The bottom left pin of the switch and bottom right pin are two separate pieces of metal inside that are normally a closed switch and when you press the button the connection is opened. When I connected just the switch, disconnected from the board, up to my breadboard, things were fine. This led me to think I may have damaged the board, or that pins were connected within the board itself.
With the switch still off the board I did a little testing with the multimeter and I found that the "bottom left" pin is the only one that is isolated from the rest of the board. The other three pins are all grounded back to the board, including that big metal band on the perimeter.
That was really good to know. I think that my problem was that when I connected the switch previously and it went haywire I must have had my wires backwards and connected the input pin to the ground part of the board and something shorted. Now that I know way more about Super Famicom Reset switches than I ever thought I would want to, I put the switch back on the board and connected two wires up, the signal wire (input) to the bottom left and the ground wire to the bottom right.Connecting it back up to the breadboard worked! I'm sure a lot of my headaches were because I'm inexperienced, but I learned how to troubleshoot a lot during this and also got to work on my soldering skills.
Here's a short video of the switch controlling the backlight.
I'm going to look into a more advanced script that will cycle between the light on or off and also switching between the game art or some Pi information (Temperature or something like that) but I have to learn some more Pythonβ¦
[Edit: Updated code to use interrupts instead of input state monitoring to be more efficient and use less CPU]
[Edit 2: cleaned up if statement] -
Good work; especially on the reset switch - I'm on version 2 of my build and I'm yet to get the reset switch functional.
I've only just joined and plan to post full details of my build but this caught my eye so had to comment here first. I used a custom PCB to interface a Pi0 in an effort to avoid the usual mess of wires - here's a taster:
-
@jackal123uk Very nice. I'm still amazed by people who make custom PCBs. That's a skill I've not developed and wouldn't even know where to begin. Heck, I'm still trying to figure out where I can print out a label for the cartridge once I'm done with it.
-
@obsidianspider Thanks; just posted the full saga of my build:
https://retropie.org.uk/forum/topic/3874/my-snes-buildTo be honest, I'm using the project as bit of an education, learning as I go. I designed the PCBs with a nifty (not to mention free) online tool over at upverter.com and had them fabricated at a reasonable cost over at oshpark.com - nothing much to it really.
-
In searching around I found a better way to poll for a GPIO event (using MUCH less CPU) so I updated the script above. I also have started playing around with displaying system information on the screen.
-
@obsidianspider said in Pi in a Super Famicom Build:
Heck, I'm still trying to figure out where I can print out a label for the cartridge once I'm done with it.
It's quite simple. Buy some label paper to print your cartridge-label. Or, i'll do it for you if you can't find a way to do it yourself, just need to check the costs of mailing it to you.
-
@Morph-X I may take you up on it when I get that far if I can't find a local shop to do it. I have a black and white laser printer, not a color one, and I don't want to spend hundreds of dollars on a printer just to make one label.
-
While waiting for some parts to arrive I decided to remove the pieces from the Super Famicom main board that I intend to reuse: the power switch socket, the controller ribbon cable jack, the power input jack (so I could get the back plate off the PCB, hopefully I can model it for a 3D print sometime in the future), and the game cartridge slot.
I learned today that desoldering components, especially ones with multiple pins is a skill I have yet to acquire. I got very frustrated, it took forever, and after many YouTube videos, a botched attempt with a heat gun, and finally just slowing down, taking my time, and not looking for a quick way to do it, I got the parts off the board.
Unfortunately, the attempt to desolder the game cartridge slot from the board with a heat gun was a failure. I melted some of the plastic and it just plain didn't work. I ended up prying the metal housing (which had black marks on it when I got the Super Famicom) free from the board, and then desoldered each pin individually from the board, then reassembled the socket.
I took the game cartridge socket off the board because after my experience with cutting the board to get the Reset switch I knew I'd potentially cross connections in the board. I've tried inserting a game and removing it a few times and the pins don't seem to move, but since the pins aren't connected to a board at all, I can see them potentially working free. I don't plan to remove the game cartridge much, if ever, but I'm tossing around the idea of securing the pins either to a blank circuit board or maybe use hot glue. I don't love the hot glue option in case I would need to redo something, but I could put it in the valley underneath and it wouldn't look too messy.
The good news is that even though I melted the plastic a bit, once everything is assembled you'll never see it. I don't like that I made a mistake, but I'm new to this and there are certainly worse ways to make a mistake.
Onward!
-
@obsidianspider said in Pi in a Super Famicom Build:
I learned today that desoldering components, especially ones with multiple pins is a skill I have yet to acquire. I got very frustrated, it took forever, and after many YouTube videos, a botched attempt with a heat gun, and finally just slowing down, taking my time, and not looking for a quick way to do it, I got the parts off the board.
This is identical to my experience; reassuring to know it's not just me. I haven't even attempted the cartridge slot yet - far too many pins! Interestingly, on my European SNES the bulk of the cartridge slot can be pulled off the main board as it's on another socket.
In my build I could solder wires directly to the underside of the cartridge slot but that doesn't go with my neat, tangle-less vision.
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.