Some time ago (2013), someone asked me if I could build an adapter to use SNES controllers
on a Playstation. This customer had a an arcade style controller he really liked but
it was designed for SNES.
In fact, a few years before (2007), I had made the same project for another person. It's just
that somehow, I forgot to publish it. So all I had to do was some code clean up and adapt
the wiring for my modern multiuse PCB.
Specifications:
Supports original SNES controllers and most clones.
Acts like an original Playstation digital controller. Not usable for games requiring an analog controller.
Two button mappings are available and selected by holding down buttons when connecting the adapter or turning the console on.
Ready to use adapters are available in my online store:
Directions reversed for right-hand steering on arcade sticks.
Games tested
Digital controller
For a game to work, it must support original Playstation digital controllers (those without the analog sticks).
Tested working PS1 games as of version 1.2: Arcade Party Pak,
Captain Commando,
Chrono Cross (US),
CoolBoarders 4 (US),
Don Pachi & Do Don Pachi,
Ehrgeiz (JP),
Einhänder,
Final Fantasy Anthology: FFV (US),
Final Fantasy Anthology: FFVI (US),
Final Fantasy Chronicles: FFIV (US),
Final Fantasy Chronicles: Chrono Trigger (US),
Final Fantasy Origins (US),
Final Fantasy Tactics (US),
Final Fantasy VII (JP)(US),
Final Fantasy VIII (US),
Final Fantaxy IX (US),
Gradius Gaiden (JP),
Gran Turismo 2 (US),
グレイトヒッツ (JP),
Harry Potter (US),
Hebereke Popoitto,
King of Fighters 99,
Konami Arcade Classics,
Legacy of Kain: Soul Reaver (US),
Mega Man (X4, X5, X6, 8),
Namco Arcade Museum Volume 1,
Namco Arcade Museum Volume 3,
Metal Slug,
It might be NES,
No Fear Downhill Mountain Bike Racing (US),
Parasite Eve (US),
PS1 menu (US),
Puyo Puyo Sun,
Puzzle Bobble (whole series),
Rollcage (US),
R-Type Delta
Secret of mana,
Smurf Racer! (US),
Soulblade,
Street Fighter (10 different ones),
Tales of Phantasia (JP),
Tekken 2,
Tomba,
Vagrant Story (US),
Wild Arms 2 (US),
(Of course, many other games will work. Please let me know).
Non-working PS1 games:
With the current firmware (v1.2), there are no known non-working games.
With the previous firmware (v1.1), the following games did not work: Ehrgeiz (JP),
Einhander (JP),
Rockman X3 (JP),
Rollcage (US),
Silhouette Mirage (JP),
Tales of Phantasia (JP),
Tobal 2 (JP),
Vagrant Story (US),
PS2 games:
Even though the PS2 menu does work, most PS2 games seem to require an analog controller to be present, even
when they work perfectly without. Notably: Mega man anniversary collection does not work.
Ok... and the reason is?
Schematic and wiring
First of all, the schematic:
Here are a few notes about the signals:
Playstation
#
Name
Location
Comments
1
DATA
PB4
Through transistor (Open-collector output). SPI MISO. (to PSX)
2
CMD
PB3
SPI MOSI (from PSX)
3
+7.6V
Not used
4
GND
GND
Power supply (from PSX).
5
+3.3V
VCC
Power supply (from PSX).
6
ATT
PB2
SPI "Chip select" (from PSX)
7
CLK
PB5
SPI SCK (from PSX)
8
N/A
9
ACK
PC0
"Simulated" open collector (to PSX)
SNES
Nom
Location
Comments
Clock
PC5
Latch
PC4
Data
PC3
Vcc
VCC
+3.3 volt
Gnd
GND
Notes:
"Open collector output": An output connected to a collector (or drain) only. Such an output can "pull" a signal
to 0 (logic low) but cannot "push" it to 1 (but a resistor somewhere does). The AVR SPI output (MISO for Master In Slave Out) is
of the push-pull type so I am using an external transistor. Connecting the MISO pin directly would result in
a conflict with the corresponding memory card slot which shares the same signals.
"Simulated open collector": A technique where a GPIO is toggled between "output, low" mode and "input" mode.
Clock: This design uses the AVR internal RC oscillator. No crystal required.
Normally, SNES controllers run at 5 volt, but I know by experience that SNES controllers also work at 3.3v quite well.
Doing so means the circuit can be simplified by using the 3.3v from the Playstation directly (instead of using a regulator).
Using the .hex files
The Atmega8a has to be programmed using the .hex file. The "fuse bytes" for this
project are high_byte=0xd9, low_byte=0xe4.
For more information about the tools required to program an AVR microcontroller,
please visit my
AVR programming page.
Source Code (.tar.gz files):
Unless indicated otherwise, the source code is published under the GPL license version 3. Please
consult the included gpl.txt file for more information. The project compiles using the
included makefiles using avr-gcc under Linux.
Pictures
Here is the prototype I built in 2007. I had used my Multiuse tiny1
to build an adapter:
The adapters I now build (and sell in my store) are based on my
Multiuse PCB2 circuit which has conveniently
has a footprint for the required transistor on the bottom side.
Warning: Do NOT rely on the wire colors shown in the above pictures. The relationship between
pin numbers and wire color varies according to the cable manufacturer, and sometimes even between batches. You
must find out the color code used by your cables using a continuity tester. Blindly following the colors seen
here may damage your Playstation, your SNES controller and the adapter circuit.
Pictures from users
Seeing how others build my projects is always a pleasure. Send me your pictures and I'll
add them here. Also let me know if you have a name/alias and country I can mention. By default,
I will use your first name.
References
A text file named Playstation.txt I downloaded a long time ago was most
useful for this project.
Disclaimer
I cannot be held responsible for any damages that could occur to you
or your equipment while following the procedures present on this page.
Also, I GIVE ABSOLUTELY NO WARRANTY on the correctness and usability
of the informations on this page. Please note, however, that the procedures
above have worked in my case without any damages or problems.