diff --git a/src/emu/audit.c b/src/emu/audit.c index 75858f13832..46e77ea7c03 100644 --- a/src/emu/audit.c +++ b/src/emu/audit.c @@ -22,7 +22,7 @@ FUNCTION PROTOTYPES ***************************************************************************/ -static int audit_one_rom(core_options *options, const rom_entry *rom, const game_driver *gamedrv, UINT32 validation, audit_record *record); +static int audit_one_rom(core_options *options, const rom_entry *rom, const char *regiontag, const game_driver *gamedrv, UINT32 validation, audit_record *record); static int audit_one_disk(core_options *options, const rom_entry *rom, const game_driver *gamedrv, UINT32 validation, audit_record *record); static int rom_used_by_parent(const game_driver *gamedrv, const rom_entry *romentry, const game_driver **parent); @@ -56,7 +56,9 @@ INLINE void set_status(audit_record *record, UINT8 status, UINT8 substatus) int audit_images(core_options *options, const game_driver *gamedrv, UINT32 validation, audit_record **audit) { + machine_config *config = machine_config_alloc(gamedrv->machine_config); const rom_entry *region, *rom; + const rom_source *source; audit_record *record; int foundany = FALSE; int allshared = TRUE; @@ -64,14 +66,18 @@ int audit_images(core_options *options, const game_driver *gamedrv, UINT32 valid /* determine the number of records we will generate */ records = 0; - for (region = rom_first_region(gamedrv); region != NULL; region = rom_next_region(region)) - for (rom = rom_first_file(region); rom != NULL; rom = rom_next_file(rom)) - if (ROMREGION_ISROMDATA(region) || ROMREGION_ISDISKDATA(region)) - { - if (allshared && !rom_used_by_parent(gamedrv, rom, NULL)) - allshared = FALSE; - records++; - } + for (source = rom_first_source(gamedrv, config); source != NULL; source = rom_next_source(gamedrv, config, source)) + { + int source_is_gamedrv = rom_source_is_gamedrv(gamedrv, source); + for (region = rom_first_region(gamedrv, source); region != NULL; region = rom_next_region(region)) + for (rom = rom_first_file(region); rom != NULL; rom = rom_next_file(rom)) + if (ROMREGION_ISROMDATA(region) || ROMREGION_ISDISKDATA(region)) + { + if (source_is_gamedrv && allshared && !rom_used_by_parent(gamedrv, rom, NULL)) + allshared = FALSE; + records++; + } + } if (records > 0) { @@ -80,35 +86,45 @@ int audit_images(core_options *options, const game_driver *gamedrv, UINT32 valid memset(*audit, 0, sizeof(**audit) * records); record = *audit; - /* iterate over regions and ROMs */ - for (region = rom_first_region(gamedrv); region; region = rom_next_region(region)) - for (rom = rom_first_file(region); rom; rom = rom_next_file(rom)) + /* iterate over ROM sources and regions */ + for (source = rom_first_source(gamedrv, config); source != NULL; source = rom_next_source(gamedrv, config, source)) + { + int source_is_gamedrv = rom_source_is_gamedrv(gamedrv, source); + for (region = rom_first_region(gamedrv, source); region != NULL; region = rom_next_region(region)) { - int shared = rom_used_by_parent(gamedrv, rom, NULL); - - /* audit a file */ - if (ROMREGION_ISROMDATA(region)) + const char *regiontag = ROMREGION_ISLOADBYNAME(region) ? ROM_GETNAME(region) : NULL; + for (rom = rom_first_file(region); rom; rom = rom_next_file(rom)) { - if (audit_one_rom(options, rom, gamedrv, validation, record++) && (!shared || allshared)) - foundany = TRUE; - } + int shared = rom_used_by_parent(gamedrv, rom, NULL); - /* audit a disk */ - else if (ROMREGION_ISDISKDATA(region)) - { - if (audit_one_disk(options, rom, gamedrv, validation, record++) && (!shared || allshared)) - foundany = TRUE; + /* audit a file */ + if (ROMREGION_ISROMDATA(region)) + { + if (audit_one_rom(options, rom, regiontag, gamedrv, validation, record++) && source_is_gamedrv && (!shared || allshared)) + foundany = TRUE; + } + + /* audit a disk */ + else if (ROMREGION_ISDISKDATA(region)) + { + if (audit_one_disk(options, rom, gamedrv, validation, record++) && source_is_gamedrv && (!shared || allshared)) + foundany = TRUE; + } } } - /* if we found nothing, we don't have the set at all */ - if (!foundany) - { - free(*audit); - *audit = NULL; - records = 0; + /* if we found nothing, we don't have the set at all */ + if (rom_source_is_gamedrv(gamedrv, source) && !foundany) + { + free(*audit); + *audit = NULL; + records = 0; + break; + } } } + + machine_config_free(config); return records; } @@ -310,7 +326,7 @@ int audit_summary(const game_driver *gamedrv, int count, const audit_record *rec audit_one_rom - validate a single ROM entry -------------------------------------------------*/ -static int audit_one_rom(core_options *options, const rom_entry *rom, const game_driver *gamedrv, UINT32 validation, audit_record *record) +static int audit_one_rom(core_options *options, const rom_entry *rom, const char *regiontag, const game_driver *gamedrv, UINT32 validation, audit_record *record) { const game_driver *drv; const rom_entry *chunk; @@ -322,6 +338,7 @@ static int audit_one_rom(core_options *options, const rom_entry *rom, const game record->type = AUDIT_FILE_ROM; record->name = ROM_GETNAME(rom); record->exphash = ROM_GETHASHDATA(rom); + record->length = 0; /* compute the expected length by summing the chunks */ for (chunk = rom_first_chunk(rom); chunk; chunk = rom_next_chunk(chunk)) @@ -356,9 +373,33 @@ static int audit_one_rom(core_options *options, const rom_entry *rom, const game break; } } + + /* if not found, check the region as a backup */ + if (record->length == 0 && regiontag != NULL) + { + file_error filerr; + mame_file *file; + astring *fname; + + /* open the file if we can */ + fname = astring_assemble_3(astring_alloc(), regiontag, PATH_SEPARATOR, ROM_GETNAME(rom)); + if (has_crc) + filerr = mame_fopen_crc_options(options, SEARCHPATH_ROM, astring_c(fname), crc, OPEN_FLAG_READ, &file); + else + filerr = mame_fopen_options(options, SEARCHPATH_ROM, astring_c(fname), OPEN_FLAG_READ, &file); + astring_free(fname); + + /* if we got it, extract the hash and length */ + if (filerr == FILERR_NONE) + { + hash_data_copy(record->hash, mame_fhash(file, validation)); + record->length = (UINT32)mame_fsize(file); + mame_fclose(file); + } + } /* if we failed to find the file, set the appropriate status */ - if (drv == NULL) + if (record->length == 0) { const game_driver *parent; @@ -496,7 +537,7 @@ static int rom_used_by_parent(const game_driver *gamedrv, const rom_entry *romen const rom_entry *rom; /* see if the parent has the same ROM or not */ - for (region = rom_first_region(drv); region; region = rom_next_region(region)) + for (region = rom_first_region(drv, NULL); region; region = rom_next_region(region)) for (rom = rom_first_file(region); rom; rom = rom_next_file(rom)) if (hash_data_is_equal(ROM_GETHASHDATA(rom), hash, 0)) { diff --git a/src/emu/clifront.c b/src/emu/clifront.c index b1a2a0905f9..8340b72f912 100644 --- a/src/emu/clifront.c +++ b/src/emu/clifront.c @@ -446,20 +446,24 @@ int cli_info_listcrc(core_options *options, const char *gamename) for (drvindex = 0; drivers[drvindex]; drvindex++) if (mame_strwildcmp(gamename, drivers[drvindex]->name) == 0) { + machine_config *config = machine_config_alloc(drivers[drvindex]->machine_config); const rom_entry *region, *rom; + const rom_source *source; - /* iterate over regions, and then ROMs within the region */ - for (region = rom_first_region(drivers[drvindex]); region; region = rom_next_region(region)) - for (rom = rom_first_file(region); rom; rom = rom_next_file(rom)) - { - char hashbuf[HASH_BUF_SIZE]; + /* iterate over sources, regions, and then ROMs within the region */ + for (source = rom_first_source(drivers[drvindex], config); source != NULL; source = rom_next_source(drivers[drvindex], config, source)) + for (region = rom_first_region(drivers[drvindex], source); region; region = rom_next_region(region)) + for (rom = rom_first_file(region); rom; rom = rom_next_file(rom)) + { + char hashbuf[HASH_BUF_SIZE]; - /* if we have a CRC, display it */ - if (hash_data_extract_printable_checksum(ROM_GETHASHDATA(rom), HASH_CRC, hashbuf)) - mame_printf_info("%s %-12s %s\n", hashbuf, ROM_GETNAME(rom), drivers[drvindex]->description); - } + /* if we have a CRC, display it */ + if (hash_data_extract_printable_checksum(ROM_GETHASHDATA(rom), HASH_CRC, hashbuf)) + mame_printf_info("%s %-12s %s\n", hashbuf, ROM_GETNAME(rom), drivers[drvindex]->description); + } count++; + machine_config_free(config); } /* return an error if none found */ @@ -962,20 +966,25 @@ static void match_roms(const char *hash, int length, int *found) /* iterate over drivers */ for (drvindex = 0; drivers[drvindex]; drvindex++) { + machine_config *config = machine_config_alloc(drivers[drvindex]->machine_config); const rom_entry *region, *rom; + const rom_source *source; - /* iterate over regions and files within the region */ - for (region = rom_first_region(drivers[drvindex]); region; region = rom_next_region(region)) - for (rom = rom_first_file(region); rom; rom = rom_next_file(rom)) - if (hash_data_is_equal(hash, ROM_GETHASHDATA(rom), 0)) - { - int baddump = hash_data_has_info(ROM_GETHASHDATA(rom), HASH_INFO_BAD_DUMP); + /* iterate over sources, regions and files within the region */ + for (source = rom_first_source(drivers[drvindex], config); source != NULL; source = rom_next_source(drivers[drvindex], config, source)) + for (region = rom_first_region(drivers[drvindex], source); region; region = rom_next_region(region)) + for (rom = rom_first_file(region); rom; rom = rom_next_file(rom)) + if (hash_data_is_equal(hash, ROM_GETHASHDATA(rom), 0)) + { + int baddump = hash_data_has_info(ROM_GETHASHDATA(rom), HASH_INFO_BAD_DUMP); - /* output information about the match */ - if (*found != 0) - mame_printf_info(" "); - mame_printf_info("= %s%-20s %s\n", baddump ? "(BAD) " : "", ROM_GETNAME(rom), drivers[drvindex]->description); - (*found)++; - } + /* output information about the match */ + if (*found != 0) + mame_printf_info(" "); + mame_printf_info("= %s%-20s %s\n", baddump ? "(BAD) " : "", ROM_GETNAME(rom), drivers[drvindex]->description); + (*found)++; + } + + machine_config_free(config); } } diff --git a/src/emu/info.c b/src/emu/info.c index 0ba5e0552db..089ce7220ac 100644 --- a/src/emu/info.c +++ b/src/emu/info.c @@ -357,131 +357,129 @@ static void print_game_bios(FILE *out, const game_driver *game) the XML output -------------------------------------------------*/ -static void print_game_rom(FILE *out, const game_driver *game) +static void print_game_rom(FILE *out, const game_driver *game, const machine_config *config) { const game_driver *clone_of = driver_get_clone(game); int rom_type; - /* if no roms, just exit early */ - if (game->rom == NULL) - return; - /* iterate over 3 different ROM "types": BIOS, ROMs, DISKs */ for (rom_type = 0; rom_type < 3; rom_type++) { + const rom_source *source; const rom_entry *region; - - /* iterate first through regions */ - for (region = rom_first_region(game); region != NULL; region = rom_next_region(region)) - { - int is_disk = ROMREGION_ISDISKDATA(region); - const rom_entry *rom; - - /* disk regions only work for disks */ - if ((is_disk && rom_type != 2) || (!is_disk && rom_type == 2)) - continue; - - /* iterate through ROM entries */ - for (rom = rom_first_file(region); rom != NULL; rom = rom_next_file(rom)) + + /* iterate over ROM sources: first the game, then any devices */ + for (source = rom_first_source(game, config); source != NULL; source = rom_next_source(game, config, source)) + for (region = rom_first_region(game, source); region != NULL; region = rom_next_region(region)) { - int is_bios = ROM_GETBIOSFLAGS(rom); - const char *name = ROM_GETNAME(rom); - int offset = ROM_GETOFFSET(rom); - const rom_entry *parent_rom = NULL; - const rom_entry *chunk; - char bios_name[100]; - int length; + int is_disk = ROMREGION_ISDISKDATA(region); + const rom_entry *rom; - /* BIOS ROMs only apply to bioses */ - if ((is_bios && rom_type != 0) || (!is_bios && rom_type == 0)) + /* disk regions only work for disks */ + if ((is_disk && rom_type != 2) || (!is_disk && rom_type == 2)) continue; - /* compute the total length of all chunks */ - length = 0; - for (chunk = rom_first_chunk(rom); chunk; chunk = rom_next_chunk(chunk)) - length += ROM_GETLENGTH(chunk); - - /* if we have a valid ROM and we are a clone, see if we can find the parent ROM */ - if (!ROM_NOGOODDUMP(rom) && clone_of != NULL) + /* iterate through ROM entries */ + for (rom = rom_first_file(region); rom != NULL; rom = rom_next_file(rom)) { - const rom_entry *pregion, *prom; + int is_bios = ROM_GETBIOSFLAGS(rom); + const char *name = ROM_GETNAME(rom); + int offset = ROM_GETOFFSET(rom); + const rom_entry *parent_rom = NULL; + const rom_entry *chunk; + char bios_name[100]; + int length; - /* scan the clone_of ROM for a matching ROM entry */ - for (pregion = rom_first_region(clone_of); pregion != NULL; pregion = rom_next_region(pregion)) - for (prom = rom_first_file(pregion); prom != NULL; prom = rom_next_file(prom)) - if (hash_data_is_equal(ROM_GETHASHDATA(rom), ROM_GETHASHDATA(prom), 0)) + /* BIOS ROMs only apply to bioses */ + if ((is_bios && rom_type != 0) || (!is_bios && rom_type == 0)) + continue; + + /* compute the total length of all chunks */ + length = 0; + for (chunk = rom_first_chunk(rom); chunk; chunk = rom_next_chunk(chunk)) + length += ROM_GETLENGTH(chunk); + + /* if we have a valid ROM and we are a clone, see if we can find the parent ROM */ + if (!ROM_NOGOODDUMP(rom) && clone_of != NULL) + { + const rom_entry *pregion, *prom; + + /* scan the clone_of ROM for a matching ROM entry */ + for (pregion = rom_first_region(clone_of, NULL); pregion != NULL; pregion = rom_next_region(pregion)) + for (prom = rom_first_file(pregion); prom != NULL; prom = rom_next_file(prom)) + if (hash_data_is_equal(ROM_GETHASHDATA(rom), ROM_GETHASHDATA(prom), 0)) + { + parent_rom = prom; + break; + } + } + + /* scan for a BIOS name */ + bios_name[0] = 0; + if (!is_disk && is_bios) + { + const rom_entry *brom; + + /* scan backwards through the ROM entries */ + for (brom = rom - 1; brom != game->rom; brom--) + if (ROMENTRY_ISSYSTEM_BIOS(brom)) { - parent_rom = prom; + strcpy(bios_name, ROM_GETNAME(brom)); break; } + } + + /* opening tag */ + if (!is_disk) + fprintf(out, "\t\t\n"); } - - /* scan for a BIOS name */ - bios_name[0] = 0; - if (!is_disk && is_bios) - { - const rom_entry *brom; - - /* scan backwards through the ROM entries */ - for (brom = rom - 1; brom != game->rom; brom--) - if (ROMENTRY_ISSYSTEM_BIOS(brom)) - { - strcpy(bios_name, ROM_GETNAME(brom)); - break; - } - } - - /* opening tag */ - if (!is_disk) - fprintf(out, "\t\t\n"); } - } } } @@ -843,7 +841,7 @@ static void print_game_info(FILE *out, const game_driver *game) /* now print various additional information */ print_game_bios(out, game); - print_game_rom(out, game); + print_game_rom(out, game, config); print_game_sample(out, game, config); print_game_chips(out, game, config); print_game_display(out, game, config); diff --git a/src/emu/romload.c b/src/emu/romload.c index 116652d2548..bb6b734af8f 100644 --- a/src/emu/romload.c +++ b/src/emu/romload.c @@ -99,14 +99,84 @@ void set_disk_handle(const char *region, mame_file *file, chd_file *chdfile) ROM LOADING ***************************************************************************/ +/*------------------------------------------------- + rom_source_is_gamedrv - return TRUE if the + given rom_source refers to the game driver + itself +-------------------------------------------------*/ + +int rom_source_is_gamedrv(const game_driver *drv, const rom_source *source) +{ + return ((const game_driver *)source == drv); +} + + +/*------------------------------------------------- + rom_first_source - return pointer to first ROM + source +-------------------------------------------------*/ + +const rom_source *rom_first_source(const game_driver *drv, const machine_config *config) +{ + const device_config *device; + + /* if the driver has a ROM pointer, that's what we want */ + if (drv->rom != NULL) + return (rom_source *)drv; + + /* otherwise, look through devices */ + if (config != NULL) + for (device = config->devicelist; device != NULL; device = device->next) + { + const rom_entry *devromp = device_get_info_ptr(device, DEVINFO_PTR_ROM_REGION); + if (devromp != NULL) + return (rom_source *)device; + } + return NULL; +} + + +/*------------------------------------------------- + rom_next_source - return pointer to next ROM + source +-------------------------------------------------*/ + +const rom_source *rom_next_source(const game_driver *drv, const machine_config *config, const rom_source *previous) +{ + const device_config *device; + + /* if the previous was the driver, we want the first device */ + if (rom_source_is_gamedrv(drv, previous)) + device = (config != NULL) ? config->devicelist : NULL; + else + device = ((const device_config *)previous)->next; + + /* look for further devices with ROM definitions */ + for ( ; device != NULL; device = device->next) + { + const rom_entry *devromp = device_get_info_ptr(device, DEVINFO_PTR_ROM_REGION); + if (devromp != NULL) + return (rom_source *)device; + } + return NULL; +} + + /*------------------------------------------------- rom_first_region - return pointer to first ROM region -------------------------------------------------*/ -const rom_entry *rom_first_region(const game_driver *drv) +const rom_entry *rom_first_region(const game_driver *drv, const rom_source *source) { - return (drv->rom != NULL && !ROMENTRY_ISEND(drv->rom)) ? drv->rom : NULL; + const rom_entry *romp; + + if (source == NULL || rom_source_is_gamedrv(drv, source)) + romp = drv->rom; + else + romp = device_get_info_ptr((const device_config *)source, DEVINFO_PTR_ROM_REGION); + + return (romp != NULL && !ROMENTRY_ISEND(romp)) ? romp : NULL; } @@ -868,6 +938,7 @@ chd_error open_disk_image_options(core_options *options, const game_driver *game { const game_driver *drv, *searchdrv; const rom_entry *region, *rom; + const rom_source *source; file_error filerr; chd_error err; @@ -901,36 +972,37 @@ chd_error open_disk_image_options(core_options *options, const game_driver *game /* otherwise, look at our parents for a CHD with an identical checksum */ /* and try to open that */ for (drv = gamedrv; drv != NULL; drv = driver_get_clone(drv)) - for (region = rom_first_region(drv); region != NULL; region = rom_next_region(region)) - if (ROMREGION_ISDISKDATA(region)) - for (rom = rom_first_file(region); rom != NULL; rom = rom_next_file(rom)) + for (source = rom_first_source(drv, NULL); source != NULL; source = rom_next_source(drv, NULL, source)) + for (region = rom_first_region(drv, source); region != NULL; region = rom_next_region(region)) + if (ROMREGION_ISDISKDATA(region)) + for (rom = rom_first_file(region); rom != NULL; rom = rom_next_file(rom)) - /* look for a differing name but with the same hash data */ - if (strcmp(ROM_GETNAME(romp), ROM_GETNAME(rom)) != 0 && - hash_data_is_equal(ROM_GETHASHDATA(romp), ROM_GETHASHDATA(rom), 0)) - { - /* attempt to open the properly named file, scanning up through parent directories */ - filerr = FILERR_NOT_FOUND; - for (searchdrv = drv; searchdrv != NULL && filerr != FILERR_NONE; searchdrv = driver_get_clone(searchdrv)) + /* look for a differing name but with the same hash data */ + if (strcmp(ROM_GETNAME(romp), ROM_GETNAME(rom)) != 0 && + hash_data_is_equal(ROM_GETHASHDATA(romp), ROM_GETHASHDATA(rom), 0)) { - astring *fname = astring_assemble_4(astring_alloc(), searchdrv->name, PATH_SEPARATOR, ROM_GETNAME(rom), ".chd"); - filerr = mame_fopen_options(options, SEARCHPATH_IMAGE, astring_c(fname), OPEN_FLAG_READ, image_file); - astring_free(fname); - } + /* attempt to open the properly named file, scanning up through parent directories */ + filerr = FILERR_NOT_FOUND; + for (searchdrv = drv; searchdrv != NULL && filerr != FILERR_NONE; searchdrv = driver_get_clone(searchdrv)) + { + astring *fname = astring_assemble_4(astring_alloc(), searchdrv->name, PATH_SEPARATOR, ROM_GETNAME(rom), ".chd"); + filerr = mame_fopen_options(options, SEARCHPATH_IMAGE, astring_c(fname), OPEN_FLAG_READ, image_file); + astring_free(fname); + } - /* did the file open succeed? */ - if (filerr == FILERR_NONE) - { - /* try to open the CHD */ - err = chd_open_file(mame_core_file(*image_file), CHD_OPEN_READ, NULL, image_chd); - if (err == CHDERR_NONE) - return err; + /* did the file open succeed? */ + if (filerr == FILERR_NONE) + { + /* try to open the CHD */ + err = chd_open_file(mame_core_file(*image_file), CHD_OPEN_READ, NULL, image_chd); + if (err == CHDERR_NONE) + return err; - /* close the file on failure */ - mame_fclose(*image_file); - *image_file = NULL; + /* close the file on failure */ + mame_fclose(*image_file); + *image_file = NULL; + } } - } return err; } diff --git a/src/emu/romload.h b/src/emu/romload.h index 8d2dd26a9f9..6152811a950 100644 --- a/src/emu/romload.h +++ b/src/emu/romload.h @@ -126,6 +126,9 @@ enum TYPE DEFINITIONS ***************************************************************************/ +typedef struct _rom_source rom_source; + + typedef struct _rom_entry rom_entry; struct _rom_entry { @@ -290,12 +293,14 @@ void set_disk_handle(const char *region, mame_file *file, chd_file *chd); /* ROM processing */ void rom_init(running_machine *machine, const rom_entry *romp); int rom_load_warnings(void); -const rom_entry *rom_first_region(const game_driver *drv); +int rom_source_is_gamedrv(const game_driver *drv, const rom_source *source); +const rom_source *rom_first_source(const game_driver *drv, const machine_config *config); +const rom_source *rom_next_source(const game_driver *drv, const machine_config *config, const rom_source *previous); +const rom_entry *rom_first_region(const game_driver *drv, const rom_source *romp); const rom_entry *rom_next_region(const rom_entry *romp); const rom_entry *rom_first_file(const rom_entry *romp); const rom_entry *rom_next_file(const rom_entry *romp); const rom_entry *rom_first_chunk(const rom_entry *romp); const rom_entry *rom_next_chunk(const rom_entry *romp); - #endif /* __ROMLOAD_H__ */ diff --git a/src/emu/validity.c b/src/emu/validity.c index 3294233ead9..c6c1c486cd0 100644 --- a/src/emu/validity.c +++ b/src/emu/validity.c @@ -504,23 +504,23 @@ static int validate_driver(int drivnum, const machine_config *config) static int validate_roms(int drivnum, const machine_config *config, region_info *rgninfo) { const game_driver *driver = drivers[drivnum]; - const device_config *device = NULL; - const rom_entry *romp; - const char *last_name = "???"; - int error = FALSE; - int items_since_region = 1; int bios_flags = 0, last_bios = 0; + const char *last_name = "???"; region_entry *currgn = NULL; + int items_since_region = 1; + const rom_source *source; + int error = FALSE; /* reset region info */ memset(rgninfo, 0, sizeof(*rgninfo)); /* iterate, starting with the driver's ROMs and continuing with device ROMs */ - romp = driver->rom; - while (romp != NULL) + for (source = rom_first_source(driver, config); source != NULL; source = rom_next_source(driver, config, source)) { + const rom_entry *romp; + /* scan the ROM entries */ - for ( ; !ROMENTRY_ISEND(romp); romp++) + for (romp = rom_first_region(driver, source); !ROMENTRY_ISEND(romp); romp++) { /* if this is a region, make sure it's valid, and record the length */ if (ROMENTRY_ISREGION(romp)) @@ -644,15 +644,6 @@ static int validate_roms(int drivnum, const machine_config *config, region_info /* final check for empty regions */ if (items_since_region == 0) mame_printf_warning("%s: %s has empty ROM region (warning)\n", driver->source_file, driver->name); - - /* look for more devices with regions */ - romp = NULL; - for (device = (device == NULL) ? config->devicelist : device->next; device != NULL; device = device->next) - { - romp = device_get_info_ptr(device, DEVINFO_PTR_ROM_REGION); - if (romp != NULL) - break; - } } return error;