Introduction
I am all about being a kid in an adult's body. I grew up playing video games and I'll probably die playing video games. The only thing is, games nowadays generally SUCK. I mean once you've seen Doom/Quake/Half-Life/Unreal, you've seen all the first-person shooters you can handle. Once upon a time, creativity RULED. Graphics and audio weren't life-like, which forced programmers to use their imaginations in creating new environments unlike anything ever seen. Like I mentioned above, today is all about so-called reality gaming. It was cool for like, 10 minutes...but in the "Golden Age of Video Games", I lived in the abstract worlds of Asteroids, Pac-Man, Tempest, and Donkey Kong.
Then a couple of years ago, a co-worker mentioned that he'd found a program that emulated the classic video games called MAME--Multiple Arcade Machine Emulator. It was simply amazing. <chorus of angels singing> It played some of the earliest (but still most playable) games and supported around 300 titles.
To make a long story short, I changed jobs and more or less forgot about MAME for a while...
Then I rediscovered MAME. It had grown considerably. It now supports a staggering thousands of games--some as recent as the late 1990s! Needless to say, I was hooked all over again...but this time I wanted something a little different, a little more. A little more like the real thing! I could already play all of my favorites but using the keyboard and/or mouse left me short of the full experience. I needed a controller that could fully emulate the feel of those games.
Research, research, research... I scoured the Net in a way that few could for information about where, what, and how I could build one. Sure, I found "the easy way out" but it wasn't quite to my liking...besides I knew it would be fun to build myself and cost me less.
That's when I discovered Build Your Own Arcade Controls FAQ, or BYOAC FAQ for short. It has an excellent combination of content, links, and message board. I asked a few newbie-like questions that were not only answered by some helpful and polite folks but quickly as well!
First I had to choose how I was going to get it to talk to the PC. There are different ways to wire up the controller for it to connect to the PC, but I decided to try scrapping an old keyboard. Any other method was going to probably add $40-100 onto the cost of the project and I was trying to stick to as close as possible to a budget of $100. To use an old keyboard meant mapping out the matrix of the keys, but I had some excellent help. I've made the matrix I used available as well.
Next, I needed to decide on what controls I was going to use. Joysticks and buttons were cheap, but trackballs (like what would be used for Centipede) and spinners (for Tempest) were either hard to find or expensive. (Maybe I'll build another one in the future that has these!) So the question really became, how many joysticks and buttons did I want to use and how I was going to lay them out? I found out that joysticks and buttons are made by Happ Controls and Wico. 2 joysticks would allow for many 2 player games and one person classics like Robotron, where you needed 1 joystick to move and the other to fire. Buttons required more careful thought... I calculated that I would need 8 for use in gameplay and might as well get 7 more for special functions (insert coin, 1 player, 2 player, quit, options, select, and pause) for a total of 15. Seemed like a bit much but I couldn't figure out a way to pare the number down.
I had access to a copy of Visio at work, which I used to diagram the layout of the joystick and buttons. I also sketched out the approximate dimensions and sizes of the enclosure I would need to house my controller. Keeping it simple definitely seemed like the way to go.
All of the other parts (wood, Lexan, wiring, connectors, etc.) came from 2 places: my neighborhood Home Depot and an awesome electronics surplus store, Skycraft. Skycraft carries thousands of every little doodad, gadget, thingamabob, and doohickey you might ever need. It's one of those places that you just have to see in person... And I have made the list available if you want to see exactly what parts and tools I used.
With all of the parts gathered finally, a good friend of my brother offered the services of the tools in his garage. We spent a couple of hours sawing, nailing, drilling and routing away. It surprisingly took about the time I thought it would and didn't require any trips for extra parts. I left his house with a bare plywood enclosure. I then painted it with primer and then a sprayed few coats of gray that dried quickly in the Florida summer heat.
I spent several hours the next night wiring it up. It was painstaking work and I often double-checked my work. It was time to test it and although there were a few mixups, I had it working like a champ.
MISSION ACCOMPLISHED!
Pictures
[Note: Click on any image to see a larger version.]
Parts List
From Happ Controls:
| QTY | Description | Part # |
|---|---|---|
| 2 | Super Joysticks | 50-6084-00 |
| 2 | Red microswitch pushbuttons | 58-9100-L |
| 1 | White microswitch pushbutton | 58-9111-L |
| 1 | Player-1 microswitch pushbutton | 58-9111-L1PLY |
| 1 | Player-2 microswitch pushbutton | 58-9111-L2PLY |
| 2 | Blue microswitch pushbuttons | 58-9122-L |
| 1 | Green microswitch pushbutton | 58-9133-L |
| 2 | Purple microswitch pushbuttons | 58-9144-L |
| 2 | Yellow microswitch pushbuttons | 58-9155-L |
| 1 | Black microswitch pushbutton | 58-9166-L |
| 2 | Orange microswitch pushbuttons | 58-9177-L |
From Home Depot:
| QTY | Description |
|---|---|
| 1 | 2ft x 4ft x 3/4" BC grade plywood |
| 1 | can of spray primer (white) |
| 1 | can of glossy gray spray paint |
| 2 | 2.5" hinges |
| 2 | magnetic cabinet catches |
From Skycraft:
| QTY | Description |
|---|---|
| 40ft | 22 gauge red multistrand wire |
| 40ft | 22 gauge black multistrand wire |
| 46 | 3/16" blade connectors |
| 23 | 18-22 gauge butt connectors |
| 23 | 1N4148 diodes |
| 8 | stainless steel bolts, washers and nuts |
| 3 | 8x2 wiring blocks |
| 5 | rubber feet |
| 5 | bolts, washers and nuts for rubber feet |
| 1 | 1ft x 2ft x 1/8" Lexan sheet** |
| 13 | wire harnesses (various sizes) and wood screws |
** I chose Lexan over plexiglass after reading how Lexan could be cut/drilled (slowly and carefully) with same saws/drillbits as wood. Plexiglass requires special tools.
Other necessary items:
| small wood screws |
| keyboard encoder from old/unused keyboard |
| floppy/IDE/SCSI ribbon cable |
Tools list
| Table saw |
| Drill press with 1.25" paddle bit** |
| Router with wide bit for removal of bulk wood underneath joysticks |
| Pneumatic nail gun*** |
| Power hand drill |
| Various grades of sandpaper |
| Pushbutton wrench from Happ Controls (53-8002-00) |
| Wire cutters |
| Wire strippers |
| Wire crimpers |
| Needlenosed pliers |
| Soldering iron |
| Solder |
| Screwdrivers |
| Utility knife |
** I used the paddle bit to cut the Lexan as well. Be very careful, have your Lexan clamped down, and drill very slowly through it--otherwise you risk damaging yourself, the drill and the Lexan (in order of most to least important).
*** It was much easier using a nail gun to fasten it together than drilling holes to mount metal L-brackets with screws.
Keyboard Matrix
[NOTE: This is for a Compaq/NMB 101-key. It is very unlikely that this will work for any other model keyboard!]
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
| 0 | ESC | G | H | '" | KPD 0 | L ALT | UP | KPD . | ||||||||
| 1 | TAB | CAPS | F3 | T | Y | F7 | [{ | BKSPC | ]} | KPD 4 | KPD 5 | L SHFT | KPD + | KPD 6 | ||
| 2 | `~ | F1 | F2 | 5% | 6^ | F8 | -_ | F9 | =+ | DEL | INS | HOME | PG UP | L CTRL | ||
| 3 | 1! | 2@ | 3# | 4$ | 7& | 9( | 0) | F10 | 8* | F11 | F12 | PRT SC | END | PG DN | ||
| 4 | Q | W | E | R | U | O | P | I | KPD 7 | KPD 8 | SCR LK | KPD 9 | ||||
| 5 | A | S | D | F | J | L | ;: | \| | K | KPD 1 | KPD 2 | KPD EN | KPD 3 | |||
| 6 | Z | X | C | V | M | .> | ENTER | ,< | NUM LK | KPD / | R SHFT | PAUSE | KPD * | R CTRL | ||
| 7 | B | N | /? | SPACE | DOWN | RIGHT | R ALT | LEFT | KPD - |
| Matrix Legend | |
|---|---|
| Control keys | |
| Insert coin, 1P, 2P | |
| Joystick 1 | |
| Joystick 2 | |
| Buttons | |
| Unassigned | |
