summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2020-10-21 00:07:57 +1100
committer Vas Crabb <vas@vastheman.com>2020-10-21 00:07:57 +1100
commit1532827ccfb6977be8fc6e0a23d0b86025ba6ff6 (patch)
tree497382a29c3c4ee1860cb52d995fdcd3039518d5
parent7135b4deb1e279bbdff896b9b2a0c51579501c44 (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.cpp11
-rw-r--r--src/frontend/mame/ui/miscmenu.cpp22
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);
}
}