Introduction: CoinOp Connect - Multi Arcade Cabinet Control Interface

About: I like tinkering sooo much people! :)

Imagine that your beloved genuine arcade cabinet PCB has gone (spells allowed here!). You have three options in front of you: (a) keep it as it is for the time being, (b) wait months for a repair (c) convert it to JAMMA and use one of those commercial interfaces they sell everywhere nowadays.

Given that (a) is not a real option and (c) is deprecable (NOT ALLOWED!), only (b) is left. What if you don't want to wait for too long without playing your favourite game on your favourite cab?

Well, I think this Instructable may interest you :)

The JAMMA standard is with no doubt the most common in the arcade world and it is not surprising that commercial control interfaces to connect cabinets to a PC are all designed to support that specific standard. It was heavily used in generic cabinets, and sometimes in dedicated cabs too.

Unfortunately, biggest arcade cabinet manufacturers like SEGA, Nintendo, Atari and others did not adopt JAMMA and the fate of such non-JAMMA cabinets is often a "brutal" reconversion: emptied and rewired from scratch.

Definitely a deprecable, not respectful practice, if you ask me.

I am firmly convinced that we, tinkerers with a soft spot for the arcade world and free from business constrains should worry about remedying this situation. Yes, we are already late to the party!

This is my small contribution to the challenge: an interface with the aim of simplifying the conversion of dedicated, non-jamma cabinets, maintaining the original wiring.

This interface allows the connection of a cabinet to a PC, keeping the operation completely reversible. This way one can roll back to the original game hardware without feeling "stupid" for having internally disfigured an amusement machine :P

For those reading the intro only, let me stress out a very importamt point: I am not suggesting you to replace your cab original game with a PC to run an indefinite number of games. Don't get me wrong!

If your genuine arcade cabinet shows signs of PCB failure, this interface can be a solution to keep it running while attempting the PCB repair. Original hardwares have to be preserved, and you can bet there's nothing more genuine than genuine hardware (Doh!!).

In this instructables I will:

1) introduce you to the PC to dedicated cabinet convertion procedure and associated challenges

2) describe the idea beneath CoinOp Connect, the functions it performs and it's circuits

3) give some pertinent information about the hardwares supported in this first iteration of the project and design choices I adopted

4) share gerber files to have CoinOp Connect assembled at home with only little efforts on your side

5) share a first, generic, firmwares set and describe it's functions.

Ok,ok, but which hardwares are already supported?

Supported hardwares/games are:

  • SEGA Outrun Hardware (Outrun, Turbo Outrun)
  • SEGA Super Hang-On (Hang-On, Super Hang-On)
  • SEGA X-Board (theoretically any game)
  • Atari System 2 (Paperboy, ABP: All Points Bulletin, Super Sprint, Championship Sprint, 720°)
  • Pole Position (Atari and Namco hardware)

More about these hardwares in the following!

If you are interested in a JAMMA interface for arcade cabinets take a look at the dedicate Step in this instructable.

Supplies

Follows a list of components to populate every board realized for this project.

You are not in the need for all the components listed for all the bords, but only those for the main board and the hardware-specific fingerboard (e.g. if your cabinet is a System 2 cab you will populate main board and System 2 fingerboard only).


Main Board

1x 8x2 pin IDC connector

1x 10x2 pin IDC connector                             

1x 1000 ohm resistor

2x 100 nF capacitor

2x 10K ohm resistor

2x 1uF 16V electrolitic capacitor                                                    

1x 22uF 16V electrolitic capacitor

1x 4k6 resistor network

3x 500 ohm trimmers, vertical mount

1x 74HCT86N XOR gate

1x  Arduino Nano 3.0

1x  Arduino pro micro (type c usb connector)

1x  DB15 VGA right angle through-hole female connector                                           

5x momentary switches

1x  THS7374 quad channels video amplifier


SEGA X-Board fingerboard

1x 8x2 pin IDC connector

1x 10x2 pin IDC connector

1x 2X10 pinheader (or (IDC)

1x 2X25 pinheader (or IDC)

1x 2X5 pinheader (or IDC)

1x MOLEX KK-156-4 connector

1x MOLEX KK-156-6 connector

1x LED, 3mm

1x 100nF capacitor

1x 2K ohm resistor

2x 200K ohm resistor

1x 47uF 25V electrolitic capacitor

1x Stereo audio jack 3.5 mm

1x JST_NH_4 connector

1x JST_NH_6 connector

1x SN74AHC1G32DBVR OR gate

1x ULN2003 Darlinghton array


SEGA Super Hang-on fingerboard

1x 8x2 pin IDC connector

1x 10x2 pin IDC connector

1x 2X10 pinheader (or IDC)

1x 2X25 pinheader (or IDC)

1x 2X5 pinheader (or IDC)

1x MOLEX KK-156-4 connector

1x MOLEX KK-156-6 connector

1x LED, 3mm

1x 100nF capacitor

1x 2K ohm resistor

1x 47uF 25V electrolitic capacitor

1x Stereo audio jack 3.5 mm

1x ULN2003 Darlinghton array


ATARI System 2 fingerboard

1x 8x2 pin IDC connector

1x 10x2 pin IDC connector

1x 17 pinheader, male

5x 11 pinheader, male

8x 100nF capacitor

7x 2000 ohm resistor

1x LED, 3mm

1x 47uF 25V electrolitic capacitor

1x 74HCT14N hex Schmitt Trigger inverter

1x Stereo audio jack 3.5 mm

1x ULN2003 Darlinghton array


ATARI Pole Position fingerboard

1x 8x2 pin IDC connector

1x 10x2 pin IDC connector

6x 100nF capacitor

3x 2000 ohm resistor

1x LED, 3mm

1x 47uF 25V electrolitic capacitor

1x 74HCT14N hex Schmitt Trigger inverter

1x Stereo audio jack 3.5 mm

1x MS22D16 mini slide switch


NAMCO Pole Position fingerboard

1x 8x2 pin IDC connector

1x 10x2 pin IDC connector

1x MATE-N-LOK .250" connector

7x 100nF capacitor

2x 470nF capacitor

2x 220 pF capacitor (non ceramic)

2x 1M ohm resistor

5x 2000 ohm resistor

1x 1000 ohm resistor

2x 47K ohm resistor

2x 50K ohm trimmer

1x LED, 3mm

2x 47uF 25V electrolitic capacitor

1x 2200uF 25V electrolitic capacitor

1x 74HCT14N hex Schmitt Trigger inverter

1x Stereo audio jack 3.5 mm

1x MS22D16 mini slide switch

1x TDA7297 15W audio amplifier

Step 1: Cabinet to PC Connection - Challenges

Interfacing a genuine arcade cabinet with a PC is a multi faceted problem. In the following the main factors that challenge the task.


VIDEO

Arcade cabinets were originally equipped with CRT monitors. It is not generally possible to directly connect the PC's video output to an arcade CRT monitor because of the different, non compatible video signal.

Main differencies are:

1) PC video cards output a high frequency horizontal sync signal (31 KHz or higher), whereas a CRT monitor commonly expects a 15KHz signal*

2) PC video cards output a separate sync signal, whereas a CRT monitor expects combined sync signal

3) PC video cards output a video signal (RGB) of 0.7Vpp, whereas CRT monitors expect a higher than 1Vpp signal as a minimum

(*) 15KHz are the most common in arcades, followed by 25KHz (mostly, but not only, used by Atari's system 2 hardware and SEGA Model 2/3 hardware) and 31KHz (mostly, but not only, used by SEGA Naomi hardware)

The first point can be solved with special softwares. Point 2 and 3 have to be faced via hardware.


CONTROLS

Cabinets control panels were populated with various devices, with different working principles.

Non latching switches are the most common (buttons, joysticks, coin mechs) followed by potentiometers (wheels, analog pedals, analog joysticks), quadrature encoders (spinners, trackballs, free spinning wheels, rotary sticks) and rarely optical and positional switches.

To turn the cabinet control panel in a OS compatible human interface device (sort of a big joystick), we are in the need for a microcontroller board capable of tracking incoming data signals and emulating such HID device accordingly.


HARNESS

Cabinet audio, video and controls converged into one or more wire harness connectors, all with very specific pinouts.

In the case of JAMMA cabinets, the connector is a single, double sided 56 pin connector (28 pins for each side) were all elements are soldered at very specific positions.

Other-than-JAMMA wirings have different connectors and pinouts, and an important part of the present work was to figure out them and find differences (but especially similarities...).

Step 2: CoinOp Connect - General Description

The underlyng idea of this project is to develop an interface with a main board where shared-between-cabs functions are performed and a "slave" board (finger board in the following) to take care of cabinet specific needs (Main Board pics are here attached. See next Steps for fingerboards pics).

This approach is the crucial factor that extends CoinOp Connect applicability to "any" (within hardware limits) non-JAMMA genuine arcade cabinet.

Here follows a general description of the two components of this project: main board and finger board.


Main Board

Starting from a full preservation intention, our cabinet will be equipped with a CRT monitor. This means that whichever cabinet we are going to work on, circuits for the correct video handling will always be necessary.

Another must are control panel elements. Not only switches, but also potentiometers, quadrature encoders and so on.

This being said, the interfacemain board should then host:

1) video signals handling circuits

2) microcontroller board/s for inputs and outputs

3) pin headers for connection to finger board

More details about the circuits constituting the Main Board are reported in a later Step.


Finger Board (Harness Board)

The Finger board is the crucial element extending the use of this interface to "any" cabinet.

It is not possible to develop one single finger board fitting all arcade hardwares because manufacturers adopted different hardware solutions, connectors and pinouts for their machines.

Finger/Harness board for a specific cabinet hosts the necessary connectors to interface the cabinet, but it is not only relegated to this single task. Auxiliary circuits, when needed, are also layed down on this hardware-specific board. Tensions monitors (LEDs), voltage filters, data filters/smoothers, (small) driver boards and audio amplifiers are only few examples of what this board is intended to host.

I layed down a first batch of finger board's in order to cover some of my favourite arcade games. In the next few Steps I will give you more detailed informations about them.


Audio Amps? Driver Boards?

In genuine arcade cabinets analog circuitries were most often not directly built in game PCBs, but external.

Keeping high current components away from digital logic circuits was (is) a "best practice" to reduce interferences, keep heat far from sensible (and often custom) IC's and reduce cable lenght. In arcade cabinets, audio amplifiers and driver boards were often seen as stand-alone PCBs, mounted on the bottom of the cab or in other adeguate positions.

One good reason to keep the original driver boards and amplifier is that dealing with such circuits from scratch (especially the former) can be a complex task. Lamps, but especially motors call for well dimensioned drivers to deliver high currents.

Another one is "preservation": we WANT to keep the cabinet as original as possible.

It is anyway sometimes the case drivers or audio amps are not there or not working. Don't despair: It is always possible to restore/replace them with modern alternatives.

Step 3: CoinOp Connect - Circuits and Pinouts

Main Board

The hearth of the main board are two Arduino's: a pro-micro and a NANO.

Arduino pro-micro is in charge of emulating a HID class device (keyboard, joystick, mouse), which makes possible the convertion of user interactions with control panel devices into something the PC can understand: keypresses, joypresses, mouse movements, etc.

The simplest case is a control panel button press. By writing an adeguate sketch, the microcontroller board can fool the PC thinking that a keyboard key has been pressed instead, or a joypad button.

In case of analog or quadrature encoder based controls, the microcontroller board makes possibile the emulation of the movement of an analog joystick axis or an optical mouse respectively.

Arduino NANO 328p is in charge of reading game outputs states via serial communication and send signals to the fingerboard accordingly.

It is also in charge of monitoring the horizontal sync frequency and enabling the video ampifier output when "everything is good".

Both Arduino's are powered by the USB port they are connected to and there's not the need for an additional power supply.

Video amplifier circuit is built around a very poweful integrated chip: THS7374. It's in charge of amplifying incoming RGB signals (0.7V peak to peak) from the PC video card VGA connector to values more adeguate for arcade CRT monitors (>1Vpp).

The video amp has a fixed 2X gain, which is good for most arcade monitors* (I have direct experience with Hantarex, Sivid, Selti, Monitor brands). I have had an advice about the possibility that a 2X gain could be not enough to gain a sufficient RGB amplification in some arcade monitors (i.e. Nanao). In such case a (pin compatible) THS7375 (5X gain) could be a better choice.

(*) Please notice: TV CRT's have different specs from Arcade monitors and are not directly compatible. In particular, the video signal level a SCART TV expect is 0.7V and you could damage it with higher voltages.

The video amplifier circuit is powered by the Arduino NANO USB port.

On the video amp output stage tree trimpots are used to adjust the R, G or B signal levels thus finely tune the image colors.

The main board hosts a sync composition circuit. In the past I often adopted a very simple (but proven effective) AND circuit made of a diode and a resistor. Given the claimed flexibility of the current project, in this case I preferred to use a more accurate XORing circuit. Even if I had never adopted the circuit before, I tested it on bench and works well.

The XOR IC (74HC86N) is powered by NANO's USB port.

Four non-latching switches are on-board, two connected to Pro Micro, two to NANO. These could be used to perform special functions. In example, main board sketch (more on it later) use one of these to force enable the video amplification output for debug pourpouses.

Another switch is placed unde the Pro Micro. It is connected to arduino's "reset" pin and it is necessary to upload new sketches with some special libraries (e.g. XInput library).


Finger Boards

The possibility to connect a cabinet-dedicated Fingerboard makes a world of difference here: It turns a convertion project into a preservation project.

It actually extends the use of CoinOp Connect to very different hardwares.

Fingerboards have been layed down at the game PCB level. This is true for those hardwares with direct harness connections on game PCB, but also for those adopting the so called "filter boards". This means that connectors and pinouts I took as reference are those at the PCB connectors, not at the out-of-the-metallic-cage filterboards.

About power management: finger board IC's are juiced by Arduino Pro Micro's USB port, but built-in load drivers get +5V from the cabinet power supply. This is because driver boards could call for higher currents than what the USB port can carry.

Finger boards hosts not only bare connectors, but also auxiliary integrated circuits. In example, small driver boards for lamps, buffers to smooth digital data, etc.

Fingerboards pinouts are attached. The corrispondence between original hardware headers/connectors and arduino's pins have been specified. This should help in the understanding of sketches and in the development of new sketches for the existing fingerboards. The pinout for at least one of the system supported games is also reported and compared to CoinOp Connect pinout for reference.

Main board and finger board are connected through two FC connectors, one with 20 pins (two rows of 10) and another with 16 pins (two rows of 8).

More details about circuits populating the game-specific finger boards developed are reported in the following Steps.

Step 4: SEGA Outrun Hardware

Outrun is one of my favourite games ever, so I had to start from it's hardware.

Don't let the hardware name fool you: the so called "SEGA Outrun hardware" was also used in other iconic games of the era: Hang-On (ok, ok, this isnot 100% true), Super Hang-On and Turbo Outrun.

Unfortunately pinouts are NOT compatible between all such games!

To our rescue comes the fact that some of these games are actually pin compatible. Super Hang-On pinout is 100% compatible with Hang-On, Turbo Outrun is 100% pin compatible with Outrun. There's a deep incompatibility between the two versions, anyway, and it is important to stress this out once more. If you use the super hang-on fingerboard on outrun cabinet (or viceversa) you will fry the cabinet power supply, damage CoiOp Connect built-in driverboard and will incur into fire hazard. Keep this in mind.

We absolutely don't want to mess things up, so I made my homework developing two separated finger boards, one for each of the two groups of games.

To handle Outrun hardware we are in the need for a total of five connectors:

1) 2x25 pins connector (AKA AMP50, 0.100" pitch) which hosts digital inputs, outputs and +5/GND from the power supply

2) 2x10 pins connector (AMP20) for analog controls

3) 2x5 pins connector (AMP 10) for +5V/GND*

4) 1x6 pins connector (0.156" pitch) for video signal

5) 1x4 pins connector (0.156" pich) for audio signal

(*) By looking at wiring diagrams, main tension (+5V) is already directly delivered to the AMP50 connector from the PSU, so the AMP10 connector is not necessary. Having an additional +5V source avoids overloading pins, so I decided to support this connector, even if probably not necessary.

SEGA Outrun hardware, like many other SEGA hardwares, supports outputs: shaker motor, start lamp, coin mechanisms, audio amplifier mute and moving mechanism for deluxe cabinet. I only considered the upright cabinet outputs, not deluxe.

SEGA's iconic blinking start lamps were driven by a ULN2003 on-board inverter. Inverters (two in total) were also used to buffer all other outputs (coin mechs, DC motor, audio amp mute). In this project all supported outputs are buffered with a ULN2003, juiced by the cabinet +5V line (we don't want to stress PC USB line).

Coin mechanism are here (and will be in all other finger boards of this project) NOT supported because if the flywheel diode goes, it can take the driver with it... not worth the risk in my opinion. The "flywheel thing" is also true for the rumble motor, I know, but I couldn't leave it out of the equation (and you know what I mean :) ).

Hey: No pics of the board?!?!

Yes Sir: see next ;)

Step 5: SEGA X-Board

The successor of outrun hardware is also the one where another list of favoutites games were developed. Afterburner, Thunderblade (the cabinet's sitdown version is fantastic looking), Super Monaco GP... these are only some of the games developed for the hardware.

The very welcome news here is that SEGA X Boards pinout is actually compatible with Outrun hardware. A minor difference reside in the audio and video connectors used (0.098" pin spaced JST vs 0.156" Molex), buth they still share the pinout. SEGA X-Board finger supports both connectors types.

I compared wirings for After Burner, Thunder Blade, Super Monaco GP and Line of Fire (this last one only partially). I ended up with a solid, general X-Boards wiring for the 50 pin digital inputs and outputs AMP connector and for the 20 pin analog inputs connector.

SEGA X-Board hardware supported more outputs than Outrun Hardware. After Burner, in example, had two independent lamps in addition to the start button, and a total of three solid state relay drivers. The final, on-board driver stage is the same as the previous hardware, anyway, with a (couple of) ULN2003 buffers/inverters*.

(*) This is true for After Burner, the only X-Board game schematics are available for at today. I am here reasonably assuming the same solution was adopted for the other X-Board games.

Again, I focused my researches on upright cabinets and my efforts went in the direction of supporting those, not deluxe cabs.

The existence of an (very nice) XInput library for arduino that handles joystick rumble and the fact that I still had some unused pro-micro pins available made me think that it could be a nice addition to wire one to the ULN2003 DC motor buffer line. This way we have the choice to use the pro-micro for inputs and DC motor out control, and NANO for all other lamps out. Shorting outputs toghether is not a good idea (it's a bad one indeed), so I ORed one arduino NANO and one Pro Micro pins to the DC motor control pin A17**. Sort of an over-engineering solution, but I had great results with that library on a previous project of mine and could not think at leaving it out for rumble/shaker outputs.

(**) Outrun Hardware DC motor control is actually connected to A18, with A17 left unused. To "activate" the function simply short A17 and A18 toghether.

Step 6: Atari System 2

Another BIG arcade hardware (in all sense!). Games developed for this are Super Sprint, Championship Sprint, Paperboy, 720°, APB - All Points Bulletin and a couple of prototypes. I challenge you to find a game that you don't like between these (proto excluded)!

By looking at schematics (in particular paperboy schematics) we can argue that this hardware supported at least 12 switches (but there's not a game usign them all), four analog inputs and four quadrature encoders. Super Sprint was the game that pushed the hardware the most on this regard with it's three potentiometers (pedals), and three quadrature encoders (wheels).

In System 2 hardware, quadrature encoders used a basic buffering circuit made of a 10nF capacitor in parallel with a 3.3K ohm resistor to ground. This was probably dictated by costs reduction or to save board space (did the LETA chip had an internal buffer stage eventually?). In previous hardwares an active buffer was adopted instead (see Pole Position Step).

To smooth out quadrature encoders data lines I installed a USB powered, inverting buffer for each line.

The hardware supported outputs too, with APB being the only game I am aware of that actually used two game-controlled lamps. Lamps signals coming from the CPU board pass through a simple, inverting 2N3904 driver. I adopted a ULN2003 instead, in a similar way I did for Outrun/XBoard hardware.

Connectors counting is higher than SEGA X-Board. The good new is that connectors are of one single type, with "keys" to prevent orientation errors. In particular, this hardware calls for:

1) 1x11 pins connector (0.100" pitch) for power supply

2) 1x17 pins connector (0.100" pitch) for auxiliary switches and audio signal

3) 1x11 pins connector (0.100" pitch) for wheels/handlebar signals

4) 1x11 pins connector (0.100" pitch) for control panel switches

5) 1x11 pins connector (0.100" pitch) for foot switches

6) 1x11 pins connector (0.100" pitch) for video signals

System 2 cabinets adopted the so called "Regulator/Audio" board, or "AR-III" for power supply and audio amplification. This amplifier has an auto-regulation feature with the tendency to kill the amplifier itself with connectors ageing. To prevent this some user performs the so called "SENSE mod", a simple and effective two jumpers hack to the AR-III circuit*.

I am not going deep into the mod here: what you want to know is that CoinOp Connect takes care of the regulator audio board SENSE circuit, so there's no need to mod the AR itself.

(*) >>HERE<< you can find all technical details about the ARIII circuit, suggestions on how to mitigate risks associated and the SENSE mod.

CoinOp Connect System 2 finger board uses AR-III for audio amplification and to juice the driver board. Quadrature encoders and buffers are powered by the Pro-Micro USB line. This means that, in case your AR-III is not working, you will anyway be able to test all controls inputs.

The original game is power hungry, and an extra switching supply was also present to beef the CPU board. This is unused in this project.

Step 7: Atari/Namco Pole Position

Pole Position is one of those, common in the first half of the 80's, cases where a whole hardware was developed to support a single game.

It is a very special case, actually, because there are two, slighty different hardwares from two different manufacturers: Atari and NAMCO.

As you very likely already know, Atari board has a 2x15 pin edge connector for video and a 2x22 pins edge for switches, quadrature encoder (wheel), potentiometer (pedal) and audio. NAMCO board has 2x10 pin finger for video and audio, and 2x18 for inputs (>>HERE<< is a trusted link to the "elusive" NAMCO pole position official schematics).

These are the most obvious, but differences are not limited to edge connectors!

Atari for audio and game logics amplification used the second iteration of it's audio regulator board (AR-II) and equipped upright cabinets with two of these. The sitdown version of the cabinet has four audio speakers instead of two and also differs from the upright cab in the use of a brake switch pedal.

NAMCO board too used two ARII boards, but for power sourcing only (no audio) and four built-in audio amplifiers (12W mono MB3730 amps) on the video board. You can locate them easily on the PCB, mounted on a bulky heat sink block. NAMCO's audio lines comes from the CPU board and are then amplified on the video board before being directly sent to external speakers.

Atari/NAMCO Pole Position use a quadrature encoder for the steering wheel (also known as "360°" wheel). There's an interesting difference here. Atari wheel PCB handles the straight signal from the quadrature encoder, with an on-board inverting buffer close to a custom chip to clean and smooth out wheel's data signal. NAMCO installed the inverting buffer directly on wheel board. This makes a whole lot of a difference for us, being that we have two different signals to handle, depending on the type of steering coupling PCB installed.

To face this and prevent issues from game PCB's "half-way" versions, I placed a buffer on both Atari and NAMCO finger boards, with the option to select direct or inverted signals through a 2P2T (dual pole, double throw) switch.

Pole Position hardwares support no outputs.

A warning about edge connectors: the original cabinet game PCB is made of two boards, one stacked over the other. Both boards have the components side facing out. They have opposite orientation, then. This in turn implies that the original cabinet wiring has the two edge connectors oriented in opposite directions. Coin-op Connect finger board calls instead for the exact same orientation of the two connectors. This means that you have to twist 180° one of the two cabinet connectors in order to insert it the right way. It is very unlikely that you can actually install one of them the wrong way because there's a key tooth on both connectors, but it could be sometimes the case keys have been removed.

By looking at the pinout, connecting one of the two with the wrong orientation shouldn't cause any issue, but I cannot guarantee for this. Pay maximum attention at connectors orientation when installing this (or any other) hardware to your cabinet.

Step 8: Firmwares

The possibility to easily create a dedicated firmware tuned to the specific cabinet needs is what makes an interface like CoinOp Connect possible.

The code can be ad-hoc written, with well tailored functions and leaving out what is not necessary.

In example, if the cabinet hardware do not support outputs, we will omit the function directly. If the hardware control panel has only switches, we don't need to handle potentiometers and quadrature encoders inputs.

This, overall, makes the interface firmware smaller, easier to modify and more responsive.

I wrote a set of firmwares, one for each supported hardware. In the following I will explain them.


Arduino Pro Micro Firmwares

Pro Micro firmwares handle control panel and auxiliary switches inputs. CoinOp Connect supports up to 4 analog inputs plus 14 digital inputs. Analog inputs can be used as digital inputs, eventually, for a total of 18 digital inputs.

Digital inputs can be used to monitor the press of simple switches (control panel buttons, in example) but also quadrature encoders. Quadrature encoders need two inputs each, with at least one supporting interrupt routines.

For all the following firmwares I have used Mattew Heironimus Joystick firmware to emulate a Direct Input analog joystick with multiple axis and buttons. Follow the link instructions to install the library in your arduino IDE.

With arduinos based on ATMega 32u4 (like the Pro Micro) emulating a keyboard or a mouse is a very simple task. This means that if you prefer to emulate keyboard keys instead of joystick buttons, it will be a matter of small code modifications.

My choice is joystick over keyboard because it has no button press limits. In addition, you will not send unwanted key presses during the PC configuration by accidentally pressing a control panel button or if there's a stucked in place switch (think at the single-switch shifter most 80's racing games used).

I also used arduino's built-in mouse library: quadrature encoders data are translated into mouse axis movements. This library is installed by default in arduino's IDE and needs no other actions on your side.

Now, let's take a look at individual firmwares features.

Please notice that none of the Pro Micro sketches can be considered as completed. Even if it is absolutely possible (and easy) to code deadzones, axis ranges etc. etc. optimization routines have been left out because real hardware is in the need for fine tuning.

Outrun hardware, Super Hang-on and X-Board

This sketch (XBoard.ino) handles 4 analog axis and 12 digital inputs.

Analog axis in a real hardware do not span the whole potentiometer range. User can define the actual hardware range limits.

Arduino's analog-digital converters have 10 bits of resolution. It's too much for this application, so I limited it to one byte. This alone could take care of wheel deadzone.

This sketch should be compatible with Outrun, Turbo Outrun, Hang-On, Super Hang-On, and all X-Board games.

WARNING: Super Hang-On fingerboard is unique and NOT COMPATIBLE with the one for X-Board and OutrunHardware. You will damage your PC and interface board by usign the wrong finger board (GND and power lines reversed!!).

Atari System 2

This sketch (System2.ino) handles 8 switches, 3 quadrature encoders (for a total of 14 digital inputs) and 3 analog axis.

Quadrature encoders are monitored with 1X counting, single interrupt routines. Their movements are assigned to mouse axis X, Y and wheel.

Analog axis in a real hardware do not span the whole potentiometer range. User must define the actual hardware range limits.

Analog axis values are limited to 8-bit of resolution (0-255).

It should be compatible with all Atari system 2 games.

Pole Position (I and II)

This sketch (Polepos.ino) handles a total of 9 digital inputs, two of them relegated to the wheel quadrature encoder, and an analog axis.

Quadrature encoder is monitored with 1X counting, single interrupt routine.

The analog axis is used for brake handling, adopted in the cockpit version of the cabinet.

Analog axis in a real hardware do not span the whole potentiometer range. User can define the actual hardware range limits.

As for previous hardwares, axis values are limited to 8-bit of resolution.

By using the correct finger board, this sketch should be compatible with both Atari and NAMCO versions of the cabinet.


Arduino NANO 328 Firmware

This firmware is the same for all hardwares. It is used to check for the correct video signal horizontal sync frequency, enable video amplification and outputs handling.

The first function is always needed with CRT monitors. When the correct H-sync frequency is detected, the microcontroller enables the video amplifier thus letting video signal and sync itself reach the arcade monitor. Nothing will be visible on screen before the correct horizontal sync frequency has been recorded.

User have to pre-define the "correct" frequency for the cabinet monitor before uploading the sketch: CGA (15KHz), EGA (25KHz) or VGA (31Khz).

This sketch also monitors messages on the serial port and turn on or off output pins accordingly.

Serial messages must be in the form of three 8 bits @9600 baud: output number to turn on/off ("dot" terminated), output state, end of the message (X). More info on the sketch itself.

If a cabinet don't support outputs (e.g. Pole Position), it will simply not receive messages at the serial port.

During debug it could be helpful to force enable the video output. By pressing button 1 user can force enable the video amplification thus overriding the frequency check routine.

We are in the need for a special external software to get game's output information. Such a software is called MAMEHooker. Even if it's not the goal of this instructable to teach how to configure MAME and MAMEHooker for outputs handling, I wrote a full tutorial in my mother language some year ago. Take a look if you are interested.

Step 9: Hardware & Firmware Compatibility Sheet

I realize that a lot of things have been written in the previous Steps and a simplification sheet to figure out which hardwares and softwares are needed with which supported cabinet is due.

The attached scheme should be enought, but feel free to post your question in case!

Step 10: CoinOp Connect Limits

A single interface for every arcade game is sort of an uthopy, we all know, but I tried to get as close as I could. Anyway, as for any other projects, actually there are limits we must be aware of.

A focus in the next few paraghraphs.

Inputs number

Inputs are limited in number. Cabinets with more than 18 inputs cannot be supported.

In example, cabinets with two joysticks would be limited to 3 buttons per player (plus start and coin) by keeping service switches out.

Outputs number

Outputs are limited to 8. These are handled by arduino NANO only, with the exception of one shared with Arduino Micro for special cases (see Outrun / X-Board hardware fingerboard description).

SEGA Model# systems are the cabinets with the highest amount of outputs I can think of. They feature a maximum of 4 view lamps, start lamp, leader lamp and force feedback. Eight outputs should be enought even for that hardware.

Cabs compatibility

Because of time limits, I could not verify, not even at a theorical level, which cabinets could be (or not be) supported by this interface. I gave a good look at wirings for a good amount of them (those I developed finger boards for, but also some cab I have a background on), but a vast part still remains unseen.

I based my layouts for supported hardwares on informations from the internet, whitout having the possibility to actually compare them to "the real thing".

I based my first researches on upright cabinets. Deluxe cabinets are more complex (more speakers, larger motors, more actuators, etc. etc.) and could be different on various levels from the upright version. This is especially true for, but not limited to, SEGA hardwares.

I have not always considered such differences and based most of this work on upright cabinets.

External softwares dependency

This hardware heavily rely on "external" (meaning "not developed by me") softwares to work. The possibility to output a game-driven signal, in example, is highly related to the existence of softwares capable of getting those signals from emulators and bring them to the outside world.

At the time of this writing there are two main softwares for the task. Howard Casto's MameHooker is the first and most important because it makes possible lamps and rumble signals control.

Boomslang's Force Feedback Plugin is the second one I want to mention. This is oriented on force feedback handling only (no lamps) and you can take advantage of it via the Arduino XInput library.

The limit coming from these softwares reside in the supported games: If a game is not supported, you will not be able to output anything.

Another fundamental piece of software are Calamity's CRT emudrivers. These are necessary to force your video card sync output to be lowened to CGA or EGA resolutions. They call for very specific (but highly available) ATI video cards. More informations in the link.

I have not cited a very important software here: MAME. This is probably the most famous arcade emulator software, so there's no need to spend too much words on it. Use the latest version of the GroovyMAME fork and your cabinet will thank you for adopting the most authentic game emulation possible.


Full testing needed!

Even if for the most part circuits and codes adopted here have been used (and tested) by me in previous projects or at least on bench, the whole interface and it's sketches have to be considered as UNTESTED.

In other words, I have not installed (yet) the interface in a real cabinet, so you are going to use it at your risk. If you anyway decide to proceed, I will be glad to help.

There are also things I could not figure out during my researches. In example, how Super Monaco GP DC motor is handled. There are three outputs reserved for the task, but having no driver board schematics I could not understand the working principle (not a simple attuator?).

Also thunderblade wiring diagram was lacking some info regarding the rumble motor. I think I figured out by comparison where the actuation signal goes, but I am not 100% sure.

Step 11: What About JAMMA?

We are expressly dealing with non-JAMMA cabinets here, but I love JAMMA and have already developed two interfaces for cabinets adopting the standard.

More than two, actually :D

I have also developed an I/O board for JVS, the JAMMA successor.

Links to dedicated instructables in the following:


WHIRLWIND - PC to JAMMA interface for arcade cabinets

CORSE - Arcade Racing Cab Interface Board

JVSCab2PC - SEGA JVS Cabinet to PC I/O Replacement Board


Take a look at them if you are interested: full boards informations, gerbers and softwares are described and shared, free and for everybody.

Step 12: Acknowledgments

Many thanks to those nice girls and guys at JLCPCB for sponsoring the manufacturing of this project's FR-4 PCBs. Without their material contribution I would probably never have pushed the project so far.

JLCPCB is a high-tech manufacturer specialized in the production of high-reliable and cost-effective PCBs. They offer a flexible PCB assembly service with a huge library of more than 350.000 components in stock.

3D printing is part of their portfolio of services so one could create a full finished product, all in one place!

By registering at JLCPCB site via THIS LINK (affiliated link) you will receive a series of coupons for your orders. Registering costs nothing, so it could be the right opportunity to give their service a due try ;)


All Gerber files, sketches and utilities I realized for this project are stored >>HERE<< (Github). I always upload the most recent file's versions, so it could be the case that some PCB looks a little different from those published in this instructable.

My projects are free and for everybody. You are anyway welcome if you want to donate some change to help me cover components costs and push the development of new projects.

>>HERE<< is my paypal donation page, just in case you would like to contribute ;)