A Frontend for M.A.M.E.

Latest Version: 2.01 — released 08/05/2001


I wrote MAMEMenu because I built a cabinet for running MAME games, and none of the frontends that I could find were appropriate for the box. I wanted something simple but yet functional, and I didn’t want to be windows-driven, because the box doesn’t have a mouse. I wrote the program mainly for my uses, but I thought that there might be a couple of people out there in the emulation community that might like it as well, so I decided to release it to the public. If you like the program and would like to see improvements, or just to say hi, drop me a line at ed {at} edsalisbury {dot} net.

System Requirements:

  • DOS / Windows 9x


  • Automatic tree-type menu system
  • Automatic screenshot support
  • Random game feature
  • Party-proof – Nothing can be changed from the menu itself
  • Generic-looking — No bylines to detract from the general look
  • Easily customizable menu entries
  • Configurable colors and background pictures
  • Supports multiple resolutions, from 640×480 to 1600×1200
  • Supports True-Type fonts
  • Fully-configurable keyboard input
  • Automatic scrolling of game titles that are too wide for the menu
  • Source Code is available
  • Other emus/games are now supported
  • Game limit of 10000


  1. Download the archive
  2. Unzip the contents of to your MAME directory.
  3. Run mamemenu.exe to create the config file (mamemenu.ini).
  4. Edit mamemenu.ini, and make sure that the mame= line points to the mame executable you’re using.
  5. Run mamemenu.exe -newroms, which will build mm_games.ini. (where all of the game entries are stored)
  6. Edit mame.cfg, and make sure that your soundcard is set to something other than -1 (so that it doesn’t prompt you when you run MAME) You will most likely set this to 1.
  7. Run mamemenu.exe.

Differences from 1.1 to 2.0:
Since 2.0 is a complete rewrite, there have been many changes, some of which will affect current MAMEMenu users:

  1. mamemenu.cfg has been renamed to mm_games.ini – file format is still the same
  2. A lot more things have been added to mamemenu.cfg, and it is automatically created
  3. Menu graphic filenames have been changed to have “cat_” as a prefix (to distinguish it from games)
  4. Keyboard entry is a bit different now, due to the way the scrolling titles work.

Older Versions:


There are two configuration files, mamemenu.ini and mm_games.ini. The first one (mamemenu.ini) is where global configuration variables are set, such as the MAME executable name, default command-line options, fonts, key configs, colors and background pictures. The second file (mm_games.ini) is where all of the game entries are stored, with the menus that the games belong in.


Config line Description
# comment line Comment line, doesn’t get interpreted by MAMEMenu
mame = mame.exe Specifies the filename of the MAME executable
options = [options] Specifies any default options you want for all games in the menu
resolution = 3 Specifies the resolution for MAMEMenu to run in — 1=640×480, 2=800×600, 3=1024×768, 4=1280×1024, and 5=1600×1200. The default is 1024×768 (3).
bkg = blumarbl.png background picture, found in the bkg directory. Must be 1024×768. A template is included for making your own background pics (bkg/template.png) Also, you can download some ready-made background pics here.
gamecolor = 0,0,255 24-bit RGB color code for the games on the menu (default is blue)
selectcolor = 255,0,0 24-bit RGB color code for the selected item on the menu (default is red)
menucolor = 130,58,194 24-bit RGB color code for the menus (default is purple)
uppercase_title = 1 Specifies if you want the game titles to be uppercased or not (default is 1)
uppercase_menu = 1 Specifies if you want the menu titles to be uppercased or not (default is 1)
font = mamemenu.ttf Specifies the True-type font to use for the menu
font_smoothing = 2 Font smoothing can make fonts look better, especially in higher resolutions. The range is 0=no smoothing, 1=smoothing level #1, 2=smoothing level #2
fontsize = 15 Specifies the font size that will be used in MAMEMenu
random = 1 Turns the random game feature off or on
randomstring = RANDOM Specifies the string to use for the random game title
backstring = BACK Specifies the string to display when you want to go back from a menu
loadingstring = LOADING… Specifies the string that is to be displayed when loading a game (make sure this isn’t too long, or it may cause unexpected results)
up = UP The key(s) to be used for the up direction
down = DOWN The key(s) to be used for the down direction
pageup = PGUP The key(s) to be used to go up a page in the menu
pagedown = PGDN The key(s) to be used to go down a page in the menu
select = SPACE The key(s) to be used to select a game or menu
top = LEFT The key(s) to be used to go to the top of the list
bottom = RIGHT The key(s) to be used to go to the bottom of the list
quit = ESC The key(s) to be used to quit MAMEMenu
screenshot = F12 The key(s) to be used to grab a screenshot
key_sensitivity = 7 Specifies how fast you want the keyboard to be read – Use caution, as messing with this could have unexpected results!


MM_GAMES.INI is set up like this:
Game Name|mamename|mame options|menu1,menu2, etc.

Game Name: How you want the game to appear in the list
Mame Name: What filename to pass to mame
Mame Options: What options to pass to mame (-flipy for Pac-Land, for example)

Menus work like this — when the program runs, it looks at the entire mm_games.ini file, and builds menus based on what you put in the last column. You can have entries that are in multiple menus as well.

To add non-MAME games to the menu:
Make the options field start with a “!” character, i.e.:
Doom 2|doom2|!c:gamesdoom2doom2.exe -q|idgames
The 2nd field is still used for the screenshot, so if you want one, make sure to put it in the screenshot directory. (specified in mame.cfg, and make sure it’s a .PNG file)

Adding more games:
If you add more games to the rom directory, and want to add them to MAMEMenu, simply run mamemenu.exe -newroms, which will go out and find them (and also add them to a menu called “new” so that they are easy to find). You can also edit mm_games.ini to add the games to menus or change the options for a particular game. If you don’t want a game to appear, simply put a “#” in front of the line.

By default, MAME does screenshots kinda funky. It names the first one you take [mamename].png, but then subsequent shots get named [mame000x].png. This kinda bites, since you want to be able to change the screenshots automatically. I have hacked MAME so that it doesn’t do versioning, which fixes the problem. (No, I’m not going to send it to you!) Also, if you want to do pictures for the menus, simply put a picture in png format in the snap directory (or wherever mame.cfg points to) called cat_[menuname].png, and it will automatically load it. You can download some ready-made menu pics from here.

Keyboard configuration:
Most of the keys are pretty easy to specify in the config file (‘A’ for the A-key, etc, but the special keys need to be specified correctly. Here is the list of keys and how to specify them:

KeyString to useKeyString to use
A-Z A-Z - (by 0 key) MINUS
0-9 0-9 = (by minus) EQUALS
F1-F12 F1-F12 (backspace) BACKSPACE
NumPad Keys 0-9 0_PAD – 9_PAD (tab) TAB
(enter) ENTER : COLON
Insert INSERT Delete DEL
Page Up PGUP Page Down PGDN
Left Arrow LEFT Right Arrow RIGHT
Up Arrow UP Down Arrow DOWN
/ (on numpad) SLASH_PAD * (on numpad) ASTERISK
- (on numpad) MINUS_PAD + (on numpad) PLUS_PAD
. or Del (on numpad) DEL_PAD Enter (on numpad) ENTER_PAD
PrintScreen PRTSCR Pause PAUSE
LeftShift LSHIFT RightShift RSHIFT
LeftControl LCONTROL RightControl RCONTROL
Alt ALT WinMenu MENU
LeftWin LWIN RightWin RWIN

Also, you can specify more than one key for a particular function in mamemenu.ini, i.e.:
select = SPACE ENTER

Source Code:

If you’re interested in taking a look at the code, it can be downloaded from here. If you are interested in compiling it, here’s what you need:

After all of the above has been installed correctly, you should be able to type make, and it will make the program for you.


Except where otherwise noted, this work is licensed under Creative Commons Attribution ShareAlike 3.0.

You are free:

  • to Share — to copy, distribute and transmit the work
  • to Remix — to adapt the work

Under the following conditions:

  • Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).
  • Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license.
  • For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to the license’s web page (
  • Any of the above conditions can be waived if you get permission from the copyright holder.
  • Nothing in this license impairs or restricts the author’s moral rights.




  • To my family (Brandy, Amelia & Daphne), Thank you for dealing with me working on the computer for such long hours, to make this program a reality
  • To Chris Pugh — For making such cool graphics!
  • To Shawn Hargreaves — For writing Allegro, the graphics library that I used for the program
  • To Nicola Salmoria — For writing MAME, which was my reason for writing this!
  • To Dave @ Vintage Gaming Network — Keep up the good work Dave!
  • To Jerry Beckman and Monty McDougal — Thanks for all of the coding help!
  • To Filipe Estima — for testing and being so nit-picky
  • To all of the other supporters of MAMEMenu — Thanks for helping me to make MAMEMenu a better program!

Resource Files

Background Images
To download, right-click on the picture and “Save Target/Link As…” to the bkg directory. To use them in MAMEMenu, change the bkg = line in mamemenu.ini to point to the new background.

BlueGrade by Chris Pugh
BlueGrade by Chris Pugh
Bruised by Chris Pugh
Bruised by Chris Pugh
RainbowSherbet by Chris Pugh
RainbowSherbet by Chris Pugh
PurpleHaze by Chris Pugh
PurpleHaze by Chris Pugh
Rock by Steve
Rock by Steve
Wood by Steve
Wood by Steve
Blue by Steve
Blue by Steve
Massive by Zakk
Massive by Zakk @ Massive MAME

Menu Images
Most of these have been adapted from CD covers found on the MAMEWorld site, made by other people. To download, click on the thumbnails. I tried to give credit where credit is due, but if you are the creator of any of these, and I haven’t given you proper credit, please let me know! If you want to add any pics to the collection, send them to ed {at} edsalisbury {dot} net.








Inspector Vector

Zakk at Massive MAME

Zakk at Massive MAME


These screenshots were taken using different background pictures found on this site. If you have a cool screenshot that you want to share with the world, send it to ed {at} edsalisbury {dot} net.

  • Glowgreen

    Looks beautiful. I have had a mame cabinet since the late 90’s and have been using ArcadeOS. It is so buggy…I am going to try your frontend out. I used to use the early version of MAMEMenu and loved it but switched over to ArcadeOS because it looked better. Probably a mistake but I’m getting back on board.

    • edsalisbury

      Thanks for the comment – MAMEMenu is definitely showing it’s age these days though :)  I wrote it a long time ago, and my coding wasn’t the best back then.  Because of this, you may have trouble if you’re running it on a modern OS.  I actually have a replacement for MAMEMenu that I was working on for a while, but it got backburnered.  There are lots of frontends out there that will probably do a better job than MM these days, but if it works for you, great!

  • Dwight

    Any updates on the replacement for MAMEMenu? After all of these years, I still have it on two MAME cabinets because it is quick, easy to set-up, runs in DOS, and is easy for anyone to understand (young kids seems to know just what to do).

    If you ever decided to update it, I can think of a few features that would be nice to have, such as the background image changing with each game, alternate menu layouts, etc. Thanks again for the great product!

    • edsalisbury

      Thanks for the post – I have worked on several projects that would be a replacement, but not to a point to have a release. HyperSpin has been what I’ve been using lately, and it serves my needs.

  • dwight

    Thanks for the reply. My challenge with HyperSpin, MAMEWah, and a bunch of the others is they require Windows and seem to have a tricky set-up. While the menus are certainly full of eye candy, which is very nice, I want to run as close to the metal as possible to eek the most out of the hardware, all the while maintaining an easy to use frontend. To achieve a few of my wants, I plan to do the following:

    1) Redo the game screenshot artwork so the single .PNG file actually shows characters, the cabinets, and background artwork (similar to other frontends)

    2) Add characters to the background image and rotate it everytime MAMEMenu boots (the computers, actually).

    3) Remap a few keys to non-keyboard keys, which should keep people from accidently exiting or activating certain features in MAME (found this years ago when doing a Multi-Williams using MAMMenu for a buddy).

    There are a few other improvements I plan for the entire DOS booting sequence, such as background music and a boot-up image, so DOS should be mostly hidden from the boot-up cycle.

    Thanks again for all of your work and a great product.