SkillAgentSearch skills...

OpenPSX2AmigaPadAdapter

Playstation to Commodore Amiga/CD32 Controller Adapter

Install / Use

/learn @SukkoPera/OpenPSX2AmigaPadAdapter

README

OpenPSX2AmigaPadAdapter

OpenPSX2AmigaPadAdapter is an Open Hardware adapter that allows using a Sony PlayStation controller on Commodore computers, including the Commodore 64, Amiga and CD<sup>32</sup>.

Board

Summary

The Commodore Amiga CD<sup>32</sup> came with cumbersome and fragile controllers, most of which did not survive the challenge of time. While many third-party replacements have surfaced in the meantime, most of them are not as solid and comfortable as the ubiquitous Sony PlayStation controllers. These have more than enough buttons, are cheap and most people are familiar with them, as the same basic design has been around for nearly 25 years. This means they would be a very good replacement, if they just didn't use a different connector and communication protocol.

OpenPSX2AmigaPadAdapter is a simple Arduino-based board that adapts the connector and translates the protocol, allowing the use of many PlayStation controllers on Commodore computers. It can either behave as a simple 1/2-button Atari-style joystick or as a full-fledged 7-button CD<sup>32</sup> gamepad. It can also appear as an Amiga mouse.

Operating Modes

The adapter has two leds:

  • LD1 lights up steadily when a supported controller is plugged in. It blinks when no controller - or an unsupported one - is connected.
  • LD2 indicates the current operating mode, to be interpreted as follows.

Two-Button Joystick Mode

When the adapter is powered on, it defaults to Atari-style Two-Button Mode, which is indicated by LD2 being off.

This mode has been throughly tested on several Amiga models, but it should work wherever an Atari-style joystick is supported, including the Commodore VIC-20, Commodore 16 (through an adapter), Commodore 64, etc. See below for a compatibility table.

While in this mode, the adapter supports different button mappings, which have been carefully designed and tailored to different game genres. The mappings can be switched by pressing <kbd>Select</kbd> in combination with other buttons. LD2 will blink quickly a few times to indicate what mapping has been activated.

Standard Mapping: <kbd>Select</kbd> + <kbd></kbd>

Standard Mapping is the simplest mapping possible: both the D-Pad and Left Analog work as direction buttons. <kbd></kbd> is <kbd>B1</kbd> and <kbd></kbd> is <kbd>B2</kbd>. This is the default mapping as it should be usable just about in every game out there. It might not be the most natural these days, but it's the way the game was meant to be played by the developers, thus it should never fail you.

Note that very few games were originally made to take advantage of two buttons, as even fewer controllers had that many (!) those days. Here is a list of Amiga games that somehow support two buttons, if it can be any useful.

LD2 will blink once when this mapping is activated.

Racing Mapping 1: <kbd>Select</kbd> + <kbd></kbd>

Racing Mapping 1 is useful for all those racing games that use <kbd></kbd> to accelerate and <kbd></kbd> to brake. These have been mapped to <kbd></kbd> and <kbd></kbd>, respectively, which should make them much more natural to play. When accelerating and braking at the same time, braking wins. Left Analog can be used to steer, but its vertical axis is ignored, to avoid accidental accelerating/braking. The D-Pad is fully functional and is handy when moving through menus. <kbd>B1</kbd> and <kbd>B2</kbd> can be found on <kbd></kbd> and <kbd></kbd>.

This mode is probably best suited to games that do not involve shifting gears, as downshifting is usually performed through <kbd></kbd> + <kbd>B1</kbd> which is pretty hard to achieve (<kbd></kbd> + <kbd></kbd>).

LD2 will blink twice when this mapping is activated.

Racing Mapping 2: <kbd>Select</kbd> + <kbd></kbd>

Racing Mapping 2 is an alternative mapping for racing games that was inspired by GTA V. It lets you use <kbd>R2</kbd> (or <kbd>R1</kbd>) to accelerate and <kbd>L2</kbd> (or <kbd>L1</kbd>) to brake (which means they map to <kbd></kbd> and <kbd></kbd>, respectively). <kbd>B1</kbd> is mapped to its natural <kbd></kbd> position. Steering and the D-Pad work as in Racing Mode 1.

Accidentally, this control scheme was found out to be very comfortable with games that use <kbd>B1</kbd> to accelerate and <kbd></kbd> and <kbd></kbd> to shift gears. Since <kbd></kbd> is probably used for braking as well, it has also been mapped to <kbd></kbd>, while <kbd>B2</kbd> has been moved to <kbd></kbd>.

LD2 will blink three times when this mapping is activated.

Platform Mapping: <kbd>Select</kbd> + <kbd></kbd>

Platform Mapping is very similar to Standard Mapping, it just makes jumping way easier on a joypad and more natural to all the Mario players out there, by replicating <kbd></kbd> on <kbd></kbd>. Consequently, <kbd>B2</kbd> has been moved to <kbd></kbd>.

LD2 will blink four times when this mapping is activated.

Custom Mappings: <kbd>Select</kbd> + <kbd>R1</kbd>/<kbd>R2</kbd>/<kbd>L1</kbd>/<kbd>L2</kbd>

What if the built-in mappings are not enough? OpenPSX2AmigaPadAdapter allows you to make your own! And you can have up to four different ones, which are stored internally so that they can be recalled at any time. By default they behave similarly to the Standard Mapping, but they can be customized so that any button produces either the press of a single button or even of a button combo!

The programming procedure is as follows:

  1. Press and hold <kbd>Select</kbd>, then press and hold one of <kbd>R1</kbd>/<kbd>R2</kbd>/<kbd>L1</kbd>/<kbd>L2</kbd> until LD2 starts blinking, finally release both buttons. You are now in Programming Mode.
  2. Press the button you want to configure. LD2 will flash quickly a few times.
  3. Press and hold the single button or button combo you want to be assigned to the button you pressed before. At this stage the D-Pad directions have their obvious meaning, while <kbd></kbd> represents <kbd>B1</kbd> and <kbd></kbd> represents <kbd>B2</kbd>. LD2 will again flash quickly a few times.
  4. Release the button or combo you were holding.
  5. Repeat steps 2-4 for every button you want to customize.
  6. When you are done, press <kbd>Select</kbd> to store the mapping and leave Programming Mode. LD2 will stop blinking and you will be back to Two-Button Joystick Mode.

Note that a mapping you have just programmed is not activated automatically, so you will have to press <kbd>Select</kbd> and one of <kbd>R1</kbd>/<kbd>R2</kbd>/<kbd>L1</kbd>/<kbd>L2</kbd> (and release them quickly) to switch to it.

The Custom Mappings cannot be configured so that <kbd></kbd> overrides <kbd></kbd> or so that the vertical axis of Left Analog is ignored, still they might be useful here and there. For instance, having <kbd>B1</kbd> + <kbd></kbd> on <kbd></kbd> and <kbd>B1</kbd> + <kbd></kbd> on <kbd></kbd> makes the Amiga version of Golden Axe much more playable.

Commodore 64 Mode

Button 2 on Commodore 64 usually behaves in the opposite way at the electrical level, with respect to the other buttons. So a tweak can be enabled to invert the behaviour of button 2, use it if you find that your game of choice always sees it pressed or if it triggers on release rather than on press.

Just hold <kbd>Select</kbd> and press <kbd>Start</kbd> briefly. LD2 will flash once when this tweak is enabled and twice when it is disabled.

Mouse Mode

Whenever the right analog stick is moved, the adapter switches to Amiga Mouse Mode. In this mode, the right stick emulates the movements of a mouse. Movement speed is somewhat proportional to how far the stick is moved.

This mode can be useful as an emergency mouse, and it will be particularly handy if you have the adapter connected to port 1 of an Amiga computer and you need to use a mouse for short while (maybe to do some settings in a cracktro). Instead of unplugging the adapter, plugging in a mouse, and then the adapter again, you can take advantage of this feature.

Mouse mode is indicated by LD2 blinking. Press any direction on the D-Pad to go back to Joystick or CD32 Mode.

CD<sup>32</sup> Controller Mode

When the adapter is connected to a CD<sup>32</sup> console, it will automatically switch into this mode, which will emulate all 7 buttons of the original CD<sup>32</sup> controller. LD2 will light up steadily.

By default, buttons are mapped as follows:

  • <kbd></kbd>: Red
  • <kbd></kbd>: Blue
  • <kbd></kbd>: Yellow
  • <kbd></kbd>: Green
  • <kbd>L1</kbd>/<kbd>L2</kbd>/<kbd>L3</kbd>: L
  • <kbd>R1</kbd>/<kbd>R2</kbd>/<kbd>R3</kbd>: R
  • <kbd>Start</kbd>: Start/Pause

If you press <kbd>Select</kbd>, the 4 main buttons get "rotated":

  • <kbd></kbd>: Red
  • <kbd></kbd>: Blue
  • <kbd></kbd>: Yellow
  • <kbd></kbd>: Green

Both the D-Pad and Left Analog always work as direction buttons.

Components and Assembly

The board is basically a customized Arduino Uno, this means it was designed to work with an ATmega328P microcontroller, but you can also use ATmega88/A/P/PA or ATmega168/P microcontrollers, as they are pin-compatible and slightly cheaper. The A/P/PA suffixes usually identify somewhat minor chip revisions, the board should work with all of them. If you can, use P or PA versions, which consume less power. Note that at the moment the firmware uses 99% of the flash space available on an ATmega88 and any possible future improvements and/or new features are likely to overflow that, so you'd better use an ATmega168 at least.

A noteworthy exce

View on GitHub
GitHub Stars69
CategoryDevelopment
Updated2mo ago
Forks12

Languages

C++

Security Score

85/100

Audited on Jan 5, 2026

No findings