Software has been a part of MAME for a while now. Before MESS was integrated, it was used for game images used in multi-game arcade systems such as the Sega Mega-tech system. Now with MESS integrated into MAME, software is now key for many machines to run.
MAME manages software though software lists. These are stored in the C:\Mame\hash folder. Software lists contain all the information to run the software supported by a machine. Most of the software on the list has been tested by the dev team and is already set up to run on the machine. Like machines, software list files will tell you their working status when the machine runs.
Outside of MAME's user interface or a separate frontend, there is no easy way to find out what software, a machine supports. The only way is to open the corresponding software list in a text editor and search it for the title you want ro run. Here's an example of a software list entry for the Sega 32x...
<software name="doom">
<description>Doom (Euro)</description>
<year>1994</year>
<publisher>Sega</publisher>
<sharedfeat name="compatibility" value="PAL"/>
<part name="cart" interface="_32x_cart">
<feature name="pcb" value="171-6885A" />
<feature name="ic1" value="MPR=17351-F" />
<feature name="ic2" value="MPR=17352-F" />
<feature name="ic3" value="74HC139N" />
<dataarea name="rom" size="3145728">
<rom name="mpr-17351-f.ic1" size="2097152" crc="e0ef6ebc" sha1="30258efdcacb6c49873ef7de466c1b393e27b79d" offset="0x000000" />
<rom name="mpr-17352-f.ic2" size="1048576" crc="c7079709" sha1="0f22e68e3013fa7e4110cddbe989986d2639833b" offset="0x200000" />
</dataarea>
</part>
</software>
It looks really confusing and contains a lot of information that you don't really need to know. All you should be interested in the <software name> tag as that contains the name that you type into the command line. The <description> tag gives you the full name of the software title so you can match it to the title you want to run. Finally the <part name> tag tells you the media that the software is stored as.
As an example to show you how this works, here's how to get Doom to run on a Sega Megadrive/Genesis with the 32x attachment...
mame64 32x -cart doom
As software runs on a machine, ROMs are still required to emulate the machine. To run software on a machine you need to either start the machine and add the software from the menus in MAME or add it to the machine's command line (like above).
This is MAME's software loading screen...
This is the file manager that can add software once a machine is running.
Here's how the software based command line is formatted...
mame64.exe <machine> <media> <software>
To run Super Mario World on the SNES from the command line you would use...
mame64.exe snes -cart smw
Breaking it down you have the main mame64.exe command, snes is the machine to run, -cart is the media and smw is the name used by MAME for Super Mario World.
You can simplify the command a bit if the software is known by removing the -cart. Devices used by known software in the software list are automatically loaded and MAME will automatically add it to the machine. Unknown software needs to be manually run from the command line. For example if your Super Mario game is called super_mario.zip
and is in a different folder called C:\MyRoms
then you would need to use this command line command...
mame64.exe snes -cart "C:\MyRoms\super_mario.zip".
Media types must be added to unknown software as MAME won't recognise it from a software list. Be aware as well, MAME may not run every software file as most machines are still in development and may contain bugs.
Software can also be added to devices on a machine. This is useful when running multi-disk programs and the machine doesn't support extra drives by default. There's a section on how to do this on the About Devices page.
In conclusion; Software is far harder to run compared to ROMs on a machine and a lot of software requires a bit of knowledge of the machine you're putting it on.