Introduction: Retropie Gamecube Case Project
Goal of this project is in refurbish a old gamecube (already dead from a power surge) with a Raspberry pi 2b that I already got laying around. I wish to keep the case look (after a bit of painting) and use the original controllers and connections.
Step 1: Tools & Parts Needed
Tools and parts could quite actually differ from what you want to do. In my case;
- Gamecube console (Generation won't matter much)
- Option 1; Gamecube internal & external power supply
- Or; Rpi Power supply (5v at least 3A for good controller performance)
- Option 2; Wiiu Gamecube controller adapter (mayflash type)
- Sacrifical flat head screwdriver
- Dremel or any rotary tool
- LED for power status
- Switches for the cover buttons
- Raspberry pi (depends on what you have in hand, in my case, a RPi2b. I guess a regular RPi or a RPi zero would still do)
- Chromecast HDMI extender, or whatever for your video out
- Crimping tool, networking cable, RJ45 Male & Female connector, (ignore if you want it wifi)
- Epoxy glue
In case you want to paint the case as I did for mine, here what I've used:
- Plastic Primer/Paint can
- 220 Sandpaper (My case was heavily scratched, you may want to use something smoother)
- Lid Jewel (as I changed mine for a custom one)
Step 2: The Dreaded Nintendo "GameBit" Screws
If you ever took apart any Nintendo stuff, you know how creative they can be with their safety screws. The Gamecube didn't escaped that trend. These are 3.8 mm safety screws which looks like inverted torx screws called Line Screws .They were used in the Nes, Snes, N64 and Gameboys. As I didn't wanted to buy a specific screwdriver for this, I made something that could do the job. You may also see the Tripoint, which is used in gamecube controllers and more recently, on the Wii and Wiiu controllers.
Take a flat screwdriver that you wouldn't mind to modify for this purpose. It shouldn't be too wide and you should be able to reach the screw without hitting the plastic. Mine is 8 mm wide. Using the dremel tool (and don't forget the safety glasses!) cut a slit in the screwdriver. It have to be between 3.8 mm and 4 mm wide. Not enough and the screwdriver won't fit, too much and you won't be able to get any grip on the screw. If done correctly, you can feel the "tick" of the screw loosening in the plastic at first.
TIP! Magnetize the tip of the screwdriver so the screws follows!
Before ripping the poor thing apart, flip it over! The cover is really easy to remove at that point. Also be careful not to put dust or fingerprint on the disk laser if you want to keep those parts for another console repair.
After removal, I cut a notch in the screws so I can reuse them with a regular flat head screwdriver.
Step 3: Take the Beast Apart
After removing the top part of the case, you can easily see the whole thing. Most of the space is used by the optical drive with it's suspension system. Anyways, grab your phillips screwdriver and remove all you can see, there is several around the Drive support. You may also want to keep the power connector which includes the case fan. Also disconnect the front bezel with is just inserted on the main board. I'll keep that for later.
Step 4: Take the Beast Apart (step 2)
Once you removed the Optical drive (which is just a insertion connector on the main board, no ribbon there) You may remove the 6 screws from the heatsink which holds the mainboard to the bottom casing. You may also remove the metallic shielding from the bottom case and while you're at it, remove the heatsink from the main board and take a look at the magnificient technological wonders of today
Note: You may observe the codename they have the ATI chip for the system, which is "Flipper" (I found that funny since in May 1999, the console was first publicly announced as "Project Dolphin")
Step 5: Option 1; Gamecube Internal & External Power Supply
I guess you're wondering; why getting both internal and external power supply, wait, what? Internal power supply?
Yup, after some research, I stumbled upon different articles which described the Gamecube board having a separate internal power supply. Mine had the power supply directly on the main board. I ordered one off ebay for this specific project as I wanted to keep the looks and parts as much closer to the real thing. Plus I could still use the power switch and casing fan!
The internal power supply provides different voltages such as +12V, +5V, +3.3V, +1.8V and +1.55V. The one that is of interest is obviously the +5V (Rpi) and +3.3V (Controllers). You can hook up the +5V directly to the Rpi 5V rail or with the Micro-Usb connection, your choice, both works well. Another +5V and +3.3V will be hooked up to the front board as needed by the controller
Pinout for the power supply goes as following:
1 Gnd 2 Gnd
3 3.3V 4 3.3V
5 Gnd 6 Gnd
7 Gnd 8 Gnd
9 1.8V 10 1.8V
11 1.8V 12 1.8V
13 1.55V 14 1.55V
15 1.55V 16 Gnd
17 Gnd 18 Gnd
19 Thermo detect 20 12V
21 5V 22 5V
As you can realize, there's plenty of ground connections. So I guess there is one ground per voltage connector as there was no common connection between the different grounds. For the project, I unsoldered the plug connector on the power supply to solder wires directly. As for the current rating, I couldn't find any data, but it can power my pi at full speed without getting any undervolt warning (rainbow square on the screen).
Step 6: Option 2: Using a Regular Raspberry Pi Power Supply
You can also use a regular power supply for your pi to run everything. Just keep in mind that the extra controllers and/or peripherals you add will all add up on the final, so you wanna make sure to have plenty of juice for everything. Luckily, as the rumble feature is not supported in Retropie, this alleviate a bit on the power supply.
Step 7: Gamecon & Toadking Drivers
Whatever you decide the connection to be (direct GPIO or mayflash Wiiu-Gamecube USB) you need to install the correct drivers.
I refered later to a specific command (Sudo modprobe gamecon_rpi_gpio map=0,0,0,0,3,0) which is installed by the retropie install script. If not installed at the first run, go back in the install script
- (from home directory)
- cd RetroPie-Setup
- sudo ./retropie_setup.sh
and install it from the "After Installation" Menu. The script will download all files required and compile it by itself
The second option is the Wiiu-Gamecube usb adapter which requires a special driver/software made by toadking.
Just make sure you install the right version of libusb before compiling. Otherwise you'll run in some issues and unsuccessfully compile the driver. Refer to the Readme.md file in toadking github for more details and installation instructions.
Step 8: Option 1; Front Board & Gamecube Connector Pinout
Trying to figure out the actual pinout from the front bezel I stumbled on something interesting. The first picture shows the pinout as it is found about anywhere. Looking at the front of the PCB, you can see the actual pinout of the connector which is slightly different. I'll use the board pinout from now on.
So the pinout goes
1 3 5
2 4 6
by looking at the front of the connector
- 3.3Vdc Data
On the board, Remotes # 3 and #4 got the pin 4 shorted to ground (pin 2 and 5) and the remotes #1 and #2 are connected to the ribbon
Using my trusty (almost) multimeter, I figured the ribbon pinout which I will use to connect the controllers and the reset switch to the RPi
There goes the ribbon, 12 pins, from left to right, looking at the back of the board
- +5Vdc (Also connected to the power LED via controller 2)
- Ground (Goes to all pin 2 and pin 5 of all controllers. Also connects to the system battery)
- Data (Controller #4)
- Data (Controller #3)
- +3.3Vdc (All pin #6 of all controllers)
- Pin #4 of controller #2
- Data (Controller #2)
- Pin #4 of controller #1
- Data (Controller #1)
- Reset Switch
- System Battery
Note that the Cover switch only got one pin on the ribbon. I expect some kind of TTL from the switch so I will have to set the RPi as a "always hi" output until it shorts to ground, or rewire the switch directly to the RPi which I'll probably do.
Connecting the front board to the pi;
After some testing, getting +5Vdc, +3.3Vdc, Data(Cntrl 1) and Gnd hooked up, You need to install the gamecon driver (you can install it via Retropie setup program). With a bit of fidling, I was able to make it load in GPIO2 with the following command: "Sudo modprobe gamecon_rpi_gpio map=0,0,0,0,3,0 " then "sudo jstest /dev/input/js0" to test the controller input. if everything goes well, you should see numbers changing with axis movement.
Note- After playing for a while, I got several issues of the system dropping the controller signal and some system freezes. I don't actually know if the problem is coming by the rpi not providing enough current on the 3.3Vdc rail or if it is coming from the software, therefore my choice for using a Wiiu Gamecube controller adapter which is usb powered - Option 2
Step 9: Option 2: Wiiu Gamecube Controller Adapter
I went for this option instead of hardwire the front board as I had issues with stability of the controllers. It is possible to hook up a Wiiu Gamecube adapter on the Rpi with the help of two modules;
google the libusb to make sure you get the right version. I could only get up to 1.0.9 on the regular page. SourceForge (included link) can get you 1.0.20. Download the code and compile it on your pi. Doesn't take very long. Once this is done, you can compile toadking driver (take even less time) MAKE SURE YOU RUN EVERYTHING AS SUPERUSER!!!!! Lost a few hours or errors and debugging before figuring that one out..... Make sure also that the Toadking driver is run as SuperUser too or it won't load. In Raspbian Jessie, you can run it as a boot service;
Debian Jessie has migrated to systemd, so I made a basic service file to allow the driver to run on boot (and as root):
sudo touch /etc/systemd/system/gamecube.service
sudo chown root:root /etc/systemd/system/gamecube.service
sudo nano /etc/systemd/system/gamecube.service
Paste this into the file and save it:
Description=Wii U Gamecube Adapter
Then to enable and start the service:
sudo systemctl enable /etc/systemd/system/gamecube.service
sudo systemctl start gamecube.service
Reboot and check that the service is running:
sudo systemctl status gamecube.service
You should get something like this:
● gamecube.service - Wii U Gamecube Adapter
Loaded: loaded (/etc/systemd/system/gamecube.service; enabled)
Active: active (running) since Wed 2016-03-16 23:08:34 EDT; 11min ago
Main PID: 363 (wii-u-gc-adapte)
Thank for some ewrogers dude on Toadking Forum to come up with a detailed version
The toadking driver is plug&play! so you can add/remove controllers on the fly, something that cannot be done using the gamecon driver. Even more, Toadking driver proved to be more stable and provide less latency than gamecon in more extensive emulation.
Step 10: Raspbian & Retropie (How to Get Things Running)
If you're already familliar with Raspberry pies, you already know about Raspbian. For the others, here's the description from Raspbian home page; I can't get any better description tha this:
Raspbian is a free operating system based on Debian optimized for the Raspberry Pi hardware. An operating system is the set of basic programs and utilities that make your Raspberry Pi run. However, Raspbian provides more than a pure OS: it comes with over 35,000 packages, pre-compiled software bundled in a nice format for easy installation on your Raspberry Pi.
Refer to the Raspbian page for installation instructions
I used Raspbian Jessie for my project, but you may have to use a more up-to-date version depending on what installation configuration you're making
Once installed, complete installation by making your system updates (sudo apt-get upgrade) then proceed to install Retropie.
If you have a usb joystick/joypad in hand, you can use it to already configure Retropie and test everything. A usb keyboard or if you want to ssh your connection to your pie to do the config is also to your liking.
Step 11: Installing EmulationStation
Now that we've got a working OS, we need to install the emulation software. In this case, I used EmulationStation, which is a powerful GUI for Retroarch (libretro)
You can follow this link. I'll try to resume the best I can;
First, you need to copy the installation files and compile the installer (I know, compiling get a lot of people afraid, but follow the steps on the web site and it's really easy as a pie (pun intended))
Second, configure your gamepad to work with ES. I've ran into some issues where cheaper remotes were giving random keys which make the configuration a bit more touchy. In this case, try to redo the configuration.
But wait, since we're using the wiiu-gamecube usb adapter or direct GPIO connection, did you installed the drivers?
Step 12: (Optional) Prepping & Painting the Case
As my case was scratched a lot (It has to be expected I guess) I wanted to repaint the whole thing.
After disassembly, I sanded the most that I could to remove the scratches, burrs, bumps, etc. At this point, patience and thoroughness is the key.
I used 220 sandpaper and the result was satisfying. You may want to get something finer, but keep in mind that sanding the plastic may cause some weird misalignment once the case is put back together which could ruin the whole thing.
You may want to remove the front pads before sanding/painting the bottom part of the case. Those a small rubber pads which are easy to remove with a small flat screwdriver or a angled pick like the one I used. Pry the two sides and gently pull them out of the case.
For the painting part, be sure to use plastic paint as some other paints may chemically react with the plastic or cause weird finish. Also make sure to paint in a well ventilated area and cover the surroundings to prevent overspray. With experience, I realized that multiple light coats gives a way better result that thick coats. Don't forget to remove the stickers from the top lid and the bottom plate before painting, clean up glue residue with Alcohol or goo-gone like stuff if you have any, just make sure it doesn't react with the plastic as some stuff may have strong solvents as principal ingredient.
Step 13: Adding the Little Extras
As I wanted to get a "stock" look, I installed two extra switches at the Reset and Eject button locations as well installed a LED where the original one was. I configured the pie to respond the Reset button as "Sudo reboot" and the eject as "sudo poweroff" I referred to AndrewH7 instructable for a easy to understand and to implement solution. I also added a script to power on the led at startup so I know the system is still on and when to safely power off (as GPIOs return to a Low state on the system shutdown, the led turns off)
Step 14: Field Testing & Conclusion
After some extensive running and testing,
- I realised that including a Wifi adapter would probably be overkill since we can always use a usb thumbdrive or directly connect to the network to copy new roms and/or modify the system settings.
- As the script for loading the power led loads only after login, it takes a few seconds for it to load. Maybe looking for another way to load the service sooner would be applicable.
- Using the gamecube controller to navigate EmulationStation proved to be awkward sometimes as the left shoulder button is pre-set in ES for page-navigating. As a result, exiting a game back to ES make it scroll all the way to the top of the game list.
- Wavebird Gamecube controllers are incompatible :(
- You cannot use the gamecube controller to navigate outside of ES. This includes the setup and configuration scripts of Retropie. Therefore making more use of the front USB connection.
- Using the memory card hole for the front usb was a good idea, but some of my usb connectors couldn't fit inside the hole and required a extension.
I hope you'll have as much fun building this mod as I had. And just to add up, this was my first experience with programming the GPIOs on the Rpi which proved to be way more easier than expected. The only thing I would change is the casing paint; to be redone, I would have kept the stock paint if the casing wouldn't had been so scratched. I expect the paint to become as scratched on the long run. Have Fun and happy gaming!