Source: https://problemkaputt.de/psx-spx.htm Section: Controllersandmemorycards
Controllers and Memory Cards Controllers/Memory Cards
Controller and Memory Card I/O Ports
Controller and Memory Card Misc
Controller and Memory Card Signals
Controller and Memory Card Multitap Adaptor
Controllers
Controllers - Communication Sequence
Controllers - Standard Digital/Analog Controllers
Controllers - Mouse
Controllers - Racing Controllers
Controllers - Lightguns
Controllers - Configuration Commands
Controllers - Vibration/Rumble Control
Controllers - Analog Buttons (Dualshock2)
Controllers - Fishing Controllers
Controllers - I-Mode Adaptor (Mobile Internet)
Controllers - Keyboards
Controllers - Additional Inputs
Controllers - Misc
Memory Cards
Memory Card Read/Write Commands
Memory Card Data Format
Memory Card Notes
Pocketstation (Memory Card with built-in LCD screen and buttons)
Pinouts
Pinouts - Controller Ports and Memory-Card Ports
BIOS Functions
Controllers can be probably accessed via InitPad and StartPad functions,
BIOS Joypad Functions
Memory cards can be accessed by the filesystem (with device names "bu00:" (slot1) and "bu10:" (slot2) or so). Before using that device names, it seems to be required to call InitCard, StartCard, and _bu_init (?).
Connectors
The PlayStation has four connectors (two controllers, two memory cards),
Memory Card 1 Memory Card 2
Controller 1 Controller 2
The controller ports have 9 pins, the memory cards only 8 pins. However, there are only 10 different pins in total.
JOYDAT,JOYCMD,JOYCLK Data in/out/clock
+7.5V,+3.5V,GND Supply
/JOY1,/JOY2 Selects controller/memorycard 1, or controller/memorycard 2
/ACK Indicates that the device is ready to send more data (IRQ7)
/IRQ10 Lightgun (controllers only, not memory card) (IRQ10)
Most of these pins are shared for all 4 connectors (eg. a CLK signal meant to be sent to one device will also arrive at the other 3 devices).
The /JOYn signals are selecting BOTH the corresponding controller, and the corresponding memory card (whether it is a controller access or memory card access depends on the first byte transferred via the CMD line; this byte should be 01h=Controller, or 81h=Memory Card; or, a special case would be 21h=Yaroze Access Card).
Data In/Out
The data is transferred in units of bytes, via separate input and output lines. So, when sending byte, the hardware does simultaneously receive a response byte.
One exception is the first command byte (which selects either the controller, or the memory card) until that byte has been sent, neither the controller nor memory card are selected (and so the first "response" byte should be ignored; probably containing more or less stable high-z levels).
The other exception is, when you have send all command bytes, and still want to receive further data, then you'll need to send dummy command bytes (should be usually 00h) to receive the response bytes.
SCPH-1070 (Multitap)
The Multitap is an external adaptor that allows to connect 4 controllers, and 4 memory cards to one controller port. When using two adaptors (one on each slot), up to 8 controllers and 8 memory cards can be used.
Multitap Controller Access
Normally joypad reading is done by sending this bytes to the pad:
01 42 00 00 .. ;normal read
And with the multitap, there are even two different ways how to access extra pads:
01 42 01 00 .. ;method 1: receive special ID and data from ALL four pads
0n 42 00 00 .. ;method 2: receive data from pad number "n" (1..4)
The first method seems to be the more commonly used one (and its special ID is also good for detecting the multitap); see below for details.
The second method works more like "normal" reads, among other it's allowing to transfer more than 4 halfwords per slot (unknown if any existing games are using that feature).
The IRQ10 signal (for Konami Lightguns) is simply wired to all four slots via small resistors (without special logic for activating/deactivating the IRQ on certain slots).
Multitap Controller Access, Method 1 Details
Below LONG response is activated by sending "01h" as third command byte; observe that sending that byte does NOT affect the current response. Instead, it does request that the NEXT command shall return special data, as so:
Halfword 0 --> Controller ID for MultiTap (5A80h=Multitap)
Halfword 1..4 --> Player A (Controller ID, Buttons, Analog Inputs, if any)
Halfword 5..8 --> Player B (Controller ID, Buttons, Analog Inputs, if any)
Halfword 9..12 --> Player C (Controller ID, Buttons, Analog Inputs, if any)
Halfword 13..16 --> Player D (Controller ID, Buttons, Analog Inputs, if any)
With this method, the Multitap is always sending 4 halfwords per slot (padded with FFFFh values for devices like Digital Joypads and Mice; which do use less than 4 halfwords); for empty slots it's padding all 4 halfwords with FFFFh.
Sending the request is possible ONLY if there is a controller in Slot A (if controller Slot A is empty then the Slot A access aborts after the FIRST byte, and it's thus impossible to send the request in the THIRD byte).
Sending the request works on access to Slot A, trying to send another request during the LONG response is glitchy (for whatever strange reason); one must thus REPEATEDLY do TWO accesses: one dummy Slot A access (with the request), followed by the long Slot A+B+C+D access.
Previous access had REQ=0 and returned Slot A data ---> returns Slot A data
Previous access had REQ=0 and returned Slot A-D data -> returns Slot A data
Previous access had REQ=1 and returned Slot A data ---> returns Slot A-D data
Previous access had REQ=1 and returned Slot A-D data -> returns garbage
Previous access had REQ=1 and returned garbage -------> returns Slot A-D data
In practice:
Toggling REQ on/off after each command: Returns responses toggling between normal Slot A data and long Slot A+B+C+D data.
Sending REQ=1 in ALL commands: Returns responses toggling between Garbage and long Slot A+B+C+D data.
Both of the above is working (one needs only the Slot A+B+C+D part, and it doesn't matter if the other part is Slot A, or Garbage; as long as the software is able/aware of ignoring the Garbage). Garbage response means that the multitap returns ONLY four bytes, like so: Hiz,80h,5Ah,LSB (ie. the leading HighZ byte, the 5A80h Multitap ID, and the LSB of the Slot A controller ID), and aborts transfer after that four bytes.
Multitap Memory Card Access
Normally memory card access is done by sending this bytes to the card:
80 xx .. .. ;normal access
And with the multitap, memory cards can be accessed as so:
8n xx .. .. ;access memory card in slot "n" (1..4)
That's the way how its done in Silent Hill. Although for the best of confusion, it doesn't actually work in that game (probably the developer has just linked in the multitap library, without actually supporting the multitap at higher program levels).
Multitap Games
Bomberman World
Breakout: Off the Wall Fun
Circuit Breakers
Crash Team Racing
FIFA series soccer games
Frogger
Gauntlet: Dark Legacy
Hot Shots Golf 2 & 3
NBA Live (any year) (up to 8 players with two multitaps)
Need For Speed 3
Need For Speed 5
Poy Poy (4 players hitting each other with rocks and trees)
Running Wild
Multitap Versions
.------.
SCPH-1070 | | SCPH-111
(gray case) | | (white case)
(for PSX) | D | (for PSone)
| | .----------------.
cable | | cable .' D C '.
''--.. | C | '''--..__| |
\| | | |
.----------------' | '. A B .'
| | '----------------'
| |
| A B /
'---------------------'
The cable connects to one of the PSX controller ports (which also carries the memory card signals). The PSX memory card port is left unused (and is blocked by a small edge on the Multitap's plug).
MultiTap Parsed Controller IDs
Halfword 0 is parsed (by the BIOS) as usually, ie. the LSB is moved to MSB, and LSB is replaced by status byte (so ID 5A80h becomes 8000h=Multitap/okay, or xxFFh=bad). Halfwords 1,5,9,13 are NOT parsed (neither by the BIOS nor by the Multitap hardware), however, some info in the internet is hinting that Sony's libraries might be parsing these IDs too (so for example 5A41h would become 4100h=DigitalPad/okay, or xxFFh=bad).
Power Supply
The Multitap is powered by the PSX controller port. Unknown if there are any power supply restrictions (up to eight controllers and eight cards may scratch some limits, especially when doing things like activating rumble on all joypads). However, the Multitap hardware itself doesn't do much on supply restrictions (+3.5V is passed through something; maybe some fuse, loop, or 1 ohm resistor or so) (and +7.5V is passed without any restrictions).
See also
Pinouts - Component List and Chipset Pin-Outs for Multitap, SCPH-1070
___ ___ ___ ___
__/_L_\__ Analog Pad __/_R_\__ __/_L_\__ Digital Pad __/_R_\__
/ _ \--------------/ \ / _ \--------------/ \
| _| |_ | | /\ | | _| |_ | | /\ |
| |_ X _| |SEL STA| [] () | | |_ X _| | | [] () |
| |_| ___ ANALOG ___ > Mechanically possible field of motion
Square Area --> Digitally visible 8bit field of motion
Small Circle --> Resting position when releasing the joystick
Example min/center/max values for three different pads:
SCPH-1150 Min=(00,00), Mid: (72..90,79..AC), Max=(FF,FF) at 25'C
SCPH-1200 Min=(0E,0E), Mid: (6C..8A,75..79), Max=(ED,ED) at 16'C
SCPH-110 Min=(11,11), Mid: (8A..9F,70..96), Max=(FD,FD) at 16'C
Values may vary for other pads and/or different temperatures.
Dual Analog Pad in LED=Green Mode
Basically same as normal analog LED=Red mode, with following differences:
ID is 5A53h (identifying itself as analog stick) (rather than analog pad)
Left/right joy-buttons disabled (as for real analog stick, bits are always 1)
Some buttons are re-arranged: bit9=L1 bit10=[] bit11=/\ bit12=R1 bit15=R2
Concerning the button names, the real analog-stick does NOT have re-arranged buttons (eg. it's L1 button is in bit10), however, concerning the button locations, the analog stick's buttons are arranged completely differently as on analog pads (so it might be rather uncomfortable to play analog stick games on analog pads in LED=Red mode; the LED=Green mode is intended to solve that problem).
Might be useful for a few analog-stick games like MechWarrior 2, Ace Combat 2, Descent Maximum, and Colony Wars. In most other cases the feature is rather confusing (that's probably why the LED=Green mode wasn't implemented on the Dual Shock).
See also
Pinouts - Component List and Chipset Pin-Outs for Digital Joypad, SCPH-1080
Pinouts - Component List and Chipset Pin-Outs for Analog Joypad, SCPH-1150
Pinouts - Component List and Chipset Pin-Outs for Analog Joypad, SCPH-1200
Pinouts - Component List and Chipset Pin-Outs for Analog Joypad, SCPH-110
Pinouts - Component List and Chipset Pin-Outs for Dualshock2, SCPH-10010
neGcon Racing Controller (Twist) (NPC-101/SLPH-00001/SLEH-0003)
__Halfword 0 (Controller Info)_______________________________________________
0-15 Controller Info (5A23h=neGcon)
__Halfword 1 (Digital Switches)______________________________________________
0-2 Not used (always 1) (would be Select, L3, R3 on other pads)
3 Start Button (0=Pressed, 1=Released)
4 Joypad Up (0=Pressed, 1=Released)
5 Joypad Right (0=Pressed, 1=Released)
6 Joypad Down (0=Pressed, 1=Released)
7 Joypad Left (0=Pressed, 1=Released)
8-10 Not used (always 1) (would be L2, R2, L1 on other pads)
11 R Button (0=Pressed, 1=Released) (would be R1 on other pads)
12 B Button (0=Pressed, 1=Released) (would be /\ on other pads)
13 A Button (0=Pressed, 1=Released) (would be () on other pads)
14-15 Not used (always 1) (would be >
Controllers - Lightguns - Namco (GunCon)
**GunCon Cinch-based Lightguns (Namco)**
Halfword 0 (Controller Info)_________________ 0-15 Controller Info (5A63h=Namco Lightgun; GunCon/Cinch Type) Halfword 1 (Buttons)_________________________ 0-2 Not used (All bits always 1) 3 Button A (Left Side) (0=Pressed, 1=Released) ;aka Joypad Start 4-12 Not used (All bits always 1) 13 Trigger Button (0=Pressed, 1=Released) ;aka Joypad O-Button 14 Button B (Right Side) (0=Pressed, 1=Released) ;aka Joypad X-Button 15 Not used (All bits always 1) Halfword 2 (X)_______________________________ 0-15 8MHz clks since HSYNC (01h=Error, or 04Dh..1CDh) Halfword 3 (Y)_______________________________ 0-15 Scanlines since VSYNC (05h/0Ah=Error, PAL=20h..127h, NTSC=19h..F8h)
Caution: The gun should be read only shortly after begin of VBLANK.
**Error/Busy Codes**
Coordinates X=0001h, Y=0005h indicates "unexpected light":
ERROR: Sensed light during VSYNC (eg. from a Bulb or Sunlight).
Coordinates X=0001h, Y=000Ah indicates "no light", this can mean either:
ERROR: no light sensed at all (not aimed at screen, or screen too dark). BUSY: no light sensed yet (when trying to read gun during rendering).
To avoid the BUSY error, one should read the gun shortly after begin of VBLANK
(ie. AFTER rendering, but still BEFORE vsync). Doing that isn't as simple as
one might think:
On a NTSC console, time between VBLANK and VSYNC is around 30000 cpu clks,
reading the lightgun (or analog joypads) takes around 15000 cpu clks. So,
reading two controllers within that timeframe may be problematic (and reading
up to eight controllers via multitaps would be absolutely impossible). As a
workaround, one may arrange the read-order to read lightguns at VBLANK (and
joypads at later time). If more than one lightgun is connected, then one may
need to restrict reading to only one (or maybe: max two) guns per frame.
**Minimum Brightness**
Below are some average minimum brightness values, the gun may be unable to
return position data near/below that limits (especially coordinates close to
left screen border are most fragile). The exact limits may vary from gun to
gun, and will also depend on the TV Set's brightness setting.
666666h Minimum Gray 770000h Minimum Blue 007700h Minimum Green 000099h Minimum Red
The gun does also work with mixed colors (eg. white bold text on black
background works without errors, but the returned coordinates are a bit "jumpy"
in that case; returning the position of the closest white pixels).
BUG: On a plain RED screen, aiming at Y>=00F0h, the gun is randomly
returning either Y, or Y-80h (that error occurs in about every 2nd frame, ie.
at 50% chance). It's strange... no idea what is causing that effect.
**Coordinates**
The coordinates are updated in all frames (as opposed to some lightguns which
do update them only when pulling the trigger).
The absolute min/max coordinates may vary from TV set to TV set (some may show
a few more pixels than others). The relation of the gun's Screen Coodinates to
VRAM Coordinates does (obviously) depend on where the VRAM is located on the
screen; ie. on the game's GP1(06h) and GP1(07h) settings.
Vertical coordinates are counted in scanlines (ie. equal to pixels). Horizontal
coordinates are counted in 8MHz units (which would equal a resolution of 385
pixels; which can be, for example, converted to 320 pixel resolution as
X=X*320/385).
**Misinformation (from bugged homebrew source code)**
Halfword 2 (X)_______________________________ 0-7 X-Coordinate (actual: see X-Offset) ;\with unspecified 8-15 X-Offset (00h: X=X-80, Nonzero: X=X-80+220) ;/dotclock? Halfword 3 (Y)_______________________________ 0-7 Y-Coordinate (actual: Y=Y-25) (but then, max is only 230, not 263 ?) 8-15 Pad ID (uh, what id?) (reportedly too dark/bright error flag?)
**Namco Lightgun Drawing**
-_______________________--
-----> | namco \\ \ Namco G-Con 45 (light gray) (cinch)
sensor |............ .. .....\\...|_
|_ : :.. _____
| O :../ )))| (
_/ |_/|
: : | |
: : | | NPC-103
A-Button (Left) Trigger | | SLPH-00034/SLEH-0007/SLUH-00035
B-Button (Right) |____|
**See also**
Pinouts - Component List and Chipset Pin-Outs for Namco Lightgun, NPC-103
Controllers - Lightguns - PSX Lightgun Games
**PSX Lightgun Games**
Some games are working only with IRQ10 or only with Cinch, some games support
both methods:
Area 51 (Mesa Logic/Midway) (IRQ10) Crypt Killer (Konami) (IRQ10) Die Hard Trilogy 1: (Probe Entertainment) (IRQ10) Die Hard Trilogy 2: Viva Las Vegas (n-Space) (IRQ10/Cinch) Elemental Gearbolt (Working Designs) (IRQ10/Cinch) Extreme Ghostbusters: Ultimate Invasion (LSP) (Cinch) Galaxian 3 (Cinch) Ghoul Panic (Namco) (Cinch) Gunfighter: The Legend of Jesse James (Rebellion) (Cinch) Judge Dredd (Gremlin) (Cinch) Lethal Enforcers 1-2 (Konami) (IRQ10) Maximum Force (Midway) (IRQ10/Cinch) Mighty Hits Special (Altron) (EU/JPN) (Cinch) Moorhuhn series (Phenomedia) (Cinch) Point Blank 1-3 (Namco) (Cinch) Project Horned Owl (Sony) (IRQ10) Rescue Shot (Namco) (Cinch) Resident Evil: Gun Survivor (Capcom) (JPN/PAL versions) (Cinch) Silent Hill (IRQ10) ("used for an easter egg") Simple 1500 Series Vol.024 - The Gun Shooting (unknown type) Simple 1500 Series Vol.063 - The Gun Shooting 2 (unknown type) Snatcher (IRQ10) Sporting Clays (Charles Doty) (homebrew with buggy source code) (IRQ10/Cinch) Star Wars Rebel Assault II (IRQ10) Time Crisis, and Time Crisis 2: Project Titan (Namco) (Cinch)
Note: The RPG game Dragon Quest Monsters does also contain IRQ10 lightgun code
(though unknown if/when/where the game does use that code).
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 _________________________________
**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 _________________________________
**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
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 ;
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 ||
| | \/ | | /\ | | .''. | | ||___| |___| |___||
| | /\ | | /..\ | | '..' | | | ___ .---. ___ |
| '....' '. || .' '....' | || ||
| .-------. .''''''''. .-------. | ||___| |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!
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.
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".
Reading Data from Memory Card
Send Reply Comment
81h N/A Memory Card Access (unlike 01h=Controller access), dummy response
52h FLAG Send Read Command (ASCII "R"), Receive FLAG Byte
00h 5Ah Receive Memory Card ID1
00h 5Dh Receive Memory Card ID2
MSB (00h) Send Address MSB ;\sector number (0..3FFh)
LSB (pre) Send Address LSB ;/
00h 5Ch Receive Command Acknowledge 1 ;
Memory Card Images
There are a lot of different ways to get a save from a memory card onto your
PC's hard disk, and these ways sometimes involve sticking some additional
information into a header at the beginning of the file.
**Raw Memory Card Images (without header) (ie. usually 128K in size)**
SmartLink .PSM, WinPSM .PS, DataDeck .DDF, FPSX .MCR, ePSXe .MCD...
don't stick any header on the data at all, so you can just read it in and treat
it like a raw memory card.
All of these headers contain a signature at the top of the file. The three most
common formats and their signatures are:
Connectix Virtual Game Station format (.MEM): "VgsM", 64 bytes PlayStation Magazine format (.PSX): "PSV", 256 bytes
some programs will OMIT any blank or unallocated blocks from the end of the
memory card -- if only three save blocks on the card are in use, for example,
saving the other twelve is pointless.
**Xploder and Action Replay Files (54 byte header)**
00h..14h Filename in ASCII, terminated by 00h (max 20 chars, plus ending 00h) 15h..35h Title in ASCII, terminated by 00h (max 32 chars, plus ending 00h) 36h.. File Block(s) (starting with the Title sector)
This format contains only a single file (not a whole memory card). The filename
should be the same as used in the Memory Card Directory. The title is more or
less don't care; it may be the SHIFT-JIS title from the Title Sector converted
to ASCII.
**Other**
"There exists another single-save format with a 128 byte header containing a
raw index frame for the initial block, which must be updated to match the
destination card, and the raw save data. I have seen this format once, but I
don't remember what it was called or where it came from. You may want to
account for this possibility in your format detection logic."
**.GME Files (usually 20F40h bytes)**
InterAct GME format, produced by the DexDrive.
000h 12 ASCII String "123-456-STD",00h 00Ch 4 Usually zerofilled (or meaningless garbage in some files) 010h 5 Always 00h,00h,01h,00h,01h 015h 16 Copy of Sector 0..15 byte[00h] ;"M", followed by allocation states 025h 16 Copy of Sector 0..15 byte[08h] ;00h, followed by next block values 035h 11 Usually zerofilled (or meaningless garbage in some files) 040h F00h Fifteen Description Strings (each one 100h bytes, padded with 00h) F40h 128K Memory Card Image (128K) (unused sectors 00h or FFh filled)
This is a very strange file format, no idea where it comes from. It contains a
F40h bytes header (mainly zerofilled), followed by the whole 128K of FLASH
memory (mainly zerofilled, too, since it usually contains only a small single
executable file).