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:
[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.

goto top Up


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:

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:



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

goto top Up


Firmware

Of course, the micro-controller has to be programmed or nothing will work:
File(s)DateDescription
sms_paddle-1.0.tar.gz (2.3 KB)
sms_paddle-1.0.hex (619 B)
February 21, 2015 (Saturday) Initial release.
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

goto top Up


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:


goto top Up


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 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.

goto top Up


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!


goto top Up


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

goto top Up


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 :)

goto top Up


Trademarks used in this site are the property of their respectives owners.
Copyright © 2002-2017, Raphaël Assénat
Website coded withWebsite coded with vimLast update: October 15, 2016 (Saturday)