3DO joypad - retronicdesign/USBJoystickAdapter_v3.2 GitHub Wiki
3DO joypad pinout
PIN | FUNCTION |
---|---|
1 | Gnd |
2 | +5V |
3 | Audio Right |
4 | Audio Left |
5 | +5V |
6 | Data Out |
7 | CLK |
8 | Gnd |
9 | Data In |
Theory of operation
Panasonic 3DO is a 3rd generation console that uses more evoluated peripherials. The joystick port included a stereo audio output for earphones and the capability of running 8 different controllers from a single port!
These joypad controllers uses a serial protocol with addressing that minimize the need of wires. It can be seen as a serial bus, like SPI. In fact, the low level protocol is pretty much like SPI mode 3. You got the CLK, a data output and a data input. The big difference with SPI is that there is no chip select signal. Frame start is signaled by holding the CLK line high for 500 us.
Data from daisy-chained peripherals are simply appended to the transmission back to back, first controller transmitted first. 3DO BIOS and some games will always query for 200 bytes of data. Some games only query what they need. Extra read data is always 0xFF.
Reading a single joypad controller would return 16 bits of data like this:
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Function | 1 | 0 | 0 | D | U | R | L | A | B | C | P | X | RT | LT | 0 | 0 |
Where:
- 1 or 0 are fixed bits.
- D = Down
- U = Up
- R = Right
- L = Left
- A,B,C are corresponding buttons
- P = Play/Pause
- X = Stop
- RT = Right Shoulder
- LT = Left Shoulder
Note that there are other peripherials like a mouse and a flight stick but they were not implemented in out firmware.