In the last few weeks some of us have been working on the MAME/MESS cores.

Path mapping

The MAME core used to save it’s data in the current working directory, this wasn’t consistent with other cores and it was somewhat confusing.
Some additions were made to libretro.h and RetroArch. It’s now possible to query the save directory from a core using RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY.

Paths are now mapped like this:

User generated content:
– cfg_directory retro_save_directory\[mame|mess|ume]\cfg
– nvram_directory retro_save_directory\[mame|mess|ume]\nvram
– memcard_directory retro_save_directory\[mame|mess|ume]\memcard
– input_directory retro_save_directory\[mame|mess|ume]\input
– state_directory retro_save_directory\[mame|mess|ume]\states
– snapshot_directory retro_save_directory\[mame|mess|ume]\snaps
– diff_directory retro_save_directory\[mame|mess|ume]\diff

Additional core content:
– samplepath retro_system_directory\[mame|mess|ume]\samples
– artpath retro_system_directory\[mame|mess|ume]\artwork
– cheatpath retro_system_directory\[mame|mess|ume]\cheat
– hashpath retro_system_directory\[mame|mess|ume]\hash
– inipath retro_system_directory\[mame|mess|ume]\ini

This means now it’s possible to create a global (or per-driver) ini file and it will be used. By default these cores launch with the following arguments: -joystick -noautoframeskip -samplerate 48000 -sound -cheat. There might be a core option to override these in the future but there isn’t now.

MESS/UME support

MESS and UME have been options for a while now, but they weren’t really easy to use. First of all some clarifications.

First of all, these cores work by passing arguments like you would pass on a CLI for their standalone counterparts. Loading from RGUI imposes some limitations on that regard so some assumptions are being made for you.

Second, since the 0.138 release there support for an XML format that documents the software released for the many supported systems. These are stored in the hash directory and you can obtain them from the standalone releases.

Besides being a documentation resouce, softlists allow to load software by just specifying the system and the rom name. For example on standalone mess you could do:

mess -rompath roms nes smb

With full path loading you would do:

mess -rompath roms nes roms\nes\

The benefits are considerable when you consider that games might have more than one file, for instance multi floppy X68000 games, those would be impossible to load from RGUI without using softlists.

The downsinde, softlist roms are not the same as the ones you might already have so full path loading still works but only with simple one file based images.


We have introduced a few core options with their default values:

mame_current_mouse_enable = "disabled"
mame_current_nagscreenpatch_enable = "disabled"
mame_current_videoapproach1_enable = "disabled"
mame_boot_osd = "disabled"

The only relevant option here is mame_boot_osd, it allows you to boot to the full MAME OSD and load the games from there. You will still need to select a game and it will set MAME’s rompath to the path of the selected game.

The important parameters in this case are as follows:
-rompath D:\Games\Multi\MAME 2014

If we were to load game without mame_boot_osd
-rompath D:\Games\Multi\MAME 2014 kinst

Loading MAME games is straightforward, select your ROM and go.

In hard drive based games you should put your CHD images in the rompath like this:

|-----kinst (folder)


MESS core options are as follows:

mess_current_mouse_enable = "disabled"
mess_current_nagscreenpatch_enable = "disabled"
mess_current_videoapproach1_enable = "disabled"
mess_softlist_enable = "enabled"
mess_softlist_auto = "enabled"
mess_media_type = "cart"
mess_boot_bios = "disabled"
mess_boot_osd = "disabled"
mess_commandline = "disabled"

As you can see softlists are enabled by default and for a reason. It’s the easiest way of loading games.

– Softlists only work with softlist romsets (for instance NES doesn’t contain contra.nes, it contains nes-ct-0 prg)
– Softlists require you to have the XML definitions in your HASH folder
– Softlists are not foolproof, two games on the same system could have the same name and different media types, for instance NES/FAMICOM/FDS Super Mario Brothers 2. might represent US cart version or JAP floppy disk version.
By default with mess_softlist_auto enabled it would load the cart version. If you want the floppy version you need to change mess_softlist_auto to disabled and mess_media_type to flop
– MESS requires the SYSTEM name as one of the parameters, this is gonna be taken from the rompath, that means games must be organized like this:

|-----nes (folder)
|-----famicom (folder)

– Full path loading always requires the correct mess_media_type to be specified
– Full path loading only works with single file games

Loading with the default options would produce the following arguments:
-rompath D:\Games\Multi\MESS 2014\nes nes nestest

Loading without mess_softlist_auto would produce:
-rompath D:\Games\Multi\MESS 2014\nes nes -cart nestest
This would require to set media type to cart by the way

Loading Famicom Disk System would need us to disable mess_softlist_auto and set media type to flop
-rompath D:\Games\Multi\MESS 2014\famicom famicom -flop icehocky

Loading Megaman 3 (USA).zip from a No-Intro set with soflists wouldn’t work so we need to disable mess_softlist_enable and set mess_media_type to cart
-rompath D:\Games\Multi\MESS 2014\nes nes -cart D:\Games\Multi\MESS 2014\nes\Mega Man 3 (USA).zip

Booting to OSD produces a different rompath than MAME, it includes the parent path by default so it can show all systems you have roms for.
-rompath D:\Games\Multi\MESS 2014\famicom;D:\Games\Multi\MESS 2014


All the considerations of the other two cores apply.

Loading Super Gem Fighter Minimix with the default options does:
-rompath D:\Games\Multi\MAME 2014 sgemf

Loading SNES TMNT4 with the default options does:
-rompath D:\Games\Multi\MESS 2014\snes snes tmnt4j

So yeah, if you have the correct romset it should just work now.


Squarepusher has been busy rebasing the repository with the mainline MAME repository, it should now be possible to adapt to their changes really quickly. The new repository is here:


– sample rate or refresh rate on the fly
– rework global inputs
– rework per driver inputs
– core option to disable per driver inputs and default to a standard retropad assgnment
– core option to select additional content location (artwork/samples/etc) between CONTE
– commandline support is in place but not working yet

If something is not working, please feel-free to report it here or open an issue in the repo if it has been confirmed.

8 thoughts on “MAME/MESS/UME cores

  1. Something I hace forgot ti mention. Softlist roms hace ti be zipper for this ti work

  2. Would it be viable to add “skip_gameinfo” to the default arguments too? I assume most people already know what game they are going to play anyway..

    1. sure thing, I’ll add it next week

  3. The option to remove nagscreen and play killer instinct is this in a new unreleased mame core or one that’s released. Currently on ps3 mame .78 core can this be done?

    1. It’s a totally different codebase. I guess it is doable but I’m not familiar with 0.78 at all

  4. One thing that stands out in the commands, shouldn’t…

    -rompath D:GamesMultiMESS 2014


    -rompath “D:GamesMultiMESS 2014”

    Otherwise it’ll interpret “-rompath D:GamesMultiMESS” as one part of the command and “2014” as a different argument?

  5. Also what shader was in use for those screenshots? It looks really nice.

  6. I want to store my bios files in a seperate folder. (They show up in my frontend; emulation station 🙁 ) I know this can be done in mame by setting up a secondary folder that mame checks, but i prefert to use retroarch. Is there any way to define a secondary path to check for rom files. (like the bios files)?

Comments are closed.