If I were to make a functional arcade cabinet, I'd have to do some of the boring stuff too: an arcade cabinet doesn't consist of a processor and video hardware, but also needs to make sound and have a way for the user to control it.
First the buttons and joystick: a video game is a bit boring without
a way to control it, right? For the joystick, I had a nice Alps analog
mini-joystick, of the sort you also see in various modern gamepads. I could
just glue that into the case and be done with it. The buttons needed a bit more
work: they needed to stick out from the casing a bit without falling out when you
hold the case upside-down. I archieved that by gluing a smaller circular
cutout on top of a bigger one and then using a rotary tool to archieve a tapered
effect on the bottom:
To interface the buttons and analog joystick to the Raspberry Pi, I used M-Joy, which
is a firmware you can burn into an ATMega8 to use it as an USB HID-based joystick.
I didn't have an ATMega8 around, so I used a variant
someone modified for the ATMega88. (Local mirror)
Everything fitted neatly into the space under the buttons:
For the audio portion, I decided to use the internal speakers from a broken
Dell laptop. The speakers are a whopping 2 watt and small enough to fit in the
upper part of the arcade cabinet. I got two of them so I could do stereo sound...
not that I'd think there would be much stereo left with the speakers being right
next to eachother, but because it looks right.
I also needed an amplifier for the two speakers. The original laptop mainboard
had a TI TPA6017 2W amplifier,
housed in a tiny TSSOP package.
This part needs only a few caps as external components, and I could easily desolder
it using a hot-air gun. The disadvantage is that it's
really small, so I decided to dead-bug it on a bit of prototyping board, with the
needed SMD-capacitors on the bottom of the PCB.
I basically followed the reference circuit as shown in the datasheet to build the amp, so I won't bother you with badly-drawn schematics for it. There's one thing I couldn't really do, though: the metal pad in the center of the bottom (now top) should be connected to a ground plane on the PCB, to work as a heat sink. My deadbug implementation doesn't really have that, so I must be careful not to drive the amp too hard.