Gamecube Controller Cable Pinout
This Instructable will guide you through installing a Gamecube style controller cable onto a multi-console 'MC' Cthulhu. All of the information about the Cthulhu project is available online in the Shoryuken.com forums: Please be quite aware that this Instructable applies only to the MC Cthulhu; if your Cthulhu was purchased advertised only for PS3/PC use, then you cannot add a Gamecube cable and expect it to work. Upgrade chips are available if you would like to turn your PS3 Only Cthulhu into an MC Cthulhu. If you are unsure which one you have, plug your arcade stick into your computer with the Start and Select buttons held down.
If you see a new device called 'Cthulhu Bootloader' get installed, you have an MC Cthulhu. If you only see your arcade stick show up as normal, then it is not an MC Cthulhu. Before heating up the iron and jumping in without a plan, it is very important you take a moment to get to know what to expect.
Nintendo Gamecube controller connector pinout. It appears that you are using AdBlocking software. The cost of running this website is covered by advertisements. Cable shielding / ground. Usually the same ground of pin 3. This applies to the Extreme Skillz Gamecube to USB adapter. J1: Pinout of the connector inside the controller.
Let's start by getting to know your Gamecube cable. You can use any kind of cable that has a male Gamecube end, like the one pictured. You can scavenge these from dead controllers easily, or purchase a Gamecube extension cord like I've done here. If you have an extension cord, cut the female end off as close to the end as you can, so you are left only with the male end and as much cord as possible.
Remove about 1 1/4' inches (3-4 cm) of insulation off of the end, exposing the insulated wires from the cable. If there is any sort of uninsulated wire or metallic shielding, go ahead and trim it off next to the end of the main cable insulation. If you have any heat shrink tubing of the right thickness to barely go over the main cable insulation, go ahead and slide it on now so you won't forget it later. The heat shrink tubing is optional, but definitely makes for a professional looking installation. Strip about 1-2 mm of insulation off of the end of each of the smaller wires, exposing the copper. Get your multimeter ready to check for continuity, and a small piece of paper and pencil to jot down what you find.
The first picture below shows the pin number for each of the wires in the Gamecube cable. Our job now is to identify which of the colored wires in the Gamecube cable go to which of the pins on the end. I will give a listing of which color goes to which pin on the extension cables I have used; feel free to use this as an initial guide for your testing, but you MUST check each pin of the cable. Use this to try and get your pinout done quickly, but it is NOT a substitute for testing yourself. (The Cthulhu Column entry should be ignored for now. Get the pinout done before ever heating up your soldering iron.) For the PURPLE extension cable shown in the picture: Color Purpose Pin # Cthulhu Column Blue - VCC - 1 - V Red - DATA - 2 - F Yellow - GND - 3 - G For the BLACK extension cable I currently sell.
Color Purpose Pin # Cthulhu Column Black - VCC - 1 - V Yellow - DATA - 2 - F Brown - GND - 3 - G The three wires listed above are the only three we need to care about. Locate all of the rest of the wires that don't go to pins 1-3, and trim them short around the end of the insulation. They aren't needed. This is a quick step, but very recommended to help make things go smoother.
Tin your wires. The easiest way I've found to accomplish this is to twist the copper wires together so you have no stragglers, then apply a little flux onto the exposed copper at the end of each wire. Melt a little solder on the end of your iron, and touch it to your wire. With the flux, the wire will drink up the solder, leaving a much easier to use and solder single piece to solder to the board, instead of multiple thin copper threads. The insulation on the wire will melt and retract a little bit; that will actually help make things easier when we solder. The wires on the Gamecube cord need to be soldered to specific spots in order to work well.
Take a moment to identify where you will be soldering the cable to shortly. Below is a picture of an unassembled Cthulhu board showing the grid of holes where the console cables get installed. It doesn't matter which row we use with the Gamecube cable, so use whichever one is easiest.
Now that we know which row of holes to use, we just need to figure out which wires go where. Grab the sheet of paper you wrote the pinout on. Each wire has a purpose, and a specific place it must go.
Remember, the colors below are ONLY an example. Use the pin # or Purpose you wrote down earlier to determine which column to use. Color Purpose Pin # Cthulhu Column Blue - VCC - 1 - V Red - DATA - 2 - F Yellow - GND - 3 - G There you have it.
You should have three wires tinned and ready to solder, and you now know which wire does what, and which row (1) and column each one goes into. Let's get to it. We now know what wire goes where, so heat up the iron. I recommend starting and one end and working your way individually to the other. I start with the G column, would through A-F, and finally V, left-to right. Take the GND wire, place it through the row 1 column G hole so the insulation stops at the board.
Take a finger, bend the wire over from underneath and hold it in place while you flip the board over. Solder the wire in place, and trim off any excess wire. Repeat for the other two wires; Data to column F, and VCC to column V. The most important thing you can do is trust your instincts. If anything looks or feels wrong, fix it.
Next, test anyways to prevent any catastrophic problems. The worst thing you can do is accidentally cause a short.
Use your multimeter to check for continuity between the VCC screw terminal (top right-most screw terminal in the picture below) and a GND terminal (like the lower left-most terminal) If there is a low resistance present, you MUST fix it before even thinking about testing the board out. It would be very dangerous to plug it into anything without locating the short and fixing it. The ground and power lines in the columns you just soldered to are very far apart, so this sort of mistake will be rare, but it is better to test for it now. If you used heat shrink tubing, slide it down over the wires as far as you can, and use a heat source such as a heat gun, or even a lighter, to shrink it down over the wires. A note on final installation: The cable is secured to the board with only the three very thin wires. In the event of even slight force, these wires will not hold.
It is very important when installing in your arcade stick that you device some method of strain relief, so any tugging on the cable will be stop and not result in pressure on these small wires. The usual method I prefer is to make a small loop in the cable, secure the loop with a zip tie, and making sure the loop is as close to the exit of the case as possible.
If the cable gets tugged at all, the loop is far too big to exit the case, preventing the thin wires from being pulled. Give it a test, and enoy your stick with a good Gamecube game! PROTIP: Hold down Short and Jab (1P and 1K) when plugging into a Gamecube or Wii to activate the basic Smash Brothers mode.
Nintendo Gamecube Controller Pinout Nintendo Gamecube Controller ProtocolLast updated 8th March 2004 (first version was way back on 11th December 2002:)This is a reasonably technical document. If you aren't technically inclined, andyou just want an easy way to connect your gamecube controllers to a PC, youmight be interested to know that a ready made adaptor already exists. It'scalled the and is only sold by as far as I'm aware. It only works with the original NintendoGamecube controller (it is not compatible with the Wavebird or any 3rd partycontrollers).However, if you are interested in homebrew hardware, or just likedismantling things, read on. IntroductionThe controller connects to the Gamecube through a proprietary 6-pin connector,with screened cable.
The official Nintendo controller only seems to wire 5/6 ofthese pins, and of those only one seems to be used for data transfer betweenthe console and the controller. This document includes a pin out of thecontroller port, deduced from an examination of the controller and console withmultimeter and oscilloscope, and from some experimentation. Therefore, I makeno guarantee that any of this information is accurate, and you use it at yourown risk. It's my best guess at how this thing works:)If anyone has useful information to add to this page, please drop me a line(contact details are on index page).James, 8th March 2004. Connector PinoutThis is a view of the controller socket on the front of the console, lookinginto the socket. The numbering scheme is my own:PinColourJ1Function1Yellow25V power supply (used by rumble motor).2Red3DATA line: bi-directional data to/from console, pull-up to 3.43V3Green4Ground.4White5Ground (Skillz interface has pins 3+4 wired as common ground).5-Unknown: not connected by official controller, or Skillz interface.6Blue13.43V logic supply.7Black6Cable shielding / ground.
Usually common ground with pin 3.In the table above, the pin number on the left corresponds to the diagram of thecontroller socket. The colour code is that of the cable from the officialNintendo Controller (different models might vary), noting that one pin is notused in this case. The third column marked J1 refers to the pinout of theconnector inside the controller, which you will only be able to get to if youhave the appropriate security screwdriver bit (or improvise your own handmadetool). You can buy a suitable screwdriver from also.
The function column on the right is my best guessat what each pin is for. Which pins are needed for a homebrew interface?My prototype interface wires pins 3 and 4 together as common ground, uses a 7805voltage regulator to provide a 5V supply to pin 1, and uses a variable voltageregulator to provide a 3.43V supply to pin 6.
The only other connection that Imake is to the data line on pin 2, for which I use a 1K pull-up resistor to the3.43V rail. I notice that the Skillz adaptor uses a 3.3V regulator, and myinitial design also used 3.3V. I suspect that the accuracy of this rail isn'tvery important. I choose to use 3.43V currently, only because this is what Imeasured on a PAL Gamecube.Caution: this should go without saying; but once you haveconnected a 3.3V and 5V rail and pull-up resistor to your cable, it wouldlikely cause some damage if you were to then connect the cable to aGamecube. Ionly mention this because it would be easy to have an accident if you modifieda controller extension cable as I did - don't forget to unplug it from your cubefirst.
Power Supply and Rumble MotorThere are two power rails on the connector, a 3.43V supply that is probablyused for the logic, and a 5V supply that appears to be used to power the rumblemotor (and perhaps logic also). The ground (3) and shield (7) are connectedtogether.The 5V power used by the rumble motor is always on, and the motor is controlledby a command sent to the controller.
The controller contains a powertransistor to switch the motor on/off, rather than the console doing this. TheYellow 5V power line goes directly to the +ve terminal of the rumble motor, andit looks like the -ve terminal of the motor is attached to a transistor.I've not measured the current drawn by the controller yet. Serial Data InterfaceThe controller uses one bi-directional data line (Pin 2 - Red) to communicatewith the console.
This is an active high 3.43V logic signal, using a pull-upresistor to hold the line high, and pulling it low with an open-collectortransistor when a low needs to be transmitted. Communication is initiated bythe console sending a 24-bit string to the controller, after which thecontroller responds with 64-bits of button state and joystick data.Although I first thought that the controller had an internal pull-upresistor (measured 745 ohms), in practice I had to use an external 1K pull-upresistor between the 3.43V rail and the the data line in my prototypeinterface.The transfer speed is rather fast at around 4us per bit.
As with theN64 controller, a low bit is signalled by a 3us low followed by 1us high, and ahigh bit is signalled by 1us low followed by 3us high. Yes, it'sjust like the N64 controller!When the gamecube or the controller sends a string of bits, it terminates itwith a single (high) stop bit. Therefore, in order to send the string 00000000,the gamecube would in fact send 000000001. Timing MeasurementsInitially (in my Dec.2003 document), I had thought that the timing was around5us per bit, but I now believe that was wrong, and that the timebase on the'scope was inaccurate. Philipp Kastner sent me a plot from a storage 'scopethat showed 4us per bit, and I then went back and tried to measure the timingsagain, using the parallel port.Using the parallel port, I timed the interval between the first high-to-lowtransition at the start of a command, and the final low-to-high transition atthe end of the reply from the pad. The sample rate of the parallel port wasaround 1us per bit, leading to a possible timing error of around plus or minus2us. An average of 10 successive measurements gave around 348us total time.Assuming a total of 24+64 = 88 bits, that equates to 3.95us per bit. Thisassumes no significant delay between the command and response from thepad. These timings were made using QueryPerformanceCounter, under Windows2000, on a P4 2.8GHz, i875P chipset.
Probing for the ControllerWith no controller attached, the gamecube probes for a controller by sending thesequence 000000001 about every 12ms. The oscilloscope trace below shows atypical probe sequence, with the 'scope triggered on the negative edge. Whenyou connect a controller it will respond to this sequence, so you know that itis attached. More work is needed to examine the initial conversation betweenthe Gamecube and controller to see if there is any useful information(e.g.about what type of controller is attached?)Polling the Controller for Joystick/Button DataWith an official controller attached, there is a typical interval of about6ms between successive updates.
In fact, I believe that the update rate iscontrolled by the game, perhaps divided from the video frame rate. Each updatelasts around 348us. The sequence starts with a 24-bit command from the console:0100 0000 0000 0011 0000 0010After the 24-bit command word, the controller responds with a string of bitsthat contain the state of all the buttons along with joystick position data.The sequence of the returned data is as follows. Note that thebuttons are listed in transmission order, from left to right (i.e.
Theleft most bit is transmitted first). Byte0000StartYXBAByte11LRZD-UpD-DownD-RightD-LeftByte2Joystick X Value (8 bit)Byte3Joystick Y Value (8 bit)Byte4C-Stick X Value (8 bit)Byte5C-Stick Y Value (8 bit)Byte6Left Button Value (8 bit) - may be 4-bit mode also?Byte7Right Button Value (8 bit) - may be 4-bitmode also?As listed above, the L/R buttons are the end-stops on the L/R shoulder buttons.Note that between the A and L buttons, there is a bit that always appears to behigh.
Also, the three leading bits do not seem to be affected by the buttons(so far I have seen the sequence 000 and 001 appear here). Making it rumbleThe last bit of the command is the 'rumble' control. Setting this bit to oneenables the rumble motor, and clearing it disables the motor.
No initialisationsequence seems to be needed. As soon as you connect the controller, you cansend the 24-bit command sequence and the pad will respond with data, and can bemade to rumble.Other observationsGiven that there are 24-bits in the command word, it seems likely that therewill be a series of different commands to reset the controller, or to perhapsquery what kind of hardware is attached to the console. Further experimentationis needed to identify other commands.Previously, it seemed that there was a delay of about 15us before the padresponded to a command from the console. However, in recent experiments (on adifferent controller - perhaps it varies between controller versions) thisdelay seems to be gone. I suspect that this might vary between controllers, ormight be related to how frequently the controller is polled. It was clearlythere in my first experiments though, as can be seen from the 'scope photoslater in this document.When examining the output of the Skillz Cube Connection, it looked asthough only 4-bit analogue data is returned for the Left/Right shoulderbuttons. I need to go back and verify this, but it seems that the pad mightsupport different modes with 4-bit and 8-bit resolution.
Having said that, I'mnot sure it matters, who wants 4-bit data when you can have 8-bit?What does it look like on an oscilloscope?For those that don't have access to an oscilloscope or logic analyser, here aresome blurry photographs badly taken from a tired old 'scope. In this figure,point A is the start of the 24-bit command word sent by the console, and pointB marks the start of the 64-bit response from the controller.
The quality ofthe image is quite poor, but it's actually possible to see the individual databits. Note that a delay seems to be evident in this 'scope image betweenthe command word and the start of the reply. In more recent experiments, Ihaven't seen this delay.Finally, here is a close-up view of the individual data bits when transmittingbinary 0100:Homebrew InterfacingRecently, I built a simple homebrew interface to allow me to experiment furtherwith the controller. Using this interface, it was possible to reliably read allthe button, joystick, c-stick and left/right shoulder button values from theoriginal (official Nintendo) wired controller (DOL-003 it says on the bottom ofmy controller). When I tried it with a third part controller (MadCatz MicroCon)it didn't work, but I think it's probably just a bit of tweaking of theelectronics and timing (which are, to be frank, rather poorly implemented atthe moment).Anyway, it's a start; it can talk to the official controller, and can even makeit rumble. And you know what the best part is? Yes, you can download the sourcecode here.
Prototype SoftwareFirst things first, this was developed on Windows 2000, and has currently onlybeen tested on a P4 2.8GHz with i875P chipset. Hopefully, that isn't theminimum specification, but I wouldn't be surprised if the timing messes upon a slower computer. If it does, let me know, and we will see if it can befixed.I'm releasing this so that people can experiment with it, assumingsome basic knowledge of electronics and software.
This stuff isn't yetready for any practical use; i.e. There are no proper drivers yet.You will need a few things before you can use this software:.Some home made hardware (circuit diagram to follow shortly, but there is adescription of pin connections in the source code for the impatient or thehardcore, which should be just enough to be able to build it).The giveio device driver (download it).Nerves of steel / willingness to potentially destroy your PC andcontroller:)The program works by using direct port I/O on the parallel port. That isn'tnormally allowed from user mode on Windows NT/2000/XP, so I downloaded andinstalled a driver called giveio which you can easily findwith the help of google (and I will add a link here soon hopefully). When thisis installed (you will need administrator rights to do this), it basicallybreaks the protection mechanism so that your program can do direct port I/O.Once you have installed the giveio service, the program willstart and enable the giveio service automatically as required.
This means thatyou don't need to set the giveio service to automatically start with windows(and I don't recommend doing this either, from a safety point of view).I've not tested the program on Windows 95/98 (does anyone still use it?), andin fact I would be very surprised if it worked at all on that OS. If you knowdifferent, let me know.Finally, here is the source code:It compiles with MS Visual Studio.NET as a console project, and probably willwork with Visual C 6. It uses some inline assembler, and the syntax might beMS specific, but should be easily alterable to work with other compilers Ithink.
What next?The first thing to do is to refine the hardware design and then to test it onmore PCs. I think a reasonable minimum specification to aim for wouldbe P3 1GHz. The software needs improving, with a kernel mode device driverto talk to the hardware, and a DirectInput driver to allow the controller to beused as a normal joystick device.
Support for more than one controller would benice. With the current shift register, there are two inputs, so it should befairly easy to support a second controller.I've been discussing with Philipp Kastner the possibility of building aninterface around a PIC microcontroller. This would allow a serial or even USBinterface to be developed. One obstacle is that the PICs with USBsupport are only available in UV erasable versions (no flashableversion) which makes them a pain to develop for. Unfortunately, not everyone has access to a PIC programmerof course.
However, with a PIC, it should be possible to support several controllerswith a single interface. What would be really, really nice is a front paneldrive bay with four Gamecube controller ports.Now, if only there were some decent games on the PC, apartfrom boring old 3rd person shooters. CreditsHuge thanks to Philipp Kastner for inspiring me to work on this again, I'dabandoned it really (I blame work, and of course my friends Zelda,Link and Mario, for occupying too many hours).The shift register hardware design was inspired by the N64 ControllerInterface project first described by Stephan Hans, Simon Nield,F.P.Earle et.al.
Nice work!The GC Linux project is definitely worth a look, some detail about thecontroller commands is emerging in their documentation (search for YAGCD).All the people who wrote to me over the last year or so, I can't remember allthe names, but I'll credit you all when I find the old e-mails!Thanks to Sara, for putting up with the wires, flashing lights andtools strewn everywhere:). Innebygde skrifter i powerpoint for mac.