Introduction
GroovyArcade is an entire Linux distribution dedicated to running emulators (including MAME) on a standard PC, outputting video signals to standard definition arcade CRT monitors. This is a brief introduction to the project, as a dedicated how-to would require many pages and videos to go through all the options available.
https://github.com/substring/os/releases
http://forum.arcadecontrols.com/index.php/topic,130667.0.html
The challenge of arcade resolutions
Unlike consumer CRT TVs or Sony PVM style broadcast monitors, there were no fixed standards for arcade monitors. We regularly talk about “240p” modes for old video games, but arcade games can vary not only in line count (the “240” part refers to 240 horizontal lines drawn, top to bottom), but also the refresh rate – where “240p” generally means 60Hz for NTSC regions, or 288p 50Hz for PAL regions, arcade games vary greatly with many modes in between.
A more common way to refer to arcade CRT capabilities is to talk about their horizontal sync rate (how many times per second the CRT’s electron beam must travel across the screen to draw lines). These commonly fall into 3 categories for older games (with the KHz numbers being approximations, not exact values)
- 15KHz, (“standard res”, what console/CRT-TV users refer to as “240p”). These allow around 200-300 lines at around 50-70Hz
- 24KHz or 25KHz (commonly called “medium res”). These allow around 300-400 lines at 50-70Hz (popular with Sega Model 2 and ST-V titles)
- 31KHz (“high res”). These allow 400-500 lines at 50-70Hz, including VGA modes
A good example of a 15KHz game that is difficult to run on a TV or PVM is the Midway classic “Mortal Kombat”. It runs with a vertical refresh of 54.7Hz (chosen to allow for a slightly higher 400×254 resolution, compared to “Street Fighter II” which chooses 384×224@59.64Hz), which consumer TVs locked to 50 or 60Hz struggle with. Arcade CRTs can often be adjusted easily via an analogue “vhold” pot on the the CRT’s driver board (called a “chassis”) to sync to this refresh, where as the old “vertical hold” pot/dial once common on old consumer TVs disappeared by the early 1990s.
GroovyArcade’s components
With all that in mind, making a combination of operating system and emulator that works with this degree of hardware variability is precisely what GroovyArcade intends to do.
It makes several changes to upstream open source projects, such as
- The Linux kernel and Xorg
- Modifications made to certain video card drivers (distributed with Linux and Xorg, not downloaded third-party like Windows) to allow a lower pixel clock, and produce the exact low resolution video signals required
- Switchres
- A tool that can be told the upper and lower bounds of a CRT’s capabilities, and contrive resolutions that are “best fit” for the game to run as close to native refresh as possible
- GroovyMAME
- A fork of MAME that can take real time resolutions generated by Switchres
GroovyArcade uses the Arch Linux disto as a base, plus its own modifications, along with the software mentioned above, and packages it all in a custom installer.
Installation gotchas
Installation can be a little tricky, as most PCs will boot in 31KHz+ (VGA) modes, which many arcade monitors can’t display. If you’re fortunate enough to have a “tri-sync” monitor that supports 31KHz, you’re in luck. But the vast majority of older monitors were limited to 15KHz modes. As such, installs generally require a spare PC monitor to boot the install media from, and at boot time select a 15KHz mode to continue with. From there, manually switching back over to the arcade monitor can continue the boot process.
Choosing hardware
Choosing a video card for the job isn’t particularly straight forward, but if you’re already invested in real arcade hardware, you’re not the kind of person who demands “works out of the box” anyway. 🙂 Generally speaking, AMD/ATI video cards work the best, thanks to many devices allowing for very low pixel clocks still, and excellent quality open source drivers.
The “pixel clock”, sometimes referred to as pclock or dotclock, is the frequency generator that determines the upper and lower bounds of what resolutions a video card can achieve. On some modern video cards, these are locked to much higher rates, limiting the lowest resolution the card can output. However many video cards exist that still have the low pclocks in hardware, and merely software-lock the low resolutions out to prevent problems with newer high resolution monitors. Thankfully Linux’s open source nature means changing these software locks is a relatively simple process for developers.
GroovyArcade/GroovyMAME developer “Calamity”, who is also responsible for the CRT_EmuDriver hacked Radeon drivers for Windows (another project aimed at producing low resolution modes on CRTs, but in Windows), has a list of hardware that supports the low pixel clocks required for true arcade resolutions:
http://geedorah.com/eiusdemmodi/forum/viewtopic.php?id=65
However if your hardware doesn’t support the low pclocks, a “super resolution” can be used that integer scales the game horizontally. CRTs have no concept of horizontal resolution, so integer scaling horizontally helps the video card stay within bounds, while still producing the desired line count and refresh rate native to the CRT.
To force 15KHz at boot, a couple of options are available:
Arcade specialist company “Ultimarc” used to stock a card flashed at a BIOS level to enable low resolutions at boot. Sadly the product is discontinued for now, however they can occasionally be found on eBay:
https://www.ultimarc.com/arcade-vga-and-video/arcadevga-cards/
Another open source project is the ATOM-15 project, designed to allow flashing of standard AMD/ATI cards with a custom BIOS to force 15KHz modes at boot:
http://geedorah.com/eiusdemmodi/forum/viewtopic.php?id=64
Alternatively, merely firing up your GroovyArcade PC for a few seconds prior to your arcade CRT is a simpler method of ensuring it’s already in 15KHz mode by the time the CRT wants to take a signal in. 🙂
For joysticks and other interfaces, whatever Linux+MAME supports, GroovyArcade will support. An enormous array of standard USB encoders work fine, including support for digital and analogue joysticks, 360 degree spinners, 270 and 360 degree steering wheels, light guns (you’ll need the IR kind such as the AimTrak, not the scanline kind like PlayStation light guns), console game pads, dance mats, rhythm controllers and so on. There’s a virtually limitless volume of existing input devices you can plug into this setup, and new devices being created by commercial companies as well as enthusiast community makers every day.
The user interface
I have heard some criticisms over the very bare bones front-end the system uses. There are certainly “flashier” front ends out there, like the famous Hyperspin that can incorporate high res graphics and video previews of games. GroovyArcade’s challenge is mostly in how much detail can be crammed into low resolution CRTs.
With that in mind, the rather minimalist AdvanceMenu project shows game names (and optionally game clones if you like), along with artwork you can download in packs (snapshot and marquee artwork are popular downloads). Despite looking rather plain, it makes it easy to identify a game quickly and load it up. Speaking for myself, I spend a lot more time playing games and a lot less time looking at menus, so the simplistic approach is much preferred for me.
Playing games
Once installed, GroovyArcade works similarly to tools like RetroPie or RetroArch, where merely dropping ROMs and artwork into the correct folder structure will make them playable.
Depending on your hardware setup, extra configuration may be required per-game, such as adjusting the screen width, height or refresh on the arcade CRT itself. And while this may feel inconvenient, it’s worth remembering this is how real arcade hardware worked – each new game an operator installed required configuration to that game. Games from the same family of hardware often run identically for video setup – for example, if you only played Capcom CPS1, CPS2 and CPS3 games on your GroovyArcade setup, you’d likely never have to adjust your monitor, as they all use the same resolutions and refresh rates. However if you want to play some Mortal Kombat, followed by some Street Fighter, followed by some King of Fighters, you’re in for a few tweaks between games, due to the highly accurate nature of the video emulation.
From here, there are some limitations to what a single arcade machine can offer. Some games require the screen to be rotated vertically, using the full resolution that can’t (or shouldn’t) be scaled to a horizontal screen. Some games require specific input controls, whether they are analogue trackballs, steering wheels or joysticks, or whether they are older style games that require physical gates on the joysticks to limit their inputs from 8-way (including diagonals) to 4-way (blocking diagonal directions). There’s a variety of options here, and choosing the right controls and monitor rotation options comes down to the individual, and the types of games they are most interested in.
Summary
Once again, this has been just a brief introduction to the world of arcade hardware, and running software emulators on them. While trickier than a standard PC or RetroPie setup, the level of video accuracy on real arcade CRTs is the draw for many users, and can be worth the effort for many chasing the “arcade experience” at home.
While emulation is sometimes demonised for the dreaded “lag”, what it does offer is a cost effective way to play an enormous volume of classic games that simply aren’t available in any other form. We have more and more options lately of course, in the shape of arcade multi-carts, FPGA simulations like MiSTer, and home ports of the more famous and popular arcade games. And for the purists, collecting real arcade PCBs is a great way to get the real deal. However few can argue that MAME’s current database of 17,318 unique machines (41,760 including clones, bootlegs and regional releases) [accurate to MAME version 0.220, and growing by the week] doesn’t offer an amazing way to sample a huge part of video gaming’s history in a highly accessible way.
And while arcade collecting can be a highly infectious hobby (speaking as someone with 7 arcade machines, 2 of which run GroovyMAME, and constantly resisting the urge to keep buying more), a single machine can often be a host for thousands of compatible games (assuming resolutions, monitor rotations, and input controls all match).
More information
If you want to know more, a great place to start are the ArcadeControls forums. This is a community that’s existed for over 20 years building arcade, pinball and jukebox hardware in all shapes and sizes for a diverse group of users, from hardware purists to emulation enthusiasts. The GroovyArcade and GroovyMAME developers hang out there (I frequent on occasion), and there’s an enormous wealth of knowledge for anyone to find a way to get started in this hobby.
http://forum.arcadecontrols.com/index.php/topic,130667.0.html