Fork me on GitHub

Welcome to The Official Site of the MAME Development Team

What is MAME?

MAME is a multi-purpose emulation framework.

MAME’s purpose is to preserve decades of software history. As electronic technology continues to rush forward, MAME prevents this important "vintage" software from being lost and forgotten. This is achieved by documenting the hardware and how it functions. The source code to MAME serves as this documentation. The fact that the software is usable serves primarily to validate the accuracy of the documentation (how else can you prove that you have recreated the hardware faithfully?). Over time, MAME (originally stood for Multiple Arcade Machine Emulator) absorbed the sister-project MESS (Multi Emulator Super System), so MAME now documents a wide variety of (mostly vintage) computers, video game consoles and calculators, in addition to the arcade video games that were its initial focus.

License

The MAME project as a whole is distributed under the terms of the GNU General Public License, 2 (GPL-2.0), since it contains code made available under multiple GPL-compatible licenses. A great majority of files (over 90% including core files) are under the BSD-3-Clause License and we would encourage new contributors to distribute files under this license.

Please note that MAME is a registered trademark of Gregory Ember, and permission is required to use the "MAME" name, logo or wordmark.

Twenty Years of MAME

01 Feb 2017

Way back in 1997, Nicola Salmoria merged a few stand-alone arcade machine emulators into the first Multiple Arcade Machine Emulator. Could he have possibly imagined the significance of what he’d built? Over the past two decades, MAME has brought together over a thousand contributors to build a system that emulates more machines than any other program. But MAME is more than that: MAME represents the idea that our digital heritage is important and should be preserved for future generations. MAME strives to accurately represent original systems, allowing unmodified software to run as intended. Today, MAME documents over thirty thousand systems, and usably emulates over ten thousand. MAME meets the definitions of Open Source and Free Software, and works with Windows, macOS, Linux and BSD running on any CPU from x86-64 to ARM to IBM zSeries. As well as a general-purpose emulator, MAME serves as a reference for people repairing vintage electronics, a development platform for testing homebrew/unofficial software, and an educational tool. We’ll be posting a series of updates and retrospectives in celebration of the twentieth anniversary of the first MAME release on 5 February.

So who develops MAME and why? MAMEdev are a group of people sharing the common goal of advancing the understanding, preservation and emulation of electronic history. We have about sixty developers at present. For most of the project’s life, development and releases were coordinated by an individual. This was originally Nicola Salmoria, who briefly handed over the reins to Mirko Buffoni before returning to the role. Subsequent coordinators were David “Haze” Haywood, Aaron Giles, Angelo “Kale” Salese, and Miodrag “Micko” Milanović. In May 2016 we transitioned from an individual coordinator to an elected board of five who loosely coordinate development. The current board consists of:

  • MAME visionary Miodrag “micko” Milanović
  • Technical lead Olivier “Sarayan” Galibert
  • Very senior developer R.Belmont
  • Development and release manager Vas “cuavas” Crabb
  • Project facilitator Greg “Stiletto” Ember

In addition, two very important roles on the team are our technical writer Firehawke, and head of QA Tafoid (also our main liaison at MAME Testers).

Originally, MAME only emulated arcade games by a rather arbitrary definition. A sister-project called MESS (Multiple Emulator Super System) sprang up leveraging the MAME framework to emulate everything else. In August 2012, MAME and MESS combined their source trees and harmonised releases. In May 2015, the functionality formerly provided by MESS was folded into MAME. Former MESS project coordinators were Ben Bruscella, Nathan “Bletch” Woods and Miodrag “Micko” Milanović.

But MAME wouldn’t be what it is without the massive community surrounding the project: all the people who’ve dumped ROMs/disks, submitted patches, filed bug reports, developed a front-end GUI, curated a collection of support files, packaged binaries for distribution, helped a friend or acquaintance get started with MAME, or even just talked about the project, getting the word out there. It’s thanks to all of you that MAME has endured this long and grown to the scope it covers today.

MAME Release Schedule

26 Jan 2017

You may have been following MAME for a while but you may not know about our release schedule and processes. This is largely our fault – we haven’t been particularly transparent about our release process. In fact, we didn’t even really have a formal release process for a lot of the project’s lifetime. Since the release of MAME 0.156 on 26 November, 2014, MAME has been released on the last Wednesday of each month according to the Gregorian calendar. Barring truly exceptional circumstances, we plan to maintain this schedule.

Since MAME 0.179 (October 2016), we’ve implemented a three-day feature freeze in the lead-up to each release. On the Sunday before the release date, we begin stabilisation and preparations for the release. After the feature freeze comes into effect, only important fixes are integrated into the release, and basic functionality is tested in a variety of Windows, Linux and Mac configurations. ROM/software definitions are generally not updated between the feature freeze and the release. The exceptions to this are corrections to errors if we find any, and addition of completely new software lists for systems that have recently been promoted to working. The freeze gives us a chance to do some testing on a stable target and minimise the chance of a late change causing problems with the release.

In technical terms, at the point of the feature freeze, we create a branch off master called release0nnn, where nnn is the portion of the version number after the dot. Fixes going into the release are pushed or cherry-picked into this branch while normal development continues on master. Anything that doesn’t go into the release branch goes into the following release. On release day, the final release version is tagged and merged back into master, and the release branch is deleted. The release tag has the form mame0nnn. The release branch is publicly available in our main repository on github during the period between the feature freeze and the release. All revisions from the release branch are merged back into master after release, so no revision information is lost and links to individual commits remain valid after the release. We also coordinate with MAME Testers to add a version for the following release when the freeze takes effect.

If you’re maintaining a project that tracks MAME releases (for example a fork or a front-end), we’d like it if you base your releases on our tagged release versions, and not on latest master during the freeze period or immediately after the release. During the freeze period, master may not contain all fixes going into the release, and we also often use this period where we’re a whole month away from the following release to integrate high impact changes to maximise testing time.

Assuming you’re using a git client and have a remote called upstream that points to the official MAME repository at https://github.com/mamedev/mame.git, you can fetch all current branches and tags with this command:

git fetch upstream

If you want to merge changes from the MAME 0.183 release branch into your active branch during the freeze period later this month, use these commands (substitute numbers for subsequent releases):

git fetch upstream
git merge upstream/release0183

After MAME 0.183 has been tagged, you can merge the final release into your active branch with these commands:

git fetch upstream
git merge mame0183

You can remove stale remote branches that have been deleted from the master repository with these commands:

git remote prune upstream

Note that this only removes references to stale remote branches from your repository. If you’ve created tracking branches, you’ll need to delete them with git branch -d.

If you aren’t using git, we recommend that you base your project on official source packages either from our download page or from the the the releases page on github.

MAME 0.182

25 Jan 2017

As we approach the 20th anniversary of the first MAME release, we’ve got a really exciting update for you. There’s so much awesome stuff in this month’s release that there’s no way we can possibly cover it all here. MAME is a team effort, and we’d like to thank everyone who’s contributed towards making this release as awesome as we think it is. One very exciting addition is support for another version of the East German Poly-Play system, with German and Czech ROM sets providing ten games, six of which are new. Protection on Future Flash/Laser Base has finally been emulated, so you can take a look at Hoei’s take on Missile Command. A dump of the damaged microcontroller (MCU) from Tatakae! Big Fighter makes this title and Sky Robo finally playable. Another eagerly awaited addition is the Hot-B prototype Hangzo.

Serial ports have been hooked up on Race Drivin’ allowing you to link two MAME instances over TCP, reproducing the multi-player experience with linked cabinets. To do this, use a null modem slot device and configure it for 38,400 Baud, 8 data bits, even parity, and 1 stop bit. It would also be possible to connect a MAME instance to a real board set by forwarding the connection to a serial port on the host system.

We’ve received a contributed PortAudio output module and integrated it in this release. This provides a cross-platform low latency audio output solution. Performance should be similar to Steinberg ASIO on Windows 7 or later without the licensing issues, and better than SDL audio on Linux. It can be enabled by setting the sound parameter to portaudio on the command line or in an ini file. Of course, all the other audio output modules are still supported, so if you're happy with your current setup you don’t have to change anything.

Although we haven’t added a huge number of new microcontroller (MCU) dumps in this release, substantial work has gone into improving systems where we already have dumps but the emulation is lacking. MCU emulation was added to Puzznic, Joshi Volleyball and Gladiator. For Puzznic, this places player data at the correct location in RAM and supplies the game with a pseudo-random number sequence rather than a stream of zeros. Joshi Volleyball now behaves better in service mode, allowing coins and inputs to be tested. Gladiator now honours the coinage DIP switches. The MC68705 core has had a complete overhaul, and all drivers using it have been reviewed. This fixes lots of subtle issues: for example Change Lanes will now skip the full memory tests if configured to ignore them in DIP switches, timings have improved in Arkanoid, and the Apple II mouse card is slightly improved. We now emulate the ’705 family well enough to support stand-alone MCU programmer boards.

Other improvements include working sound in Pole Position bootlegs, improved video in Winning Run, preliminary banked 256 colour mode for the NEC PC-9821, kana input on the Sharp X1, a VME bus system with preliminary support for the miniFORCE 2P21 chassis, additional Aristocrat Mark 5 peripheral emulation allowing non-US games to boot, Corvus hard disks for the DEC Rainbow 100, preliminary work on Atari Stunt Cycle (displays the playfield), fixes for the Aussie Byte and Otrona Attaché, and support for octal and binary numbers in debugger expressions.

For more detail on what’s changed, check out the whatsnew.txt file, or grab the source or Windows binaries from the download page straight away.

MAME 0.181

28 Dec 2016

Happy new year from the MAME team! To help you celebrate, we’re unwrapping an extra-special release this month, with enough improvements to put anyone in a good mood. The exciting news that’s got people talking is that protected microcontrollers (MCUs) from a number of games have been read out and hooked up in MAME. This gives real, emulated sound in Toaplan’s Vimana, Fire Shark (also known as Same! Same! Same!) and Teki Paki, proper emulation of Tokio/Scramble Formation, M-chip emulation for Taito Extermination, Dr Toppel and Plump Pop, MCU emulation for Sega Altered Beast and Golden Axe, and partial sound in World Beach Volley. There’s more coming on this front, so stay tuned for upcoming releases!

MAME 0.181 also marks the debut of Votrax SC-01 emulation in MAME, based on reverse-engineering die photographs. The digital section should be pretty much perfect, although there are still some issues in the analog section (plosives don’t sound quite right). Overall, it’s a huge improvement in Votrax speech synthesis emulation, and a great leap forward in our understanding of how the hardware works. It also means speech samples are no longer required for a number of games.

Building on the ARM improvements in last month’s release, we now have working floppy drives and sound in the Acorn Archimedes driver, and default NVRAM images for the US Aristocrat Mark 5 games. This greatly increases the amount of RISC OS software you can try out, improves the gameplay experience in the Archimedes-based arcade games, and allows you to play the Aristocrat gamblers without having to make your way through the setup process first.

MAME’s discrete netlist emulation library has been expanded substantially in this release, including some new classes of devices like ROMs, and many newly supported logic chips. This will make it substantially easier to emulate arcade games which used discrete TTL logic, and as a test of this new functionality, the TTL video board from the Hazeltine 1500 intelligent terminal is now emulated using the netlist system. There’s ongoing work in this area involving multiple developers, so look out for more exciting updates in this space.

We’ve fixed some fairly significant bugs, including one preventing the debugger from working on Linux or Mac with drivers that use a dynamic recompiler core, and one that could cause MAME to crash when using BDF fonts. The internal UI should be more efficient if you’re using icons now, and issues with spurious key repeats should be reduced. The Beezer driver has been rewritten and should be improved overall.

There are quite a few newly dumped arcade games in this release, including Eeekk!, Simpson Junior (a Korean bootleg of J. J. Squawkers), Power Flipper Pinball Shooting (an updated version of Grand Cross), a version of Momoko 120% with English text, Miss World 2002 (an adult Qix game), and alternate versions of The NewZealand Story, Real Bout Fatal Fury, Space Dungeon, Flicky and Turbo Force. The Apricot PC and Xi are now working, further increasing MAME’s coverage of DOS-based computers that aren’t IBM-compatible. You can also play with the COP44L version of Entex Space Invader, and Mattel Funtronics Jacks and Red Light Green Light.

There are far too many improvements to list here, including lots of fixes for graphics and flip screen issues, but you can read all about it in the whatsnew.txt file, or grab the source or Windows binaries from the download page and start playing.

MAME 0.180

30 Nov 2016

Hello everybody! Are you ready for the November MAME release? It’s definitely ready for you, and there are lots of reasons to get excited this time around. First and foremost, a number of ARM CPU core fixes mean you can now boot to the RISC OS desktop on an emulated Acorn Archimedes, and try some of the included applications. The same bug fixes allow a number of Aristocrat Mark 5 gambling machines to boot and run in demonstration mode. There are still some issues to iron out, but things have definitely improved enormously.

On the arcade front, protection on Atari Space Lords has finally been reverse-engineered making the game playable. This is an interesting space combat game for one or two players, where the second player takes on the role of the gunner/co-pilot. In another improvement that’s been a long time coming, The Acclaim RAX sound board is now emulated, bringing sound to Batman Forever and NBA Jam Extreme. There are substantial improvements to the Magnet System emulation (added in last month’s release) making these rare prototype bootlegs playable. David Haywood also fixed some graphical issues in Altered Beast, and Angelo Salese fixed graphical issues in The Lost Castle in Darkmist.

There are some other notable improvements in computer emulation, too. Barry Rodewald has added support for IC Card (PCMCIA SRAM) storage on the FM Towns, and substantially improved LSI Octopus emulation. The Mac 128/512/Plus drivers have been modernised, and serial port support has been added to the Apple IIgs driver. Another DEC Rainbow 100 update from Bavarese fixes colours in high-resolution mode among other improvements.

Newly supported systems include RC De Go (Go By RC outside Japan), newly dumped versions of 1945k III, Forgotten Worlds, Sol Divide and Vendetta, the Italian release of Mustache Boy, 286-based versions of the Intel iSBC, bootlegs of Blue Shark, Pole Position II and Ozma Wars, more Fidelity and Mephisto chess computers, and more electronic toys.

As usual you can read all the gory details in the whatsnew.txt file, or go right ahead and get source or Windows binaries from the download page and have some fun.

MAME 0.179

26 Oct 2016

Are you getting fidgety waiting for Halloween to arrive? Well now you can take your mind off the wait by giving the brand-new MAME release a spin! We've changed the release slightly this month: the whatsnew file is formatted differently, the 32-bit Windows binary package has "32bit" in its filename, and we're no longer providing a pre-built debug binary package for Windows. We've dropped the debug binaries as they don't seem to have a target demographic. All builds include the MAME debugger. The release packages are built with symbols that will give a meaningful stack trace. The debug build was still optimised, so stack traces were no more precise. The main difference is that debug builds have assertions enabled which is mainly useful if you're working on the source. In short, we don't see a use case where someone would be better off with the debug build if they aren't compiling MAME themselves anyway.

With that out of the way, what surprises does MAME have in store for you all this month? We're pretty confident that we have something for everyone! First of all, we're proud to present the Soviet arcade game Istrebiteli ("Fighters", as in aircraft). We've also emulated Ocean to Ocean, an early video slots game on the DECO Cassette system. ShouTime has worked his magic again, allowing the masses to see the rare Alpha Denshi title Splendor Blast II. But possibly most interesting is preliminary emulation of the Magnet arcade system, a prototype floppy disk-based system from Spain.

We've also added a number of non-arcade systems. There's the Gakken Game Robot 9 handheld game, and several Fidelity chess systems. Getting away from games altogether, we've added a working driver for a VeriFone Trans payment terminal. There have been some substantial updates to the software lists, too. The Sega CD software list has been completely updated to use the latest and best dumps known to exist, we've replaced a number of pirate Apple II disk images with clean cracks, there are some notable additions to the Sharp X68000 floppy list, and even an obscene Pokémon hack for Game Boy that's being sold in China.

As always, there isn't enough space to cover everything here, so so why not check out the whatsnew.txt file, or head straight for the download page and try it out.

Micko at CppCon 2016

29 Sep 2016

On Thursday last week, our very own Miodrag “Micko” Milanović gave a presentation at CppCon 2016. He covered the project’s history, goals, and current direction, before talking about some of the technologies we use and our experiences modernising the codebase. It’s a bit over an hour long, and not overly technical. The slides are available on github.