mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
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.
This commit is contained in:
parent
d45ede8270
commit
6b7ca78a6c
@ -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);
|
||||
|
@ -52,7 +52,7 @@ protected:
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<wd2793_device> m_fdc;
|
||||
required_device<floppy_image_device> m_floppy0;
|
||||
required_device<floppy_connector> m_connector;
|
||||
floppy_image_device *m_floppy;
|
||||
required_shared_ptr<uint8_t> m_ram;
|
||||
required_ioport m_sw3;
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -30,6 +30,11 @@
|
||||
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
|
||||
static_cast<floppy_connector *>(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<floppy_connector *>(device)->set_formats(_formats);
|
||||
|
||||
#define MCFG_FLOPPY_DRIVE_SOUND(_doit) \
|
||||
static_cast<floppy_connector *>(device)->enable_sound(_doit);
|
||||
|
||||
|
@ -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_slot_interface *>(&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());
|
||||
|
||||
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))
|
||||
{
|
||||
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);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
m_current_config->device_remove(&slot->device(), card_tag.c_str());
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
m_current_config->device_remove(&slot->device(), card_tag.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user