Aglow with radiant awesomeness.
The Pac-Man
Cocktail Table Project
Software
It's beauty singes your eyes.


Software
(click to download)
Description
MAME
     - hiscore.dat
     - Pugsy's cheat file
Multiple Arcade Machine Emulator. Without it, you wouldn't be here!
     - File to add high-score-saving to games that don't support it
     - To enable ROM bit-twiddling and various cheats/enhancements
ArcadeOS DOS frontend for MAME
autorun.bat (zipped archive)
     - sleep.com (zipped archive)
Little batch file that runs ArcadeOS/MAME on Windows startup
     - autorun.bat calls this COM file
arcadeos.cfg (zipped archive) My ArcadeOS config file, for your reference
Win9x Boot Log Analyzer Used to reduce Windows boot time
VNC Used in combination with wireless LAN for remote access to cabinet


Another major annoyance I noticed when we finally started using the machine was that it took forever to boot up into MAME. (See the software section for an explanation of what is involved at boot). I mean, I was waiting for what seemed like several minutes before I even got into Windows, and then nearly another minute before Windows was settled enough to load all it's crap and finally launch my MAME batch file. This amounted to me plugging in the machine, and then walking away to get a drink or make a sandwich - only to return to the dang "loading Windows" screen (OK, I'm exaggerating, it was only ~150 seconds - but it was pretty bad). I decided it was time to take a look at just what was taking so long for my cabinet to boot up.
Tackling the problem of boot delay can be done from two angles. The first place to look is BIOS, then move onto Windows. In BIOS I disabled all the non-essentials. I told the machine not to "search" for all connected hard drives - and simply defined the only drive and told it what it was, this saves precious seconds of querying the IDE bus. Then I got rid of checking for a floppy and cd-rom drive, and instructed the BIOS to boot straight to the IDE drive. I disabled some other small items, like legacy USB support, and some miscellaneous PCI items. Just telling the PC to boot directly to a user-defined hard disk saved me at least 15 seconds on initial boot, I swear. Next, it was on to reducing the Windows load time.
I've messed with reducing Windows load times before, but only on Windows XP - and for XP Microsoft kindly provides a little file called bootvis.exe that will log the windows boot process, show you how long each item takes to load, and even optimize your files and loadings to increase boot efficiency. Too bad bootvis only works with WinXP. So, I once again hit Google in search of some analogous tool for Windows 98. I hit paydirt with this free boot log analyzer for Windows 9x. I highly recommend this program. I downloaded and installed it, and instructed it to analyze my bootup. I found that most of my delay was being caused by the wireless NIC card searching out for a DHCP host (something I had already suspected). There were several other drivers and DLLs loading that I had no need for. By using the boot log analyzer and msconfig to disable startup items and services, in combination with optimizing the BIOS settings, I shaved ~120 seconds off my ~150 second boot time!! What a difference it made, I would say that this is an essential exercise for anyone wanting to increase the efficiency of their Windows-based MAME machine.
 
Ever since my original plan to install Windows XP on the MAME system crashed and burned, I have been hung up on the idea of how cool it would be to use the "remote desktop" to control the cabinet system. For those of you who may not know what remote desktop is or does, it's basically a terminal program like PCAnywhere, but it's built into Windows XP Pro. What it does is allow any machine running Windows XP Pro to be controlled remotely - from another PC. So, you run remote desktop on any machine in your house - and give it the IP of the target machine (the one you want to control, the MAME machine in my case). When it's connected, you're brought into a full screen mode, and it's just as if you were using the target machine - but you're using the keyboard, mouse, and monitor of your client. This is a great feature, because I would potentially never have to open up my MAME cabinet and use it's keyboard and mouse to make any configuration changes. All messing with the remote machine could be done from any other PC in the house. I would have complete control over the MAME cab from my desktop PC. Another reason this would be great would be that it avoids the problem of trying to get Windows to display properly on the 640x480 arcade monitor.
So, even though I'd gone back to the Win98 setup, I was still obsessed about being able to remotely control the MAME cabinet. That's when a buddy at work suggested I check out a little program called VNC, which is short for Virtual Network Computing. This program does the same thing that WinXP's remote desktop does - but it's cross-platform. Meaning you can remotely control, say, a Unix desktop from a Windows or even Mac machine. The best part about it, it's freeware, and it works! So, I installed the VNC server on the MAME machine under Win98, and the VNC client app on my laptop. As a test, I installed the wireless PCI card in the MAME machine - and connected via VNC. To my amazement, it worked perfectly on the 1st try. I was now looking at the desktop of my MAME machine (which was in the other room), on my laptop!
Another cool feature of VNC is that it converts the display of the machine you're viewing to the video config of the machine you're viewing it from. That may sound like not such a big deal, but it's actually really cool in the context of controlling my MAME cab. See, the MAME cab is set to 640x480 screen resolution at 256 colors - because that's what the arcade monitor supports. So when I remotely access it from my desktop PC, which is set to 1024x768 at 16-bit color, it converts the MAME display to that resolution. Making it much easier for me to work on it than if I were viewing Windows in a 640x480 resolution on an arcade monitor!
So, with Win98, VNC, and a wireless PCI card - my MAME machine can now be completely controlled and maintained from any other PC on my home network. In fact, if I didn't have a firewall - it could be controlled from any machine on the internet!! But, I use a NAT firewall so all my machines behind it have un-mappable IPs. Long story short, I should never have to deal with trying to pull a mouse and keyboard out of my MAME cab, boot into Windows, or try and change any setup or settings on the arcade monitor. It can all be done remotely, and wirelessly, from any other PC in my house. Sweet!
 
One thing I wanted from the beginning, was to have a truly authentic look and feel to both the form and function of my cabinet. To me, this meant that not only should it look like an original Pac Man cabinet from the outside, it should also behave like one. I wanted it to be, first and foremost, a Pac Man machine. Yes, there is a powerful MAME machine with hundreds of other games hiding underneath it all; but when someone turned this machine on, my desire was for it to boot up and start Pac Man just like a true cabinet would. I wanted to make ArcadeOS boot directly into Pac Man each time it started.
Well, I looked, there's no ArcadeOS setting for "play game X on each load." The closest thing they have to auto-loading a game on startup is a switch that makes AcrcadeOS load the last-played game on startup. This was great if the last-played game was always Pac Man, but that just isn't the case. So, with a little batch file trickery - I whipped up a couple commands that made it so Pac Man was always loaded when ArcadeOS started.
Here's how: ArcadeOS uses a text config file, "arcadeos.cfg," to keep track of things. One of the many things it tracks/controls are the games in it's master-list, and each game is referenced by an offset/index number. In the CFG file, there is an option called "Automatically start last game played" which, when set to '2' for "always," uses the offset of the last-played game (also stored in the CFG file) to re-load that game on startup. Whenever you exit ArcadeOS, the arcadeos.cfg file gets updated with some new values - one of these values being the offset number of the last game you played (it's actually two items called "offset of last game run" and "last game run" in the CFG file). So, as I said above, as long as Pac Man is always the last game played, ArcadeOS' "Automatically start last game played" option would give the exact behavior I wanted.
So, I fired up the machine, loaded Pac Man, and then exit ArcadeOS. At this point my arcadeos.cfg file had been updated to show the last game I played as Pac Man. Right now, the arcadeos.cfg file is perfect for what I want - if I started ArcadeOS right then it would go directly into the Pac Man ROM. So, all I did was save a copy of this version of the arcadeos.cfg file as "arcadeos.cfg.paconly," and save it in the same directory as the arcadeos.cfg file. I bet you can see where I'm going here! Then, in my master batch file , I have the command "copy /y arcadeos.cfg.paconly arcadeos.cfg ." This command essentially creates a copy of the "paconly" CFG file and renames it "arcadeos.cfg" ( the '/y' switch ensures that there will be no prompt asking if I'm sure I want to replace any file already named "arcadeos.cfg). So now, no matter who is on the machine last and what game they were playing when they quit ArcadeOS, the golden "paconly" CFG file will be what ArcadeOS sees on each new run instance - thus ensuring that the machine powers onto Pac Man with each start! The only caveat here is that if you change the ArcadeOS game list in anyway (import new games, reorder the list, etc.) - the game offsets may change, and what was the Pac Man offset before may no longer be. You'll know it's happened it all of the sudden your cabinet starts loading some crazy game with each boot instead of the desired game. To solve this, simply quit ArcadeOS on the game you wish to load at startup - and save that arcadeos.cfg file as your "golden" one. Voila!
One thing I did find with my MAME autorun batch file is that Windows 98 does not like to hop right into a DOS app without taking care of it's boot-up housecleaning first. Windows has to load a bunch of drivers and apps when it 1st comes up, and anyone who's dealt with Windows before knows that there's that "settling" period while the OS gets situated before you have all your resources. Turns out that if I launched right into the batch file when Windows was loading (i.e. added it as a startup item) it would start loading and then get interrupted by Windows, which would minimize the DOS window and render ArcadeOS/MAME useless. I solved this by downloading a little program called "sleep.com" for DOS. This little app can be run from the command line and accepts a number-of-seconds parameter which tells it how long to "sleep," or delay until the next command in the batch is executed. The 1st line in my autorun batch file is "sleep 1," which adds about a two second delay before launching into the ArcadeOS loading. I tested it out, and a 2 second delay was a little as I could get away with without my DOS window being interrupted and minimized.
 
Something that I didn't think about until my wife and I started playing more games, was the fact that it's totally cool when your high score for a particular game is saved for all to see (and attempt to beat!). Only problem is, some of the earlier games didn't support a high score feature through a power cycle. Original Galaga machines, for instance, had no memory in which to store a high score - and would lose all scoring information when unplugged! There was a popular board hack back in the day that added memory to game boards where high score information could be saved. And, since the MAME ROMs are simply true rips of the images in the old game boards - games like Galaga and many others don't support a high score save feature from play-to-play. So if my wife got to level 22 on Galaga, and then I played some Pac Man - her Galaga score was gone forever! We needed the bragging rights, so I started looking around. Lo and behold, just like the hardware hacks of old, there are MAME ROM add-ons that save high scores on ROMs which do not support it. On the official MAME website (www.mame.net), you can download the latest "hiscore.dat" file - which adds high-score saving ability to many games that don't natively support it.
On a somewhat related note, MAME users may find it useful to download the latest "cheat file" for MAME. While this file has nothing to do with high-score saving, it does enable various "cheats" in lots of MAME ROMs. The cheat file enables you to twiddle with the emulated bits of each rom, giving you access to such things as unlimited lives, level-choosing, and much much more. If you're interested, I recommend looking for Pugsy's MAME cheat file (http://cheat.retrogames.com) - my wife can't play Frogger without it!