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\smb.zip
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.
Usage
MAME:
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:
rompath
|-----kinst.zip
|-----kinst (folder)
|---------kinst.chd
MESS:
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.
Considerations:
- Softlists only work with softlist romsets (for instance NES contra.zip 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. smb2.zip 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:
rompath
|-----nes (folder)
|---------smb.zip
|-----famicom (folder)
|---------smb2.zip
- Full path loading always requires the correct mess_media_type to be specified
- Full path loading only works with single file games
Loading nestest.zip with the default options would produce the following arguments:
-rompath D:\Games\Multi\MESS 2014\nes nes nestest
Loading nestest.zip 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 icehocky.zip 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
UME:
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.
Rebasing
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:
https://github.com/libretro/libretro-mame
TO-DO
- 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.