# MAME

Developer(s) MAME Team 0.225 Yes Multi-platform Thousands of electronics MAMEDev.org C++ (C & Python for some drivers) GitHub

MAME (originally an acronym for Multiple Arcade Machine Emulator) is a multi-platform, open-source, multi-system emulator written in C++. The philosophy behind the project is to recreate the workings of machines through emulation, and thus the ability to actually play the games is "a nice side effect". MAME is incredibly large, supporting thousands of machines and ROM sets, though what is supported is not what's playable; your mileage may vary. In the event you don't like MAME's own interface, there are many alternative front-ends available.

Much like the name says, MAME was supposed to be for arcade machines like Pac-Man back when it was released in 1997. A similar project called MESS was made to do essentially the same thing for home consoles and other esoteric devices that never got emulated, but it has since been merged into MAME by the end of May 2015 in version 0.162, and now it supports a whole lot more than arcade machines.

 Official releaseStable SDL Supported Platforms Nightly buildsCompiled by Ashura-X

## Overview

MAME was first put out on February 5, 1997 by Nicola Salmoria as a Pac-Man emulator,[1][2] but before he could do any more work on the project, he handed it over to Mirko Buffoni in April 1997 after requiring to do National Service in the Italian army.[1] Since then, even as early as 2003, the emulator has become very extensive, with the majority of arcade system boards from the 1970's, 1980's and early 1990's supported. On February 2016 in version 0.171, a new GUI was integrated into MAME which allowed users to launch games in it without the need for a third-party GUI application.

However... don't expect support for more recent boards like Atomiswave; the project and its team focuses on accuracy (preferably cycle-accuracy) and preservation, which often puts usability at a much lower priority for end users. The program is also very strict about what components of a ROM dump it needs to even function, and it may tell you if something is wrong with the files (i.e. a failed checksum); once developers know more about a system, they'll often have to dump more components like ROMs and BIOSes if necessary, and obtaining newer dumps from the boards isn't exactly the easiest thing in the world for users who only have traditional desktops, and the same goes for anyone with the actual arcade boards. Something as popular as Pac-Man will probably never need newer dumps beyond the current ones because it's been continually researched, and the dumps have been pretty widespread, but other machines you've probably only seen once at an arcade will probably need new dumps for a reason. Only ROM dumps with all the newest information will work in new versions of MAME. Even then, programmers may not have everything implemented. The native interface will tell you about the emulation status of the chosen romset, and whether the one you're using is even emulated at the current time.

Also see the incomplete MAME compatibility list internally here. And the latest in-progress changelog update.

### ROM dumps

MAME either has lots of standardization on how to organize the ROM dumps, or it has very little, and sometimes the given information can be vague and confusing. A single game may need lots of files for the dump to even register, and separate folders for the BIOS files of consoles. For machines that use stuff like hard drives and optical disks to store its data, MAME has a special format called Compressed Hunks of Data (CHD) which uses a number of compression methods to reduce the size of a raw image file.

It is highly recommended to use a ROM management tool such as RomCenter or ClrMamePro. Without all the required files and file versions, the game simply will not work.

## How To

### Convert Bin/Cue files to CHD

Many emulators other than MAME are beginning to support Compressed Hunks of Data, mainly because compared to the alternatives, it offers compression (or better compression) on all fronts. Libretro is making an initiative to support them thanks to a successful bounties initiative, and in many cores such as their Beetle fork, they've begun rolling it out for certain platforms like Saturn and PlayStation so people can test it.

If you're interested in trying it out for yourself, this guide will show you how to convert to the format using MAME's command-line tool called chdman. We'll warn you now that you will need to know how to use either a Unix shell or the command prompt in order to use it. The developers of MAME seemingly don't have plans to give chdman an interface so if the thought of going back to the DOS days scares you too much, you may have to wait.

 Note: Unless explicitly stated, don't type the commands word for word because you'll need to replace some values with your own. Also: Make sure the cue sheet points to the relative location of the binary and that it works. On Windows, download MAME from the official website (linked above). The Linux guides on emugen will usually provide these locations. On Windows, there should be an executable in the main directory called chdman. If you don't intend to keep MAME on your drive, you should type out the full path of the folder. If you intend to keep MAME, add its directory to your path. Because Linux packages insert shortcuts into folders assigned to the environment path, we can call it from any folder. Open up the terminal and navigate to the folder containing the BIN/CUE files. $cd "path/to/folder"  chdman has a command called createcd that we'll use to create a CD-type CHD.[3] Note that in the example below, "test (!)" is a placeholder and should be renamed to the name of the file. >C:\path\to\chdman createcd -o "test (!).chd" -i "test (!).cue"$ chdman createcd -o "test (!).chd" -i "test (!).cue"  chdman will now compress the cue file, and it should complete with just one CHD for you to use, either in MAME or an emulator that supports it.

### Recompressing ZIPs to 7-Zip

Note: If you're confident, you can delete files immediately instead of sending them to the recycle bin or trash bin using the keyboard shortcut Shift + Delete. Always back up the files if you're worried you might do it wrong.

MAME keeps a database of romsets including what each file should be named. If the ROM dump is obtained through a ZIP file, you can uncompress the files inside and transfer them to a 7-Zip file for better compression. The 7-Zip archive HAS to have the exact same name (not the same file extension obviously).

In case you're wondering why 7-Zip is supported in MAME and not RAR, it's because the LZMA development kit that's developed alongside 7-Zip is in the public domain, and the MAME team uses it for CHDs along with FLAC for audio and data compression; RAR is a proprietary format that can only be decompressed by 7-Zip, not compressed to, as per an agreement with both development teams.

Graphical Take the zip file: roms/ (romset).zip/ (game).(rom) (lle1).(rom) (lle2).(rom)  And uncompress it to a folder of the same name. roms/ (romset).zip/ (game).(rom) (lle1).(rom) (lle2).(rom) (romset)/ (game).(rom) (lle1).(rom) (lle2).(rom)  At this point, you can safely delete the zip file. Go into the folder, select all the files, and add them to a .7z archive using 7-Zip. Assuming you've installed 7-Zip with the default settings on Windows, the option to do this should come up when you right-click the files. The name of the archive must be the romset's name. The config screen may show an option to "delete files after compression". You can safely select this and, assume you do, the archive will now appear in the folder (unless you've specified a different location): roms/ (romset)/ (romset).7z  Take the 7-Zip archive, move it into the roms folder, and you can safely delete the romset's folder. It should look like this. roms/ (romset).7z  Rinse and repeat for any other romsets you want to do. MAME should be able to read it. The following is a non-destructive one-liner to decompress and recompress your files from zip to 7z. Please account for at least a 3:1 space requirement, and about 3 seconds time per file (give or take). Keep in mind, if you have any other folders present in the working directory it'll snag those too during the second step. for y in *.zip; do 7z x "${y%}" -o*; done && for i in */; do 7z a "${i%/}".7z "./\${i%}*"; done  After it's done, be sure to check and make sure the 7z and zip files' contents match before deleting both the zips and their extracted folders.

## Frontends

MAME has many third-party front ends.

Main article: Frontends#MAME

## List of forks

GroovyMAME
Main article: GroovyMAME

Also known as GroovyUME. It's a fork of MAME/UME made to support arcade CRT monitors for AMD cards.

AGEMAME

Years ago MAME used to exclude gambling games, this lead to a fork called Arcade Gambling Extensions for MAME (AGEMAME) being created for this specific purpose. Nowadays, it's since long integrated into MAME.

MESS
PinMAME

• NO mechanical games (pinball, crane games, etc)
• NO poker, fruit, slot or gambling games
• NO computers, consoles, terminals, appliances, etc
• NO games that display a black screen (skeleton drivers etc)

## Netplay

Review
PROS
• Support for up to 4 simultaneous people playing
• No fiddling with router settings and port forwarding
• Despite being old, many consider it being able to handle Kaillera the best
• Netplay traffic is handled by a central dedicated server that helps keep things synched
• Robust library of games
• Extremely configurable
• Private game chat support and public chat to speak people outside your game room
• Being able to drop out of a game at any time without disrupting (much) your teammate(s).
• Kicking/banning/muting people from your room
• It's a matchmaking service where you can join other people's rooms, too
CONS
• It's slightly (significantly still) prone to freezing
• Mapping controllers and binding keys can only be done in-game, which might be confusing to first-timers
• Incorrectly emulates many games, while outright not being able to emulate others
• Random, inconsistent FPS drops due to the server trying to keep everyone synched, sometimes stuttering. It's annoying, but rarely does it make it unplayable
• Everyone needs to have the exact same ROM version or Netplay won't work (if it somehow does, it'll desynch rather quickly)
• Everyone needs to have the exact same save file, or no save file at all. Else, it desynchs
• You need to constantly switch focus back and forth between chat and emulator window in order to chat.
• You will hear no sound while the window is unfocused.
How to
1. Replace the kailleraclient.dll inside the "kaillera" folder in the emulator directory
2. Place your game(s) ZIPPED inside the "roms" folder in the emulator directory
3. Run the emulator, then press F5 to refresh your ROM list
4. Go to file, click Kaillera Netplay...

In order to configure your controllers, you need to press TAB once the game is running. Clear every key for Player 1 using "Esc", and only map the directional buttons, and buttons number 1 through 8, which should cover most standard games.

You may also chat in-game by pressing Home twice.

Also, you have to restart the emulator EVERY TIME you load a new game, or attempt to restart the current one. Else, you'll get a black screen.

## References

1. MAME OVER (0.99)
2. A Brief History of Emulation: MAME. Youtube (2017-12-02)