- Kinect Z Buffer Noise and Audio Beam Steering Precision
- Eighteen Reasons Why You Should Not Follow Bill Sardi's Children Flu Season Vaccination Advice
- C++ Morsels: Why does C++ distinguish between member and pointer-to-member?
- Mammoth by John Varley
- C++ Morsels: std::for_each functors member variables
- C++ Morsels: Initializer List Execution Order
- Junkyard Wars Snowplow
- The Witling by Vernor Vinge
- 285 Semi Accident at Parmalee Gulch
- Fevre Dream by George R. R. Martin
Atari Joystick USB Conversion
Making a classic Atari 9-pin 8-way-plus-fire joystick work on a modern USB-based computer system, for emulators and playing retro games.
Atari or Atari-type 9-pin joystick
9-pin extension cable or DB9 male cable end or connector
Belkin Nostromo N40 or N45 USB gamepad
Various and sundry implements of destruction, possibly including needlenose pliers, screwdrivers (flathead and crosshead in many sizes) soldering iron and solder, multimeter or continuity tester, razor knife
I’m an old-school gamer. I enjoy the games that I played when I was in my gaming glory years in Junior High (now called Middle School – why is that?) and High School. Pitfall. Pac-Man, Donkey Kong, Frogger, Crystal Castles. Later, Strider, Hard Drivin’, Race Drivin’, STUN Runner, Shinobi, Space Harrier, Rolling Thunder, Assault and Road Blasters came along to broaden my horizons of graphics, gameplay and more sophisticated controls. Once upon a time I even worked for a mega-arcade, doing GUIs for their embedded systems in their networked electronic token management system.
From the vintage of these games, you can guess what era this all took place in. Later still, when I was working for a living and not hanging out in arcades, new games came out with fancier graphics, weapons, characters, special attacks and more buttons to control it all. These passed me by. I long for my gaming salad days and the simple controls, tactics and graphics that somehow seem all the more compelling. When you didn’t have great sound and graphics, you had to make a darn playable game or you’d get stuck over in the corner behind Bagman, with chewing gum stuck in your coin slot.
Nowadays we’ve got personal computer joysticks with more throttles, hats, weapons controls, trims and enough other digital and analog inputs to replicate a 747 cockpit. This is great, if this is what you need. On the other hand we have the Gamepad, a little handheld controller, foreign to my palms. The familiar 8-way digital control is there, with a few extra buttons to make Mario or Sonic or their ilk do more nifty things. Yet, somehow my fingers and tendons (now a bit more worn from more than a decade of coding) don’t find the little direction disk pad thingy to their liking. After only a few minutes of intense play, my left thumb aches worse that the nastiest case of arcade wrist I ever experienced.
Clearly, Generation Y must have hands genetically better adapted to this mode than us old Gen X’ers. Natural selection is at Hand, so to speak. But being a stubborn hacker of the software and some minor hardware sort, I resolved to level the playing field with an ancient secret weapon. The Atari 2600 joystick. Only this one would be souped up to run on the latest USB systems for compatibility well into the future.
A USB joystick, or in fact any USB peripheral, is a complex device consisting of some sort of small microcontroller that can communicate with the USB bus (USB = Universal Serial Bus, so USB Bus is a bit redundant) which is itself a complex mini-network with many nodes all communicating at the same time. The USB bus may have one or more hubs which connect multiple nodes to a host, and which can support on-the-fly connection and disconnection, configuration negotiation and bus contention management.
Other devices coexisting on the USB bus with the joystick might include a mouse, keyboard, webcam or other digital camera device, scanners, ethernet adapters, floppy drives, CD-ROM or DVD-ROM readers and writers, memory card readers, toasters, blenders and microwave ovens. In short, it’s amazing any of this works at all, much less works as smoothly as we’re accustomed to. Therefore, designing and implementing a functional USB interface from scratch or even from an OEM chipset is a daunting task, to say nothing of creating and testing drivers for your preferred OS.
I’m the type of hacker who is opposed to needless work, especially of the non-entertaining and unenlightening type. Therefore, I decided not to reinvent the USB joystick, but rather to find a cheap one with the electronic guts I needed, and cobble the business end of my 2600 stick onto its modern and sophisticated USB hardware.
For my nefarious plan, I chose the Belkin Nostromo N40 joystick. Because it’s cheap. And I’m cheap. And I would feel bad messing up an expensive stick. I did a bit of searching to find the cheapest USB gamepad I could, and netted the N40 for about $12 + S&H. I also picked up an N45 ($15) at the same time, which has a pair of 2-axis analog sticks onboard in addition to the 8-way and 11 other buttons of the N40. This hack should work fine with either, as they share many of the same internals. Some Googling showed owners seemed generally satisfied with the N40 and N45, and indicated that they were compatible with the titles I wanted to run.
First thing to do is to hook up the unmodified Nostromo, and put it through its paces to make sure it works ok and all drivers are installed, configured and operating before we go about breaking things. Nothing’s worse than to finish a project and not know if it’s broken because of what you did, or if it never would have worked to start with. The N40 and N45 both came with driver CD-ROMs, but WinXP on my laptop recognized them right off the bat with no additional installation necessary. I ran the Game Controllers Control Panel app to verify input operation, and tried it briefly with a few games, until my thumb began to hurt.
Now, we start gutting things. Turn the 2600 stick over and remove the four recessed crosshead screws that hold it together.
The top and stick will remove from the boxy base, leaving an etched circuit card attached to one or the other.
As you can see, there are only six live conductors (of the nine in the DB9 connector) that are used, one common ground, one fire, and four directional lines. Examining the joystick’s molded DB9 connector shows that three of the pins obviously don’t even have a mating conductor in their hole, so we already know which DB9 pins are live.
Using the multitester or continuity tester, we check pins until we can identify which DB9 pins go with which internal joystick connections. Here’s my map – the color names refer to information from a later stage of the process.
Now we need to crack open the Nostromo and map where these wires will go. Crack is the right word. If you turn the Nostromo over, you’ll find seven more-or-less obvious crosshead microscrews that you’ll need to remove. One is located under a narrow sticker in the center of the unit, shown removed here.
There are two more under the ugly rust-colored palm grips you see here, and you’ll need to pry heavily at the outside edges of the rust-to-black junction to break the superglue bond used to hold the palmgrips on. They built this baby to withstand some destructive hands.
Once all nine are removed, we can turn the unit over and study the mainboard of the joystick. The brains of the beast seem to be in an IC located under the black plastic disk material right of center between the cable and the right button area. All button traces lead to this.
Fortunately, the wiring makeup of the Nostromo is essentially identical to the Atari. One common ground, and five signal lines for the four directions and fire button (Nostromo’s B1). Each lead meets up with the ground line in an alternating 1d matrix of exposed traces, that a conductive button presses down onto from above. Next to each contact pad the signal-line side of the matrix has a nice exposed pad of tinned PCB that will be easy to solder on without needing to scrape off the nonconductive top coating. I tinned a little extra solder onto these pads to make the connection easier, later. Near where the main cable enters the back of the unit there is already a through-hole pin connected to the ground.
The next step is to chop off one end of the DB9 extension cable (oddly enough, also a Belkin – I had several lying around from Belkin UPSes with serial ports). Keep the male end/connector and map the association of pins to wire colors (see my notepad in a previous step – doubtless your mapping and colors will be different for your victim cable).
In the end, I needed to expose nearly three inches of each wire (remember, three wires are unused) and strip and tin a couple of millimeters on the end of each. I fed the DB9 cable end out through the same location the USB cable uses, and trimmed a bit of plastic from the strain relief on the top part of the Nostromo case. A little superglue made sure the DB9 cable would not slip out. I gently soldered down each DB9 wire to the respective pad or pin in the Nostromo, being careful to ensure the new wiring would not get in the way of the original conductive buttons of the Nostromo. When all was complete, a few more dabs of superglue ensured the new wires would stay out of the way permanently. (I wanted the Nostromo to still be operational, as it’s good for games that need more buttons).
The last step is simply to reassemble both the Nostromo and the (unaltered) Atari stick, plug the Atari into the Nostromo’s new DB9 connector and try it. I would recommend testing the setup before putting the Nostromo completely back together because that baby is a pain to assemble and disassemble. Plug the Nostromo into your system without the Atari stick connected, and do a prelimianry smoke check. If all seems well, fire up the Game Controller Control Panel and open the Properties window to confirm the device is installed, communicating and operating. Check all your buttons at this stage in case you got some gunk on a pad. If everything is still ok, plug the reassembled Atari stick into the DB9, and run it through all inputs. It should be indistinguishable from inputs coming from the Nostromo buttons. Here you can see the fire button being pressed and the stick being moved Up and Left simultaneously.
Put everything back together (I left off the rust-colored grips), and you’re ready to open a can of whupass on the classic game of your choice. Invite the neighborhood whippersnapper over to be bewildered by the strange little glyphs and heart-rendingly pathetic blips and bloops of your favorite antique game. Feel faintly smug as you achieve world domination of your pet pastime, only ten years after it was last seen in the wild. Feel less smug when the unimpressed whippersnapper asks you what the blue blob with the antenna that goes chukka chukka is supposed to be. Ah, well. Heathen unbelievers.