summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2017-06-11 00:51:47 +1000
committer Vas Crabb <vas@vastheman.com>2017-06-11 00:52:01 +1000
commit5e9030939e2dcfee4395950cae22c3486bc77ede (patch)
tree99e9f8b48cb2ac6c39f8af047046519e907a77d1 /src
parent867aea06f5cb85078e97a8ed635aaeb3c1beca2b (diff)
fix the missing default subslot devices on slot card validation
Diffstat (limited to 'src')
-rw-r--r--src/emu/validity.cpp23
-rw-r--r--src/frontend/mame/info.cpp2
2 files changed, 22 insertions, 3 deletions
diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp
index 995b024b059..86020e7719c 100644
--- a/src/emu/validity.cpp
+++ b/src/emu/validity.cpp
@@ -1841,14 +1841,33 @@ void validity_checker::validate_devices()
if (option.second->selectable())
{
std::string const card_tag(util::string_format("_%s", option.second->name()));
- device_t *const card = m_current_config->device_add(&slot->device(), card_tag.c_str(), option.second->devtype(), 0);
+ device_t *const card = m_current_config->device_add(&slot->device(), card_tag.c_str(), option.second->devtype(), option.second->clock());
const char *const def_bios = option.second->default_bios();
if (def_bios)
device_t::static_set_default_bios_tag(*card, def_bios);
machine_config_constructor const additions = option.second->machine_config();
- if (additions != nullptr)
+ if (additions)
(*additions)(*m_current_config, card, card);
+
+ for (device_slot_interface &subslot : slot_interface_iterator(*card))
+ {
+ if (subslot.default_option() && *subslot.default_option())
+ {
+ device_slot_option const *const suboption = subslot.option(subslot.default_option());
+ if (suboption)
+ {
+ device_t *const sub_card = m_current_config->device_add(&subslot.device(), suboption->name(), suboption->devtype(), suboption->clock());
+ const char *const sub_bios = suboption->default_bios();
+ if (sub_bios)
+ device_t::static_set_default_bios_tag(*sub_card, sub_bios);
+ machine_config_constructor const sub_additions = suboption->machine_config();
+ if (sub_additions)
+ (*sub_additions)(*m_current_config, sub_card, sub_card);
+ }
+ }
+ }
+
for (device_t &card_dev : device_iterator(*card))
card_dev.config_complete();
validate_roms(*card);
diff --git a/src/frontend/mame/info.cpp b/src/frontend/mame/info.cpp
index d65f1d932bb..4aebe5b29c6 100644
--- a/src/frontend/mame/info.cpp
+++ b/src/frontend/mame/info.cpp
@@ -1630,7 +1630,7 @@ void info_xml_creator::output_slots(machine_config &config, device_t &device, co
{
if (devtypes || (listed && option.second->selectable()))
{
- device_t *const dev = config.device_add(&slot.device(), "_dummy", option.second->devtype(), 0);
+ device_t *const dev = config.device_add(&slot.device(), "_dummy", option.second->devtype(), option.second->clock());
if (!dev->configured())
dev->config_complete();