I build a MAME Cabinet

Here is a list of updates I have made to the MAME cabinet since the completion April 2005. Some of the updates are minor while others could be considered major hardware rebuilds.

After several years without any hardware changes, the capacitors for the CPU's voltage regulator on the Gigabyte motherboard decided to pop while I had the system in the shop for software updates. After some debating, I went ahead and pulled the trigger on a MSI H61M-P31/W8 board along with a Intel 2.4ghz LGA 1155 Celeron processor and 4gb of DDR3 ram. Since the new board only has a single 16x and a single 1x PCIe slot, a new video card was also due. I opted for a simple MSI nVidia 8400GS 256mb card. All of that was just under 200.00 from Newegg, not too shabby. I made use of a spare 500gb SATA drive and decided to install the compressed hard drive images (CHDs) now that I have a system capable of playing everything. Added bonus is that the new motherboard has solid state capacitors.

I received my NovaMatrix Marquee light today. I pulled out the cold cathode lighting and soldered some wire to the leads so that it can get power. One the light bar is wired up, I fired up the Cabinet. The single NovaMatrix is a bit brighter than the two cathodes. When I ordered the light, I pondered getting a second in fear that one unit would not be enought, but I really thing the single unit does just fine.

The cathodes were put in the cabinet in a "V" formation, so I needed a new way to mount the NovaMatrix so that it was in the center of the marquee. I looked around the shop for something to hold the light into place and came up with an unusual solution, PCI cover plates. I drilled some holes into the tops of the plates and used short wood screws to attach them to the cabinet. The plates had ends on them that held them to the backplane, which worked great holding the NovaMatrix PCB into place. I'll admit its not pretty, but it works.

The inverter driving the two white cold cathodes died a couple of months ago. The cold cathodes had worked pretty nicely, but I was hoping to get a little more life out of them. I started shopping for a replacement inverter, but the thought of having to replace the thing in the future made me start looking into alternatives. When I purchased the spinner and coin drop buttons from Groovy Game Gear, they had announced a new product called the NovaMatrix LED Marquee light. For $17.95, the price was right, so I placed my order.

When I installed the spinner and coin drop buttons a couple of weeks ago, I had left out mentioning a little trouble I had getting the power switch, HDD LED, and Power LED wired back up, as well as the additional 5volt line to power the coin drop button lighting. I had designed the control deck to be easily removed and decided to use a terminal block for the hookups. After removing the control deck the past couple of times, disconnecting and wiring up the terminal block became more and more of a daunting task. On my way to work, it occurred to me to use a pair of CAT5 surface mount jacks and a CAT5 cable to create a quick disconnect. So I laid out the connectors like:

Pin 1 = HDD+ Pin 3 = Power LED+ Pin 5 = Power Switch Pin 7 = 5 Volt+
Pin 2 = HDD- Pin 4 = Power LED- Pin 6 = Power SwitchPin 8 = 5 Volt-

I admit this does not allow room for expansion, but works out darn pretty well. So for the first part, I wire up one jack with motherboard header cables and add a molex connector to pins 7 and 8. By itself, the motherboard side module looks pretty plain, so I added a LED to the top of the jack and wired it to the 5volt lines. The only purpose for this is just to serve as an indicator that the 5volt line is working (read bling).

The next step was to wire up the controller side module. I removed the old terminal block and replaced it with a surface mount jack. Then its just a matter of wiring up the block using the wiring diagram above. I did not add a LED indicator to this module, but I did give the jack cover a coat of black vinyl paint to try to blend it in with the back of the deck (not that anyone will see it). When I removed the terminal block, it left four screw holes in the back of the deck. Two of them are covered by the surface mount jack, but the other two are exposed. I just dabbed some black magic marker over them, not the greatest solution, but they are located on the back of the deck out of view, hardly worth the effort of sanding, filling, and painting.

So now to connect the motherboard header and 5volt lines to the control deck, its just a matter of plugging in a standard-straight through CAT5 cable into both jacks.

Since I finished the spinner last night, I spent the afternoon putting in the coin drop replacement buttons. I measured out the front of the control deck to determine the drill points. Since the coin buttons are only 7/8th inch diameter, I drilled out two holes with a 1 inch spade bit. The back of the buttons have two small round protrusions to prevent the buttons from rotating, so I needed to drill two small holes to accommodate them.

Once the holes are drilled, its just a matter of putting in the buttons, securing them with the backing nut, and then wiring them up. I moved the existing player one and two green credit buttons to the player three and four credit channels on the I-PAC controller and wired the new coin buttons to the player one and two credit channels. Since the coin buttons are back lit with 5v LEDs, I initially tried wiring them to the same line supplying 5v to the power LED, but could not get them to work (too much draw?). So the solution was to run a cable pair from the coin buttons to a floppy drive power connector.

Then I put the control deck back together and mount it back to the cabinet. I fire up the cabinet and everything lights up and works correctly. I must say that the addition of the coin drop buttons really give that authentic arcade cabinet look without the need for the actual coin door mechanism.

I broke down and purchased a spinner last week. This was not exactly a planned purchase, it all happened when I was looking for information on sdlmame and one of my google searches turned up a MAME arcade forum that had an announcement from Groovy Game Gear that they now carried illuminated coin drop replacement buttons. I thought these would be the perfect thing to finish off the cabinet. While I was there, I also noticed that they had a spinner that fit in the standard 1 1/8th button hole. The price was right (until I added the nickel plated knob) so I picked up one of those as well. So I received the parts on Thursday and spent Friday night putting in the spinner. The spinner is connected to a USB encoder and then linked to the motherboard via a standard USB cable.

I designed the control deck to be removable for easy upgrades, so I removed the deck and opened up the bottom to gain access to the controls and wiring. I had mentioned earlier that the spinner fit in a standard 1 1/8th inch hole and the primary reason I needed a small form factor spinner was due to the lack of space inside the control deck as you can see below. In order to put the spinner in the center of the board, I needed to move the I-PAC controller off to the side. Next I measure out the center of the deck and start drilling a hole with a 1 1/8th inch spade bit.

Once the hole is drilled, its just a matter of putting in the spinner and hooking up the USB encoder. In order to keep the encoder from flopping around, I used a small wood screw to keep in place. Since the hole in the encoders circuit board is located right next to an IC chip, I used nylon washers to keep the screw from shorting the IC chip out.

Below is a picture of the control deck with the spinner mounted. In order for FreeBSD to see the spinner, I needed to add the appropriate USB options to the kernel and recompile. I also needed to enable the USB options in /etc/rc.conf. Once the kernel is compiled, a simple reboot enables the spinner. In order for MAME to use the spinner, I edited the mame.ini file and changed mouse from 0 to 1 and dial and paddle devices from keyboard to mouse. The spinner now works in Tempest and Arachnoid without further modification.

Wow, over a year without an update to the cabinet. For some stupid reason (boredom, or possibly the need to royally screw something up) I decided to update the rompacks to the latest versions without doing some basic research. After the rompack update, I soon realized that a good portion of the games I have had stopped working. This is where it all went downhill...

I just assumed that I needed to upgrade my version of xmame, so I updated my ports collection. Over a years worth of updates to the ports collection was pretty substantial, so I ended up updating the source and running a buildworld to recompile the FreeBSD operating system. The buildworld update went without a hitch and then I rebooted the box and started to upgrade all of my ports. Two weeks prior to this update, FreeBSD had upgraded from Xorg 6.9 to Xorg 7.2. This requires all of the ports dependent on xorg to be recompiled as well. So the cabinet ended up compiling software for a better part of a day. I had no problems upgrading the various ports, including xmame. Still the games refuse to run, indicating that I am missing various roms. At this point I have updated the system and all of the ports.

After some investigation, it turns out that the xmame development has been pretty much dead since late August 2006. It also turns out another Unix MAME port called AdvanceMAME is also no longer being actively developed. Apparently, there had been some major architecture change in the video code that caused a lot of grief with porters (I guess?). The only other MAME port in FreeBSDs port collection is called sdlmame, which is what xmames page suggests as a replacement. So I compile the port, issue a rehash, and change my .xinitrc to just start up a game of Pac-Man by commenting out the AdvanceMAME and unclutter lines.

/usr/local/bin/sdlmame pacman

I start X up and it immediately kicks back out to console indicating that the roms are missing. I then change the line to read:
/usr/local/bin/sdlmame -rompath /mame/roms pacman

Pac-Man now starts up, but the speed is very very slow. I mean, come on... A 1.6ghz processor, a gig of ram, and a video card with 128mb of ram, and it cannot play a simple game of PacMan. After a good deal of research, the problem comes down to hardware acceleration support in Xorg. Apparently when it comes to ATI graphics cards, there is little support for hardware acceleration in the open source radeon driver. ATI has a proprietary driver for linux, but not for FreeBSD. I managed to dig up a nVidia GeForce 3 card and swapped out the ATI card. I installed the nvidia-driver-9631 port and made the appropriate changes to my xorg.cfg file. I start up xorg again and now I can play PacMan in all of its OpenGL glory.

I had a little issue with getting sdlmame to work with its configuration file. If you issue the command "sdlmame -createconfig" it will create a file named "mame" in your .sdlmame directory. The problem is that this file never seems to be read and sdlmame does not give the option to specify a config file location. A brief google search did not turn up anything, so I started looking at the source code. It turns out that the program tries to load "mame.ini", so I renamed the "mame" file to "mame.ini" and sdlmame now reads in the configuration file. All thats left is to make some basic changes to the Advancemenu configuration file to look for sdlmame instead of xmame and we are now fully operational again.

Now that wasnt so much of a chore was it?

I had a buddy over the house last week, showing off the MAME cabinet and he made a comment about the lack of a volume control on the front of the cabinet. Originally, I had yanked the amplifier out of a cheap pair of computer speakers and mounted the thing inside of the cabinet (see below).
For the most part this worked, since I can adjust the game volume with the joystick. The problem was that I had no way of controlling the volume of the MP3s playing from AdvanceMenu. I had the day off with nothing better to do, so I broke down and moved the volume control from the amp's PCB to the front of the cabinet. I de-soldered the stereo variable resistor and soldered in 6 wires of a 3ft piece of CAT5 cable. Making a note of orientation, I then soldered the six wires onto the variable resistor. The first problem I ran into was that I had plugged the line in into the headphone out line of the amp and I ended up spending a good 30 minutes trying to figure out why I had no sound, doh!

Now that I have a working volume control, I drilled a hole into the front of the monitor masking board so that the shaft of the volume control fit through. When I went to mount the volume control, I noticed that I was missing the flat bolt holds the volume control into place. I ran down to the local hardware store and could not find an appropriate bolt, so came back to the house empty handed. I could have ran out to the local Radio Shack and got a new variable resistor, but the idea of having to deal with last minute Christmas shoppers convinced me to just glue the volume control into place. After a couple of hours, the control is securely held into place.

Dug up an unused Western Digital 40gb drive for the MAME cabinet. I had dreaded installing the OS from scratch and copying the configs over, etc. I decided that I would try "dumping" the existing partitions onto the new drive, to try to save some time. I mounted the new drive on the secondary channel and booted up the MAME cabinet. I ran /stand/sysinstall as root to partition the new drive and immediately ran into problems. No matter what I did, the root partition ("/") on the new drive would always be setup as ad2s1e and would result in the boot loader not able to access the partition.

To get around this, I ended up booting off of a FreeBSD install CD and did a minimum install on the new disk. Then I booted off of the existing MAME disk, performed newfs each of the new partitions, and then mounted the new drive with the following mout points:
Now I just issue the following commands to dump the old partition to the new partition:
		cd /new_root
		dump -0uf - / | restore -rvf -
And do the same for tmp, var, and usr partitions. The whole copy took a couple of hours (20gb) and I had to slightly modify the new /etc/fstab file on /new_root because the var and tmp slice letters where swapped (not sure how/why that happened). I put the new drive on the primary/master channel and booted up with fingers crossed... success!

Now that I have built a new workstation, I have recycled the parts out of my old box for the MAME cabinet. The original hardware was a Pentium III 550, 32mb RAM, Nvidia GeForce, and a 20gb hard drive. New hardware for the cabinet now: Athlon 1600+, 1gb RAM, ATI Radeon 9500, and for the mean time, keeping the existing 20gb hard drive. For some reason, I notice a great increase in game performance (a little sarcasm). At some point I will need to move to a bigger hard drive, as the 20gb drive is currently at 95% usage (less than 200mb free).

©2004-2017 Paul Boehmer