Gamecube Controller Cable Pinout
- Gamecube Controller Arduino
- Gamecube Controller Cable Pinout Cable
- Gamecube Controller Cable Pinout Diagram
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.
Nintendo Gamecube Memory Card Pinout of the gamecube memory card. Nintendo NES and SNES joystick controller including adaptation of joystick to a. Sega Mega Drive II to Scart RGB Cable Cable RGB for Sega Mega Drive II to Scart. GameCube Controller. Available at Nintendo GameCube. Pinout 7 /123 456 -/ (female at the console) Pin Colour J1 Function 1: Yellow: 2. Cable shielding / ground. Usually common ground with pin 3. J1: Pinout of the connector inside the controller.
Gamecube Controller Arduino
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:).
GamecubeController FirmwareIntroductionThe gcpad module is a firmware package for the EZ-USB device thatmanages up to four Gamecube controllers.It makes them available as generic gamepads to any computer system thatsupports the HID class of the USB standard. Modern computer systemsshould be able to recognize this bundle and to attach it seamlessly tothe set of input devices for game control. There should be even no needfor specific drivers as the HUT gamepad characteristics arewell-defined inside the HID specification. The generic driver of anyoperating system should do the job.It has been tested with Linux 2.4.22 so far, which implements joystickhandling within the joydev module. In case this module is not loadedautomatically, consult the documentation of your distribution on how toactivate this module.RestrictionsSome restrictions apply when using this module. Not everything has beentested yet and I do not know which flaws are still present.
Thefirmware isknown to play well with the original controller and certain clones. Itdefinitely workswith a 'BigBen Interactive' clone.Compilation and InstallingThe file gcpad.ihx contains a compiled version of the firmware basedof the released source files. Youneed the compilersuite if you want to modify the sources.Once it is installed, issue.
The hex-file can be downloaded directlyto the EZ-USB device using yourpreferred method. The firmware supports both downloading into thedevice RAM or being bootloaded from a programmed serial I2C EEPROM onthe board. In the latter case you'll have to set the variable ROMFWaccordingly in Makefile. After having compiled the sourcecode to suit the needsof the bootloading, run createezhide2.pl on the compiled hex-file.The output of createezhide2.pl has the correct format for the onbaordI2C EEPROM.The benefit of having the firmware permanently in the EEPROM is thatyou do not have toset upa firmware downloader for every operating system you happen to use onyour computer.Adapter HardwareThe Gamecube controller connector is quite straight forward. It usesthreepins for power supply (+5.0V, +3.43V and GND) and one pin for the datasignal.Please note that the voltages were measured at two PAL consoles only,so it is a good idea to verify if their values match your paticularconsole. Here's a schematic how to connect the controllers:I am not 100% sure about the value of the four resitors.
Gamecube Controller Cable Pinout Cable
I followed thedescription onand they worked for me. The assignment to the EZ-USB ports is arbitrary. It can be changed bymodifying the #define statements in padport.h.Although some references for the Gamecube controller mention the supplyvoltage to be 3.43V it seems not to be mandatory to stick exactly tothis voltage. I use the 3.3V on-board supply which works well with mycontrollers.If you are lucky you can find a matching connector and wire this to theEZ-USB device. Alternatively, you can reuse an externsion cable andreplace the connector which plugs into the console by a standard maleconnector. The matching female connector is then connected tothe EZ-USB according to the above schematic.
5-Pin DIN connectors arewell suited, cheap and provide compatibility with extension cables forold keyboards. You can share the adapter hardware of an and add the 5.0V supply to aspare pin.Once the firmware is downloaded and installed, the HID subsystem shouldreport four new gamepad devices. Each controller has eight axes (analogjoystick, analog C-joystick, digital pad, L and R) and 8 buttons. Thebuttons are assigned inthe following way:Gamecube ButtonGamepad ButtonA0B1Y2X3Z4Start5L6R7Additional Resources. Nintendo Gamecube Controller Pinout.
Gamecube Controller Cable Pinout Diagram
Myselfarniml at users.sourceforge.net.