Skip to content

Latest commit

 

History

History
852 lines (641 loc) · 32.4 KB

File metadata and controls

852 lines (641 loc) · 32.4 KB

Controllersandmemorycards

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 - Dance Mats

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 Images

Memory Card Notes

Pocketstation (Memory Card with built-in LCD screen and buttons)

Pocketstation

Pinouts

Pinouts - Controller Ports and Memory-Card Ports

Controller and Memory Card Misc

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.

Controller and Memory Card Multitap Adaptor

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

Controllers - Standard Digital/Analog Controllers

___                      ___           ___                      ___
__/_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

Controllers - Racing Controllers

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 ;

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 ||
| |  \/  | |    /\    | | .''. | |        ||___|  |___|  |___||
| |  /\  | |   /..\   | | '..' | |        | ___   .---.   ___ |
|  '....'  '.   ||   .'  '....'  |        ||  ||
| .-------. .''''''''. .-------. |        ||___| |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 - 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 - 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".

Memory Card Read/Write Commands

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).