From 6b7ca78a6c642d0b48e7a16f140cdffc62efac05 Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 10 Jun 2017 12:34:43 -0400 Subject: Further improvements to slot option validation (nw) - All slot options are now validated whether or not they are user-selectable. This has already exposed a bug in one MSX-Audio device. - Slots within slots, however, get added for validation only if they are declared fixed. Various Commodore floppy drives have been affected by this, since it doesn't look as if the current FDC emulation allows for detachability. --- src/devices/bus/adamnet/fdc.cpp | 7 ++-- src/devices/bus/adamnet/fdc.h | 2 +- src/devices/bus/cbmiec/c1541.cpp | 2 +- src/devices/bus/cbmiec/c1571.cpp | 8 ++-- src/devices/bus/cbmiec/c1581.cpp | 2 +- src/devices/bus/cbmiec/fd2000.cpp | 4 +- src/devices/bus/compucolor/floppy.cpp | 2 +- src/devices/bus/ieee488/c2031.cpp | 2 +- src/devices/bus/ieee488/c2040.cpp | 12 +++--- src/devices/bus/msx_cart/msx_audio.cpp | 11 ++++++ src/devices/bus/msx_cart/msx_audio.h | 1 + src/devices/bus/plus4/c1551.cpp | 2 +- src/devices/imagedev/floppy.h | 5 +++ src/emu/validity.cpp | 69 ++++++++++++++++------------------ 14 files changed, 72 insertions(+), 57 deletions(-) diff --git a/src/devices/bus/adamnet/fdc.cpp b/src/devices/bus/adamnet/fdc.cpp index 9eff427a77a..5fbdd822e44 100644 --- a/src/devices/bus/adamnet/fdc.cpp +++ b/src/devices/bus/adamnet/fdc.cpp @@ -172,7 +172,7 @@ adam_fdc_device::adam_fdc_device(const machine_config &mconfig, const char *tag, device_adamnet_card_interface(mconfig, *this), m_maincpu(*this, M6801_TAG), m_fdc(*this, WD2793_TAG), - m_floppy0(*this, WD2793_TAG":0:525ssdd"), + m_connector(*this, WD2793_TAG":0"), m_floppy(nullptr), m_ram(*this, "ram"), m_sw3(*this, "SW3") @@ -239,7 +239,8 @@ READ8_MEMBER( adam_fdc_device::p1_r ) uint8_t data = 0x00; // disk in place - data |= m_floppy0->exists() ? 0x00 : 0x01; + floppy_image_device *floppy0 = m_connector->get_device(); + data |= (floppy0 != nullptr && floppy0->exists()) ? 0x00 : 0x01; // floppy data request data |= m_fdc->drq_r() ? 0x04 : 0x00; @@ -283,7 +284,7 @@ WRITE8_MEMBER( adam_fdc_device::p1_w ) if (BIT(data, 5)) { - m_floppy = m_floppy0; + m_floppy = m_connector->get_device(); } m_fdc->set_floppy(m_floppy); diff --git a/src/devices/bus/adamnet/fdc.h b/src/devices/bus/adamnet/fdc.h index 356c69a314e..6cdaedbc133 100644 --- a/src/devices/bus/adamnet/fdc.h +++ b/src/devices/bus/adamnet/fdc.h @@ -52,7 +52,7 @@ protected: required_device m_maincpu; required_device m_fdc; - required_device m_floppy0; + required_device m_connector; floppy_image_device *m_floppy; required_shared_ptr m_ram; required_ioport m_sw3; diff --git a/src/devices/bus/cbmiec/c1541.cpp b/src/devices/bus/cbmiec/c1541.cpp index 092d2155ee2..19d70310ba1 100644 --- a/src/devices/bus/cbmiec/c1541.cpp +++ b/src/devices/bus/cbmiec/c1541.cpp @@ -836,7 +836,7 @@ MACHINE_CONFIG_MEMBER( c1541_device_base::device_add_mconfig ) MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL_16MHz) MCFG_64H156_ATN_CALLBACK(WRITELINE(c1541_device_base, atn_w)) MCFG_64H156_BYTE_CALLBACK(WRITELINE(c1541_device_base, byte_w)) - MCFG_FLOPPY_DRIVE_ADD(C64H156_TAG":0", c1540_floppies, "525ssqd", c1541_device_base::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1540_floppies, "525ssqd", c1541_device_base::floppy_formats) MACHINE_CONFIG_END diff --git a/src/devices/bus/cbmiec/c1571.cpp b/src/devices/bus/cbmiec/c1571.cpp index a3f1ffd0ffd..d0028133d48 100644 --- a/src/devices/bus/cbmiec/c1571.cpp +++ b/src/devices/bus/cbmiec/c1571.cpp @@ -632,7 +632,7 @@ MACHINE_CONFIG_MEMBER( c1570_device::device_add_mconfig ) MCFG_WD1770_ADD(WD1770_TAG, XTAL_16MHz/2) MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL_16MHz) MCFG_64H156_BYTE_CALLBACK(WRITELINE(c1571_device, byte_w)) - MCFG_FLOPPY_DRIVE_ADD(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats) MACHINE_CONFIG_END @@ -668,7 +668,7 @@ MACHINE_CONFIG_MEMBER( c1571_device::device_add_mconfig ) MCFG_WD1770_ADD(WD1770_TAG, XTAL_16MHz/2) MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL_16MHz) MCFG_64H156_BYTE_CALLBACK(WRITELINE(c1571_device, byte_w)) - MCFG_FLOPPY_DRIVE_ADD(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats) MACHINE_CONFIG_END @@ -698,7 +698,7 @@ MACHINE_CONFIG_MEMBER( c1571cr_device::device_add_mconfig ) MCFG_WD1770_ADD(WD1770_TAG, XTAL_16MHz/2) MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL_16MHz) MCFG_64H156_BYTE_CALLBACK(WRITELINE(c1571_device, byte_w)) - MCFG_FLOPPY_DRIVE_ADD(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats) MACHINE_CONFIG_END @@ -734,7 +734,7 @@ MACHINE_CONFIG_MEMBER( mini_chief_device::device_add_mconfig ) MCFG_WD1770_ADD(WD1770_TAG, XTAL_16MHz/2) MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL_16MHz) MCFG_64H156_BYTE_CALLBACK(WRITELINE(c1571_device, byte_w)) - MCFG_FLOPPY_DRIVE_ADD(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats) MCFG_DEVICE_ADD(ISA_BUS_TAG, ISA8, 0) MCFG_ISA8_CPU(M6502_TAG) diff --git a/src/devices/bus/cbmiec/c1581.cpp b/src/devices/bus/cbmiec/c1581.cpp index c5bfb3d40fb..85e037a42be 100644 --- a/src/devices/bus/cbmiec/c1581.cpp +++ b/src/devices/bus/cbmiec/c1581.cpp @@ -279,7 +279,7 @@ MACHINE_CONFIG_MEMBER( c1581_device::device_add_mconfig ) MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(c1581_device, cia_pb_w)) MCFG_WD1772_ADD(WD1772_TAG, XTAL_16MHz/2) - MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":0", c1581_floppies, "35dd", c1581_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(WD1772_TAG":0", c1581_floppies, "35dd", c1581_device::floppy_formats) MACHINE_CONFIG_END diff --git a/src/devices/bus/cbmiec/fd2000.cpp b/src/devices/bus/cbmiec/fd2000.cpp index 6f5cc650245..e067583d7eb 100644 --- a/src/devices/bus/cbmiec/fd2000.cpp +++ b/src/devices/bus/cbmiec/fd2000.cpp @@ -223,7 +223,7 @@ MACHINE_CONFIG_MEMBER( fd2000_device::device_add_mconfig ) MCFG_DP8473_ADD(DP8473V_TAG) - MCFG_FLOPPY_DRIVE_ADD(DP8473V_TAG":0", fd2000_floppies, "35hd", floppy_image_device::default_floppy_formats)//fd2000_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(DP8473V_TAG":0", fd2000_floppies, "35hd", floppy_image_device::default_floppy_formats)//fd2000_device::floppy_formats) MACHINE_CONFIG_END @@ -239,7 +239,7 @@ MACHINE_CONFIG_MEMBER( fd4000_device::device_add_mconfig ) MCFG_PC8477A_ADD(PC8477AV1_TAG) - MCFG_FLOPPY_DRIVE_ADD(PC8477AV1_TAG":0", fd4000_floppies, "35ed", floppy_image_device::default_floppy_formats)//fd2000_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(PC8477AV1_TAG":0", fd4000_floppies, "35ed", floppy_image_device::default_floppy_formats)//fd2000_device::floppy_formats) MACHINE_CONFIG_END diff --git a/src/devices/bus/compucolor/floppy.cpp b/src/devices/bus/compucolor/floppy.cpp index f61a9a706ee..d7702286d48 100644 --- a/src/devices/bus/compucolor/floppy.cpp +++ b/src/devices/bus/compucolor/floppy.cpp @@ -51,7 +51,7 @@ SLOT_INTERFACE_END //------------------------------------------------- MACHINE_CONFIG_MEMBER( compucolor_floppy_device::device_add_mconfig ) - MCFG_FLOPPY_DRIVE_ADD("floppy", compucolor_floppies, "525sssd", compucolor_floppy_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED("floppy", compucolor_floppies, "525sssd", compucolor_floppy_device::floppy_formats) MACHINE_CONFIG_END diff --git a/src/devices/bus/ieee488/c2031.cpp b/src/devices/bus/ieee488/c2031.cpp index 846d3512a9b..3ba4ef1471f 100644 --- a/src/devices/bus/ieee488/c2031.cpp +++ b/src/devices/bus/ieee488/c2031.cpp @@ -325,7 +325,7 @@ MACHINE_CONFIG_MEMBER( c2031_device::device_add_mconfig ) MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL_16MHz) MCFG_64H156_BYTE_CALLBACK(WRITELINE(c2031_device, byte_w)) - MCFG_FLOPPY_DRIVE_ADD(C64H156_TAG":0", c2031_floppies, "525ssqd", c2031_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c2031_floppies, "525ssqd", c2031_device::floppy_formats) MACHINE_CONFIG_END diff --git a/src/devices/bus/ieee488/c2040.cpp b/src/devices/bus/ieee488/c2040.cpp index 982dd693743..cea7a1c7351 100644 --- a/src/devices/bus/ieee488/c2040.cpp +++ b/src/devices/bus/ieee488/c2040.cpp @@ -486,8 +486,8 @@ MACHINE_CONFIG_MEMBER( c2040_device::device_add_mconfig ) MCFG_C2040_SYNC_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_new_device, pb6_w)) MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1)) MCFG_C2040_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1)) - MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", c2040_floppies, "525ssqd", c2040_device::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":1", c2040_floppies, "525ssqd", c2040_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(FDC_TAG":0", c2040_floppies, "525ssqd", c2040_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(FDC_TAG":1", c2040_floppies, "525ssqd", c2040_device::floppy_formats) MACHINE_CONFIG_END @@ -529,8 +529,8 @@ MACHINE_CONFIG_MEMBER( c3040_device::device_add_mconfig ) MCFG_C2040_SYNC_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_new_device, pb6_w)) MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1)) MCFG_C2040_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1)) - MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", c2040_floppies, "525ssqd", c3040_device::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":1", c2040_floppies, "525ssqd", c3040_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(FDC_TAG":0", c2040_floppies, "525ssqd", c3040_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(FDC_TAG":1", c2040_floppies, "525ssqd", c3040_device::floppy_formats) MACHINE_CONFIG_END @@ -572,8 +572,8 @@ MACHINE_CONFIG_MEMBER( c4040_device::device_add_mconfig ) MCFG_C2040_SYNC_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_new_device, pb6_w)) MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1)) MCFG_C2040_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1)) - MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", c2040_floppies, "525ssqd", c4040_device::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":1", c2040_floppies, "525ssqd", c4040_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(FDC_TAG":0", c2040_floppies, "525ssqd", c4040_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(FDC_TAG":1", c2040_floppies, "525ssqd", c4040_device::floppy_formats) MACHINE_CONFIG_END diff --git a/src/devices/bus/msx_cart/msx_audio.cpp b/src/devices/bus/msx_cart/msx_audio.cpp index 1327a298474..ed91ed28732 100644 --- a/src/devices/bus/msx_cart/msx_audio.cpp +++ b/src/devices/bus/msx_cart/msx_audio.cpp @@ -126,6 +126,17 @@ READ8_MEMBER(msx_cart_msx_audio_hxmu900_device::read_cart) } +ROM_START( msx_hxmu ) + ROM_REGION(0x8000, "y8950", ROMREGION_ERASE00) +ROM_END + + +const tiny_rom_entry *msx_cart_msx_audio_hxmu900_device::device_rom_region() const +{ + return ROM_NAME( msx_hxmu ); +} + + diff --git a/src/devices/bus/msx_cart/msx_audio.h b/src/devices/bus/msx_cart/msx_audio.h index 02093ce94f4..034fb38566d 100644 --- a/src/devices/bus/msx_cart/msx_audio.h +++ b/src/devices/bus/msx_cart/msx_audio.h @@ -23,6 +23,7 @@ public: // device-level overrides virtual machine_config_constructor device_mconfig_additions() const override; + virtual const tiny_rom_entry *device_rom_region() const override; virtual void initialize_cartridge() override; diff --git a/src/devices/bus/plus4/c1551.cpp b/src/devices/bus/plus4/c1551.cpp index 266720d26cf..c15932c30b2 100644 --- a/src/devices/bus/plus4/c1551.cpp +++ b/src/devices/bus/plus4/c1551.cpp @@ -366,7 +366,7 @@ static MACHINE_CONFIG_START( c1551 ) MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL_16MHz) MCFG_64H156_BYTE_CALLBACK(DEVWRITELINE(C64H156_TAG, c64h156_device, atni_w)) - MCFG_FLOPPY_DRIVE_ADD(C64H156_TAG":0", c1551_floppies, "525ssqd", c1551_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1551_floppies, "525ssqd", c1551_device::floppy_formats) MCFG_PLUS4_PASSTHRU_EXPANSION_SLOT_ADD() MACHINE_CONFIG_END diff --git a/src/devices/imagedev/floppy.h b/src/devices/imagedev/floppy.h index f18e6425797..9f2d494fb7f 100644 --- a/src/devices/imagedev/floppy.h +++ b/src/devices/imagedev/floppy.h @@ -30,6 +30,11 @@ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \ static_cast(device)->set_formats(_formats); +#define MCFG_FLOPPY_DRIVE_ADD_FIXED(_tag, _slot_intf, _def_slot, _formats) \ + MCFG_DEVICE_ADD(_tag, FLOPPY_CONNECTOR, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, true) \ + static_cast(device)->set_formats(_formats); + #define MCFG_FLOPPY_DRIVE_SOUND(_doit) \ static_cast(device)->enable_sound(_doit); diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp index 86020e7719c..c31052f9982 100644 --- a/src/emu/validity.cpp +++ b/src/emu/validity.cpp @@ -1834,54 +1834,51 @@ void validity_checker::validate_devices() // if it's a slot, iterate over possible cards (don't recurse, or you'll stack infinite tee connectors) device_slot_interface *const slot = dynamic_cast(&device); - if (slot && !slot->fixed()) + if (slot != nullptr) { for (auto &option : slot->option_list()) { - 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(), option.second->clock()); + 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(), 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) - (*additions)(*m_current_config, card, card); + 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) + (*additions)(*m_current_config, card, card); - for (device_slot_interface &subslot : slot_interface_iterator(*card)) + for (device_slot_interface &subslot : slot_interface_iterator(*card)) + { + if (subslot.fixed()) { - if (subslot.default_option() && *subslot.default_option()) + device_slot_option const *const suboption = subslot.option(subslot.default_option()); + if (suboption) { - 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); - } + 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); - - for (device_t &card_dev : device_iterator(*card)) - { - m_current_device = &card_dev; - card_dev.findit(true); - card_dev.validity_check(*this); - m_current_device = nullptr; - } + for (device_t &card_dev : device_iterator(*card)) + card_dev.config_complete(); + validate_roms(*card); - m_current_config->device_remove(&slot->device(), card_tag.c_str()); + for (device_t &card_dev : device_iterator(*card)) + { + m_current_device = &card_dev; + card_dev.findit(true); + card_dev.validity_check(*this); + m_current_device = nullptr; } + + m_current_config->device_remove(&slot->device(), card_tag.c_str()); } } } -- cgit v1.2.3