Sega Saturn controller to USB adapter
This projects makes it possible to use Sega Saturn
mouse) on a PC through an USB port. Using the schematic and firmware available
on this page, one can make an adapter (Using the connector from a Saturn extension)
or convert a controller (if it has enough internal free space).
The current firmware supports:
- The Basic controllers (ABCXYZ, L/R and Start buttons)
- The analogic controller.
- The mouse (aka "Shuttlemouse")
Thanks to USB HID
compliance, the adapter works immediately on most
modern systems without installing special drivers. Tested under Linux
Windows 7 64-bit
, MacOS X
and Sony Playstation 3
Here are the peripherals I developped this adapter with:
Official Sega Analog MK-80117
'HORIPAD SS'. Model HSS-11
Performance Super Pad 8. Model P-400
Sega 'shuttlemouse' HSS-0102
Also works with the Sega HSS-0101 and MK-80116.
If you are able to test with other controllers, let me know and
I will mention them here.
As the following pictures demonstrate, the adapter is handled as a mouse/joystick hybrid
under Windows 7:
William Schneider sent me the following picture of this project assembled in a breadboard. He
also confirmed that everything works fine with the Sega HSS-0101 controller, and that
firmware version 1.1 works very well with the PS3:
The following mappings are available. To enable specific mapping, press and hold
the corresponding button, connect the adapter (or power-up the console/computer),
and release the button.
|SLS Alt (hold A)|
|VIP (hold B)|
|v1.0 (hold C)|
On the PS3, the SLS (default) and SLS Alt mappings are usually the most suitable.
They have been reported to work well for Super Street Fighter IV, Tekken 6,
BlazBlue: Continuum Shift, Virtua Fighter 5, Arcana Heart 3, Hard Corps: Uprising,
Soul Calibur, Disgaea 3 and Mortal Kombat 9.
Configuring the 3D controller
Configuring the 3D controller is often complicated due to the L/R levers in the back of the controller which do
not rest in a centered position. Typically, the issue arises when performing button assignment in the emulator (eg: Yabuse)
configuration dialog. As soon as a button assignment is attempted, the emulator sees L or R being active and immediately
maps L/R to the button or axis that was to be configured.
Under windows, you can execute this tool which patches the calibration data as to make the game think the
levers rest at a centered position, and thus perceive them as inactive unless of course you push them.
Before the fix
After the fix
Configured 3D controller
Executing the tool
Ideally, emulators should never consider physical buttons/axis as active unless them become active after
input being configured was selected. This kind of issue would be avoided...
I used my usual Atmega8 circuit with a custom firmware using the
Development AVR-USB device implementation
Here is the core schematic. For wiring the controller, use the table below.
|# broche sega||I/O Micro.||Descriptin/ Nom(s)|
|1||N/A||Alimentation 5 volts / VCC|
|6||PB5||D5 ou TL (handshake)
I used the information on the following as a starting point:
Sega Saturn Pad Info
The signal labelled as "+5v (Inp)" in the above mentionned webpage is in fact
a logic output used by the Analogic controller and mouse. This signal is part
of an handshake mechanism used to transfer a sequence of values. In fact,
these peripheral communicate exactly like the Genesis multitap do. For details:
|U2|| Atmega8a or Atmega8 microcontroller. Don't use an ATMEGA8L-*, the 12Mhz clock would be too high.|
|R1|| 1.5k resistor. Ordinary carbon film 1/4 watt resistors will do.|
|R2, R3|| 68 ohm resistors. Ordinary carbon film 1/4 watt resistors will do.|
|D2, D3|| 3.6 volts zener diodes.|
|Y1|| 12 Mhz crystal.|
|C2, C3|| 18 pf capacitors. If the crystal datasheet recommends another value, use it instead.|
|C1|| 1uf capacitor. Install it near the ATmega8 power pins.|
|J2|| 6 pin header, 2.54mm spacing. Needed for programming the ATmega8.|
For the USB connection, just strip the USB cable and solder the wires directly
to the board. USB uses standard wire colors, but beware of cheap cables built with
non-standard color codes.
| ||Color ||Description
| ||Red ||+5 volts|
| ||Black ||Ground|
| ||Green ||D+|
| ||White ||D-|
Programming and Source code
A microcontroller is a component which must be programmed in order to do
something useful. So here is the hexfile which must be flashed into the microcontroller:
Many microcontrollers have what is called 'Fuse bytes'. In the case of the ATmega8, there
are two bytes: The high byte, and the low byte. Those bytes are used to configure some aspects
of the microcontroller. What type of clock to use? Crystal? Resonator? Internal RC clock? Allow
programming via ISP? It's very important to set the fuses to the right values. Using the wrong
values can render your MCU unusable.
For this project, here are the appropriate fuse values:
high byte = 0xc9
, low byte = 0x9f
For details about how to program an AVR,
visit my AVR programming
The source code is released under the GPL license and compiles with avr-gcc. To prevent conflicts,
please do not distribute modified version where the USB report descriptor
been modified without replacing the USB Vendor ID and Product ID by yours.
Contact me here (email@example.com
if you made some interesting improvements.
USB Vendor ID/Product ID pair:
Please do not re-use my VID/PID for derived projects. Please obtain your own
numbers (or invent one despite the risks). I bought my IDs from
used to sell small chunks of the PID space which was much cheaper
than buying a vendor ID from usb.org (2000$ USD)...
|saturn_usb-2.0.tar.gz (66.2 KB)|
saturn_usb-2.0.hex (12 KB)
|July 14, 2013
- Increased compatibility by separating Mouse and Joystick functions. The mouse is detected at powerup. Fixes Linux and MacOS X problems.
|saturn_usb-1.1.tar.gz (71.2 KB)|
saturn_usb-1.1.hex (11.8 KB)
|July 27, 2011
- Added various mappings for better operation with the PS3. 4 different button configurations, selected by holding specific buttons (ABC) when the adapter gets connected to an USB port, are available. See the button mapping section for details.
|saturn_usb-1.0.tar.gz (68.1 KB)|
saturn_usb-1.0.hex (11 KB)
|July 2, 2011
- First version. Supports the following peripherals:
- Standard controller (ABCXYZ, Start, L/R and D-Pad)
- Analogic controller
- GPLv2 license.
PCB for surface-mount
The surface-mount version uses my Multiuse PCB2
Here's what it looks like:
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.
Now you cannot say that I did not warn you :)