Here is a solution I wrote in C# using the freely downloadable Visual Studio Express from Microsoft. All I cared about was Daphne, specifically Dragons Lair and Space Ace. I didn't want multiple emulators for 2 games. Oh, and I just found out about MulitMAME right before I typed this, but I figure the time spent writing this app was less than figuring out MultiMAME. I tried the batch file thing, but was having issues with additional command line parameters, and once again, the C# app seemed easier.
I'm running 1.05 of MaLa, there's a bug with it that assumes the name of the .ini file is the same as the mame exe, but only until you try to change aspect ratios, where it only uses mame.ini. So, I renamed mame.exe -> mamedaph.exe and called my program mame.exe and put in the same directory as Mame. All good, no reconfiguration needed in MaLa. I added 2 entries into the xml file for dragonslair and spaceace (actually, I just copied their existing entries, renamed the rom file and set their status to 'good') and put two bogus zip files in the rom directory (dragonslair.zip and spaceace.zip). If my program sees either of those two roms being run, it passes the job off to daphne, otherwise passes everything else to mamedaph.exe (the original Mame). You could easily add more emulators here, and it could read other files, but like I said, this solved my problem.
So, I'm a hack, somewhat lazy, and I realize this program could be much better (it's probably how MultiMAME got so flexible), but this worked for me, and if it works for you, enjoy! If someone wants me to post the Visual Studio Solution, I will, otherwise here's my source for the command line application, just create a new Command Line application in Visual Studio, paste everything here, and build. Your exe will be in the bin directory for your project.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace mamedaph
{
class Program
{
static void Main(string[] args)
{
DetermineEmu(args);
}
static void DetermineEmu(string[] args)
{
if (args[0] == "dragonslair")
{
string daphneCMD = "lair vldp -fullscreen -framefile C:\\daphne\\vldp_dl\\lair\\lair.txt -blank_searches";
LaunchCommandLineApp("daphne", daphneCMD);
}
else if (args[0] == "spaceace")
{
string daphneCMD = "ace vldp -fullscreen -framefile C:\\daphne\\vldp_dl\\ace\\ace.txt -blank_searches"; ;
LaunchCommandLineApp("daphne", daphneCMD);
}
else
{
LaunchCommandLineApp("mame", myCommandLine(args));
}
}
static string myCommandLine(string[] args)
{
string myCommandLine = "";
foreach (string arg in args)
{
myCommandLine += " " + arg;
}
return myCommandLine.Trim();
}
static void LaunchCommandLineApp(string emulator, string CommandLine)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
if (emulator == "mame")
{
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.WorkingDirectory = "c:\\mame";
startInfo.FileName = "c:\\mame\\mamedaph.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = CommandLine;
}
else
{
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.WorkingDirectory = "c:\\daphne";
startInfo.FileName = "c:\\daphne\\daphne.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = CommandLine;
}
try
{
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
}
}
catch
{
// Log error.
}
}
}
}