summaryrefslogtreecommitdiffstatshomepage
path: root/src/frontend
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2019-12-17 12:11:53 +1100
committer Vas Crabb <vas@vastheman.com>2019-12-17 12:11:53 +1100
commit740e2df797e99d064a7d16f8cebd6a747faadefe (patch)
treee11fa1d37d317ab4d5e52f50c4a68bb762a2c8c6 /src/frontend
parent55d20f50f6bfe1f62d66088d0850c147a36ed0c3 (diff)
romident: find software lists attached to devices that aren't in any system by default (e.g. spectrum_mgt_flop)
Diffstat (limited to 'src/frontend')
-rw-r--r--src/frontend/mame/media_ident.cpp84
1 files changed, 36 insertions, 48 deletions
diff --git a/src/frontend/mame/media_ident.cpp b/src/frontend/mame/media_ident.cpp
index dc88fae4365..9881e992a51 100644
--- a/src/frontend/mame/media_ident.cpp
+++ b/src/frontend/mame/media_ident.cpp
@@ -332,73 +332,61 @@ void media_identifier::digest_data(std::vector<file_info> &info, char const *nam
void media_identifier::match_hashes(std::vector<file_info> &info)
{
- std::unordered_set<std::string> listnames;
-
- // iterate over drivers
- m_drivlist.reset();
- while (m_drivlist.next())
- {
- // iterate over regions and files within the region
- device_t &device = m_drivlist.config()->root_device();
- for (romload::region const &region : romload::entries(device.rom_region()).get_regions())
- {
- for (romload::file const &rom : region.get_files())
+ auto match_device =
+ [&info, listnames = std::unordered_set<std::string>()] (device_t &device) mutable
{
- util::hash_collection const romhashes(rom.get_hashdata());
- if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP))
+ // iterate over regions and files within the region
+ for (romload::region const &region : romload::entries(device.rom_region()).get_regions())
{
- for (file_info &file : info)
- file.match(device, rom, romhashes);
+ for (romload::file const &rom : region.get_files())
+ {
+ util::hash_collection const romhashes(rom.get_hashdata());
+ if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP))
+ {
+ for (file_info &file : info)
+ file.match(device, rom, romhashes);
+ }
+ }
}
- }
- }
- // next iterate over softlists
- for (software_list_device &swlistdev : software_list_device_iterator(device))
- {
- if (listnames.insert(swlistdev.list_name()).second)
- {
- for (software_info const &swinfo : swlistdev.get_info())
+ // next iterate over softlists
+ for (software_list_device &swlistdev : software_list_device_iterator(device))
{
- for (software_part const &part : swinfo.parts())
+ if (!listnames.insert(swlistdev.list_name()).second)
+ continue;
+
+ for (software_info const &swinfo : swlistdev.get_info())
{
- for (rom_entry const *region = part.romdata().data(); region; region = rom_next_region(region))
+ for (software_part const &part : swinfo.parts())
{
- for (rom_entry const *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
+ for (rom_entry const *region = part.romdata().data(); region; region = rom_next_region(region))
{
- util::hash_collection romhashes(ROM_GETHASHDATA(rom));
- if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP))
+ for (rom_entry const *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
{
- for (file_info &file : info)
- file.match(swlistdev.list_name(), swinfo, *rom, romhashes);
+ util::hash_collection romhashes(ROM_GETHASHDATA(rom));
+ if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP))
+ {
+ for (file_info &file : info)
+ file.match(swlistdev.list_name(), swinfo, *rom, romhashes);
+ }
}
}
}
}
}
- }
- }
- }
+ };
+
+ // iterate over drivers
+ m_drivlist.reset();
+ while (m_drivlist.next())
+ match_device(m_drivlist.config()->root_device());
- // iterator over devices
+ // iterator over registered device types
machine_config config(GAME_NAME(___empty), m_drivlist.options());
machine_config::token const tok(config.begin_configuration(config.root_device()));
for (device_type type : registered_device_types)
{
- // iterate over regions and files within the region
- device_t *const device = config.device_add("_tmp", type, 0);
- for (romload::region const &region : romload::entries(device->rom_region()).get_regions())
- {
- for (romload::file const &rom : region.get_files())
- {
- util::hash_collection const romhashes(rom.get_hashdata());
- if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP))
- {
- for (file_info &file : info)
- file.match(*device, rom, romhashes);
- }
- }
- }
+ match_device(*config.device_add("_tmp", type, 0));
config.device_remove("_tmp");
}
}