DIY SMS/MarkIII paddle controller
I recently bought the Galactic Protector
my Japanese SMS console without knowing that a paddle controller was required to play.
The paddle controller for Sega Master System, part number HPD-200, was only sold in Japan
at the time. Today it is sold at a price I am not willing to pay on a popular auction site
so I decided to build my own.
Sega's HPD-200 paddle
The raphnet.net paddle!
- Works like the standard Sega HPD-200 paddle.
- Works on Japanese SMS and MarkIII consoles.
- Compatible with non-Japanese systems
- Special "export paddle" mode
- Very simple circuit.
Some Japanese games with paddle support, when used on a non-Japanese SMS or Genesis/Megadrive console, will detect
the console is not Japanese and will then expect an "export paddle" to be used. Since the "export paddle" works
differently, a Japanese paddle (HPD-200) cannot be used.
Even though the "export paddle" has as far as I know never been commercialised by Sega, many
games include code to support it. It did not seem too difficult so to allow those games to be played I also
implemented an "export paddle" mode.
I could simply have drilled two openings in a piece of wood, plastic or
metal to install a potentiometer and a button. But since I got a 3D printer,
I can't resist designing slightly more elaborate enclosures.
Playing Galactic Protector
Cut view of the installed button
Here are the .STL files for those who would like to build the same enclosure:
sms_paddle2_body-main.STL (Main part)
sms_paddle2_body-button.STL (Push button)
A few notes concerning these 3D models:
- The enclosure is designed to be used with a Vishay 657-0-0-203 potentiometer
and Omron D2F-01 micro-switch. I you must use different components, compare their
dimensions to confirm they will fit, or otherwise modify the 3D models before printing.
- The push-button hooks break easily. When installing the push-button, I recommend
heating the hooks to soften the plastic, allowing it to bend. Once the button is in
place, quickly straighten them before the harden.
- The knob is press-fitted on the potentiometer shaft. If your print is too tight,
increase the bore diameter by drilling using successively larger drill bits.
Click on the schematic for a sharper version.
My multipurpose circuit board, multiuse PCB2
, is perfect
for this project. Here is a diagram showing how to use it:
The circuit is available pre-programmed and pre-assembled
from my online store
Of course, the micro-controller has to be programmed or nothing will work:
February 21, 2015 (Saturday)
sms_paddle-1.0.tar.gz (2.3 KB)
sms_paddle-1.0.hex (619 B)
How it works
The position of the knob on the paddle is converted to a 8 bit digital value and
has therefore 256 possible values. The current value is transmitted to the console
in two blocks of 4 bits (nibbles). The four wires normally used for the directional
pad are used for this (DB9 pin 1 to 4).
The HPD-200 paddle
Sega's HPD-200 paddle signals which set of 4 bit is currently being transmitted by
varying the state of pin 9 (normally used for button 2). A logic low indicates
low order bits are transmitted (0 to 3) and a high level indicates high order bits (4 to 7)
are transmitted. For each sample of the current knob position, the paddle sends
the low order bits before high order bits. The signal on pin 9 has a frequency
of 8 kHz.
The "export paddle"
The export paddle works a bit differently by letting the game console select
the bit set of interest via pin 7. The paddle reacts to the state of pin 7 by
putting the requested set of 4 bits on pins 1-4 and by updating the state of
pin 9 to reflect pin 7 (handshake?). According to my experiments, the paddle must
do the analog to digital conversion on pin 7 falling edge. (Otherwise, in some cases and
depending on the exact movement the player does, very wrong values may be received
by the game)
(Note: The above diagram is representative of what my firmware does and may not necessarily
match what Sega did or intended to do for the so-called export paddle. I don't have a reference
controller to check if my implementation is correct, but it does seem to work...)
A few years ago I had an HPD-200 paddle at home for a few days. Here are a few pictures of its innards:
|Game ||Console ||Mode ||Results|
|Galactic protector (JP) ||Japanese SMS ||HPD-200 ||Ok |
|Galactic protector (JP) ||North-american Genesis||Export paddle ||Ok |
|Outrun (US) ||Japanese SMS + cartridge adapter ||HPD-200 ||Ok |
|Megumi rescue ||Everdrive + Australian SMS ||HPD-200! ||Ok |
|Super racing ||Everdrive + Australian SMS ||N/A ||Not working |
Contact me if you test other games, and please specify the game and console region, mentionning if any adapters or
mods are involved.
Pictures from users
Seeing how others build my project is always a pleasure for me! Please send me pictures of your builds and I
will post them here. Please also let me know if it's ok to display your name/alias and country. By default, I will
only use your first name.
: Kyle from Australia sent me a picture of the paddle he built using a DB9 extension lead and an old NES USB controller!
||In this thread, code samples used to read HPD-200 and export paddles is posted and analysed. This is where
I learned almost everything I needed for this project.
||General paddle information with a list of games supporting it.
||Just reading the source code of Genesis/Atari/SMS to USB adapter to which I added paddle support a few
years ago saved me some time.
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 :)