SNES-to-Parallel Adaptor

Using Super NES gamepads on your PC

Note: originally published in 2004.

Console game emulation is fun, but playing with your keyboard blows. No PC gamepad is really suitable - cheap control pads feel cheap, and expensive ones are far too much pad for your need. Super NES game pads are the truly best choice for playing games for the NES, SNES, Genesis, Master System, PC Engine / Turbo Grafx 16, and any MAME game that uses digital controls. Building an adaptor to connect them to your PC is fast and easy. Read on.

Example Adaptors

Pictures of two SNES-to-parallel adaptors are below. Figure 1 shows the first adaptor I built. This was built out of two SNES controller cable extensions (easily found on eBay) and parts available at your local Radio Shack. It is excellent for travel play on a laptop and is very sturdy.

Safety tip: when using this adaptor to play "Super Bomberman" on an international flight, do not explain how to play the game out loud to the passenger next to you. If you do, I recommend substituting words like "banana" for "bomb" and "peels" for "explodes".


Figure 1: The 2-player SNES adaptor. Excellent for laptop play.

Figure 2 shows the second adaptor I made. This was intended as a kind of Super Multitap / NES Four-Score-like device. IE- a long cable to the parallel port on a desktop PC, with an easy jack-in-point in the middle of the play area. This device was constructed by disassembling four controller extensions to get the SNES female jacks (a SNES console or Multitap might have been a better choice), then gluing them into a Radio Shack project box. It uses the same DB-25 male plug, connected to the project box by 2 meters of CAT-5 network cable.

I do not recommend this design unless you have a lot of time on your hands, and you know how to solder. Model #2 took 10 hours of work, while model #1 took only two.


Figure 2: The 4-player adaptor and AsciiPad SNES controller.

Circuit Design and Pin Assignments

The following data is collected from various sources online. Please note that many websites have incorrect circuit diagrams or pin assignments. All the data on this page has been tested with my own hardware, and complies with industry standard pin numbering.

These are the pin assignments for up to five players (should you wish to wire all five). I have never used a 5th control port. For some reason, the available SNES drivers for Linux assume different pin numbers for the controllers. Also note that both pins 18 and 19 are available as ground, but you only need one of them.

Type Parallel Port (Windows) Parallel Port (Linux) SNES Port
Clock 2 2 2
Latch 3 3 3
Power 4 - 9 4 - 9 1
Ground 18 - 19 18 - 19 7
Data1 10 10 4
Data2 12 11 4
Data3 13 12 4
Data4 15 13 4
Data5 11 15 4
Figure 3: Pin assignments for parallel and SNES controller ports.


Figure 4: Pin numbers for the SNES and DB-25 parallel (male, front view) ports.

Figure 5: Circuit design for 4-player model. Colors of actual wires do not match this diagram, and vary by manufacturer.

Hardware

To construct an adaptor similiar to the one seen in Figure 1, you will need the following:

SNES extension cables run between $2 and $5 each on eBay. The rest of the parts can be found for less than $5 total. Several links above are to radioshack.com, which is easy to order from but overpriced. I recommend you find them from your local electronics supply or a cheap online supplier.

Construction

  1. Cut the extension cables.
    You will use the female end of the SNES extension cable, the end that the SNES controller plugs in to. Measure at least 30 to 100 cm from the female end to where you will cut. This length will be the length of the finished adaptor, so choose wisely. You will not use the male end. Do this for each extension cable you will use.
  2. Label the SNES sockets.
    Pick one now to be controller socket 1, 2, and so on. Mark each with a pen.
  3. Strip the wires.
    Using your wire stripper, remove 2 cm from the outer protective coating of the bundle of wires. Then strip 1 cm of wire shroud off the end of each inner wire. The inner wires may be very fragile. If so, scrape off the wire shroud with a knife instead of using a wire-stripping tool. Be prepared to trim these wires back during the procedure to ensure the outer protective coating runs up to the D-Sub hood in the finished product.
  4. Identify which wires go to which pins.
    SNES extension cables aren't colored by a standard. The same manufacturer tends to use the same colors, but you should always check. Use your multimeter to check continuity. The easy way is the setting usually denoted by a musical note, which means the multimeter will make an audible beep when there is little resistance (i.e. a connection) between the two probes. Identify the cables that go to each pin in
    Figure 3. You will not use pins 5 and 6, so if there are wires inside the cable corresponding to those pins, just cut them off.
  5. Connect the 6 diodes to pins 4-9 on the D-Sub.
    Now we move to the crimp-on D-Sub connector, and attach the diodes. This is the trickiest part, because diodes are one-way devices, and you must know which end to connect to which. Diodes have two ends, an anode and a cathode. They will only conduct power when the cathode is negative with respect to the anode. Diodes are marked with a colored band (typically black) nearer to the cathode end. Take one pin from those supplied with the D-Sub connector. Using pliers or a crimper, crimp the pin around the anode end of the diode. Then insert this pin into socket 4 on the D-Sub. Do this 5 more times, one diode to each of pins 5-9. The pins will latch in as they fit into the socket. For a simple explanation of diodes, see this.
  6. Connect all SNES pin 1 wires to the diodes.
    Take the cathode ends of the diodes and twist them together. Take care not to short to the anode end of any diode. Then take a crimp-on butt connector and insert the twisted cathode ends into one end. You may need to trim the leads first to ensure everything fits inside the D-Sub hood. Then take all the stripped SNES pin 1 (power) wires and twist them together as well, and insert into the other end of the crimp-on connector. Make sure contact is made with the cathode ends of the diodes. Then crimp the butt connector with a pair of pliers, insuring a secure fit.
  7. Connect SNES pin 2, 3, and 7 wires to D-Sub pins.
    Take all the wires SNES pin 2 (clock) wires and twist them together as in the step above. Crimp then on to a D-Sub pin, and insert into socket 2 of the D-Sub connector. Do the same for SNES pins 3 (latch) and 7 (ground), for each of the pins/sockets as defined by Figure 3.
  8. Connect SNES pin 4 wires to the individual D-Sub pins.
    SNES pin 4 is the data pin. Unlike the others, there is one D-Sub pin for each SNES controller. Do not twist all the SNES pin 4 wires together. Instead, connect just one wire to a D-Sub pin, and insert in the proper socket as defined by Figure 3.
  9. Test everything.
    Make sure all the pins are seated properly, and use a multimeter to test that there is electrical connectivity from each D-Sub pin back to the SNES female extension socket. Remember that pins 4-9 will only conduct in one direction, so if you don't get connectivity there, reverse the red and black multimeter probes and try again.
  10. Close the D-Sub hood.
    Enclose the entire assembly in the D-Sub hood. Make sure the diodes, crimp-on butt connector, and all wires fit securely. See Figure 6. If possible, clamp down the metal retainer that came with the D-Sub hood on the outer protective cable, so it resists tugging. If not, use electrical tape to make the cables thick where they exit the D-Sub hood. The whole cable should fit snugly into the back of the hood.

  11. Figure 6: The 2-player SNES adaptor with D-Sub hood removed.

  12. Install the drivers and test.
    Install the
    drivers as below. Connect the adaptor and a controller in port 1. Then open the Windows Control Panel and select "Game Controllers", then the "Properties" button. Test that the buttons respond. Repeat for all controllers.

Windows Drivers

There are a number of drivers available to make your new hardware work as DirectX game controllers, which nearly all Windows emulators support. I personally recommend PSXPad. Development on this driver appears to have stopped two years ago, but it works perfectly in Windows 2000 and XP, and I have no complaints. Download it from me here.

PSXPad works with up to 4 controllers. When installing, select "1-4 pads are connected by Standard connection." After install, two "New hardware wizard" windows will appear for each controller you install. Proceed regardless of the unsigned driver warnings. Bonus: the installation is in Engrish, for your amusement.

Some prefer DirectPad Pro. And of course, there is the original SNESkey. I have never used either.

Linux Drivers

Linux drivers are included as loadable kernel modules with kernel 2.6 and higher. To load them, run the following commands as root:
   modprobe -r lp
   modprobe gamecon map=0,1,1,1,1,1

This will disable lp printing to the parallel port, then load the gamecon joystick driver and tell it to create joystick devices for all five controllers. To use fewer controllers, replace the five 1's with 0's according to the controller wiring order for the "Linux" pinout above. However, the driver will only work until the next reboot. To make it load at boot time, make the following changes to /etc/modules:

   #lp
   gamecon map=0,1,1,1,1,1

I also recommend installing the Debian package joystick, which will give you the jstest command, useful for testing the function of the joysticks. To test the first joystick, use the command jstest /dev/input/js0.

Before I understood how to use /etc/modules, I wrote a handy init script to do this. If you made the above change, you don't need it. If for some reason you do, download it here and install it according to instructions in the file.

The above instructions work fine for me running Ubuntu GNU/Linux 5.04 "Hoary Hedgehog". They should work fine with any modern distribution running kernel 2.6 as well.

Acknowledgements

I would like to thank and recognize the following people for their assistance to this project:
  • Daniel Benton, for his JUMP Interface page and for supplying some of the data reproduced on this page. Although I prefer to use the control pads unmodified, his diagrams helped a great deal with construction of these adaptors.
  • Adam Wozniak, for his assistance with diodes and how to tell the negative end from the positive with a multimeter.
  • Yoshinari Kimura, for PSXPad, and for releasing an English-language version.
  • The developers of emulators such as Snes9x, FCE Ultra, Gens, MAME, and many more. You people put a lot of time and effort into letting the rest of us relive our youth, play games we'd otherwise never see, and enjoy cool projects like this.
  • My friends, for indulging my ranting and obsessing about this, and politely playing video games with me when they'd rather be partying.
  • My faithful test monkey Matt, for carefully testing all the failure conditions of these instructions, unintentionally.
  • The devious Travis Mooney, for convincing me to switch to Linux, and thus figure out the driver support for this project.
  • My beautiful wife Jayme, for not only tolerating all this crap, but also appreciating the adaptors while playing Crystal Castles.

Page last updated 2005.05.19. All content Copyright © Tyler J. Wagner.