Build a transportable retrogaming console/media center.
I want to preserve as much as possible the exterior of the Gamecube:
no custom-made 3D printed panels and no external modification.
In addition, I want to reuse as many original parts as possibile:
power supply unit and buttons aboce all else.
In short: I took a Raspberry Pi, put it inside a Gamecube,
installed RetroPie and started playing old games.
And watched YouTube between gaming sessions.
I wanted a thing like this in my room since a long time: a highly
transportable retrogaming console.
The Gamecube is a beautiful console and its interior is very
spacious.
In addition, it's been unused since decades.
Even though the Nintendo Gamecube is a console born during a time
where "easily disassembled = easily hacked", I was surprised
by how easy it is to tear apart this console (given that you have
the right screwdriver!) and by how neatly organized the interior was:
the motherboard was inside a dissipating metal cage and the big
fan on the side helped mantain the interior very cool.
The mini-CD drive is a easy to remove block (thanks to an
iFixit guide)
After I finished tearing apart the cube, I decided to keep the
power supply unit and the fan for two main reasons: the fan does a
really good job at keeping a low temperature (and letting me play heavy
retrogames without worrying about the Pi) and thanks to a
very precise Instructable
I found the correct pinout of the power supply, so I managed to
make a quick mini USB - Gamecube cable and saved yet another AC
adapter. To make the power cable, I unsoldered from the motherboard the connector that linked to the Gamecube power supply.
Failing miserably. So I removed all the pins, unsoldering them one by one, and I reinserted them one by one by hand in the
plastic connector. Terrible, but at least it works.
I then soldered a mini USB cable to the right pins (+5V and bround, respectively pin 22 and 1).
Attention: make sure to use a short and thick wire. The first time I used a very long cable and the Pi
continuosly went undervolt (yellow spark in the top-right corner). I remade the cable with only 4-5cm of length
and never saw that spark again.
Huge thanks to Simone Tolomei for the tips.
As said by The Ben Heck Show many many times: do not underestimate how much space is taken by the cables especially considering extenders and the like. As much as I'd like to say "I calculated every centimeter", I only had an huge amount of luck: the extenders I bought, and in particulare the HDMI extender, barely fit inside and at the same time they lock the Raspberry Pi in place. So, without a single screw and by only cutting a few plastic pieces inside the Gamecube, the Raspberry Pi and the cables are locked in place.
At this point, the project could be considered finished: the Gamecube is untouched, the Raspberry Pi
fits perfectly. So let's boot up RetroPie and play something!
But, by searching a bit on the
internet, I found a couple of very cool ideas that I wanted to try out: a power on led and
a reboot/reset button.
This will require the use of the GPIO pins, something I've never done
and that's why I decided to do it.
By using one of the two UART GPIO pins,
particurarly the pin 8, and by putting enable_uart=1
in /boot/config.txt
,
I attached a led that automatically lights up when the Raspberry Pi is powered on and shuts of when the Raspberry Pi is completely shutted down.
So, I can press the Gamecube's power button to power up everything, but I should do a sudo poweroff
(from the terminal, from the Kodi menu,
from the Emulation Station menu...) and wait for the led to shut down before pressing the power button to shut of the current.
I want to automatize this in the future.
I linked the led to the GPIO 8 and 6, for respectively the + and - of the led, and I locked the led to the top of the Gamecube with a lot of hot glue. Maybe I used too much glue but the important part is that the led should stay in place: many times I removed the top shell and some cables detached, but the led stayed in place.
I recycled the original reset button, which was soldered on the front circuit board (which contains the joypad ports). The reasons are simple:
it's a sping-loaded button, so it keeps high in place the plastic button on the shell, and being the original button I can easily put it
in the original position.
Thanks to a few online guides, I decide to proceed like this: I linked the button to the +3.3v (pin 1)
and to the pin 11, and I wrote a simple Python script that, once per second, checks if the button is pressed in which case
execs a sudo reboot
. The script is launched when the system boots up (thanks to /etc/rc.local
or a cron @reboot
).
Here's the code:
import RPi.GPIO as GPIO
import time
import subprocess
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
bashCommand = "sudo reboot"
try:
while True:
button_state = GPIO.input(17)
if button_state == True:
print "Exec"
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
time.sleep(1)
except:
print "Exit"
I decided that having only two SNES-like USB pads wasn't enought, and thanks to a kit found on Amazon.it,
I tried to make a couple of arcade sticks. First time dealing with wood and with these controllers, so why not?
Each kit had 10 buttons (8 big and 2 small), stick, USB board and many cables. Putting everything together was extremely simple, and if you have
problems you can use the tags on the cables as a guide.
The order in which I linked the cables and oriented the stick wasn't important, because I had to reconfigure them in RetroPie (and there's the
option to invert the axys in every system I know).
Thanks to the help of a 3D printed mask I found on Thingiverse, I built two wooden cases.
For me this was the hardest part in the whole project, given that it was my first time doing such a thing on my own. The result is hideous but functional.