Nintendo 64 to RS-232C Converter

1. Hooking

 The cable which connect the controller to the Nintendo 64 has three wires. The assignment of these wire is shown in Table 1.

Wire color Feature
Red Vss (+3.6V)
Black GND
White DATA
Table 1  Cable assignment 
 The signal wave shape flows on DATA line is shown in Fig. 2 and 3. (Click it to get large image) This wave shapes is data request to controller and return value when no button is push.
Fig. 1 Signal wave shape
(First 50 micro second)
Fig. 2 Signal wave shape (Whole)
 Fig. 3 is adjusted wave shape. The difference of "0" and "1" is shown in it. We can get states by scensing 2 micro second after of down edge.
Fig. 3 Signal wave shape (adjusted)
 According to Fig. 2, the data send from host is 9 bits. The component is data request command "0x01" and the terminate bit. The terminate bit is not a parity. This bit is always "1". The return value send from controller is 32 bit data and terminate bit "1". The features of each bit is shown in table 2. When button is push, it returns "1". When button is not push, it returns "0". The analog stick returns signed 8 bit data, like char type of C language. Unfortunately, this bit pattern has some jitters.
First bit   
1 "A" button
2 "B" button
3 "Z" button
4 "START" button
5 Cross key "Up"
6 Cross key "Down"
7 Cross key "Left"
8 Cross key "Right"
9 Not used
10 Not used
11 "L" button
12 "R" button
13 "C-Up" button
14 "C-Down" button
15 "C-Left" button
16 "C-Right" button
17-24 Analog stick "y" value
25-32 Analog stick "x" value
Last bit  
Table 3  Bit assign 
Fig. 4 Direction of analog stick

2. Hardware

 We made the converter using Microchip's one chip micro computer. At first, we made it by 16F84 with 10 MHz clock. The clock rate was not enough to sense down edge, so it was programed to sense each 4 micro second since 2 micro second after data request command sent. But we could not get complete data because of jitters. After that, we improved it to 20 MHz clock version using by 16C71. It was programed to sense down edge and get data, so we could get complete data.
 The circuit is shown in Fig. 5. This circuit has only CPU, RS-232C driver and controller data line driver. The power source block has regulator IC to get 5V current, and tow diode drops to 3.6V current. The assembled board is shown in Fig. 6.

Fig. 5 Converter circuits (Click image to get large)
Fig. 6 Assembled board

3. Software

 This application is using RS-232C communication functions(AN555) which can get Microchip web site. You need it to build this application. This application repeats simple work, getting data from controller and send them to RS-232C port by ASCII character.

 Download assemble code

 This assemble code can be compiled by Microchip's Masm assembler. You can get it from Microchip's site too. To write assembled hex file, I use handmade writer published in transistor technology magazine Aug. 1997 (Japanese only). This is Japanese magazine. But you may get similar information from Microchip.

Appendix. Built-in Polhemous sensor

 The purpose of making this converter is that we needed navigation device for our virtual reality display system (CABIN). In this display, we can not use usual input device, such as mouse, joy stick, etc. We needed handy device. After we had developed converter, we wanted to get 3D position and angles, too. So I set Polhemous sensor in it.
 Opening the case of controller, it has a little space at left and right grip. Considering to set cable, I set it at left grip. To set cable, file upper part of case and upper right part of circuit board off. Put the sensor and padding shown in fig. 7. The case is closed easily.

Fig. 7 Inside of controller

If you need more infomation, contact address is here