Convert Figma logo to code with AI

mamedev logomame

MAME

9,335
2,180
9,335
679

Top Related Projects

2,400

BizHawk is a multi-system emulator written in C#. BizHawk provides nice features for casual gamers such as full screen, and joypad support in addition to full rerecording and debugging tools for all system cores.

16,645

🕹 Retro video game emulation for macOS

Quick Overview

MAME (Multiple Arcade Machine Emulator) is an open-source emulator designed to recreate the hardware of arcade game systems in software on modern personal computers and other platforms. It supports thousands of classic arcade games and aims to preserve gaming history by accurately emulating the original hardware.

Pros

  • Extensive game support with over 7,000 unique games and variants
  • High accuracy in emulating original hardware
  • Active development and community support
  • Cross-platform compatibility (Windows, macOS, Linux, and more)

Cons

  • High system requirements for newer games and more accurate emulation
  • Complex setup process for beginners
  • Legal gray area regarding ROM usage
  • Some games may have compatibility issues or graphical glitches

Getting Started

  1. Download the latest MAME release from the official website or compile from source.
  2. Obtain ROM files for the games you want to play (ensure you have the legal right to use them).
  3. Place ROM files in the "roms" folder within your MAME directory.
  4. Run MAME and select a game from the list to play.

For compiling from source:

git clone https://github.com/mamedev/mame.git
cd mame
make

Note: Compilation requires appropriate development tools and libraries. Refer to the documentation for detailed instructions specific to your operating system.

Competitor Comparisons

2,400

BizHawk is a multi-system emulator written in C#. BizHawk provides nice features for casual gamers such as full screen, and joypad support in addition to full rerecording and debugging tools for all system cores.

Pros of BizHawk

  • Specialized for Tool-Assisted Speedruns (TAS), offering features like frame-by-frame advancement and input recording
  • Supports a wider range of consoles and systems, including Nintendo, Sega, and Sony platforms
  • More user-friendly interface for casual users and speedrunners

Cons of BizHawk

  • Less accurate emulation for arcade systems compared to MAME
  • Smaller developer community and potentially slower updates
  • Limited focus on preserving original hardware behavior

Code Comparison

BizHawk (C#):

public void FrameAdvance()
{
    Frame++;
    Controller.Update();
    if (Lagged.HasValue == false)
    {
        Lagged = true;
    }
}

MAME (C++):

void mame_machine::frame_update()
{
    m_current_frame++;
    m_video->frame_update();
    m_sound->frame_update();
    m_input->frame_update();
}

BizHawk's code is more focused on TAS-specific features like lag detection, while MAME's code emphasizes overall system emulation and hardware components.

16,645

🕹 Retro video game emulation for macOS

Pros of OpenEmu

  • User-friendly interface designed specifically for macOS
  • Supports multiple emulation cores in a single application
  • Integrated game library management with cover art and metadata

Cons of OpenEmu

  • Limited to macOS platform
  • Smaller selection of supported systems compared to MAME
  • Less frequent updates and potentially slower bug fixes

Code Comparison

MAME (C++):

void emu_timer::start(attotime duration, int param, bool periodic)
{
    m_param = param;
    m_enabled = true;
    m_periodic = periodic;
    m_period = duration;
    m_start = machine().time();
    m_expire = m_start + duration;
}

OpenEmu (Objective-C):

- (void)startEmulation
{
    if([self isRunning])
        return;
    
    [self setupEmulation];
    [gameCore startEmulation];
    [self setIsRunning:YES];
}

The code snippets show different approaches to managing emulation:

  • MAME focuses on low-level timing control for accurate emulation
  • OpenEmu emphasizes high-level management of emulation cores

MAME provides more granular control over emulation timing, while OpenEmu offers a simpler interface for starting and managing emulation sessions. This reflects their different focuses: MAME on accuracy and breadth of system support, and OpenEmu on user-friendliness and integration with macOS.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

MAME

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.

Where can I find out more?

Community

Development

Alt

CI status and code scanning

CI (Linux) CI (Windows CI (macOS) Compile UI translations Build documentation Coverity Scan Status

How to compile?

If you're on a UNIX-like system (including Linux and macOS), it could be as easy as typing

make

for a full build,

make SUBTARGET=tiny

for a build including a small subset of supported systems.

See the Compiling MAME page on our documentation site for more information, including prerequisites for macOS and popular Linux distributions.

For recent versions of macOS you need to install Xcode including command-line tools and SDL 2.0.

For Windows users, we provide a ready-made build environment based on MinGW-w64.

Visual Studio builds are also possible, but you still need build environment based on MinGW-w64. In order to generate solution and project files just run:

make vs2022

or use this command to build it directly using msbuild

make vs2022 MSBUILD=1

Coding standard

MAME source code should be viewed and edited with your editor set to use four spaces per tab. Tabs are used for initial indentation of lines, with one tab used per indentation level. Spaces are used for other alignment within a line.

Some parts of the code follow Allman style; some parts of the code follow K&R style -- mostly depending on who wrote the original version. Above all else, be consistent with what you modify, and keep whitespace changes to a minimum when modifying existing source. For new code, the majority tends to prefer Allman style, so if you don't care much, use that.

All contributors need to either add a standard header for license info (on new files) or inform us of their wishes regarding which of the following licenses they would like their code to be made available under: the BSD-3-Clause license, the LGPL-2.1, or the GPL-2.0.

See more specific C++ Coding Guidelines on our documentation web site.

License

The MAME project as a whole is made available under the terms of the GNU General Public License, version 2 or later (GPL-2.0+), since it contains code made available under multiple GPL-compatible licenses. A great majority of the source files (over 90% including core files) are made available under the terms of the 3-clause BSD License, and we would encourage new contributors to make their contributions available under the terms of 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.

Copyright (c) 1997-2025  MAMEdev and contributors

This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2, as provided in
docs/legal/GPL-2.0.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
more details.

Please see COPYING for more details.