How To Build An Arcade Style Joystick for the PC

Well, my adventure started out with a simple goal: I wanted an arcade-style joystick console that I could use with my PC. I hate those little hand-held sticks and game pads. The controls are too small and I get thumb cramps. I wanted a big, hefty console that I could really pound on. I figure someone must have made one, but my Web search turned up only two sites that offered them for sale. One of the solutions plugged into the keyboard; I guess it sent out keycodes for the arrow keys and such. The other one was too expensive or something.
So then I had the idea of just making my own. I couple of the people I work with are arcade machine hobbyists so they know a thing or two. And it couldn't be that hard, right?

The first problem
There is one major difference between a PC joystick and an arcade joystick: PC joysticks are analog and arcade joysticks have microswitches (i.e. digital). It turns out not to be a big deal since the games that I was going to use this for don't require position information. In fact, the only application I can think of that needs position info from a joystick are drawing programs, or games that need some sort of acceleration input, neither of which I have. So I figured I could just fake the correct analog levels using the new joystick's microswitches.

Finding parts
The first thing I did was request a catalog from Happ Controls, a company that sells arcade parts, and ordered a joystick and two pushbuttons. I also scalped a cheap PC joystick that I had lying around to see how it worked, and I ended up using its cable instead of making my own.

Wiring it up
Here's a wiring diagram that some intrepid soul created from my text description below. You visually oriented folks may find it easier to reference the diagram as you're reading through the text. This diagram is for a 4-button joystick, which I don't have and can't verify. I assume that you can extrapolate my 2-button description below to get what's in the diagram. [I have more info from for wiring up 1 joystick with 8 buttons or 2 joysticks with 2 buttons each (Smash TV!!!). Use this utility to verify your connections.]

A word of caution before you begin - Don't solder everything together. Solder or crimp the wires to quick connectors, like spade connectors, and then use the connectors to hook stuff up. You want to be able to change the connections around when it doesn't work and disconnect from the joystick cable if and when things break.
First of all, the joysticks and the pushbuttons use microswitches. These have a tiny spring switch and three male spade connectors: common, NC, and NO. Normally, when the switch is not being pushed, the common pin is connected internally to the NC (normally closed) pin. When the switch is pressed the the common pin gets connected to the NO (normally open) pin. The wires from the joystick cable have to be wired to the correct pins of the microswitches.
There are a total of 7 wires coming into my PC joystick used as follows:

  • Fire buttons
    There are two buttons with one wire for each plus a common wire for a total of three wires. I don't know if the color scheme is standard at all, but the common wire on my joystick is red, button 1 gets black, and button 2 gets brown. The red wire gets connected to the common pins on both microswitches for the buttons. The black wire goes to the NO pin the button 1 switch, the brown to the NO pin on the other.
        ------- Red -----\
        |CMN              |
    /---^--\              |
    |    NO|-- Black      |
    |    NC|--            |
    \------/              |
        ------- Red -----/
    |    NO|-- Brown
    |    NC|--
  • Joystick
    The PC joystick has metal brushes on each axis that move against some carbon-looking strip, and that acts as a pot which yields 0 - 130K ohms on each axis. There is one wire for each axis plus a common wire for both for a total of three wires. On my joystick it's orange for the common, blue for one axis, and white for the other.
    The trick is to make the 4-microswitch arcade joystick look like a 2-axis analog PC joystick. I consulted one of our hardware dudes on this since I don't know jack about circuits. It turns out the idea is that for each axis you want 0 resistance for one direction, 130K for the other, and ~130K/2 for centered. This requires 4 68K resistors (closest value we have) wired thusly:
    [Underside view of arcade joystick]
                                   |CMN         |
          Blue                 /---^--\         |
          ---------------------|      |         |
                      +========|NO    |         |
                      |        |   A  |         |
                      += 68K ==|NC    |         |
                               \------/         |
                                      +---------+                         Orange
        +--------------------+        |                   ------------+---------
        |CMN                 |        |                   |CMN        |
    /---^--\                 |        |               /---^--\        |
    |    NO|== 68K =+        +------------------------|      |        |
    | C    |        |                 |      +========|NO    |        |
    |    NC|========+                 |      |        |    D |        |
    |      |----+                     |      += 68K ==|NC    |        |
    \------/    |                     |               \------/        |
         +------+                     |                               |
         |                            |                               |
         |       +--------------------+                               |
       White     |                                                    |
                 |                                                    |
                 |                 -----------------------------------+
                 |                 |CMN
                 |             /---^--\
                 |    += 68K ==|NO    |  
                 |    |        |   B  |    
                 |    +========|NC    |
                 +-------------|      |  
    So what you want to do first is make 4 identical wires:
    • Put one end of a 68K resister into a female spade connector
    • Put the other end into another female spade connector, along with a length of standed wire.
    • Put the other end of the stranded wire into another spade connector.
    Put one of these wires on switch B, connecting NO and NC to CMN on switch A. Take another wire and connect NO and NC to the blue wire from the joystick cable (stick a male spade connector on the joystick cable). The thing to remember is that you need the resister on NO on one switch and NC on the other. Do the same for the switch D and C and connect to the white wire of the joystick cable.
    Connect the CMN pins of B and D together and to the orange joystick wire.
    What this gives you is 68K resistance when centered, 0K in one direction, and 136K in the other, for each axis.
    You'll probably have to play around with the connections since the directions might not be correct, i.e. when you push up you're actually going to the left. I don't know if 130k is up, down, left, or right for instance.
  • Testing
    I used the Windows 95 joystick control panel to test my connections. If your joystick isn't wired up correctly it'll tell you that your joysticks hosed. It also has a little cursor box and button icons so you can test if your directions are correct and that your buttons are working.
  • The mystery 7th wire
    This all leaves us with one extra wire, green on mine. My PC joystick has a A<->I switch, which I assume means Apple/IBM. Maybe Apple uses the 7th wire. I just leave it hanging.
  • Physical contruction
    So now that the joystick and buttons are wired up to the cable you have to mount them to something. I wanted something heavy and substantial and also big enough to rest on my lap. I have a bunch of 3/4" planks in my garage, formely a bookshelf, so I used those. I cut two pieces 11"x24". In one of them I drilled one 1 3/4" hole for the joystick and two 1 1/8" holes for the pusbuttons. The pushbuttons just screw into the holes with a retaining ring. For the joystick I had to drill four 3/16" holes for bolts in the proper spaces around the 1 3/4" hole. I then took this board and nailed it to some wood spacers, which I nailed to the other board. Screws would be better but I didn't have any laying around. I used a large staple to secure the joystick cable to the underside of the top board so it wouldn't pull out.

    The end result ain't pretty, but it's functional and it sure can take a beating! And no thumb cramps!