---
name: controllers-special
description: "PSX controllers advanced: configuration commands (enter/exit config mode), vibration/rumble, DualShock2 analog buttons, special controllers (dance mat, fishing, keyboard, DVD remote). Use when working with controller configuration, rumble, or special input devices."
---
## Controllers - Configuration Commands
Some controllers can be switched from Normal Mode to Config Mode. The Config
Mode was invented for activating the 2nd rumble motor in SCPH-1200 analog
joypads. Additionally, the Config commands can switch between analog/digital
inputs (without needing to manually press the Analog button), activate more
analog inputs (on Dualshock2), and read some type/status bytes.
#### Normal Mode
```
42h "B" Read Buttons (and analog inputs when in analog mode)
43h "C" Enter/Exit Configuration Mode (stay normal, or enter)
```
Transfer length in Normal Mode is 5 bytes (Digital mode), or 9 bytes (Analog
mode), or up to 21 bytes (Dualshock2).
#### Configuration Mode
```
40h "@" Unused, or Dualshock2: Get/Set ButtonAttr?
41h "A" Unused, or Dualshock2: Get Reply Capabilities
42h "B" Read Buttons AND analog inputs (even when in digital mode)
43h "C" Enter/Exit Configuration Mode (stay config, or exit)
44h "D" Set LED State (analog mode on/off)
45h "E" Get LED State (and Type/constants)
46h "F" Get Variable Response A (depending on incoming bit)
47h "G" Get whatever values (response HiZ F3h 5Ah 00h 00h 02h 00h 01h 00h)
48h "H" Unknown (response HiZ F3h 5Ah 00h 00h 00h 00h 01h 00h)
49h "I" Unused
4Ah "J" Unused
4Bh "K" Unused
4Ch "L" Get Variable Response B (depending on incoming bit)
4Dh "M" Get/Set RumbleProtocol
4Eh "N" Unused
4Fh "O" Unused, or Dualshock2: Set ReplyProtocol
```
Transfer length in Config Mode is always 9 bytes.
#### Normal Mode - Command 42h "B" - Read Buttons (and analog inputs when enabled)
```
Send 01h 42h 00h xx yy (00h 00h 00h 00h) (...)
Reply HiZ id 5Ah buttons ( analog-inputs ) (dualshock2 buttons...)
```
The normal read command, see Standard Controller chapter for details on buttons
and analog inputs. The xx/yy bytes have effect only if rumble is unlocked; use
Command 43h to enter config mode, and Command 4Dh to unlock rumble. Command 4Dh
has billions of combinations, among others allowing to unlock only one of the
two motors, and to exchange the xx/yy bytes, however, with the default values,
xx/yy are assigned like so:
```
yy.bit0-7 ---> Left/Large Motor M1 (analog slow/fast) (00h=stop, FFh=fastest)
xx.bit0 ---> Right/small Motor M2 (digital on/off) (0=off, 1=on)
```
The Left/Large motor starts spinning at circa min=50h..60h, and, once when
started keeps spinning downto circa min=38h. The exact motor start boundary
depends on the current position of the weight (if it's at the "falling" side,
then gravity helps starting), and also depends on external movements (eg. it
helps if the user or the other rumble motor is shaking the controller), and may
also vary from controller to controller, and may also depend on the room
temperature, dirty or worn-out mechanics, etc.
#### Normal Mode - Command 43h "C" - Enter/Exit Configuration Mode
```
Send 01h 43h 00h xx 00h (zero padded...) (...)
Reply HiZ id 5Ah buttons (analog inputs...) (dualshock2 buttons...)
```
When issuing command 43h from inside normal mode, the response is same as for
command 42h (button data) (and analog inputs when in analog mode) (but without
M1 and M2 parameters). While in config mode, the ID bytes are always "F3h 5Ah"
(instead of the normal analog/digital ID bytes).
```
xx=00h Stay in Normal mode
xx=01h Enter Configuration mode
```
Caution: Additionally to activating configuration commands, entering config
mode does also activate a Watchdog Timer which does reset the controller if
there's been no communication for about 1 second or so. The watchdog timer
remains active even when returning to normal mode via Exit Config command. The
reset does disable and lock rumble motors, and switches the controller to
Digital Mode (with LED=off, and analog inputs disabled). To prevent this, be
sure to keep issuing joypad reads even when not needing user input (eg. while
loading data from CDROM).
Caution 2: A similar reset occurs when the user pushes the Analog button; this
is causing rumble motors to be stopped and locked, and of course, the
analog/digital state gets changed.
Caution 3: If config commands were used, and the user does then push the analog
button, then the 5Ah-byte gets replaced by 00h (ie. responses change from "HiZ
id 5Ah ..." to "HiZ id 00h ...").
#### Config Mode - Command 42h "B" - Read Buttons AND analog inputs
```
Send 01h 42h 00h M2 M1 00h 00h 00h 00h
Reply HiZ F3h 5Ah buttons analog-inputs
```
Same as command 42h in normal mode, but with forced analog response (ie. analog
inputs and L3/R3 buttons are returned even in Digital Mode with LED=Off).
#### Config Mode - Command 43h "C" - Enter/Exit Configuration Mode
```
Send 01h 43h 00h xx 00h 00h 00h 00h 00h
Reply HiZ F3h 5Ah 00h 00h 00h 00h 00h 00h
```
Equivalent to command 43h in normal mode, but returning 00h bytes rather than
button data, can be used to return to normal mode.
```
xx=00h Enter Normal mode (Exit Configuration mode)
xx=01h Stay in Configuration mode
```
Back in normal mode, the rumble motors (if they were enabled) can be controlled
with normal command 42h.
#### Config Mode - Command 44h "D" - Set LED State (analog mode on/off)
```
Send 01h 44h 00h Led Key 00h 00h 00h 00h
Reply HiZ F3h 5Ah 00h 00h Err 00h 00h 00h
```
The Led byte can be:
```
When Led=00h --> Digital mode, with LED=Off
When Led=01h --> Analog mode, with LED=On/red
When Led=02h..FFh --> Ignored (and, in case of dualshock2: set Err=FFh)
```
The Key byte can be:
```
When Key=00h..02h --> Unlock (allow user to push Analog button)
When Key=03h --> Lock (stay in current mode, ignore Analog button)
When Key=04h..FFh --> Acts same as (Key AND 03h)
```
The Err byte is usually 00h (except, Dualshock2 sets Err=FFh upon Led=02h..FFh;
older PSX/PSone controllers don't do that).
#### Config Mode - Command 45h "E" - Get LED State (and Type/constants)
```
Send 01h 45h 00h 00h 00h 00h 00h 00h 00h
Reply HiZ F3h 5Ah Typ 02h Led 02h 01h 00h
```
Returns two interesting bytes:
```
Led: Current LED State (00h=Off, 01h=On/red)
Typ: Controller Type (01h=PSX/Analog Pad, 03h=PS2/Dualshock2)
```
The other bytes might indicate the number of rumble motors, analog sticks, or
version information, or so.
#### Config Mode - Command 46h "F" - Get Variable Response A
```
Send 01h 46h 00h ii 00h 00h 00h 00h 00h
Reply Hiz F3h 5Ah 00h 00h cc dd ee ff
```
When ii=00h --\> returns cc,dd,ee,ff = 01h,02h,00h,0ah
When ii=01h --\> returns cc,dd,ee,ff = 01h,01h,01h,14h
Otherwise --\> returns cc,dd,ee,ff = all zeroes
Note: This is called PadInfoAct in official docs, ii is the actuator (aka
motor) and the last response byte contains its current drain (10 or 20 units).
Whereas, Sony inisits that controllers should never exceed 60 units (eg. when
having more than 2 joypads connected to multitaps).
#### Config Mode - Command 47h "G" - Get whatever values
```
Send 01h 47h 00h 00h 00h 00h 00h 00h 00h
Reply HiZ F3h 5Ah 00h 00h 02h 00h 01h 00h
```
Purpose unknown.
#### Config Mode - Command 4Ch "L" - Get Variable Response B
```
Send 01h 4Ch 00h ii 00h 00h 00h 00h 00h
Reply Hiz F3h 5Ah 00h 00h 00h dd 00h 00h
```
When ii=00h --\> returns dd=04h.
When ii=01h --\> returns dd=07h.
Otherwise --\> returns dd=00h.
#### Config Mode - Command 48h "H" - Unknown (response HiZ F3h 5Ah 4x00h 01h 00h)
```
Send 01h 48h 00h ii 00h 00h 00h 00h 00h
Reply HiZ F3h 5Ah 00h 00h 00h 00h ee 00h
```
When ii=00h..01h --\> returns ee=01h.
Otherwise --\> returns ee=00h.
Purpose unknown. The command does not seem to be used by any games.
#### Config Mode - Command 4Dh "M" - Get/Set RumbleProtocol
[Controllers - Vibration/Rumble Control](controllersandmemorycards.md#controllers-vibrationrumble-control)
#### Config Mode - Command 40h "@" Dualshock2: Get/Set ButtonAttr?
#### Config Mode - Command 41h "A" Dualshock2: Get Reply Capabilities
#### Config Mode - Command 4Fh "O" Dualshock2: Set ReplyProtocol
[Controllers - Analog Buttons (Dualshock2)](controllersandmemorycards.md#controllers-analog-buttons-dualshock2)
#### Config Mode - Command 49h "I" - Unused
#### Config Mode - Command 4Ah "J" - Unused
#### Config Mode - Command 4Bh "K" - Unused
#### Config Mode - Command 4Eh "N" - Unused
#### Config Mode - Command 40h "@" - Unused (except, used by Dualshock2)
#### Config Mode - Command 41h "A" - Unused (except, used by Dualshock2)
#### Config Mode - Command 4Fh "O" - Unused (except, used by Dualshock2)
```
Send 01h 4xh 00h 00h 00h 00h 00h 00h 00h
Reply HiZ F3h 5Ah 00h 00h 00h 00h 00h 00h
```
These commands do return a bunch of 00h bytes. These commands do not seem to be
used by any games (apart from the Dualshock2 commands being used by Dualshock2
games).
#### Note
Something called "Guitar Hero controller" does reportedly also support Config
commands. Unknown if that thing does have the same inputs & rumble motors
as normal analog PSX joypads, and if it does return special type values.
## Controllers - Vibration/Rumble Control
Rumble (aka "Vibration Function") is basically controlled by two previously
unused bytes of the standard controller Read command.
There are two methods to control the rumble motors, the old method is very
simple (but supports only one motor), the new method envolves a bunch of new
configuration commands (and supports two motors).
```
SCPH-1150 DualAnalog Pad with 1 motor ;-old rumble method
SCPH-1200 DualAnalog Pad with 2 motors, PSX-design ;\new rumble method
SCPH-110 DualAnalog Pad with 2 motors, PSone-design ;/
SCPH-10010 DualAnalog Pad with 2 motors, PS2/Dualshock2 ;-plus analog buttons
Blaze Scorpion Lightgun with rumble ;\unknow how to control rumble
Fishing controllers with rumble ;/
SCPH-1180 Analog Pad without rumble ;\unknow if there're config commands
SCPH-1110 Analog Stick without rumble ;/for analog mode (probably not)
```
#### Old Method, one motor, no config commands (SCPH-1150, SCPH-1200, SCPH-110)
The SCPH-1150 doesn't support any special config commands, instead, rumble is
solely done via the normal joypad read command:
```
Send 01h 42h 00h xx yy (00h 00h 00h 00h)
Reply HiZ id 5Ah buttons ( analog-inputs )
```
The rumble motor is simply controlled by three bits in the xx/yy bytes:
```
xx --> must be 40h..7Fh (ie. bit7=0, bit6=1) ;\switches motor on
yy --> must be 01h,03h,...,FDh,FFh (ie. bit0=1) ;/
```
The motor control is digital on/off (no analog slow/fast), recommended values
would be yyxx=0140h=on, and yyxx=0000h=off.
LED state is don't care (rumble works with led OFF, RED, and GREEN). In absence
of config commands, the LED can be controlled only manually (via Analog
button), the current LED state is implied in the controller "id" byte.
For backwards compatibility, the above old method does also work on SCPH-1200
and SCPH-110 (for controlling the right/small motor), alternately those newer
pads can use the config commands (for gaining access to both motors).
#### New Method, two motors, with config commands (SCPH-1200, SCPH-110)
For using the new rumble method, one must unlock the new rumble mode, for that
purpose Sony has invented a "slightly" overcomplicated protocol with not less
than 16 new commands (the rumble relevant commands are 43h and 4Dh, also,
command 44h may be useful for activating analog inputs by software, and, once
when rumble is unlocked, command 42h is used to control the rumble motors).
Anyways, here's the full command set...
[Controllers - Configuration Commands](controllersandmemorycards.md#controllers-configuration-commands)
And, the rumble-specific config command is described below...
#### Config Mode - Command 4Dh "M" - Get/Set RumbleProtocol
```
Send 01h 4Dh 00h aa bb cc dd ee ff ;<-- set NEW aa..ff values
Reply Hiz F3h 5Ah aa bb cc dd ee ff ;<-- returns OLD aa..ff values
```
Bytes aa,bb,cc,dd,ee,ff control the meaning of the 4th,5th,6th,7th,8th,9th
command byte in the controller read command (Command 42h).
```
00h = Map Right/small Motor (Motor M2) to bit0 of this byte
01h = Map Left/Large Motor (Motor M1) to bit0-7 of this byte
02h..FEh = Unknown (can be mapped, maybe for extra motors/outputs)
FFh = Map nothing to this byte
```
In practice, one would usually send either one of these command/values:
```
Send 01h 4Dh 00h 00h 01h FFh FFh FFh FFh ;enable new method (two motors)
Send 01h 4Dh 00h FFh FFh FFh FFh FFh FFh ;disable motor control
```
Alternately, one could swap the motors by swapping values in aa/bb. Or one
could map the motors anywhere to cc/dd/ee/ff (this will increase the command
length in digital mode, hence changing digital mode ID from 41h to 42h or 43h).
Or, one could map further rumble motors or other outputs to the six bytes (if
any such controller would exist).
In the initial state, aa..ff are all FFh, and the controller does then use the
old rumble control method (with only one motor). However, that old method gets
disabled once when having messed with config commands (unknown if/how one can
re-enable the old method by software).
#### Unknown Dualshock2 Vibration
Dualshock2 does reportedly have "two more levels of vibration", unknown what
that means and if it's used by any PSX or PS2 games... it might refer to the
small motor which usually has only 2 levels (on/off) and might have 4 levels
(fast/med/slow/off) on dualshock2... but, if so, it's unknown how to
control/unlock that feature.
Also, the PSone controller (SCPH-110) appear to have been released shortly
after Dualshock2, unknown if that means that it might have that feature, too.
#### Note
Rumble is a potentially annoying feature, so games that do support rumble
should also include an option to disable it.
## Controllers - Analog Buttons (Dualshock2)
Dualshock2 has three new commands (40h,41h,4Fh) for configuring analog buttons.
Additionally, Command 45h does return a different type byte for Dualshock2.
Dualshock2 is a PS2 controller. However, it can be also used with PSX games
(either by connecting the controller to a PSX console, or by playing a PSX game
on a PS2 console).
The analog button feature is reportedly rarely used by PS2 games (and there
aren't any PSX games known to use it).
#### Config Mode - Command 40h "@" Dualshock2: Get/Set ButtonAttr?
```
Send 01h 40h 00h Idx Val 00h 00h 00h 00h ;<-- Set NEW Val, array[Idx]=Val
Reply HiZ F3h 5Ah 00h 00h Val 00h 00h 00h ;<-- Old Val (or FFh when Idx>0Bh)
```
Allows to change twelve 3bit values (with Idx=00h..0Bh, and Val=00h..03h).
Default is Val=02h. Purpose is unknown, the 12 values might be related to the
12 analog buttons, but there is no noticable difference between Val=0,1,2,3.
Maybe it does have some subtle effects on things like...
```
Digital button sensitivity, or Analog button sensitivity, or
Analog button bit-depth/conversion speed, or something else?
```
#### Config Mode - Command 41h "A" Dualshock2: Get Reply Capabilities
```
Send 01h 41h 00h 00h 00h 00h 00h 00h 00h
Reply HiZ F3h 5Ah FFh FFh 03h 00h 00h 00h
```
This seems to return a constant bitmask indicating which reply bytes can be
enabled/disabled via Command 4Fh (ie. 3FFFFh = 18 bits).
#### Config Mode - Command 4Fh "O" Dualshock2: Set ReplyProtocol
```
Send 01h 41h 00h aa bb cc dd ee ff
Reply HiZ F3h 5Ah 00h 00h 00h 00h 00h 00h
```
This can output some 48bit value (bit0=aa.bit0, bit47=ff.bit7), used to
enable/disable Reply bytes in the controller read command (Command 42h).
```
- HighZ (always transferred) 1st byte
- ID/Mode/Len (always transferred) 2nd byte
- 5Ah (always transferred) 3rd byte
0 LSB of digital buttons (0=No, 1=Yes) 4th byte
1 MSB of digital buttons (0=No, 1=Yes) 5th byte
2 RightJoyX (0=No, 1=Yes) 6th byte
3 RightJoyY (0=No, 1=Yes) 7th byte
4 LeftJoyX (0=No, 1=Yes) 8th byte
5 LeftJoyY (0=No, 1=Yes) 9th byte
6 DPAD Right (0=No, 1=Yes) button 00h 10th byte
7 DPAD Left (0=No, 1=Yes) button 01h 11th byte
8 DPAD Up (0=No, 1=Yes) button 02h 12th byte
9 DPAD Down (0=No, 1=Yes) button 03h 13th byte
10 Button /\ (0=No, 1=Yes) button 04h 14th byte
11 Button () (0=No, 1=Yes) button 05h 15th byte
12 Button >< (0=No, 1=Yes) button 06h 16th byte
13 Button [] (0=No, 1=Yes) button 07h 17th byte
14 Button L1 (0=No, 1=Yes) button 08h 18th byte
15 Button R1 (0=No, 1=Yes) button 09h 19th byte
16 Button L2 (0=No, 1=Yes) button 0Ah 20th byte
17 Button R2 (0=No, 1=Yes) button 0Bh 21st byte
18-39 Must be 0 (otherwise command is ignored)
40-47 Unknown (no effect?)
```
Usually, one would use one of the following command/values:
```
Send 01h 41h 00h 03h 00h 00h 00h 00h 00h Digital buttons
Send 01h 41h 00h 3Fh 00h 00h 00h 00h 00h Digital buttons + analog sticks
Send 01h 41h 00h FFh FFh 03h 00h 00h 00h Enable all 18 input bytes
```
The transfer order is 1st..21st byte as shown above (unless some bits are
cleared, eg. if bit0-5=0 and bit6=1 then DPAD Right would appear as 4th byte
instead of 10th byte). The command length increases/decreases depening on the
number of enabled bits. The transfer length is always 3+N\*2 bytes (including a
00h padding byte when the number of enabled bits is odd). The analog mode ID
byte changes depending on number of halfwords.
CAUTION: Sending Command 44h does RESET the Command 4Fh setting (either to
DigitalMode=000003h or AnalogMode=00003Fh; same happens when toggling mode via
Analog button).
Note: Some Dualshock2 Config Mode commands do occassionally send 00h, 5Ah, or
FFh as last (9th) reply byte (unknown if that is some error/status thing, or
garbage).
#### Analog Button Sensitivity
The pressure sensors are rather imprecise and results may vary on various
factors, including the pressure angle.
```
00h Button released
01h..2Fh Normal (soft) pressure
30h..FEh Medium pressure
FFh Hard pressure
```
Software can safely distinguish between soft and hard pressure.
Medium pressure is less predictably: The values do not increase linearily, it's
difficult to apply a specific amount of medium pressure (such like 80h..9Fh),
increasing pressure may sometimes jump from 24h to FFh, completely skipping the
medium range.
Relying on the medium range might work for accelleration buttons (where the
user could still adjust the pressure when the accelleration is too high or too
low); but it would be very bad practice to assign irreversible actions to
medium pressure (such like Soft=Load, Medium=Save, Hard=Quit).
#### Digital Button Sensitivity
Digital inputs are converting the analog inputs as so:
```
Analog=00h --> not pressed
Analog=01h..FFh --> pressed (no matter if soft, medium, or hard pressure)
```
Digital inputs are working even when also having analog input enabled for the
same button.
#### See also
[https://gist.github.com/scanlime/5042071] - tech (=mentions unknown details)
[https://store.curiousinventor.com/guides/PS2/] - guide (=omits unknown stuff)
## Controllers - Dance Mats
PSX Dance Mats are essentially normal joypads with uncommonly arranged buttons,
the huge mats are meant to be put on the floor, so the user could step on them.
#### Dance Mat vs Joypad Compatibility
There are some differences to normal joypads: First of, the L1/L2/R1/R2
shoulder buttons are missing in most variants. And, the mats are allowing to
push Left+Right and Up+Down at once, combinations that aren't mechanically
possible on normal joypads (some dancing games do actually require those
combinations, whilst some joypad games may get confused on them).
#### Dance Mat Unknown Things
Unknown if the mat was sold in japan, and if so, with which SLPH/SCPH number.
Unknown if the mat's middle field is also having a button assigned.
Unknown if the mat is having a special controller ID, or if there are other
ways to detect mats (the mats are said to be compatible with skateboard games,
so the mats are probably identifying themselves as normal digital joypad;
assuming that those skateboard games haven't been specifically designed for
mats).
#### Dance Mat Games
```
D.D.R. Dance Dance Revolution 2nd Remix
(and maybe whatever further games)
```
The mats can be reportedly also used with whatever skateboard games.
#### Dance Mat Variants
There is the US version (DDR Dance Pad, SLUH-00071), and a slightly different
European version (Official Dance Mat, SLEH-00023: shiny latex style with
perverted colors, and Start/Select arranged differently). The japanese version
(RU017) resembles the US version, but without Triangle/Square symbols drawn in
lower left/right edges.
And there is a handheld version (with additional L1/L2/R2/R1 buttons; maybe
unlicensed; produced as MINI DDR, and also as Venom Mini Dance Pad).
```
US Version (white/black/red/blue) Handheld Version (blue/gray)
__________.---------.___________ _____/ MINI \_____
| \ / | | D.D.R. |
| SELECT '-------' START | |L1 L2 SEL STA R2 R1|
|------------.------.------------| | ___ ___ ___ |
| .''''. / \ .''''. | || X | | ^ | | O ||
| | \/ | | /\ | | .''. | | ||___| |___| |___||
| | /\ | | /..\ | | '..' | | | ___ .---. ___ |
| '....' '. || .' '....' | || < | |Stay | | > ||
| .-------. .''''''''. .-------. | ||___| |Cool!| |___||
|/ /| .' '. |\ \| | ___ '___' ___ |
| / |-- | | --| \ | || []| | v | | /\||
| \ |-- | Stay Cool! | --| / | ||___| |___| |___||
|\ \| '. .' |/ /| |___________________|
| '-------' '........' '-------' |
| .''''. .' || '. .''''. | Gothic Dance Mat (black/silver)
| | /\ | | \''/ | | |''| | | _.----------._
| | /__\ | | \/ | | |..| | | | \ SEL STA / | This one
| '....' \ / '....' | | '--------' | wasn't ever
'------------'------'------------' | .----------. | produced,
| | .''''. | | as cool as
European Version (pink/blue/yellow) | | | /\ | | | it could have
__________.---------.___________ | | | /..\ | | | been, the lame
| \ SEL STA / | | | '.||.' | | marketing
| '-------' | | +----------+ | people didn't
|----------.----------.----------| | | .''''. | | even think
| .''''. | .''''. | .''''. | | | | /\ | | | about it.
| | \/ | | | /\ | | | .''. | | | | | /..\ | | |
| | /\ | | | /..\ | | | '..' | | | | '.||.' | |
| '....' | '.||.' | '....' | | +----------+ |
|----------+-.. ..-+----------| | | .'||'. | |
| .'/|'. / '''' \ .'|\'. | | | | \''/ | | |
| | / |--|/ \|--| \ | | | | | \/ | | |
| | \ |--|\ /|--| / | | | | '....' | |
| '.\|.' \ .... / '.|/.' | | +----------+ |
|----------+-'' ''-+----------| | | .'||'. | |
| .''''. | .'||'. | .''''. | | | | \''/ | | |
| | /\ | | | \''/ | | | |''| | | | | | \/ | | |
| | /__\ | | | \/ | | | |..| | | | | '....' | |
| '....' | '....' | '....' | | '----------' '
'----------|----------|----------' '--------------'
```
#### Stay Cool?
Despite of the "Stay Cool!" slogan, the mat wasn't very cool - not at all! It
offered only two steps back-and-forth, and also allowed to do extremly uncool
side-steps. Not to mention that it would melt when dropping a burning cigarette
on it. Stay Away!
## Controllers - Pop'n Controllers
Controllers used for Konami's Pop'n Music series. At least a few different
versions of the controller (Pop'n Controller, Pop'n Controller 2, larger
arcade-size version, possibly others and in different color variations) have
been released for the PS1 and PS2. Unknown if the controllers released in the
PS2 era have any additional commands not present in the original Pop'n
Controller, but they are supposedly fully compatible with PS1 Pop'n Music games.
Pop'n Controllers report as digital controllers (ID byte 41h), but the left,
right, and down d-pad controls are not connected to any physical buttons and are
always reported as pressed (in the first transferred button byte, bits 5-7 are
always 0). Pop'n Music games check these bits to determine if a Pop'n Controller
is connected and will change the in-game controls accordingly if so.
## Controllers - Taiko Controllers (Tatacon)
Drum controllers made by Namco and used by the Taiko no Tatsujin series on the
PS2 (but compatible with the PS1, even though no PS1 Taiko game was ever made).
These controllers behave like standard digital pads (ID 41h) and contain four
hit sensors mapped to the following buttons:
| Sensor | Button | Bit |
| :----------------- | :--------- | --: |
| Left ka (rim) | L1 | 10 |
| Right ka (rim) | R1 | 11 |
| Left don (center) | D-pad left | 7 |
| Right don (center) | Circle | 13 |
Dedicated start and select buttons are also present. Unlike Pop'n Controllers,
no additional buttons are hardcoded to be always pressed.
## Controllers - Densha de Go! / Jet de Go! Controllers
Controllers used for Taito's Densha de Go! and Jet de Go! series. Unknown what
method is being used by Densha de Go! and Jet de Go! games for detecting these
controllers.
- The workings of Densha de Go! PSX controllers have been extensively researched
in the [ddgo-controller-docs](https://github.com/MarcRiera/ddgo-controller-docs)
repo.
- The Jet de Go! PSX controller comes in gray and black color. It seems to work
the same as an analog controller and supports vibration. The steering wheel is
mapped to the left stick (wheel rotation as horizontal, wheel raise/lower as
vertical axis). The thrust throttle seems mapped to the right stick Y-axis
full range (so half throttle matches vertically centered right stick).
## Controllers - Fishing Controllers
The fishing rods are (next to lightguns) some of the more openly martial
playstation controllers - using the credo that "as long as you aren't using
dynamite: it's okay to kill them cause they don't have any feelings."
#### PSX Fishing Controller Games
```
Action Bass (Syscom Entertainment) (1999) (SLPH-00100)
Bass Landing (ASCII/agetec) (1999) (SLPH-00100, SLUH-00063)
Bass Rise, Fishing Freaks (Bandai) (1999) (BANC-0001)
Bass Rise Plus, Fishing Freaks (Bandai) (2000) (BANC-0001, SLPH-00100)
Breath of Fire IV (Capcom) (SLUH-00063)
Championship Bass (EA Sports) (2000) (SLUH-00063)
Fish On! Bass (Pony Canyon) (1999) (BANC-0001, SLPH-00100)
Fisherman's Bait 2/Exiting Bass2 - Big Ol'Bass(Konami)(SLPH-00100,SLUH-00063)
Fishing Club: (series with 3 titles) (have "headset-logo" on back?)
Lake Masters II (1999) (Dazz/Nexus) (SLPH-00100)
Lake Masters Pro (1999) (Dazz/Nexus) (BANC-0001, SLPH-00100)
Let's Go Bassfishing!: Bass Tsuri ni Ikou! (Banpresto) (1999) (SLPH-00100)
Matsukata Hiroki no World Fishing (BPS The Choice) (1999) (SLPH-00100)
Murakoshi Seikai-Bakuchou Nihon Rettou (Victor) (SLPH-00100)
Murakoshi Masami-Bakuchou Nippon Rettou:TsuriConEdition (1999) (SLPH-00100)
Pakuchikou Seabass Fishing (JP, 03/25/99) (Victor) (SLPH-00100)
Perfect Fishing: Bass Fishing (2000) (Seta) (yellow/green logo)
Perfect Fishing: Rock Fishing (2000) (Seta) (yellow/green logo)
Oyaji no Jikan: Nechan, Tsuri Iku De! (2000) (Visit) (BANC-0001, SLPH-00100)
Reel Fishing II / Fish Eyes II (2000)(Natsume/Victor)(SLPH-00100, SLUH-00063)
Simple 1500 Series Vol. 29: The Tsuri (2000) (yellow/green logo)
Suizokukan Project: Fish Hunter e no Michi (1999)(Teichiku)(SLPH-00100)
Super Bass Fishing (1999) (King) (BANC-0001, SLPH-00100, yellow/green logo)
Super Black Bass X2 (2000) (Starfish) (SLPH-00100)
Tsuwadou Keiryuu Mizuumihen (Best Edition)(2000) (ASCII PS1+PS2 controllers?)
Tsuwadou Seabass Fishing (PlayStation the Best) (1999) (Oz Club) (SLPH-00100)
Uki Uki Tsuri Tengoku Nagami/Uokami Densetsu Oe (2000) (Teichiku)(SLPH-00100)
Umi no Nushi Tsuri-Takarajima ni Mukatte (1999)(Victor)(BANC-0001,SLPH-00100)
Winning Lure (Hori) (2000) (for Hori HPS-97 controller) AKA HPS-98 ?
```
#### Logos on CD Covers
US Fishing games should have a "SLUH-00063" logo. European Fishing games don't
have any fishing logos; apparently fishing controllers haven't been officially
released/supported in Europe.
Japanese Fishing games can have a bunch of logos: Usually BANC-0001 or
SLPH-00100 (or both).
Moreover, some japanese games have a yellow/green fishing logo with japanese
text (found on Perfect Fishing: Bass Fishing, Perfect Fishing: Rock Fishing,
Simple 1500 Series Vol. 29: The Tsuri, Super Bass Fishing) (unknown if that
logo refer to other special hardware, or if it means the "normal" BANC-0001 or
SLPH-00100 controllers.
And Moreover, some japanese games have some sort of "headset" logos with
japanese text, these seem to have same meaning as SLPH-00100; as indicated by
photos on CD cover of Tsuwadou Keiryuu Mizuumihen (Best Edition) (2000); that
CD cover also has a "headset 2" logo, which seems to mean a newer PS2 variant
of the SLPH-00100.
#### PSX Fishing Controllers
```
ASCII Tsuricon SLPH-00100 (also marked with a second serial, ASC-0514TR, on the packaging box)
ASCII Tsuricon 2 ASC-0521TR2 (has a mode switch with 3 settings. "1" is original Tsuricon mode, "2" is Tsuricon 2 mode. Unknown what the unnumbered mode does)
Sammy Tsuricon 2 SMY-0506FS (looks to be identical to the ASCII Tsuricon 2)
Sammy Tsuricon 2+ SMY-0511FS (unknown what the differences between this and the Tsuricon 2 are)
Agetec Bass Landing Fishing Controller SLUH-00063 (US version of ASCII's SLPH-00100 controller)
Bandai Fishing Controller BANC-0001 (dark gray/blue) (has less buttons than ASCII/agetec)
Interact Fission (light gray/blue)(similar to ASCII/agetec, 2 extra buttons?)
Naki (transparent blue) (looks like a clone of the ASCII/agetec controllers)
Hori HPS-97/HPS-98 (black/gray) (a fishing rod attached to a plastic fish)
```
Of these, the ASCII/agetec controllers seem to be most popular (and most
commonly supported). The Bandai contoller is also supported by a couple of
games (though the Bandai controller itself seems to be quite rare). The
Interact/Naki controllers are probably just clones of the ASCII/agetec ones.
The Hori controller is quite rare (and with its string and plastic fish, it's
apparently working completely different than the other fishing controllers).
#### Tech Info (all unknown)
Unknown how to detect fishing controllers.
Unknown how to read buttons, joystick, crank, motion sensors.
Unknown how to control rumble/vibration.
Unknown if/how Bandai differs from ASCII/agetec (aside from less buttons).
Unknown how the Hori thing works.
#### ASCII SLPH-00100 / agetec SLUH-00063 (silver)
```
___
__|___|__
_| |_ _ __
| | | | | |=|__| <--- crank handle
| | SEL STA | | | |
| | | |---| \ ASCII SLPH-00100
| \ / |---| / agetec SLUH-00063
/ L1 R1 \ | | __
| L2 .---. R2 | |_|=|__|
| | joy | |
| |stick| | <------- analog thumb controlled joystick
| /\ '---' >< |
| [] () |
\ ASCII /
'.___________.' \___ 10 buttons (SEL,STA,L1,L2,R1,R2,/\,[],(),><)
\ _____ /
| | Note: many (not all) agetec controllers
| | have the >< and () buttons exchanged
| |
| | Aside from the crank/buttons/joystick,
| | the controller reportedly contains:
| | some sort of motion sensors?
| | some kind of rumble/vibration?
| |
'.___.'
'--...___ cable
```
#### Bandai BANC-0001 (dark gray/blue)
```
___
__|___|__
_| | _ __
| .---. |\ | |=|__| <--- crank handle
|| joy | | | | |
||stick| | |-#-| \
| '---' | |-#-| /
/ \ | \ | | __
| | ... | | |_|=|__|
| | : : | ()|
| |O :___: O| | <--- two buttons: () and ><
| |- |___| -| ><| and some slide switch with I and 0 positions?
| | | |
\ | BANDAI | / unknown if the joystick is digital or analog
'._\_______/_.'
| | unknown if there are motion sensors and/or rumble
'. .'
| |
| |
| |
| |
| |
| |
| |
'.___.'
'--...___ cable
```
#### Hori HPS-97 / HPS-98 (black/gray)
```
....----------------O
.'' \ HPS-97 (controller bundled with game)
_:_ \ \ HPS-98 (controller only, for HPS-96 game)
__|___|__ \ short \
_| |_ elastic \
| | pole \
| | \ <--- string (from pole to
| SW? | _ __ \ reel inside of fish)
/ \ | |=|__| \
| .---. | | | \
| ( ) | joy | |--| \ \ ___
| |stick| |--| / \ / /
| ( ) '---' | | | __ \ ...---''''''--. /|
| | |_|=|__| <--- crank \ ' '/ |
\ ( ) ( ) / handle '..| |.
'.___________.' |__________________| :
\ / \ plastic fish :
| | joystick, (presumable some heavy :
| | four buttons, stationary thing that :
| | and a switch? rests on floor) :
| | (presumably with :
| | motor-driven reel?) :
| | :
| | the two cables do probably connect :
| | to both of the PSX controller slots :
'.___.' cable 2 ---'
'--...___ cable 1
```
## Controllers - PS2 DVD Remote
An accessory released by Sony for the PS2, consisting of an infrared remote
control and a receiver dongle that plugs into a controller port. The remote
features all standard controller buttons (including L3/R3) as well as additional
controls for the PS2's DVD player.
The receiver behaves very differently from any other known device: it does not
respond to any command until a button on the remote is pressed. When a valid IR
code is received it will start accepting commands for about 2000-2500 ms, then
become unresponsive again. It will initially behave as two different devices,
one with address 01h acting like a standard digital controller and the other
with address 61h exposing IR codes as received from the remote.
#### Command 04h - IR poll (and disable controller mode)
```
Send Reply Comment
61h N/A IR receiver address
04h 12h Receive ID bits 0-7, send command byte
00h 5Ah Receive ID bits 8-15
00h len Receive code length (20 for DVD remote, 0 if no button is pressed)
00h code Receive code bits 16-23
00h code Receive code bits 8-15
00h code Receive code bits 0-7
```
Returns the IR code of the currently pressed button and its length in bits, or
000000h if no button is pressed (and the receiver is still responding to
commands). Received codes seem to "stick around" for some time even after the
button has been released; when a button is held down the remote resends its code
every 45 ms, so the receiver presumably keeps returning the same code for about
50 ms as a debouncing measure.
The code is returned LSB first and MSB aligned, i.e. it should be right-shifted
by (24 - len) bits to obtain the "raw" code as sent by the remote. For
instance:
```
Code sent by remote (first bit after preamble to last bit):
0000 0000 1011 1001 0010
Code sent by remote (MSB to LSB):
0100 1001 1101 0000 0000
Data returned by receiver:
code[16:23] = 01001001
code[8:15] = 11010000
code[0:7] = 0000xxxx ; xxxx = (24 - len) bits of padding (all zeroes)
Reassembled MSB-aligned code (MSB to LSB):
0100 1001 1101 0000 0000 xxxx
```
The receiver will stop acting like a digital controller and replying to address
01h after this command is sent for the first time. Command 06h can be used to
restore controller functionality (see below), unknown if there is also a
watchdog to automatically restore controller mode if no IR poll commands are
issued.
#### Command 06h, 03h - Re-enable controller mode
```
Send Reply Comment
61h N/A IR receiver address
06h 12h Receive ID bits 0-7, send command byte 1
03h 5Ah Receive ID bits 8-15, send command byte 2
00h ? Receive unknown data, send padding
00h ?
00h ?
00h ?
```
#### Command 0Fh - Unknown
This command exists (the receiver will keep pulling /ACK low) but its purpose is
currently unknown. It could possibly be an alternate poll command that does not
disable controller mode.
#### IR code format
The DVD remote always emits 20-bit IR codes. The receiver does return the length
of the code, but it's unclear if it can receive codes with lengths other than 20
bits.
All non-controller buttons on the remote are arranged in an 8x16 button matrix,
shown below (transposed for readability):
| Col | Row 0 | Row 1 | Row 2 | Row 3 | Row 4 | Row 5 | Row 6 | Row 7 |
| --: | :----- | :------- | :----- | :------- | :---- | :------ | :------- | :---- |
| 0 | 1 | | | Previous | | | Slow << | |
| 1 | 2 | | | Next | | | Slow >> | |
| 2 | 3 | | | Play | | | | |
| 3 | 4 | | | Scan << | | | Subtitle | |
| 4 | 5 | | | Scan >> | | Display | Audio | |
| 5 | 6 | | | Shuffle | | | Angle | |
| 6 | 7 | | | | | | | |
| 7 | 8 | | | | | | | |
| 8 | 9 | | Time | Stop | | | | |
| 9 | 0 | | | Pause | | | | Up |
| 10 | | Title | A<->B | | | | | Down |
| 11 | Enter | DVD Menu | | | | | | Left |
| 12 | | | Repeat | | | | | Right |
| 13 | | | | | | | | |
| 14 | Return | | | | | | | |
| 15 | Clear | Program | | | | | | |
Each button in the matrix is assigned a code as follows:
```
code = 49D00h OR (row << 4) OR (column) ; sent LSB first
; where row = 0..7, column = 0..15
```
Controller buttons are handled separately and assigned different codes:
```
code = DAD50h OR (id) ; sent LSB first
; where id = 0..15, index of the bit that would normally represent the button
; in the bitfield returned by a controller poll command
; (i.e. 0=Select, 1=L3, 2=R3, 3=Start, 4=Up, 5=Right, etc.)
```
Arrow buttons are a special case, as they are controller buttons but also have
matrix codes assigned. For those the remote alternates between both codes (see
below).
#### Low-level IR protocol
The remote emits IR pulses modulated with a 38 kHz carrier, as most remotes do.
Codes are sent as a 2460 µs "preamble" pulse followed by 24 data pulses, each of
which can be either 1250 µs (if the respective bit is 1) or 650 µs (if the
respective bit is 0) long. After each pulse including the preamble, the remote
waits 530 µs before sending the next pulse.
Every code is always sent at least 3 times in a row (more if the button is held
down but not necessarily a multiple of 3), approximately every 45 ms. For arrow
buttons the matrix code is sent 3 times first, then the respective controller
button code is sent 3 times, then the sequence repeats until the button is
released (with the total number of codes sent always being a multiple of 6 in
this case).
#### Built-in IR receivers
In later PS2 models, Sony integrated the IR receiver into the console. Assuming
the built-in receivers used the same circuitry as the external dongle, this may
explain its weird behavior: the receiver was likely designed to be wired in
parallel with one of the controller ports, and to be unresponsive until the
remote is actually in use to avoid interfering with another controller plugged
into the same port. Whether or not the integrated receivers are connected this
way has not been confirmed.
There is a second revision of the DVD remote with power and eject buttons, meant
to be used with the PS2 models that have a built-in receiver. Weirdly enough,
however, it seems to be incompatible with the older receiver dongle.
## Controllers - I-Mode Adaptor (Mobile Internet)
The I-Mode Adaptor cable (SCPH-10180) allows to connect an I-mode compatible
mobile phone to the playstation's controller port; granting a mobile internet
connection to japanese games.
#### PSX Games for I-Mode Adaptor (Japan only)
```
Doko Demo Issyo (PlayStation the Best release only) (Sony) 2000
Doko Demo Issyo Deluxe Pack (Bomber eXpress/Sony) 2001
Hamster Club-I (SLPS-03266) (Jorudan) 2002
iMode mo Issyo: Dokodemo Issho Tsuika Disc (Bomber/Sony) 2001
Keitai Eddy (iPC) 2000 (but, phone connects to SIO port on REAR side of PSX?)
Komocchi (Victor) 2001
Mobile Tomodachi (Hamster) 2002
Motto Trump Shiyouyo! i-Mode de Grand Prix (Pure Sound) 2002
One Piece Mansion (Capcom) 2001 (japanese version only)
```
The supported games should have a I-Mode adaptor logo on the CD cover (the logo
depicts two plugs: the PSX controller plug, and the smaller I-Mode plug).
Note: "Dragon Quest Monsters 1 & 2" was announced/rumoured to support
I-mode (however, its CD cover doesn't show any I-Mode adapter logo).
#### Tech Details (all unknown)
Unknown how to detect the thing, and how to do the actual data transfers.
The cable does contain a 64pin chip, an oscillator, and some smaller components
(inside of the PSX controller port connector).
#### Hardware Variant
Keitai Eddy seems to have the phone connect to the SIO port (on rear side of
the PSX, at least it's depicted like so on the CD cover). This is apparently
something different than the SCPH-10180 controller-port cable. Unknown what it
is exactly - probably some mobile internet connection too, maybe also using
I-mode, or maybe some other protocol.
## Controllers - Keyboards
There isn't any official retail keyboard for PSX, however, there is a shitload
of obscure ways to connect keyboards...
#### Sony SCPH-2000 PS/2 Keyboard/Mouse Adaptor (prototype/with cable) (undated)
#### Sony SCPH-2000 PS/2 Keyboard/Mouse Adaptor (without cable) (undated)
A PS/2 to PSX controller port adaptor. Maybe for educational Lightspan titles?
There are two hardware variants of the adaptor:
```
Adaptor with short cable to PSX-controller port (and prototype marking)
Adaptor without cable, directly plugged into controller port (final version?)
```
Unknown ^how to access those adaptors, and unknown if the two versions differ
at software side. There seem to be not much more than a handful of people
owning that adaptors, and none of them seems to know how to use it, or even how
to test if it's working with existing software...
- Keyboard reading might work with the Online Connection CD.
- Mouse reading might work with normal mouse compatible PSX games.
#### Lightspan Online Connection CD Keyboard (1997)
The Online Connection CD is a web browser from the educational Lightspan
series, the CD is extremly rare (there's only one known copy of the disc).
The thing requires a dial-up modem connected to the serial port (maybe simply
using the same RS232 adaptor as used by Yaroze). User input can be done via
joypad, or optionally, via some external keyboard (or keyboard adaptor)
hardware:
```
Send 01h 42h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 06h
Reply HiZ 96h 5Ah num dat dat dat dat dat dat dat dat dat dat dat
```
The num byte indicates number of following scancodes (can be num=FFh, maybe
when no keyboard connected?, or num=00h..0Bh for max 11 bytes, unless the last
some bytes should have other meaning, like status/mouse data or so).
The keyboard scancodes are in "PS/2 Keyboard Scan Code Set 2" format.
The binary contains some (unused) code for sending data to the keyboard by
changing the 4th-11th byte, and resuming normal operation by setting 4th and
11th byte back to zero:
```
Send .. .. .. 01h xxh FFh FFh FFh FFh FFh 00h .. .. .. ..
Send .. .. .. 00h .. .. .. .. .. .. 00h .. .. .. ..
```
Maybe 4th and 11th byte are number of following bytes, with xxh being some
command, and FFh's just being bogus padding; the xxh looks more like an
incrementing value though.
Despite of the mouse-based GUI, the browser software doesn't seem to support
mouse hardware (neither via PS/2 mice, nor PSX mice). Instead, the mouse arrow
can be merely moved via joypad's DPAD, or (in a very clumsy fashion) via
keyboard cursor keys.
Note: The browser uses SysEnqIntRP to install some weird IRQ handler that
forcefully aborts all controller (or memory card) transfers upon Vblank.
Unknown if that's somehow required to bypass bugs in the keyboard hardware. The
feature is kinda dangerous for memory card access (especially with fast memcard
access in nocash kernel, which allows to transfer more than one sector per
frame).
#### Spectrum Emulator Keyboard Adaptor (v1/serial port) (undated)
Made by Anthony Ball. [http://www.sinistersoft.com/psxkeyboard]
```
[1F801058h]=00CEh ;SIO_MODE 8bit, no parity, 2 stop bits (8N2)
[1F80105Ah]=771Ch ;SIO_CTRL rx enable (plus whatever nonsense bits)
[1F80105Eh]=006Ch ;SIO_BAUD 19200 bps
RX Keyboard Scancode (same ASCII-style as in later versions?)
CTS Caps-Lock state
DSR Num-Lock state
```
#### Spectrum Emulator Keyboard & Sega Sticks Adaptor (v2/controller port) (2000)
Made by Anthony Ball. [http://www.sinistersoft.com/psxkeyboard]
This adaptor can send pad/stick data,
```
Send 01h 42h 00h 0h 0h
Reply HiZ 41h 5Ah PadA
```
as well as pad/sticks+keyboard data,
```
Send 01h 42h 00h 0h 0h 0h 0h 0h 0h 0h 0h 00h 00h 0h 0h 0h 0h 0h 0h
Reply HiZ E8h 5Ah PadA PadB PadC PadD Ver Lock Buffer(0..5)
```
The above mode(s) can be switched via ACPI Power/Sleep/Wake keys (on keyboards
that do have such keys).
```
Version=1 ; version number
0 SCROLL ; scroll lock on
1 NUM ; num lock on
2 CAPS ; caps lock on
3 DONETEST ; keyboard has just done a selftest
4 EMUA ; emulation mode a
5 EMUB ; emulation mode b
```
For whatever reason, the PS/2 scancodes are translated to ASCII-style scancode
values (with bit7=KeyUp flag):
```
01 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 69 1F
60 21 22 68 24 25 5E 26 2A 28 29 5F 3D 2D 0B 0E 0F 67 2F 1E 2D
27 51 57 45 52 54 59 55 49 4F 50 5B 5D 0D 10 61 62 37 38 39
3B 41 53 44 46 47 48 4A 4B 4C 3A 40 23 34 35 36 2B
02 5C 5A 58 43 56 42 4E 4D 3C 3E 3F 03 63 31 32 33
04 05 06 20 07 08 09 0A 65 64 66 30 2E 6A
```
BUG: The thing conflicts with memory cards: It responds to ANY byte with value
01h (it should do so only if the FIRST byte is 01h).
#### Homebrew PS/2 Keyboard/Mouse Adaptor (undated/from PSone era)
```
Send 01h 42h 00h 00h 00h 00h 00h
Reply HiZ 12h 5Ah key flg dx dy
```
flg:
```
bit0-1 = Always 11b (unlike Sony mouse)
bit2 = Left Mouse Button (0=Pressed, 1=Released)
bit3 = Right Mouse Button (0=Pressed, 1=Released)
bit4-5 = Always 11b (like Sony mouse)
bit6 = Key Release (aka F0h prefix) (0=Yes)
bit7 = Key Extended (aka E0h prefix) (0=Yes)
```
Made by Simon Armstrong. This thing emulates a standard PSX Mouse (and should
thus work with most or all mouse compatible games). Additionally, it's sending
keyboard flags/scancodes via unused mouse button bits.
#### Runix hardware add-on USB Keyboard/Mouse Adaptor (2001) (PIO extension port)
Runix is a homebrew linux kernel for PSX, it can be considered being the holy
grail of the open source scene because nobody has successfully compiled it in
the past 16 years.
- USB host controller SL811H driver with keyboard and mouse support;
- RTC support.
file: drivers/usb/sl811h.c
#### TTY Console
The PSX kernel allows to output "printf" debug messages via stdout. In the
opposite direction, it's supporting to receive ASCII user input via
"std\_in\_gets" (there isn't any software actually using that feature though,
except maybe debug consoles like DTL-H2000).
## Controllers - Additional Inputs
#### Reset Button
PSX only (not PSone). Reboots the PSX via /RESET signal. Probably including for
forcefully getting through the WHOLE BIOS Intro, making it rather
useless/annoying? No idea if it clears ALL memory during reboot?
#### CDROM Shell Open
Status bit of the CDROM controller. Can be used to sense if the shell is opened
(and also memorizes if the shell was opened since last check; allowing to sense
possible disk changes).
#### PocketStation
Memory Card with built-in LCD screen and Buttons (which can be used as
miniature handheld console). However, when it is connected to the PSX, the
buttons are vanishing in the cartridge slot, so the buttons cannot be used as
additional inputs for PSX games.
#### Serial Port PSX only (not PSone)
With an external adaptor (voltage conversion), the serial port can be used
(among others) to connect a RS232 Serial Mouse. Although, most or all
commercial games with mouse input are probably (?) supporting only Sony's Mouse
(on the controller port) (rather than standard RS232 devices on the serial
port).
#### TTY Debug Terminal
If present, the external DUART can be used for external keyboard input, at the
BIOS side, this is supported as "std\_in".
## Controllers - Misc
#### Standard Controllers
```
SCPH-1010 digital joypad (with short cable)
SCPH-1080 digital joypad (with longer cable)
SCPH-1030 mouse (with short cable)
SCPH-1090 mouse (with longer cable)
SCPH-1092 mouse (european?)
SCPH-1110 analog joystick
SCPH-1150 analog joypad (with one vibration motor, with red/green led)
SCPH-1180 analog joypad (without vibration motors, with red/green led)
SCPH-1200 analog joypad (with two vibration motors) (dualshock)
SCPH-110 analog joypad (with two vibration motors) (dualshock for psone)
SCPH-10010 dualshock2 (analog buttons, except L3/R3/Start/Select) (for ps2)
SCPH-1070 multitap
```
#### Special Controllers
```
SCPH-4010 VPick (guitar-pick controller) (for Quest for Fame, Stolen Song)
```
SLPH-0001 (nejicon)
BANDAI "BANC-0002" - 4 Buttons (Triangle, Circle, Cross, Square) (nothing more)
#### Joystick
```
__________ __________
| | | ^ | ^
| L1 R1 | | X <+> O | <+> = Digital Stick
\ ___| <--- L2 [] ---> |___ v / v
| | <--- R2 /\ ---> | |
___| |___________________________| |___ Not sure if all buttons
| | | SEL STA =?= | | | are shown at their
| | | | | | correct locations?
| | |_ [] /\ _| | | (drawing is based on
| _| / L1 R1 \ |_ | below riddle/lyrics)
| \_____/ X O \_____/ |
| /___\ L2 R2 /___\ |
| |
| |
\___________________________________________/
```
```
The thumb buttons on the left act as L1 and R1,
the trigger is L2, the pinky button is R2
The thumb buttons on the right act as X and O,
the trigger is Square and the pinky button is Triangle.
I find this odd as the triggers should've been L1 and R1,
the pinkies L2 and R2.
The buttons are redundantly placed on the base as large buttons like what
you'd see on a fight/arcade stick. Also with Start and Select.
There is also a physical analog mode switch,
not a button like on dual shock.
```
#### MX4SIO
The MX4SIO is a homebrew microSD card adapter for the PS2 that plugs into a
memory card slot, taking advantage of the fact that SD cards support an SPI mode
which is more or less compatible with SIO0. The adapter is completely passive
and has the card wired up as follows:
| uSD pin | Name | Wired to MC pin |
| ------: | :----------- | :-------------- |
| 1 | `D2`/`NC` | - |
| 2 | `D3`/`/CS` | `/CS` |
| 3 | `CMD`/`MOSI` | `CMD`/`MOSI` |
| 4 | `VCC` | `+3.5V` |
| 5 | `SCK` | `SCK` |
| 6 | `GND` | `GND`, `/ACK` |
| 7 | `D0`/`MISO` | `DAT`/`MISO` |
| 8 | `D1`/`NC` | - |
Unfortunately, this design has a fatal flaw that makes it unusable as-is on the
PS1: /ACK is permanently shorted to ground, taking down the entire controller
bus. However, it should be possible to use the MX4SIO on a PS1 with custom
driver code once the MX4SIO's /ACK pin is masked out with some tape, or if no
other controllers or memory cards are plugged in.
Note that, as SD cards do not employ the addressing scheme used by standard
controllers and memory cards, the MX4SIO should get its own dedicated /CSn pin
and not share the port with a controller (i.e. if the MX4SIO is plugged in slot
2, then controller port 2 shall be left unused).