In the previous post, I spoke about the motivation to build my own arcade machine. This time I'm going to start showing you how I actually did it.
My years of computer programming have taught me that the best way to start a large and daunting project is to take the overall problem and sub-divide it into lots of little problems. The idea is that you can abstract away the scariness of the overall goal and just focus on small tasks, whose sum will (well, may) reveal something awesome.
So I sat down and started jotting down all of the things I could think of. I ended up with a list that contained things like:
- Find old monitor
- Get old computer or Arduino
- Work out how to get component speakers working
- Buy thing to cut wood good (It's called a Jigsaw)
- Buy lots of wood
- Learn how to use jigsaw
And so on...
One of the tasks that seemed the scariest to me was "Work out how to wire Joysticks and buttons into computer". I had no idea how to do this, or even if I'd phrased the task correctly. And so I did what every good developer does: I started Googling. Pretty quickly I came across a company called Ultimarc who produce a product called the I-PAC (no relation to any Apple product).
The I-PAC is a PC interface to industry-standard arcade controls: A keyboard encoder. In other words, it translates button presses and joystick movements into key strokes on a normal PS/2 keyboard. And it's re-programmable so you can assign new keystroke outputs to each pin.
I excitedly bought the i-PAC along with 8 arcade pushbuttons and a joystick called the Mag-Stik Plus. While I waited for my package to arrive, I went to my local electronics shop and picked up some hook-up wire, crimp connectors, a small vice and a beginners electronics kit that had some wire cutters, a soldering iron, some solder and a bunch of heat shrinks in different sizes and colours. I was all set!
After some searching I'd found an old monitor (in my wardrobe), found an old computer (the old office file server, a Dell setup from the early naughties) and purchased a shitload of wood (or as I now knew to call it: MDF). I reformatted the old Dell computer and chucked Linux on there so I'd feel more comfortable. I also noticed that the machine had an OK old graphics card in there! I thought that I may be able to use it to get some more advanced arcade games working. So I decided to inspect it a bit more closely and swiftly snapped off a few diodes... Oh well, there goes that idea.
My apartment is small.
When my package from Ultimarc finally arrived, the first task I set myself was to wire up the joystick so that when I jiggled it my computer would receive the appropriate arrow key strokes. This, luckily, turned out to be pretty simple. The joystick had four microswitches on it; one for each direction. I needed to run a wire from each microswitch into the appropriate pin on the I-PAC. All four microswitches also needed to be grounded, which I accomplished by daisy-chaining them using a bunch of wires all connected together in the right way. The hardest part was getting the length of the wires correct. I must have gone through 20 meters of the stuff...
When I felt like I'd got everything hooked up correctly I plugged the I-PAC into my computer via USB and started gently moving the joystick head down. I expected that it would either do nothing or just simply blow up. But, no. It worked! It fucking worked!. I was so excited that I made my girlfriend watch me move around a text document using a Joystick that was flimsily attached via some probably-too-short hookup wire.
The joystick connected to the I-PAC. Dangerously close to the sink.
I'd hit my first milestone. In software, it's often essential to create what's known as a "proof-of-concept" before taking on a larger project. It's essentially a super scaled down version of the final product that demonstrates the essence of a potential solution. This probably-poorly wired joystick was my proof-of-concept. And so at this point I knew that I was going to succeed to some degree. I still had no real idea what success would look like, but I knew that, for better of worse, I'd produce something!
My next goal was to fully wire the player controls and mount them into their final resting place. But I'll talk about this more in the next part. Stay tuned.
Make better choices about your code and your career.