Return to the main Frequently Asked Questions page.

What are the current technical goals of the MAME project?


  • Use modern C++ to replace macros and platform-specific code wherever possible
  • Eliminate remaining static variables in drivers and devices
  • Replace global_alloc/auto_alloc/pool_alloc with smart pointers


  • Rewrite older drivers to modern standards
  • Rewrite the 2 or 3 drivers still outstanding from the license change
  • Convert more shared custom chips and function boards into devices
  • Convert the remaining devices that use the old floppy system
  • Substitute proper IRQ acking for HOLD_LINE
  • "MAME doesn't really provide a way to run with no machine loaded. Changing this would be a huge amount of work. It would be nice as a long-term goal, but in the short term it isn't realistic to be considering changing it." - Vas Crabb

CPU cores

  • Remove fake port addresses from MCU memory maps (use callbacks instead)
  • Provide and improve emulation of MCU on-chip peripherals (timers are generally the most critical)


  • Come up with a clean way to allow devices to have multiple slot connectors


  • Decouple input port updates from video frame rate
  • Make natural keyboard cooperate better with matrix scanning keyboards
  • External files for defining button names


  • Continue to modernize and untangle the UI code so that the business logic is separate from the presentation


Note: in order to make the rest of these points feasible, the BGFX rendering path is the preferred implementation. The existing D3D9 and OpenGL renderers and the HLSL and GLSL features are deprecated and should not be the target of any new features unless those features also target the BGFX path.

  • Drivers / the core need a way to tell the renderer to run a specific shader pass or passes (such as NTSC or PAL filtering, YUV conversion for laserdisc, etc) on each submitted bitmap
  • Drivers / the core need some way to do GPU rasterization. This will involve drivers needing to submit polygons, textures and texture atlases, and custom shaders to the renderer.


  • Offload more secondary frontend/UI functions to Lua scripts
  • Add tools necessary for TASing
  • Add scripting hooks for autopatching ROMs/image files