SaturnMultiUSB
Update: I've converted this to an class. It's easier to customize and to use on other Arduino models. I recommend to use it
Convert Sega Saturn controllers to USB using an Arduino Leonardo.
Works with up to 2 controllers. And up to 7 if using one Multitap (6 Player Adaptor).
Code have some hardcoded delay between controller reads depending on what's connected:
- 1 controller: 1ms.
- 2 controllers: 2ms.
- Multitap: 4ms.
Bonus
By using a simple adapter it also works with megadrive/genesis controllers and multitaps (Team Player MK-1647).
Controllers can be connected directly to the saturn ports or to a saturn multitap.
Compatibility
It was tested with the following official accessories:
- Saturn Digital Pad
- Saturn 3D Analog Pad (digital and analog mode)
- Saturn Arcade Stick
- Saturn Twin Stick
- Saturn Arcade Racer
- Saturn Multitap
- Megadrive 3-Button
- Megadrive 6-Button
- Megadrive 8bidto M30 2.4G
- Megadrive Multitap (MK-1647).
RetroBit's wireless controller do not work when connected directly but works when using a Multitap.
Not compatible with EA's multitap.
Usage
When powering up it will scan the ports for a Multitap and create the USB joysticks.
- No Multitap: 2 USB joysticks.
- A Saturn Multitap: 7 USB joysticks.
- A Megadrive Multitap: 5 USB joysticks.
So if you want to use a multitap make sure to connect it to the arduino before powering it.
After the power-on setup you can freely hot swap controllers.
Button mapping for USB HID and PS3
Saturn | HID | PS3 |
---|---|---|
D-PAD | HAT | D-PAD |
A | 1 | X |
B | 2 | O |
C | 5 | R1 |
X | 0 | ◻ |
Y | 3 | △ |
Z | 4 | L1 |
L | 6 | L2 |
R | 7 | R2 |
Start | 9 | Start |
Connection
Attention! Port 1 pins changed on july 26 2021.
Review your wiring if you made the adapter before that date and plan to upgrade the arduino's sketch.
Saturn pins:
Saturn port 1
Saturn | Arduino | Description |
---|---|---|
1 | 5V | VCC/POWER |
2 | A5 | D1/DATA 1 |
3 | A4 | D0/DATA 0 |
4 | A2 | S0/SEL/TH |
5 | 7 | S1/REQ/TR |
6 | A1 | S2/ACK/TL |
7 | A0 | D3/DATA 3 |
8 | A3 | D2/DATA 2 |
9 | GND | GROUND |
Saturn port 2
Saturn | Arduino | Description |
---|---|---|
1 | 5V | VCC/POWER |
2 | 3 | D1/DATA 1 |
3 | 2 | D0/DATA 0 |
4 | 8 | S0/SEL/TH |
5 | 9 | S1/REQ/TR |
6 | 5 | S2/ACK/TL |
7 | 6 | D3/DATA 3 |
8 | 4 | D2/DATA 2 |
9 | GND | GROUND |
Megadrive to saturn pin mapping
Saturn | Mega DB9 | Description |
---|---|---|
1 | 5 | VCC/POWER |
2 | 2 | D1/DATA 1 |
3 | 1 | D0/DATA 0 |
4 | 7 | S0/SEL/TH |
5 | 9 | S1/REQ/TR |
6 | 6 | S2/ACK/TL |
7 | 4 | D3/DATA 3 |
8 | 3 | D2/DATA 2 |
9 | 8 | GROUND |
Credits
My father for helping with the electronics stuff.
It uses the ArduinoJoystickLibrary
Inspired by raphnet's saturn_usb.
Darthcloud's Evolution of SEGA's IO Interface article was an essential read to understand the protocol.
Warning
Code and wiring directions are provided to you 'as is' and without any warranties. Use at your own risk.
The pinout is specific for the Arduino Leonardo. Code uses Direct Port Manipulation.