diff --git a/src/devices/bus/dmv/dmvbus.cpp b/src/devices/bus/dmv/dmvbus.cpp index 80cb8ae748c..de328f6df06 100644 --- a/src/devices/bus/dmv/dmvbus.cpp +++ b/src/devices/bus/dmv/dmvbus.cpp @@ -201,7 +201,10 @@ dmvcart_slot_device::dmvcart_slot_device(const machine_config &mconfig, const ch m_prog_write_cb(*this), m_out_int_cb(*this), m_out_irq_cb(*this), - m_out_thold_cb(*this), m_cart(nullptr) + m_out_thold_cb(*this), + m_memspace(*this, finder_base::DUMMY_TAG, -1), + m_iospace(*this, finder_base::DUMMY_TAG, -1), + m_cart(nullptr) { } diff --git a/src/devices/bus/dmv/dmvbus.h b/src/devices/bus/dmv/dmvbus.h index 53140f51dbc..17acae097e7 100644 --- a/src/devices/bus/dmv/dmvbus.h +++ b/src/devices/bus/dmv/dmvbus.h @@ -76,6 +76,8 @@ public: auto out_int() { return m_out_int_cb.bind(); } auto out_irq() { return m_out_irq_cb.bind(); } auto out_thold() { return m_out_thold_cb.bind(); } + template void set_memspace(T &&tag, int spacenum) { m_memspace.set_tag(std::forward(tag), spacenum); } + template void set_iospace(T &&tag, int spacenum) { m_iospace.set_tag(std::forward(tag), spacenum); } // device-level overrides virtual void device_start() override; @@ -107,6 +109,10 @@ public: devcb_write_line m_out_int_cb; devcb_write_line m_out_irq_cb; devcb_write_line m_out_thold_cb; + + required_address_space m_memspace; + required_address_space m_iospace; + device_dmvslot_interface* m_cart; }; diff --git a/src/devices/bus/dmv/k220.cpp b/src/devices/bus/dmv/k220.cpp index 4fff4f5b2bf..4ad0667f689 100644 --- a/src/devices/bus/dmv/k220.cpp +++ b/src/devices/bus/dmv/k220.cpp @@ -122,6 +122,7 @@ DEFINE_DEVICE_TYPE(DMV_K220, dmv_k220_device, "dmv_k220", "K220 diagnostic") dmv_k220_device::dmv_k220_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, DMV_K220, tag, owner, clock) , device_dmvslot_interface(mconfig, *this) + , m_bus(*this, DEVICE_SELF_OWNER) , m_pit(*this, "pit8253") , m_ppi(*this, "ppi8255") , m_ram(*this, "ram") @@ -137,7 +138,7 @@ dmv_k220_device::dmv_k220_device(const machine_config &mconfig, const char *tag, void dmv_k220_device::device_start() { - address_space &space = machine().device("maincpu")->space(AS_IO); + address_space &space = *m_bus->m_iospace; space.install_readwrite_handler(0x08, 0x0b, read8sm_delegate(FUNC(pit8253_device::read), &(*m_pit)), write8sm_delegate(FUNC(pit8253_device::write), &(*m_pit)), 0); space.install_readwrite_handler(0x0c, 0x0f, read8sm_delegate(FUNC(i8255_device::read), &(*m_ppi)), write8sm_delegate(FUNC(i8255_device::write), &(*m_ppi)), 0); diff --git a/src/devices/bus/dmv/k220.h b/src/devices/bus/dmv/k220.h index 453b3e49f78..60edad3b5f3 100644 --- a/src/devices/bus/dmv/k220.h +++ b/src/devices/bus/dmv/k220.h @@ -44,6 +44,7 @@ private: DECLARE_WRITE_LINE_MEMBER(write_out1); DECLARE_WRITE_LINE_MEMBER(write_out2); + required_device m_bus; required_device m_pit; required_device m_ppi; required_memory_region m_ram; diff --git a/src/devices/bus/dmv/k230.cpp b/src/devices/bus/dmv/k230.cpp index 9104abe2f7b..b5454fa78db 100644 --- a/src/devices/bus/dmv/k230.cpp +++ b/src/devices/bus/dmv/k230.cpp @@ -98,7 +98,10 @@ dmv_k230_device::dmv_k230_device(const machine_config &mconfig, device_type type : device_t(mconfig, type, tag, owner, clock) , device_dmvslot_interface(mconfig, *this) , m_maincpu(*this, "maincpu") - , m_rom(*this, "rom"), m_bus(nullptr), m_io(nullptr), m_switch16(0), m_hold(0) + , m_rom(*this, "rom") + , m_bus(*this, DEVICE_SELF_OWNER) + , m_switch16(0) + , m_hold(0) { } @@ -136,14 +139,12 @@ dmv_k235_device::dmv_k235_device(const machine_config &mconfig, const char *tag, void dmv_k230_device::device_start() { - m_bus = static_cast(owner()); - m_io = &machine().device("maincpu")->space(AS_IO); } void dmv_k234_device::device_start() { dmv_k230_device::device_start(); - m_io->install_readwrite_handler(0xd8, 0xdf, read8_delegate(FUNC(dmv_k234_device::snr_r), this), write8_delegate(FUNC(dmv_k234_device::snr_w), this), 0); + m_bus->m_iospace->install_readwrite_handler(0xd8, 0xdf, read8_delegate(FUNC(dmv_k234_device::snr_r), this), write8_delegate(FUNC(dmv_k234_device::snr_w), this), 0); } //------------------------------------------------- @@ -247,12 +248,12 @@ READ8_MEMBER(dmv_k230_device::rom_r) READ8_MEMBER( dmv_k230_device::io_r ) { - return m_io->read_byte(offset); + return m_bus->m_iospace->read_byte(offset); } WRITE8_MEMBER( dmv_k230_device::io_w ) { - m_io->write_byte(offset, data); + m_bus->m_iospace->write_byte(offset, data); } READ8_MEMBER( dmv_k230_device::program_r ) diff --git a/src/devices/bus/dmv/k230.h b/src/devices/bus/dmv/k230.h index 7021a4a8987..e8e70fd878a 100644 --- a/src/devices/bus/dmv/k230.h +++ b/src/devices/bus/dmv/k230.h @@ -51,8 +51,7 @@ protected: required_device m_maincpu; optional_memory_region m_rom; - dmvcart_slot_device * m_bus; - address_space * m_io; + required_device m_bus; int m_switch16; int m_hold; diff --git a/src/mame/drivers/dmv.cpp b/src/mame/drivers/dmv.cpp index ed0a40e4ea3..6ebf6ba0dd5 100644 --- a/src/mame/drivers/dmv.cpp +++ b/src/mame/drivers/dmv.cpp @@ -872,6 +872,12 @@ void dmv_state::dmv(machine_config &config) m_slot7a->out_int().set(FUNC(dmv_state::busint7a_w)); m_slot7a->out_irq().set(FUNC(dmv_state::irq7a_w)); + for (auto &slot : { m_slot1, m_slot2, m_slot2a, m_slot3, m_slot4, m_slot5, m_slot6, m_slot7, m_slot7a }) + { + slot->set_memspace(m_maincpu, AS_PROGRAM); + slot->set_iospace(m_maincpu, AS_IO); + } + SOFTWARE_LIST(config, "flop_list").set_original("dmv"); quickload_image_device &quickload(QUICKLOAD(config, "quickload"));