diff options
author | 2020-10-21 00:07:57 +1100 | |
---|---|---|
committer | 2020-10-21 00:07:57 +1100 | |
commit | 1532827ccfb6977be8fc6e0a23d0b86025ba6ff6 (patch) | |
tree | 497382a29c3c4ee1860cb52d995fdcd3039518d5 | |
parent | 7135b4deb1e279bbdff896b9b2a0c51579501c44 (diff) |
frontend: Only populate BIOS Selection menu with system and slot cards that actually have BIOS options (addresses crash in MT06675).
-rw-r--r-- | src/frontend/mame/ui/info.cpp | 11 | ||||
-rw-r--r-- | src/frontend/mame/ui/miscmenu.cpp | 22 |
2 files changed, 22 insertions, 11 deletions
diff --git a/src/frontend/mame/ui/info.cpp b/src/frontend/mame/ui/info.cpp index 8f1260d7815..6f30eea66f6 100644 --- a/src/frontend/mame/ui/info.cpp +++ b/src/frontend/mame/ui/info.cpp @@ -93,10 +93,15 @@ machine_static_info::machine_static_info(const ui_options &options, machine_conf m_imperfect_features |= device.type().imperfect_features(); // look for BIOS options - for (tiny_rom_entry const *rom = device.rom_region(); !m_has_bioses && rom && !ROMENTRY_ISEND(rom); ++rom) + device_t const *const parent(device.owner()); + device_slot_interface const *const slot(dynamic_cast<device_slot_interface const *>(parent)); + if (!parent || (slot && (slot->get_card_device() == &device))) { - if (ROMENTRY_ISSYSTEM_BIOS(rom)) - m_has_bioses = true; + for (tiny_rom_entry const *rom = device.rom_region(); !m_has_bioses && rom && !ROMENTRY_ISEND(rom); ++rom) + { + if (ROMENTRY_ISSYSTEM_BIOS(rom)) + m_has_bioses = true; + } } // if we don't have ports passed in, build here diff --git a/src/frontend/mame/ui/miscmenu.cpp b/src/frontend/mame/ui/miscmenu.cpp index f0ab531360e..5cdff331c21 100644 --- a/src/frontend/mame/ui/miscmenu.cpp +++ b/src/frontend/mame/ui/miscmenu.cpp @@ -50,19 +50,25 @@ menu_bios_selection::menu_bios_selection(mame_ui_manager &mui, render_container void menu_bios_selection::populate(float &customtop, float &custombottom) { - /* cycle through all devices for this system */ + // cycle through all devices for this system for (device_t &device : device_iterator(machine().root_device())) { - tiny_rom_entry const *rom(device.rom_region()); - if (rom && !ROMENTRY_ISEND(rom)) + device_t const *const parent(device.owner()); + device_slot_interface const *const slot(dynamic_cast<device_slot_interface const *>(parent)); + if (!parent || (slot && (slot->get_card_device() == &device))) { - const char *val = "default"; - for ( ; !ROMENTRY_ISEND(rom); rom++) + tiny_rom_entry const *rom(device.rom_region()); + if (rom && !ROMENTRY_ISEND(rom)) { - if (ROMENTRY_ISSYSTEM_BIOS(rom) && ROM_GETBIOSFLAGS(rom) == device.system_bios()) - val = rom->hashdata; + char const *val = nullptr; + for ( ; !ROMENTRY_ISEND(rom) && !val; rom++) + { + if (ROMENTRY_ISSYSTEM_BIOS(rom) && ROM_GETBIOSFLAGS(rom) == device.system_bios()) + val = rom->hashdata; + } + if (val) + item_append(!parent ? "driver" : (device.tag() + 1), val, FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW, (void *)&device); } - item_append(!device.owner() ? "driver" : (device.tag() + 1), val, FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW, (void *)&device); } } |