
I went through several iterations of the operating system for my cabinet. The earliest version of my cabinet used DOS; this had the obvious advantage of extremely low overhead, but was simply too limiting due to lack of hardware support. The first computer that I used in the cabinet was an old AMD K6-3/400 machine with a whopping 128 MB of RAM; low overhead was an important consideration. Network support, CD Rom support, etc were near impossibilities. Gameplay was pretty fast, sound worked...OK, but it was just too limiting.
Most of the build-your-own sites at this time were recommending Windows; great in theory. Hardware support was certainly there, and there were lots of options for game selection front-ends. There was a big problem, however - Windows just isn't well-suited for kiosk operation. What do I mean by this? Well, ideally, when the arcade cabinet is started up, it should display the game selection screen as quickly as possible. The experience should hide the fact that there is any operating system involved at all. In practice, it was just unacceptable; I found myself having to grab the mouse and keyboard far too often, the game selection screen would lose focus (it would be displayed, but wouldn't respond to controls until I dragged out the keyboard, switched the game selection screen program to the front, etc), I had continuous sound problems, dialog boxes would pop up on screen for whatever reason, etc. Overall, it was just an unacceptable situation; I needed a more stable solution.
Linux was an obvious choice for the operating system for my arcade cabinet. It is fast, stable, and well-suited for embedded applications; an arcade cabinet is simply a special-purpose embedded device. I had been running Linux as my primary operating system for years, and was intimately familiar with it.
I initially chose to roll my own simple embedded distribution for the cabinet. This worked well, but was a lot of work to keep up-to-date. After evaluating several options, I decided to use one of the most popular distributions available, Ubuntu Linux.
I had to make surprisingly few modifications to the core system to make it suitable for my needs. I started with a basic server installation of Ubuntu Linux; no X Windows, and very few additional packages. The changes that I did have to make were pretty minimal:
Kernel modifications were pretty minimal. I removed several modules from the kernel build which tend to slow down the boot process, added support for my Matrox graphics card, added support for the graphic framebuffer (to display a graphic at startup rather than an ugly boot screen), and added suport for my USB LCD screen. If you are interested, you can download my kernel configuration Here.
More to Come
More to Come
I have all of my ROMs, snapshots, audio samples, etc installed on a second hard drive to keep them isolated from the primary operating system. This drive is mounted read-only under /exports. Actually, the whole system is mounted read-only; one of the goals of any embedded system should be to act like a piece of consumer electronics. In part, this means that the system should be able to be turned off during operation without seriously affecting system stability. Mounting the filesystem read-only is one step in ensuring this ability.
As a future modification, I plan on installing the UnionFS filesystem; this cool patch creates a file system which can overlay a physical, read-only filesystem (like a CDROM); it is, however, writeable. In my case, I could flush this overlay to the physical hard drive when the system is properly shut down - this provides the best of both worlds. I've sucessfully used this on other projects; it is available Here. Well worth a look.