summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/emu/romload.c11
-rw-r--r--src/emu/romload.h3
2 files changed, 13 insertions, 1 deletions
diff --git a/src/emu/romload.c b/src/emu/romload.c
index caebebc8d6a..0381a8fc579 100644
--- a/src/emu/romload.c
+++ b/src/emu/romload.c
@@ -291,9 +291,16 @@ static void CLIB_DECL ATTR_PRINTF(1,2) debugload(const char *string, ...)
static int determine_bios_rom(rom_load_data *romdata, const rom_entry *romp)
{
const char *specbios = options_get_string(mame_options(), OPTION_BIOS);
+ const char *defaultname = NULL;
const rom_entry *rom;
+ int default_no = 1;
int bios_count = 0;
int bios_no = 0;
+
+ /* first determine the default BIOS name */
+ for (rom = romp; !ROMENTRY_ISEND(rom); rom++)
+ if (ROMENTRY_ISDEFAULT_BIOS(rom))
+ defaultname = ROM_GETNAME(rom);
/* look for a BIOS with a matching name */
for (rom = romp; !ROMENTRY_ISEND(rom); rom++)
@@ -307,6 +314,8 @@ static int determine_bios_rom(rom_load_data *romdata, const rom_entry *romp)
sprintf(bios_number, "%d", bios_flags - 1);
if (strcmp(bios_number, specbios) == 0 || strcmp(biosname, specbios) == 0)
bios_no = bios_flags;
+ if (defaultname != NULL && strcmp(biosname, defaultname) == 0)
+ default_no = bios_flags;
bios_count++;
}
@@ -321,7 +330,7 @@ static int determine_bios_rom(rom_load_data *romdata, const rom_entry *romp)
}
/* set to default */
- bios_no = 1;
+ bios_no = default_no;
}
LOG(("Using System BIOS: %d\n", bios_no));
diff --git a/src/emu/romload.h b/src/emu/romload.h
index 398b58b6a2c..de139ed81d4 100644
--- a/src/emu/romload.h
+++ b/src/emu/romload.h
@@ -38,6 +38,7 @@ enum
ROMENTRYTYPE_CARTRIDGE, /* this entry specifies a cartridge (MESS) */
ROMENTRYTYPE_IGNORE, /* this entry continues loading the previous ROM but throws the data away */
ROMENTRYTYPE_SYSTEM_BIOS, /* this entry specifies a bios */
+ ROMENTRYTYPE_DEFAULT_BIOS, /* this entry specifies a default bios */
ROMENTRYTYPE_COUNT
};
@@ -176,6 +177,7 @@ struct _rom_load_data
#define ROMENTRY_ISCOPY(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_COPY)
#define ROMENTRY_ISIGNORE(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_IGNORE)
#define ROMENTRY_ISSYSTEM_BIOS(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_SYSTEM_BIOS)
+#define ROMENTRY_ISDEFAULT_BIOS(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_DEFAULT_BIOS)
#define ROMENTRY_ISREGIONEND(r) (ROMENTRY_ISREGION(r) || ROMENTRY_ISEND(r))
/* ----- per-region macros ----- */
@@ -265,6 +267,7 @@ struct _rom_load_data
/* ----- system BIOS macros ----- */
#define ROM_SYSTEM_BIOS(value,name,description) { name, description, 0, 0, ROMENTRYTYPE_SYSTEM_BIOS | ROM_BIOS(value+1) },
+#define ROM_DEFAULT_BIOS(name) { name, NULL, 0, 0, ROMENTRYTYPE_DEFAULT_BIOS },
/* ----- disk loading macros ----- */