I have long been infatuated with Ms. Pacman. When I first encountered the game enclosed in a cocktail table, I knew I had to have my own.
At about the same time that I began contemplating this project, my brother's girlfriend was looking to get rid of an old computer. I gladly took it off her hands. Although it is greatly underpowered by today's standards, I only required the computing power of 1981.
The first problem I encountered was input. Sharing a single computer keyboard is not conducive to retro-style gaming. Instead, I purchased joy sticks from X-Arcade and pushbuttons from You-Do-It Electronics. While their are custom solutions for wiring these peripherals to a PC, I opted for a cheaper alternative. I bought an old PS/2 keyboard at a yard sale for 50 cents, removed the controller, and soldered leads to my peripherals.
Another hurdle was the power switch. The monitor operates on a latch while the computer powers up on a momentary switch. I wanted a single switch to operate the entire system. My friend Everett threw together a simple PIC circuit to accomplish this task. Upon receiving power, it sends a momentary signal to an open port. I merely had to connect this circuit to the PC's internal power supply. When the system is plugged in, the monitor turns on and the PIC sends a signal to the PC to boot. Thanks, Everett!
I first removed Windows XP and installed Ubuntu. Although my experience with the operating system is limited, I knew it would give me more control over the boot process. This was essential for the kind of power-up routine I required: quickly loading directly into a games list without the need for any user input.
I programmed this games list in Python and PyGTK. It was trivial to implement a grid of buttons that could be traversed using the arrow keys. For extensibility's sake, I de-coupled the game file information from the program. Games are loaded according to an external plain text file. In order to allow multiple systems to be emulated (i.e. Super Nintendo), the file also specifies which emulators to use. Finally, command line switches for each emulator can be set, so that each emulator can be run according to the user's preference.
I feel the code still has a ways to go before it has utility for others, but this seems like a good start.
The cabinet represented the biggest challenge to me. Woodworking is something I have no experience with. Luckily, my father is an excellent handyman. Together, we have been designing and building the table. As with the other aspects of this project, I have been learning some neat techniques along the way, like routing edges.
I don't anticipate the final product to be exceptionally pretty, but it will provide some nice functionality (i.e. folding "wings", caster wheels, and a working arcade!).