Copy Link
Add to Bookmark
Report

Nintendo 64 Controller Pinout

Nintendo64's profile picture
Published in 
N64 various
 · 28 Aug 2019
The Nintendo 64 controller.
Pin it
The Nintendo 64 controller.

This work was done via reverse engineering the controller itself.

The Nintendo 64 controller has 3 pins: the middle one is a serial type interface, the other two wires are power and ground.
Once you take the thing apart, you see the main controller wire going to a plug on the main board.

These three wires are color coded as follows

  • Red - 3.3V
  • Black - Ground
  • White - Data : 3.3V Logic Level

Looking at the connector end that goes into the N64 we see:

  1. GND
  2. DATA - 3.3V Logic Level
  3. VCC - 3.3V

The Nintendo 64 controller connector has 3 pins.
Pin it
The Nintendo 64 controller connector has 3 pins.

Reading the controllers position and button information


For reading position information from controller, the data stream requires a 41 bit command sequence. To understand the sequence we must define the bit stream characteristics.

  • Each bit is 4us in length (except 2)
  • A zero is represented as 3us low (0V) and 1us high (3.3V)
  • A one is represented as 1us low (0V) and 3us high (3.3V)

For the read status command 7 zeros and 2 ones must be sent to the controller.

Image showing the Nintendo 64 commands.
Pin it
Image showing the Nintendo 64 commands.

The way the transmitter should be implemented is using tristate logic. For a zero tie the input of a tristate buffer low and use the tristate control pin as the data input.
The Nintendo controller has a 3.3V pull up on the line so if you put the buffer in tristate the data line will go to 3.3V (high). If you put the buffer in drive mode the line will go to 0V (low). This also allows you to go directly to read mode in your logic once you send the last command bit.

For reading the controller, once the last bit goes to the high state, approximately 2us later the controller starts sending the requested data back to you, so make sure your receiver is ready.

Bit assignments


The 32 bits following the start bit are translated as follows

 
bits 0 - 15 : button values -
|
-> Zero = Not Pressed
|
-> One = Pressed

bits 16 - 31 : analog stick position

bit 0 - A
1 - B
2 - Z
3 - START
4 - DIGITAL PAD UP
5 - DIGITAL PAD DOWN
6 - DIGITAL PAD LEFT
7 - DIGITAL PAD RIGHT
8 - START+L+R : All pressed at the same time
9 - ? No combination seems to use this bit
10 - L
11 - R
12 - C UP
13 - C DOWN
14 - C LEFT
15 - C RIGHT

bit 16 -> 23 - X axis reading, 2's compliment
-128 = full left
0 = center
+128 = full right

bit 24 -> 31 - Y axis reading, 2's compliment
+128 = full top
0 = center
-128 = full bottom

Timing Information


The total position command takes 166us to execute, and the program I ran on the N64 polled the controller every 16.667ms or a frequency of 60Hz.

Rumble Pack Commands


It appears as if the rumble pack commands are more difficult to decode when your trying to play while hitting stop on the oscilloscope. So as far as I can tell until I get the controller hooked up to a PC this is the format for the rumble pack commands. Use the same data format for sending a 0 and a 1 bit.

 
0000-0011-1100-0000-0001-1011-(Send string of zeros the length of intensity required)-(6us pulse)-0000-0000


This is probably wrong, but oh well.

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT