DIY SMS/MarkIII paddle controller

The project

I recently bought the Galactic Protector for 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

Sega's HPD-200 paddle

The raphnet.net paddle!

The raphnet.net paddle!



Specifications:
  • Works like the standard Sega HPD-200 paddle.
  • Works on Japanese SMS and MarkIII consoles.
  • Compatible with non-Japanese systems[1]
  • Special "export paddle" mode[2]
  • Very simple circuit.
[1] 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.

[2] 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.




Pictures

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.

Final result:
raphnet.net paddle

raphnet.net paddle

raphnet.net paddle

raphnet.net paddle

Playing Galactic Protector

Playing Galactic Protector

Playing Outrun

Playing Outrun



Assembly:



The concept:
The concept

The concept

The concept

The concept

The concept

The concept

The burton

The burton

Cut view of the installed button

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)
sms_paddle2_body-knob.STL (Knob)

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.




Schematic


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:
Wiring (PCB version 2)

Wiring (PCB version 2)

Wiring (Old PCB)

Wiring (Old PCB)



The circuit is available pre-programmed and pre-assembled from my online store.


Firmware

Of course, the micro-controller has to be programmed or nothing will work:
Version v1.0
February 21, 2015 (Saturday)
Initial release.
File(s):
sms_paddle-1.0.tar.gz (2.3 KB)
sms_paddle-1.0.hex (619 B)
This project is also available on GitHub!
To request features, report issues or contribute, you may send me an email or use the GitHub repository:
https://github.com/raphnet/sms_paddle



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.


Here is a newer capture I took to clarify the timings:

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:





Tested games

Game Console Mode Results
Galactic protector (JP) Japanese SMS HPD-200 Ok
Galactic protector (JP) North-american GenesisExport paddle Ok
Outrun (US) Japanese SMS + cartridge adapter HPD-200 Ok
Megumi rescue Japanese SMS HPD-200 Ok
Woody Pop / ウッディポップ (JP)Japanese SMS HPD-200 Ok
Woody Pop / ウッディポップ (JP)North-american Genesis + MarkIII cartridge adapter + Card catcher Export paddle Ok
DONKEY.SMS (Homebrew) Japanese SMS and North-american Genesis HPD-200 Ok
SMS-A-Sketch (Homebrew)Japanese SMS and North-american Genesis 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.
2016-06-06: Kyle from Australia sent me a picture of the paddle he built using a DB9 extension lead and an old NES USB controller!



2018-09-13: Sam from France shared the following pictures, explaining:
While perhaps not of high aesthetic value, the paddle works great on my japanese MegaDrive 1 through a PowerBase Mini adapter and a Master Everdrive X7





References

#DescriptionLink
1 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. http://www.smspower.org/forums/6783-OneMoreTimePaddleControlPlusPaddleDetectionRegionDetection
2 General paddle information with a list of games supporting it. http://segaretro.org/Paddle_Control
3 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. http://www.raphnet.net/electronique/atari_usb/index.php



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.

Now you cannot say that I did not warn you :)