Hardware InstallationIt's not really as scary as it seems... |
|
|
Okay. You've acquired or built a cabinet (cab). Now you're ready to install your system into it. There's a lot of problems that could occur if proper precautions aren't followed. My goal here is to give you all of the info you need to prevent any of those problems from occurring. Probably the most important lesson to learn in this stage of building your cab is to double and triple check all of your work! Don't assume you did it right. Check everything in stages. It's better to find the power's connected wrong before something expensive's attached! Now, let's get started. Power Distribution - Installing the Computer - A Keyboard Splitter - LCD & VFD Displays |
Power Distribution |
||||
|
Here's where we supply the power to the system. It's not really very complicated, but since we're working with high voltage, it's very important that everything be connected correctly and safely. Every exposed wire must have either a crimped connector or soldered to the post. Every joint must have an appropriate cap. Never use tape to cover wires in your cab. Tape dries out very quickly in this warm, dry environment. Okay. So, what do we need... 1 - Unswitched power to our computer. The PC should always have power supplied. 2 - Switched and filtered power for the Marquee Light and other peripherals (I.E.: Sound Amplifier) 3 - Switched and Isolated power for the Arcade Monitor. Very important! Never run an arcade monitor without isolation. This will damage your computer!
|
||||
|
The photo to the right is a typical power distribution center in an arcade cabinet. When I first saw this, even I was a bit overwhelmed by it. My cabinet had been a bit abused over the course of its life, but this was one section that had pretty much been left alone. Why? Because there's very little that will ever go wrong if it's hooked up properly the first time. I did take the time to verify that all was connected properly and appropriate care had been taken to avoid problems, but without modification, this setup worked the first time I plugged it in! I've since installed a new power switch (The original took the force equivalent to a jackhammer to switch!), reinstalled a previously removed safety switch, installed a new power cord and added a convenient power bar I had left over from my power cord replacement. Of course, since I'm installing a PC to replace the original JAMMA board, the Switching Power Supply (the golden box in the lower left) has had its AC power removed. |
![]() |
|||
|
I've left the power supply in place in case I ever find a use for it or choose to install a JAMMA board again. You can safely remove (or never install) this device. Obviously, it's going to be a real pain to try to compare my power distribution center with yours, especially since you're may not even exist yet! I've taken the time to draw up a pictorial schematic representing only the required portions for a Mame Arcade Cabinet. This should be a lot easier to follow: |
||||
![]() |
||||
| This layout is exactly how everything should be connected. If you're using an Arcade Monitor, be sure that the Isolation Transformer is present and connected in this fashion. If you're using a PC Monitor in you cab, the isolation transformer can be left out of the circuit. I used the Marquee Light power to supply my power bar so that the power there is switched with the cabinet. The PC is connected to the unswitched power outlet (Usually installed in a cab for test equipment during servicing.). When you follow your own Power Distribution wiring, make sure that every wire is either crimped into a good connector, tinned (Solder applied to the twisted wire end to make stranded wire solid.) or soldered to the terminal its connected to. In no cases should there be stray strands for wire hanging off of a connection. | ||||
![]() |
Installing the power switch might seem a simple task. In actuality, it is! For this very reason, this is the place most errors are made. Since it's such a simple task, one tends to not double check their work. Fortunately, the worst that could happen is the switch(es) doesn't work or works backward. My cabinet uses two switches. The main Power Switch (I used a push-on/push-off switch. The choice is yours.) and a Safety Door Switch. The later is a special type of switch that while pressed it's on, when released it's off and when servicing, can be pulled out to lock in the on position. This is important to protect little hands that intrude where they don't belong! As an added safety measure, be sure to use a secure keyed lock on your cabinet door. The Safety Door Switch can be purchased, among other places, from Bob Robert's marvelous website. |
|||
Installing the Computer |
||||||||
| Many cabinet builders choose to simply place the a computer in the bottom of the cab and connect the cabinet controls to it from there. The logic behind this is that the computer already has three or more fans built-in and should be much safer for the computer. After multiple crashes during the first month or so, they add a huge fan at the bottom or top of the cab to fix the air flow problem. Here lies the flaw to this logic! Ask yourself this: "Why is it that no fan was installed in Arcade Cabinets originally?" | ||||||||
|
The answer's quite simple! Arcade Machines are designed just like a chimney! A small intake vent is placed at the bottom of the cab, a larger outtake vent is placed at the top and all the heat generating components are placed in the air flow path. This continuously moves the hot air up and away from all sensitive components! Placing a closed box in the path of air actually blocks airflow, locking the heat in. Adding fans at the top would likely help, but defeats the purpose of the original design! In my opinion, it's safer, more economical and cooler to install the PC motherboard in the same location as the original JAMMA board. The power-supply and drives mount nicely on the base of the cabinet keeping them cooler and actually contributing to the air flow! Of course, the fan remains in the power supply (Positioned so the air exits upward!) and an appropriate fan should still be installed over the processor and perhaps graphic chip. These fans directly remove the heat from the specific points they are needed, and again add to the cabinet's air flow. You should never need additional cooling. |
![]() |
|||||||
![]() |
||||||||
| Mounting the boards to the side of the cabinet is a pretty straight forward task. Using a fine tipped felt pen, I marked two opposite corner holes on the side of the cab, drilled holes about 1/8" deep and mounted the PC motherboard. I then marked the remaining holes, removed the motherboard, drilled the additional holes and remounted the motherboard. I used 1/4" nylon washers between the motherboard and cabinet wall to assure proper air circulation as pictured to the left. | ||||||||
|
As you can see by these pictures (Click them to see full sized), the boards fit quite nicely making service and upgrading a breeze without ever having to remove anything. I chose to use off the shelf cables rather that constructing shorter, more suitable cables. Unfortunately, this produces a plethora of extra wire that makes the whole thing look scary. Just be careful that the cables don't interfere with air flow or contact anything that might produce excessive heat. After careful observation of the hard drive cables, you may note that I split the cables at every fourth wire. This allowed running the cables at sharper angles than originally intended without undue stress on them. There are available more flexible cables, but this technique is a lot cheaper. Note how my drives are installed. I pulled the frame out of an old AT Tower cabinet by drilling out the original pop-rivets. I then installed the drives, backward and upside down, into the frame and using the rivet holes, I mounted the whole works to the wood of the cabinet. Note the placement to allow air circulation. Also note that the computer's power supply is placed behind the drives with the air vents UP. |
![]() |
|||||||
![]() |
||||||||
![]() |
||||||||
|
Before you send me emails, let me inform you that, yes, I do know the Opti-Pac above isn't connected to anything yet. This cab is in progress and I haven't been able to justify the cost of a new Trackball and Spinners to my wife yet. Note below the J-Pac. I've installed the amplifier board from a set of Radio Shack stereo speakers. This actually does a very nice job amplifying the line out from the computer. I found it easiest to connect this between the motherboard and J-Pac. Connecting Stereo through a JAMMA connector simply requires and additional ground wire run up to the speakers. Connect one side of each speaker to SPEAKER+ and SPEAKER- respectively and the other connectors to the shared ground. To reconnect a mono JAMMA jamma board, just disconnect the shared ground. To get an idea where the cables connect without the aid of the cabinet's icons I've blatantly copied the connector layout diagram from a PC Manual and created similar diagrams for UltiMarc's J-Pac and Opti-Pac boards below: |
||||||||
![]() |
||||||||
|
|
||||||||
![]() |
||||||||
|
(note: JAMMA connector on opposite side.) |
||||||||
![]() |
||||||||
|
|
||||||||
A Keyboard SplitterIn the course of designing my system, I originally intended to support my Control Panel(s) with regular keyboard encoders. While this is a very viable solution, I later decided to go with the UltiMarc's J-Pac and Opti-Pac for the Control Panels. I still intend to use one of the keyboard encoders for support of side "Pinball" buttons, a TILT switch and a panel of buttons behind the coin door for game adjustments and maintenance. The J-Pac already splits the keyboard port for the purpose of connecting a keyboard, but if I'm going with my encoder, I still need to split the port again so I can attach a keyboard as well! Searching the Internet turned up various commercial solutions, but only one do-it-yourself schematic at Stephan Hann's "hardware tricks round about the pc" page. I tried improving on his original design using more modern components, but finally settled on his original design with only modification for more readilly available components and a decoupling capacitor for the CMOS 4053 IC chip. After a request from guest H. Sunderlin, I've included Radio Shack Part Numbers to help you find them easier. Note that the 4053 chip and 20 pin break-away header listed are "Special Order" parts from Radio Shack. You can order them at the store and they will be shipped to you very quickly. I recieved mine within a week. My component layout also reduced the size of the circuit board making interfacing it with the encoder board much more elegant. Note: As of 6 January 2003, the schematic and layout have been corrected. I had the data and strobe reversed. Thank you to John Flesburg for pointing out my error!
|
||||
![]() |
||||
![]() |
||||
|
The schematic above follows Stephan's original design, adding support for either PC/AT or PS/2 connectors. I actually only used 4 pin headers in the same fashion as most keyboard encoder boards. This allowed me to connect the encoder board to the Secondary Keyboard port with straight pins rather than a cable. I also added color coding of the wires to simplify construction. I used all 30 gauge wire-wrap wire for this circuit. Note that I used the Secondary LEDs to monitor activity on the circuit and grounded the cables to the ground point of the encoder board. The encoder is out of an early PS/2 keyboard. |
||||
![]() |
||||
LCD & VFD DisplaysThis project I worked long and hard on. When I first approached this project I had a couple of hurdles to get over. The only software I could find for Mame to drive a small display was built into ArcadeOS. Unfortunately, it only supported Serial driven displays, used a difficult to use syntax (language) and required a separate file for every romset (Hey! There's over 3500 romsets now!). After doing a tremendous amount of searching on the web, I found that only expensive VFDs (Vacuum Florescent Displays) used serial by default, and LCDs (Liquid Crystal Displays) required expensive hardware to support Serial interfaces. After a bit of Sniping on Ebay (Bidding at the last few seconds), I was able to acquire both an LCD and a VFD display. I was so excited when I was able to quickly get the VFD to run it's test mode that I confidently connected it to the serial port and setup ArcadeOS to use it. After writing and rewriting the data file for the VFD I finally concluded that this was a portion of ArcadeOS that needed updating ( Coincidentally, I happened to be working on a few other improvements for it at the time!) This section of ArcadeOS really required a total rewrite. My goal was to support both the Serial VFD, Serial interfaces for the LCD and Parallel interfaces for the LCD. The problem with supporting Parallel interfacing had an additional caveat. The Parallel port has traditionally been used in ArcadeOS to drive the Power On option through a circuit connected to ALL data lines of that port! I would either have to eliminate the Hardware support in ArcadeOS, use a second Parallel port (As rare as hens teeth in most PC setups) or figure out a way to let the features share the port. The Serial support was already there. Of course, the user interface needed improvement, but the driver actually sent the data to the display. I researched how others interfaced LCD displays to the PC and opted to follow pretty much the same scheme. This way, a user could use the LCD to display Hardware Status in Windows as well! My second goal, to support Hardware drivers along with the LCD required modifying the basic connection to use the rarely supported (and noticeably slower) 4bit mode of the LCD driver chip. This allowed me to use the remaining 4 bits and 1 available strobe line to drive the original Hardware switch in Arcade OS. Not only that, but I decided to give more reliable support by using 2 bits and a Flip-flop circuit to eliminate false switching. That also gave me 2 additional bits to use for rotating the monitor with a bi-directional motor! (I haven't implemented this yet, but it's supported in the new ArcadeOS!) So, what I have now is a simple process of adding LCD or VFD displays to the cabinet, new support for hardware switching (Power On), support for a yet to be designed monitor rotation system and new, very powerful user language to program the display! All this can be found in ArcadeOS 2.5 in the Download section of this page. Let's first cover the connection of the displays to our computer. Serial InterfaceArcadeOS only sends data to a display. It doesn't use, nor care about any response from the display nor even handshaking signals! As a result of this, we only need three (3) wires to the display: Serial data, Ground and +5 volts. Okay. I actually used four (4) wires pulling a ground from both the power supply and the serial port. This technically isn't necessary, but I like twisted pair wire. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Note that for Serial to work with ArcadeOS, you need to adjust the jumper settings on the display for 8/1/N (8 bits, 1 stop bit, No parity). The default on my display (no jumpers) was Even Parity so I had to add 1 jumper. Below is a picture of my interface. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
As you can see, if you have any of those 3 pin speaker or fan cables, you've already got your serial cable partially constructed! If you look closely at the motherboard installation, you should see the serial interface running to the COM2 port (twisted pair of wires) and another twisted pair running down to the power supply. I could have run the power to the J-Pac or Opti-Pac, but decided I didn't want to pull the current from the Keyboard port. The photo above (click to enlarge), is the display running, but washed out by the flash. I took a shot without the flash to the left to give you an idea of how it looks. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Parallel InterfaceLike with the Serial Interface above, ArcadeOS doesn't read data from the display. It also ignores handshaking. It does need to send a strobe line though so it takes at least 11 wires to connect in 8bit mode and 8 wires for 4 bit mode (4 bit also requires the R/W signal.). Getting this to work in 4bit mode took a lot of effort and trial & error testing. It's not perfect, but it works! It's also very slow and not compatible with other LCD display drivers. I recommend that you use the 4bit interface only if you are using the hardware switching feature of ArcadeOS, and don't have the ability to add a second parallel port to your System. ArcadeOS intelligently uses 4bit mode only if Parallel Hardware is enabled AND the LCD port is set to LPT1. In all other cases, 8bit mode is used. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Here is the 4bit mode schematic. As you can see, connecting this is a lot more complicated! Since it's being used anyway, I've included the suggested interface to drive the monitor power and rotation hardware. As I said before, I haven't implemented this feature in my cab yet, but I have verified that it works. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Now, the 8bit interface is a bit simpler in construction (No hardware control) but is pretty much the same. Any old parallel printer cable could be easily converted to plug right into the display. While the R/W line isn't required by ArcadeOS, I recommend using it anyway. There's many Windows programs that will run this display unmodified, as long as R/W is connected. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
The picture above is my test jig. The switches allowed me to connect and disconnect the lower 4 bits and the R/W line so that I could verify the ArcadeOS code. The ribbon connects directly to the parallel port while the twisted pair wire connects to +5V and GND on my J-Pac board since this is a very low current device. This one doesn't have a backlight LED, but hey! What do you expect for $2.95? Programming the DisplayProgramming the display is very dependent on the brand and type of display you're using. ArcadeOS has built into it a series of commands that are pretty much common to most displays and support of those commands if you're using a Parallel display based on the 44780 Controller Chip (Most common). If you're display uses a different control structure, ArcadeOS does have the facilities to bypass the built in support and send your own control codes. To simplify building the data files, all invisible control codes in the document are ignored. If this confuses you, don't worry. It will make sense in a few paragraphs
ArcadeOS uses three different files for displaying information on the display. The names of these files can be changed in the arcadeos.cfg file, but default to aos.lcd (Startup message), shutdown.lcd (Shutdown message) and list.lcd (Message database). The first two are standard text files and can be formatted to your liking. I prefer to separate Header (display setup codes), Data and Footers (More display setup codes) on separate lines. This just makes it easier to tweak the display to my liking. For instance, my Startup message file (aos.lcd) might look something like this:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\c\h16\eH\h00\h18 Welcome to PURPLE MAME!!!\r\n Would you like to play a game? |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Lets' go over the first "Header" line and explain what this does: The '\c' from the list above, Clears the display. Placing these commands on a separate line makes it a lot easier for me to tweak my display settings while keeping the actual display information positioned as I intend it to look on my display. Note the '\r' and '\n' at the end of the first line. Referencing the above chart, you can see that this sends a RETURN and LINEFEED. Since sending the actual Returns from the file would make formatting difficult, I have to explicitly send my intent to go to the next line of the display. Note also that the leading spaces ARE sent, so my 40 column display should appear nicely centered! I can now copy this file and just change the messages on the second and third lines to make my Shutdown file (shutdown.lcd)! Modifying this file to work on a Parallel port display would simply require playing with the first line to send the appropriate commands for my specific display.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\c\eH\h00 Thanks for playing PURPLE MAME!!!\r\n Don't forget to turn OFF the power! |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
As you can see, I did remove a bit of the Header data. It wasn't really necessary, but since I'd already sent these commands, I didn't need them anymore. Now comes the hard part. I need to create a database file for all of my games! This is not an easy undertaking and is very far from complete. If anyone knows of a database containing this information, I'd be glad to use it and make it available to all! The database file (list.lcd) must follow a specific format. I worked out this format to reduce the amount of data needed and rapidly look up the data for each game run. Rather than have a separate file for each game, this database uses the format: <Display Header Info>,<Display Footer Info> We can repeat the romset lists and shared info indefinitely to cover all games. Each list shares the next line so we don't need new lines for all the games that use the same controls. Following is an example file:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\c\h16\eH\h00,\eH\h00 SUPRMRIO,Super Mario Bros. - Louise's Favorite!,PC_SMB,Super Mario Bros. - Player's Choice \r\n Button A-Fire/Run, Button B-Jump/Swim PC_SMB2,Super Mario Bros 2,PC_SMB3,Super Mario Bros 3 - Press A=Jump\r\nCtr-A=Long Jump, B=Pull Grass + Throw PUCKMAN,PucMan! Version 1,PUCKMANA,PuckMan! Version 2,PUCKMOD,Puckman! (Harder) CLASSIC!\r\nPress Button A for Speed-up Cheat! default,* * - This game not yet reported.\r\n Please note info and add to list.lcd |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
A few items to note: Commas may be used in the <Shared List Info> sections but not in the list themselves except as separators. If you really need a comma in a game's name, use the escape code '\h44' (ASCII code for ','). I put the first line entirely in the <Game Info> sections in the first set, Added the common control to the first line of the second set and added a common word "CLASSIC!" to the first line of the 3rd set. The '\r\n' indicates the end of line on each set. The asterisk in the <Default Pre Info> and at the beginning of the <Default Post Info> will surround the romset name. This way, every game will display something even if it's just to tell the user there's nothing to display! Each list of games can be a long as needed but must be on the same line. I'm limited here only because of limitations of the web page. This should get you started in creating your own database. If you do come up with a database of game controls please (PLEASE!) forward them to me! I'll add them to the site and give you credit! :)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
More soon...(No! Really!) |