David Glanzman

Engineering & Music

Gamecube Controller Reversing

These are the results of my attempt to reverse-engineer the Gamecube controller protocol.
Gamecube Controller Reversing Data
You can also download CSVs of the scope captures:

The Gamecube controller protocol is most famously explored here. The info there is useful, but not useful enough to build and test custom Gamecube hardware without doing some reversing of my own. All the scope captures I took are availabe for testing your own hardware; simply load the CSVs into an arbitrary waveform generator to produce your own Gamecube signals, no Gamecube required!

A recap of what we already know:

Some info on the scope captures:

When Super Smash Brothers Melee is running, the last 16 bits of the controller response contain the L and R button positions, each as an 8-bit number from 20-ish to near 240-ish. However, when a game is not running, both buttons are 4-bit numbers in the penultimate byte, while the last byte of the response is all 0s (excluding the final stop bit). This is another area where it seems that the game can dictate the data format used by the controller.

The command word sent to the controller to request data doesn't seem to do much, with the exception of the last bit which will trigger the rumble motor when set high. I can't find an explanation for the two-bit difference between the in-game and non-game command words.