ony Playstation (PSX) controllers are intelligent devices and communicate with the Playstation device using a special syncrosound serial bus and protocol. The controller system is implemented in bus architechture, which means that all signal wires are all tied together in PSX end (except select which is seperate for each device).
9 pin Sony Playstation special connector at the deivce, looking at the plug
|3||N/C (9 V unused)||Not connected|
DATA Signal from Controller to PSX.
This signal is an 8 bit serial transmission synchronous to the falling edge of clock (That is both the incoming and outgoing signals change on a high to low transition of clock. All the reading of signals is done on the leading edge to allow settling time.)
Signal from PSX to Controller.
This signal is the counter part of DATA. It is again an 8 bit serial transmission on the falling edge of clock.
VCC can vary from 5V down to 3V and the official SONY Controllers will still
operate. The controllers outlined here really want 5V.
The main board in the PSX also has a surface mount 750mA fuse that will blow if you try to draw to much current through the plug (750mA is for both left, right and memory cards).
ATT is used to get the attention of the controller.
This signal will go low for the duration of a transmission. I have also seen this pin called Select, DTR and Command.
Signal from PSX to Controller.
Used to keep units in sync.
Acknowledge signal from Controller to PSX.
This signal should go low for at least one clock period after each 8 bits are sent and ATT is still held low. If the ACK signal does not go low within about 60 us the PSX will then start interogating other devices.
It should also be noted that this is a bus of sorts. This means that the wires are all tied together (except select which is seperate for each device). For the CLK, ATT, and CMD pins this does not matter as the PSX is always the originator. The DATA and ACK pins however can be driven from any one of four devices. To avoid contentions on these lines they are open collectors and can only be driven low.
The PSX Controller SignalsAll transmissions are eight bit serial LSB first. All timing in the PSX controller bus is syncronous to the falling edge of the clock. One byte of the transmissions will look kinda like this.
|BIT 0|BIT 1|BIT 2|BIT 3|BIT 4|BIT 5|BIT 6|BIT 7| CLOCK —–——————————– DATA —–000000111111222222333333444444555555666666777777——–
CMND —–000000111111222222333333444444555555666666777777——– ACK ———————————————————-__-The logic level on the data lines is changed by the transmitting device on the falling edge of clock. This is then read by the receiving device on the leading edge (at the points marked *) allowing time for the signal to settle. After each COMMAND is recieved by a selected controller, that controller needs to pull ACK low for at least one clock tick. If a selected controller does not ACK the PSX will assume that there is no controller present. When the PSX wants to read information from a controller it pulls that devices ATT line low and issues a start command (0x01). The Controller Will then reply with its ID (0x41=Digital, 0x23=NegCon, 0x73=Analogue Red LED, 0x53=Analogue Green LED). At the same time as the controller is sending this ID byte the PSX is transmitting 0x42 to request the data. Following this the COMMAND line goes idle and the controller transmits 0x5A to say “here comes the data”. This would look like this for a digital controller
ATT-______________________________________________________________ | Byte 1 || Byte 2 || Byte 3 | CLOCK —_-_-_-_-_-_-_-_—–_-_-_-_-_-_-_-_—–_-_-_-_-_-_-_-_—– 0xFF0x410x5A DATA ————————-__________–__—-__–__—-__–__—- 0x010x42 CMND —–_____________—–__–________–__———————— ACK——————–__——————-__—————–__-After this command initiation proccess the controller then sends all its data bytes (in the case of a digital controller there is only two). After the last byte is sent ATT will go high and the controller does not need to ACK. The data transmision for a digital controller would look like this (where A0,A1,A2…B6,B7 are the data bits in the two bytes).
| Byte 4 || Byte 5 |
CLOCK —_-_-_-_-_-_-_-_—–_-_-_-_-_-_-_-_——– DATA —D0D1D2D3D4D5D6D7—-E0E1E2E3E4E5E6E7——- CMND ———————————————-
ACK——————–__———————— NOTE: No ACK.
PSX Controller DataBelow are five tables that show the actual bytes sent by the controllers
Standard Digital Pad BYTECMNDDATA 01 0x01idle 02 0x420x41 03 idle0x5ABit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 04 idledataSLCT STRT UP RGHT DOWN LEFT 05 idledataL2 R2L1 R1 /\ OX|_| All Buttons active low.NegCon BYTECMNDDATA 01 0x01idle 02 0x420x23 03 idle0x5ABit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 04 idledata STRT UP RGHT DOWN LEFT 05 idledata R1 AB 06 idledataSteering 0x00 = Right 0xFF = Left 07 idledataI Button 0x00 = Out 0xFF = In 08 idledataII Button 0x00 = Out 0xFF = In 09 idledataL1 Button 0x00 = Out 0xFF = In All Buttons active low.Analogue Controller in Red Mode BYTECMNDDATA 01 0x01idle 02 0x420x73 03 idle0x5ABit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 04 idledataSLCT JOYR JOYL STRT UP RGHT DOWN LEFT 05 idledataL2 R2 L1 R1 /\ OX|_| 06 idledataRight Joy 0x00 = Left 0xFF = Right 07 idledataRight Joy 0x00 = Up0xFF = Down 08 idledataLeft Joy 0x00 = Left 0xFF = Right 09 idledataLeft Joy 0x00 = Up0xFF = Down All Buttons active low.
Analogue Controller in Green Mode BYTECMNDDATA 01 0x01idle 02 0x420x53 03 idle0x5ABit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 04 idledata STRT UP RGHT DOWN LEFT 05 idledataL2 L1 |_| /\ R1 OXR2 06 idledataRight Joy 0x00 = Left 0xFF = Right 07 idledataRight Joy 0x00 = Up0xFF = Down 08 idledataLeft Joy 0x00 = Left 0xFF = Right 09 idledataLeft Joy 0x00 = Up0xFF = Down All Buttons active low.PSX Mouse (credit to T.Fujita http://www.keisei.tsukuba.ac.jp/~kashima/games/ps-e.txt) BYTECMNDDATA 01 0x01idle 02 0x420x12 03 idle0x5ABit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 04 idle0xFF 05 idledata LR 06 idledataDelta Vertical 07 idledataDelta Horizontal All Buttons active low.