From 5b939d1d375ec6157b8305c8a22431d95a2a27ef Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sat, 27 Jan 2018 18:16:10 +1100 Subject: [PATCH] a2bus, spectrum/exp: set a better example (nw) --- src/devices/bus/a2bus/a2alfam2.cpp | 2 -- src/devices/bus/a2bus/a2applicard.cpp | 3 -- src/devices/bus/a2bus/a2arcadebd.cpp | 2 -- src/devices/bus/a2bus/a2bus.cpp | 30 ++++++++++++-------- src/devices/bus/a2bus/a2bus.h | 15 ++++++---- src/devices/bus/a2bus/a2cffa.cpp | 5 +--- src/devices/bus/a2bus/a2corvus.cpp | 3 -- src/devices/bus/a2bus/a2diskii.cpp | 3 -- src/devices/bus/a2bus/a2diskiing.cpp | 3 -- src/devices/bus/a2bus/a2dx1.cpp | 2 -- src/devices/bus/a2bus/a2echoii.cpp | 2 -- src/devices/bus/a2bus/a2hsscsi.cpp | 3 -- src/devices/bus/a2bus/a2mcms.cpp | 11 ++------ src/devices/bus/a2bus/a2memexp.cpp | 17 ++++------- src/devices/bus/a2bus/a2midi.cpp | 2 -- src/devices/bus/a2bus/a2mockingboard.cpp | 5 +--- src/devices/bus/a2bus/a2pic.cpp | 3 -- src/devices/bus/a2bus/a2sam.cpp | 2 -- src/devices/bus/a2bus/a2scsi.cpp | 3 -- src/devices/bus/a2bus/a2softcard.cpp | 3 -- src/devices/bus/a2bus/a2ssc.cpp | 3 -- src/devices/bus/a2bus/a2swyft.cpp | 3 -- src/devices/bus/a2bus/a2themill.cpp | 3 -- src/devices/bus/a2bus/a2thunderclock.cpp | 3 -- src/devices/bus/a2bus/a2ultraterm.cpp | 5 +--- src/devices/bus/a2bus/a2videoterm.cpp | 3 -- src/devices/bus/a2bus/a2vulcan.cpp | 5 +--- src/devices/bus/a2bus/a2zipdrive.cpp | 5 +--- src/devices/bus/a2bus/agat7langcard.cpp | 3 -- src/devices/bus/a2bus/agat7ram.cpp | 3 -- src/devices/bus/a2bus/agat840k_hle.cpp | 3 -- src/devices/bus/a2bus/corvfdc01.cpp | 3 -- src/devices/bus/a2bus/corvfdc02.cpp | 3 -- src/devices/bus/a2bus/ezcgi.cpp | 6 ---- src/devices/bus/a2bus/laser128.cpp | 36 +++++++++++++----------- src/devices/bus/a2bus/mouse.cpp | 3 -- src/devices/bus/a2bus/pc_xporter.cpp | 3 -- src/devices/bus/a2bus/ramcard128k.cpp | 3 -- src/devices/bus/a2bus/ramcard16k.cpp | 3 -- src/devices/bus/a2bus/ssbapple.cpp | 7 +---- src/devices/bus/a2bus/ssprite.cpp | 2 -- src/devices/bus/a2bus/timemasterho.cpp | 3 -- src/devices/bus/a2bus/transwarp.cpp | 3 -- src/devices/bus/spectrum/exp.cpp | 20 +++++++++---- src/devices/bus/spectrum/exp.h | 1 + 45 files changed, 78 insertions(+), 176 deletions(-) diff --git a/src/devices/bus/a2bus/a2alfam2.cpp b/src/devices/bus/a2bus/a2alfam2.cpp index b41166a07e5..2f2d007b4d6 100644 --- a/src/devices/bus/a2bus/a2alfam2.cpp +++ b/src/devices/bus/a2bus/a2alfam2.cpp @@ -101,8 +101,6 @@ a2bus_aesms_device::a2bus_aesms_device(const machine_config &mconfig, const char void a2bus_sn76489_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); m_latch0 = m_latch1 = m_latch2 = m_latch3 = 0; save_item(NAME(m_latch0)); diff --git a/src/devices/bus/a2bus/a2applicard.cpp b/src/devices/bus/a2bus/a2applicard.cpp index 3d11a6544ae..105ef2fc920 100644 --- a/src/devices/bus/a2bus/a2applicard.cpp +++ b/src/devices/bus/a2bus/a2applicard.cpp @@ -87,9 +87,6 @@ a2bus_applicard_device::a2bus_applicard_device(const machine_config &mconfig, co void a2bus_applicard_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - // locate Z80 ROM m_z80rom = device().machine().root_device().memregion(this->subtag(Z80_ROM_REGION).c_str())->base(); diff --git a/src/devices/bus/a2bus/a2arcadebd.cpp b/src/devices/bus/a2bus/a2arcadebd.cpp index ffb0b14f0f1..30f05377502 100644 --- a/src/devices/bus/a2bus/a2arcadebd.cpp +++ b/src/devices/bus/a2bus/a2arcadebd.cpp @@ -71,8 +71,6 @@ a2bus_arcboard_device::a2bus_arcboard_device(const machine_config &mconfig, devi void a2bus_arcboard_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); } void a2bus_arcboard_device::device_reset() diff --git a/src/devices/bus/a2bus/a2bus.cpp b/src/devices/bus/a2bus/a2bus.cpp index d70b0414b9f..6835e4ca5c3 100644 --- a/src/devices/bus/a2bus/a2bus.cpp +++ b/src/devices/bus/a2bus/a2bus.cpp @@ -307,22 +307,30 @@ device_a2bus_card_interface::~device_a2bus_card_interface() void device_a2bus_card_interface::static_set_a2bus_tag(device_t &device, const char *tag, const char *slottag) { device_a2bus_card_interface &a2bus_card = dynamic_cast(device); + assert(a2bus_card); a2bus_card.m_a2bus_tag = tag; a2bus_card.m_a2bus_slottag = slottag; } -void device_a2bus_card_interface::set_a2bus_device() +void device_a2bus_card_interface::interface_pre_start() { - // extract the slot number from the last digit of the slot tag - int tlen = strlen(m_a2bus_slottag); - - m_slot = (m_a2bus_slottag[tlen-1] - '0'); - - if (m_slot < 0 || m_slot > 7) + if (!m_a2bus) { - fatalerror("Slot %x out of range for Apple II Bus\n", m_slot); - } + // extract the slot number from the last digit of the slot tag + size_t const tlen = strlen(m_a2bus_slottag); - m_a2bus = dynamic_cast(device().machine().device(m_a2bus_tag)); - m_a2bus->add_a2bus_card(m_slot, this); + m_slot = (m_a2bus_slottag[tlen-1] - '0'); + if (m_slot < 0 || m_slot > 7) + fatalerror("Slot %x out of range for Apple II Bus\n", m_slot); + + device_t *const bus = device().machine().device(m_a2bus_tag); + if (!bus) + fatalerror("Can't find Apple II Bus device %s\n", m_a2bus_tag); + + m_a2bus = dynamic_cast(bus); + if (!m_a2bus) + fatalerror("Device %s (%s) is not an instance of a2bus_device\n", bus->tag(), bus->name()); + + m_a2bus->add_a2bus_card(m_slot, this); + } } diff --git a/src/devices/bus/a2bus/a2bus.h b/src/devices/bus/a2bus/a2bus.h index 9a2010b8a80..cf02e2099f9 100644 --- a/src/devices/bus/a2bus/a2bus.h +++ b/src/devices/bus/a2bus/a2bus.h @@ -67,14 +67,14 @@ public: // construction/destruction a2bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override; - // inline configuration static void static_set_a2bus_slot(device_t &device, const char *tag, const char *slottag); protected: a2bus_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + // device-level overrides + virtual void device_start() override; + // configuration const char *m_a2bus_tag, *m_a2bus_slottag; }; @@ -84,6 +84,7 @@ DECLARE_DEVICE_TYPE(A2BUS_SLOT, a2bus_slot_device) class device_a2bus_card_interface; + // ======================> a2bus_device class a2bus_device : public device_t { @@ -167,8 +168,6 @@ public: device_a2bus_card_interface *next() const { return m_next; } - void set_a2bus_device(); - uint32_t get_slotromspace() { return 0xc000 | (m_slot<<8); } // return Cn00 address for this slot uint32_t get_slotiospace() { return 0xc080 + (m_slot<<4); } // return C0n0 address for this slot @@ -194,6 +193,12 @@ public: protected: device_a2bus_card_interface(const machine_config &mconfig, device_t &device); + virtual void interface_pre_start() override; + + int slotno() const { assert(m_a2bus); return m_slot; } + a2bus_device &a2bus() { assert(m_a2bus); return *m_a2bus; } + +private: a2bus_device *m_a2bus; const char *m_a2bus_tag, *m_a2bus_slottag; int m_slot; diff --git a/src/devices/bus/a2bus/a2cffa.cpp b/src/devices/bus/a2bus/a2cffa.cpp index e8df74074cf..ceb88fe9e65 100644 --- a/src/devices/bus/a2bus/a2cffa.cpp +++ b/src/devices/bus/a2bus/a2cffa.cpp @@ -102,9 +102,6 @@ a2bus_cffa2_6502_device::a2bus_cffa2_6502_device(const machine_config &mconfig, void a2bus_cffa2000_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(CFFA2_ROM_REGION).c_str())->base(); // patch default setting so slave device is enabled and up to 13 devices on both connectors @@ -216,7 +213,7 @@ void a2bus_cffa2000_device::write_c0nx(uint8_t offset, uint8_t data) uint8_t a2bus_cffa2000_device::read_cnxx(uint8_t offset) { - int slotimg = m_slot * 0x100; + int const slotimg = slotno() * 0x100; // ROM contains a CnXX image for each of slots 1-7 return m_eeprom[offset+slotimg]; diff --git a/src/devices/bus/a2bus/a2corvus.cpp b/src/devices/bus/a2bus/a2corvus.cpp index 68216a580cb..251485d3f28 100644 --- a/src/devices/bus/a2bus/a2corvus.cpp +++ b/src/devices/bus/a2bus/a2corvus.cpp @@ -114,9 +114,6 @@ a2bus_corvus_device::a2bus_corvus_device(const machine_config &mconfig, const ch void a2bus_corvus_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(CORVUS_ROM_REGION).c_str())->base(); } diff --git a/src/devices/bus/a2bus/a2diskii.cpp b/src/devices/bus/a2bus/a2diskii.cpp index 1f2f4eed5b7..9673abbb1da 100644 --- a/src/devices/bus/a2bus/a2diskii.cpp +++ b/src/devices/bus/a2bus/a2diskii.cpp @@ -117,9 +117,6 @@ a2bus_agat7flop_device::a2bus_agat7flop_device(const machine_config &mconfig, co void a2bus_floppy_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(DISKII_ROM_REGION).c_str())->base(); } diff --git a/src/devices/bus/a2bus/a2diskiing.cpp b/src/devices/bus/a2bus/a2diskiing.cpp index 8b70e6c799f..1dd7fef7079 100644 --- a/src/devices/bus/a2bus/a2diskiing.cpp +++ b/src/devices/bus/a2bus/a2diskiing.cpp @@ -78,9 +78,6 @@ a2bus_diskiing_device::a2bus_diskiing_device(const machine_config &mconfig, cons void a2bus_diskiing_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(DISKII_ROM_REGION).c_str())->base(); } diff --git a/src/devices/bus/a2bus/a2dx1.cpp b/src/devices/bus/a2bus/a2dx1.cpp index 7a098b8ff01..d2899aa8bda 100644 --- a/src/devices/bus/a2bus/a2dx1.cpp +++ b/src/devices/bus/a2bus/a2dx1.cpp @@ -63,8 +63,6 @@ a2bus_dx1_device::a2bus_dx1_device(const machine_config &mconfig, const char *ta void a2bus_dx1_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); } uint8_t a2bus_dx1_device::read_c0nx(uint8_t offset) diff --git a/src/devices/bus/a2bus/a2echoii.cpp b/src/devices/bus/a2bus/a2echoii.cpp index 60916cc15fd..921789991e7 100644 --- a/src/devices/bus/a2bus/a2echoii.cpp +++ b/src/devices/bus/a2bus/a2echoii.cpp @@ -61,8 +61,6 @@ a2bus_echoii_device::a2bus_echoii_device(const machine_config &mconfig, const ch void a2bus_echoii_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); } void a2bus_echoii_device::device_reset() diff --git a/src/devices/bus/a2bus/a2hsscsi.cpp b/src/devices/bus/a2bus/a2hsscsi.cpp index 0916471f358..9973ea9e600 100644 --- a/src/devices/bus/a2bus/a2hsscsi.cpp +++ b/src/devices/bus/a2bus/a2hsscsi.cpp @@ -129,9 +129,6 @@ a2bus_hsscsi_device::a2bus_hsscsi_device(const machine_config &mconfig, const ch void a2bus_hsscsi_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = machine().root_device().memregion(this->subtag(SCSI_ROM_REGION).c_str())->base(); memset(m_ram, 0, 8192); diff --git a/src/devices/bus/a2bus/a2mcms.cpp b/src/devices/bus/a2bus/a2mcms.cpp index 66008ea4b06..e3e8260a98c 100644 --- a/src/devices/bus/a2bus/a2mcms.cpp +++ b/src/devices/bus/a2bus/a2mcms.cpp @@ -81,8 +81,6 @@ a2bus_mcms1_device::a2bus_mcms1_device(const machine_config &mconfig, const char void a2bus_mcms1_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); } void a2bus_mcms1_device::device_reset() @@ -159,18 +157,13 @@ a2bus_mcms2_device::a2bus_mcms2_device(const machine_config &mconfig, const char void a2bus_mcms2_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - - if (m_slot < 2) - { + if (slotno() < 2) fatalerror("MCMS: Card 2 must be in slot 2 or greater\n"); - } } void a2bus_mcms2_device::device_reset() { - m_card1 = static_cast(m_a2bus->m_device_list[m_slot-1]); + m_card1 = downcast(a2bus().m_device_list[slotno()-1]); m_engine = m_card1->get_engine(); } diff --git a/src/devices/bus/a2bus/a2memexp.cpp b/src/devices/bus/a2bus/a2memexp.cpp index 13283feaf85..a544713abb7 100644 --- a/src/devices/bus/a2bus/a2memexp.cpp +++ b/src/devices/bus/a2bus/a2memexp.cpp @@ -95,9 +95,6 @@ a2bus_ramfactor_device::a2bus_ramfactor_device(const machine_config &mconfig, co void a2bus_memexp_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(MEMEXP_ROM_REGION).c_str())->base(); memset(m_ram, 0xff, 1024*1024*sizeof(uint8_t)); @@ -193,15 +190,13 @@ void a2bus_memexp_device::write_c0nx(uint8_t offset, uint8_t data) uint8_t a2bus_memexp_device::read_cnxx(uint8_t offset) { - int slotimg = m_slot * 0x100; + int const slotimg = slotno() * 0x100; // first 0x400 of ROM contains a CnXX image for each of slots 1-7, last 0x400 is c800 image if ((m_isramfactor) && (m_regs[0xf] & 0x01)) - { return m_rom[offset+slotimg+0x1000]; - } - - return m_rom[offset+slotimg]; + else + return m_rom[offset+slotimg]; } /*------------------------------------------------- @@ -212,9 +207,7 @@ uint8_t a2bus_memexp_device::read_c800(uint16_t offset) { // c70a diags confirm: bit 1 of cn0F banks in the second half of the ROM if ((m_isramfactor) && (m_regs[0xf] & 0x01)) - { return m_rom[offset+0x1800]; - } - - return m_rom[offset+0x800]; + else + return m_rom[offset+0x800]; } diff --git a/src/devices/bus/a2bus/a2midi.cpp b/src/devices/bus/a2bus/a2midi.cpp index ee9355f3c02..7bd353ae51b 100644 --- a/src/devices/bus/a2bus/a2midi.cpp +++ b/src/devices/bus/a2bus/a2midi.cpp @@ -74,8 +74,6 @@ a2bus_midi_device::a2bus_midi_device(const machine_config &mconfig, device_type void a2bus_midi_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); } void a2bus_midi_device::device_reset() diff --git a/src/devices/bus/a2bus/a2mockingboard.cpp b/src/devices/bus/a2bus/a2mockingboard.cpp index 5a2ae1b8658..b7eecab83b8 100644 --- a/src/devices/bus/a2bus/a2mockingboard.cpp +++ b/src/devices/bus/a2bus/a2mockingboard.cpp @@ -145,9 +145,6 @@ a2bus_echoplus_device::a2bus_echoplus_device(const machine_config &mconfig, cons void a2bus_ayboard_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - save_item(NAME(m_porta1)); save_item(NAME(m_porta2)); } @@ -250,7 +247,7 @@ void a2bus_ayboard_device::write_cnxx(uint8_t offset, uint8_t data) } else { - logerror("Mockingboard(%d): unk write %02x to Cn%02X (%s)\n", m_slot, data, offset, machine().describe_context()); + logerror("Mockingboard(%d): unk write %02x to Cn%02X (%s)\n", slotno(), data, offset, machine().describe_context()); } } } diff --git a/src/devices/bus/a2bus/a2pic.cpp b/src/devices/bus/a2bus/a2pic.cpp index b92303cee51..48f4ee204d1 100644 --- a/src/devices/bus/a2bus/a2pic.cpp +++ b/src/devices/bus/a2bus/a2pic.cpp @@ -115,9 +115,6 @@ a2bus_pic_device::a2bus_pic_device(const machine_config &mconfig, device_type ty void a2bus_pic_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(PIC_ROM_REGION).c_str())->base(); m_timer = timer_alloc(0, nullptr); diff --git a/src/devices/bus/a2bus/a2sam.cpp b/src/devices/bus/a2bus/a2sam.cpp index 41966f63c34..1a3758d2109 100644 --- a/src/devices/bus/a2bus/a2sam.cpp +++ b/src/devices/bus/a2bus/a2sam.cpp @@ -55,8 +55,6 @@ a2bus_sam_device::a2bus_sam_device(const machine_config &mconfig, const char *ta void a2bus_sam_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); } void a2bus_sam_device::device_reset() diff --git a/src/devices/bus/a2bus/a2scsi.cpp b/src/devices/bus/a2bus/a2scsi.cpp index ad96378021d..c7706066d5e 100644 --- a/src/devices/bus/a2bus/a2scsi.cpp +++ b/src/devices/bus/a2bus/a2scsi.cpp @@ -122,9 +122,6 @@ a2bus_scsi_device::a2bus_scsi_device(const machine_config &mconfig, const char * void a2bus_scsi_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(SCSI_ROM_REGION).c_str())->base(); memset(m_ram, 0, 8192); diff --git a/src/devices/bus/a2bus/a2softcard.cpp b/src/devices/bus/a2bus/a2softcard.cpp index 1e559e59b3d..2b1c49166eb 100644 --- a/src/devices/bus/a2bus/a2softcard.cpp +++ b/src/devices/bus/a2bus/a2softcard.cpp @@ -63,9 +63,6 @@ a2bus_softcard_device::a2bus_softcard_device(const machine_config &mconfig, cons void a2bus_softcard_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - save_item(NAME(m_bEnabled)); save_item(NAME(m_FirstZ80Boot)); } diff --git a/src/devices/bus/a2bus/a2ssc.cpp b/src/devices/bus/a2bus/a2ssc.cpp index 10ca6bf211f..ac5a546fc35 100644 --- a/src/devices/bus/a2bus/a2ssc.cpp +++ b/src/devices/bus/a2bus/a2ssc.cpp @@ -143,9 +143,6 @@ a2bus_ssc_device::a2bus_ssc_device(const machine_config &mconfig, device_type ty void a2bus_ssc_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = machine().root_device().memregion(this->subtag(SSC_ROM_REGION).c_str())->base(); } diff --git a/src/devices/bus/a2bus/a2swyft.cpp b/src/devices/bus/a2bus/a2swyft.cpp index 9ad3adbf84e..ba4cb8ec46e 100644 --- a/src/devices/bus/a2bus/a2swyft.cpp +++ b/src/devices/bus/a2bus/a2swyft.cpp @@ -61,9 +61,6 @@ a2bus_swyft_device::a2bus_swyft_device(const machine_config &mconfig, device_typ void a2bus_swyft_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(SWYFT_ROM_REGION).c_str())->base(); save_item(NAME(m_rombank)); diff --git a/src/devices/bus/a2bus/a2themill.cpp b/src/devices/bus/a2bus/a2themill.cpp index e77394ed832..be7edecece4 100644 --- a/src/devices/bus/a2bus/a2themill.cpp +++ b/src/devices/bus/a2bus/a2themill.cpp @@ -79,9 +79,6 @@ a2bus_themill_device::a2bus_themill_device(const machine_config &mconfig, const void a2bus_themill_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - save_item(NAME(m_bEnabled)); save_item(NAME(m_flipAddrSpace)); save_item(NAME(m_6809Mode)); diff --git a/src/devices/bus/a2bus/a2thunderclock.cpp b/src/devices/bus/a2bus/a2thunderclock.cpp index d9541661c48..69870004f47 100644 --- a/src/devices/bus/a2bus/a2thunderclock.cpp +++ b/src/devices/bus/a2bus/a2thunderclock.cpp @@ -89,9 +89,6 @@ a2bus_thunderclock_device::a2bus_thunderclock_device(const machine_config &mconf void a2bus_thunderclock_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(THUNDERCLOCK_ROM_REGION).c_str())->base(); save_item(NAME(m_dataout)); diff --git a/src/devices/bus/a2bus/a2ultraterm.cpp b/src/devices/bus/a2bus/a2ultraterm.cpp index ef3e3341410..da2ade80039 100644 --- a/src/devices/bus/a2bus/a2ultraterm.cpp +++ b/src/devices/bus/a2bus/a2ultraterm.cpp @@ -157,9 +157,6 @@ a2bus_ultratermenh_device::a2bus_ultratermenh_device(const machine_config &mconf void a2bus_videx160_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = machine().root_device().memregion(this->subtag(ULTRATERM_ROM_REGION).c_str())->base(); m_chrrom = machine().root_device().memregion(this->subtag(ULTRATERM_GFX_REGION).c_str())->base(); @@ -256,7 +253,7 @@ void a2bus_videx160_device::write_c0nx(uint8_t offset, uint8_t data) uint8_t a2bus_videx160_device::read_cnxx(uint8_t offset) { - return m_rom[offset+(m_slot * 0x100)]; + return m_rom[offset+(slotno() * 0x100)]; } /*------------------------------------------------- diff --git a/src/devices/bus/a2bus/a2videoterm.cpp b/src/devices/bus/a2bus/a2videoterm.cpp index a1f6fdf718b..6eaccbc80db 100644 --- a/src/devices/bus/a2bus/a2videoterm.cpp +++ b/src/devices/bus/a2bus/a2videoterm.cpp @@ -211,9 +211,6 @@ a2bus_aevm80_device::a2bus_aevm80_device(const machine_config &mconfig, const ch void a2bus_videx80_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(VIDEOTERM_ROM_REGION).c_str())->base(); m_chrrom = device().machine().root_device().memregion(this->subtag(VIDEOTERM_GFX_REGION).c_str())->base(); diff --git a/src/devices/bus/a2bus/a2vulcan.cpp b/src/devices/bus/a2bus/a2vulcan.cpp index da7cb34972a..705764f1e87 100644 --- a/src/devices/bus/a2bus/a2vulcan.cpp +++ b/src/devices/bus/a2bus/a2vulcan.cpp @@ -131,9 +131,6 @@ a2bus_vulcangold_device::a2bus_vulcangold_device(const machine_config &mconfig, void a2bus_vulcanbase_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(VULCAN_ROM_REGION).c_str())->base(); save_item(NAME(m_lastdata)); @@ -262,7 +259,7 @@ void a2bus_vulcanbase_device::write_c0nx(uint8_t offset, uint8_t data) uint8_t a2bus_vulcanbase_device::read_cnxx(uint8_t offset) { - int slotimg = m_slot * 0x100; + int const slotimg = slotno() * 0x100; // ROM contains a CnXX image for each of slots 1-7 at 0x3400 return m_rom[offset+slotimg+0x3400]; diff --git a/src/devices/bus/a2bus/a2zipdrive.cpp b/src/devices/bus/a2bus/a2zipdrive.cpp index 38861a06ac4..15620d5f951 100644 --- a/src/devices/bus/a2bus/a2zipdrive.cpp +++ b/src/devices/bus/a2bus/a2zipdrive.cpp @@ -81,9 +81,6 @@ a2bus_zipdrive_device::a2bus_zipdrive_device(const machine_config &mconfig, cons void a2bus_zipdrivebase_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(ZIPDRIVE_ROM_REGION).c_str())->base(); save_item(NAME(m_lastdata)); @@ -174,7 +171,7 @@ void a2bus_zipdrivebase_device::write_c0nx(uint8_t offset, uint8_t data) uint8_t a2bus_zipdrivebase_device::read_cnxx(uint8_t offset) { - int slotimg = m_slot * 0x100; + int const slotimg = slotno() * 0x100; // ROM contains CnXX images for each of slots 1-7 at 0x0 and 0x1000 return m_rom[offset+slotimg+0x1000]; diff --git a/src/devices/bus/a2bus/agat7langcard.cpp b/src/devices/bus/a2bus/agat7langcard.cpp index c38234d67e7..6eb7bf1301e 100644 --- a/src/devices/bus/a2bus/agat7langcard.cpp +++ b/src/devices/bus/a2bus/agat7langcard.cpp @@ -48,9 +48,6 @@ a2bus_agat7langcard_device::a2bus_agat7langcard_device(const machine_config &mco void a2bus_agat7langcard_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - memset(m_ram, 0, 32 * 1024); save_item(NAME(m_inh_state)); diff --git a/src/devices/bus/a2bus/agat7ram.cpp b/src/devices/bus/a2bus/agat7ram.cpp index 965ab93f545..b7eca685dd2 100644 --- a/src/devices/bus/a2bus/agat7ram.cpp +++ b/src/devices/bus/a2bus/agat7ram.cpp @@ -48,9 +48,6 @@ a2bus_agat7ram_device::a2bus_agat7ram_device(const machine_config &mconfig, cons void a2bus_agat7ram_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - memset(m_ram, 0, 32 * 1024); save_item(NAME(m_inh_state)); diff --git a/src/devices/bus/a2bus/agat840k_hle.cpp b/src/devices/bus/a2bus/agat840k_hle.cpp index 391892fccd2..9923d1fafca 100644 --- a/src/devices/bus/a2bus/agat840k_hle.cpp +++ b/src/devices/bus/a2bus/agat840k_hle.cpp @@ -133,9 +133,6 @@ void a2bus_agat840k_hle_device::index_callback(int unit, int state) void a2bus_agat840k_hle_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(AGAT840K_ROM_REGION).c_str())->base(); m_mxcs = MXCSR_SYNC; diff --git a/src/devices/bus/a2bus/corvfdc01.cpp b/src/devices/bus/a2bus/corvfdc01.cpp index 0b8b7c9d153..6b4ff3ed08d 100644 --- a/src/devices/bus/a2bus/corvfdc01.cpp +++ b/src/devices/bus/a2bus/corvfdc01.cpp @@ -128,9 +128,6 @@ a2bus_corvfdc01_device::a2bus_corvfdc01_device(const machine_config &mconfig, co void a2bus_corvfdc01_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(FDC01_ROM_REGION).c_str())->base(); save_item(NAME(m_fdc_local_status)); diff --git a/src/devices/bus/a2bus/corvfdc02.cpp b/src/devices/bus/a2bus/corvfdc02.cpp index 955868dfeef..e4eb116d220 100644 --- a/src/devices/bus/a2bus/corvfdc02.cpp +++ b/src/devices/bus/a2bus/corvfdc02.cpp @@ -96,9 +96,6 @@ a2bus_corvfdc02_device::a2bus_corvfdc02_device(const machine_config &mconfig, co void a2bus_corvfdc02_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(FDC02_ROM_REGION).c_str())->base(); m_timer = timer_alloc(0); diff --git a/src/devices/bus/a2bus/ezcgi.cpp b/src/devices/bus/a2bus/ezcgi.cpp index 7114b6f4156..7fc669a6d85 100644 --- a/src/devices/bus/a2bus/ezcgi.cpp +++ b/src/devices/bus/a2bus/ezcgi.cpp @@ -120,8 +120,6 @@ a2bus_ezcgi_9958_device::a2bus_ezcgi_9958_device(const machine_config &mconfig, void a2bus_ezcgi_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); } void a2bus_ezcgi_device::device_reset() @@ -130,8 +128,6 @@ void a2bus_ezcgi_device::device_reset() void a2bus_ezcgi_9938_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); } void a2bus_ezcgi_9938_device::device_reset() @@ -140,8 +136,6 @@ void a2bus_ezcgi_9938_device::device_reset() void a2bus_ezcgi_9958_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); } void a2bus_ezcgi_9958_device::device_reset() diff --git a/src/devices/bus/a2bus/laser128.cpp b/src/devices/bus/a2bus/laser128.cpp index 2f583be07f6..dc7ae4fea21 100644 --- a/src/devices/bus/a2bus/laser128.cpp +++ b/src/devices/bus/a2bus/laser128.cpp @@ -11,6 +11,9 @@ #include "emu.h" #include "laser128.h" +//#define VERBOSE 1 +#include "logmacro.h" + /*************************************************************************** PARAMETERS ***************************************************************************/ @@ -54,9 +57,6 @@ a2bus_laser128_device::a2bus_laser128_device(const machine_config &mconfig, cons void a2bus_laser128_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - save_item(NAME(m_slot7_bank)); save_item(NAME(m_slot7_ram_bank)); } @@ -79,12 +79,12 @@ void a2bus_laser128_device::write_c0nx(uint8_t offset, uint8_t data) uint8_t a2bus_laser128_device::read_cnxx(uint8_t offset) { - return m_rom[offset + (m_slot * 0x100) + 0x4000]; + return m_rom[offset + (slotno() * 0x100) + 0x4000]; } uint8_t a2bus_laser128_device::read_c800(uint16_t offset) { - switch (m_slot) + switch (slotno()) { case 1: return m_rom[(offset & 0x7ff) + 0x4800]; @@ -100,10 +100,9 @@ uint8_t a2bus_laser128_device::read_c800(uint16_t offset) case 7: if (offset < 0x400) - { return m_slot7_ram[offset]; - } - return m_rom[(offset & 0x3ff) + 0x6000 + m_slot7_bank]; + else + return m_rom[(offset & 0x3ff) + 0x6000 + m_slot7_bank]; } return 0xff; @@ -111,29 +110,34 @@ uint8_t a2bus_laser128_device::read_c800(uint16_t offset) void a2bus_laser128_device::write_c800(uint16_t offset, uint8_t data) { - if ((m_slot == 7) && (offset < 0x400)) + if ((slotno() == 7) && (offset < 0x400)) { m_slot7_ram[offset] = data; } // UDCREG - if ((m_slot == 7) && (offset == 0x7f8)) + if ((slotno() == 7) && (offset == 0x7f8)) { -// printf("%02x to UDCREG\n", data); + LOG("%02x to UDCREG\n", data); m_slot7_ram_bank = (data & 0x8) ? 0x400 : 0; m_slot7_bank = (((data >> 4) & 0x7) * 0x400); -// printf("\tRAM bank %x, ROM bank %x\n", m_slot7_ram_bank, m_slot7_bank); + LOG("\tRAM bank %x, ROM bank %x\n", m_slot7_ram_bank, m_slot7_bank); } } bool a2bus_laser128_device::take_c800() { - if ((m_slot == 1) || (m_slot == 2) || (m_slot == 5) || (m_slot == 6) || (m_slot == 7)) + switch (slotno()) { - return true; + case 1: + case 2: + case 5: + case 6: + case 7: + return true; + default: + return false; } - - return false; } diff --git a/src/devices/bus/a2bus/mouse.cpp b/src/devices/bus/a2bus/mouse.cpp index 829b7585d7e..a2f696307de 100644 --- a/src/devices/bus/a2bus/mouse.cpp +++ b/src/devices/bus/a2bus/mouse.cpp @@ -180,9 +180,6 @@ a2bus_mouse_device::a2bus_mouse_device(const machine_config &mconfig, const char void a2bus_mouse_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - // register save state variables save_item(NAME(m_port_a_in)); save_item(NAME(m_port_b_in)); diff --git a/src/devices/bus/a2bus/pc_xporter.cpp b/src/devices/bus/a2bus/pc_xporter.cpp index b9eb14acfe7..6cb8404515a 100644 --- a/src/devices/bus/a2bus/pc_xporter.cpp +++ b/src/devices/bus/a2bus/pc_xporter.cpp @@ -202,9 +202,6 @@ a2bus_pcxporter_device::a2bus_pcxporter_device(const machine_config &mconfig, co void a2bus_pcxporter_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - memset(m_ram, 0, 768*1024); memset(m_regs, 0, 0x400); m_offset = 0; diff --git a/src/devices/bus/a2bus/ramcard128k.cpp b/src/devices/bus/a2bus/ramcard128k.cpp index 4cc002466c6..0736e39c5d4 100644 --- a/src/devices/bus/a2bus/ramcard128k.cpp +++ b/src/devices/bus/a2bus/ramcard128k.cpp @@ -46,9 +46,6 @@ a2bus_ssramcard_device::a2bus_ssramcard_device(const machine_config &mconfig, co void a2bus_ssramcard_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - memset(m_ram, 0, 128*1024); save_item(NAME(m_inh_state)); diff --git a/src/devices/bus/a2bus/ramcard16k.cpp b/src/devices/bus/a2bus/ramcard16k.cpp index a320472e3f1..cd91ce64230 100644 --- a/src/devices/bus/a2bus/ramcard16k.cpp +++ b/src/devices/bus/a2bus/ramcard16k.cpp @@ -46,9 +46,6 @@ a2bus_ramcard_device::a2bus_ramcard_device(const machine_config &mconfig, const void a2bus_ramcard_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - memset(m_ram, 0, 16*1024); save_item(NAME(m_inh_state)); diff --git a/src/devices/bus/a2bus/ssbapple.cpp b/src/devices/bus/a2bus/ssbapple.cpp index 45020e5e4dc..76190bc359f 100644 --- a/src/devices/bus/a2bus/ssbapple.cpp +++ b/src/devices/bus/a2bus/ssbapple.cpp @@ -62,13 +62,8 @@ a2bus_ssb_device::a2bus_ssb_device(const machine_config &mconfig, const char *ta void a2bus_ssb_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - - if (m_slot != 2) - { + if (slotno() != 2) popmessage("SSB Card should be in slot 2!\n"); - } } void a2bus_ssb_device::device_reset() diff --git a/src/devices/bus/a2bus/ssprite.cpp b/src/devices/bus/a2bus/ssprite.cpp index 16d22760b04..6a171b7823a 100644 --- a/src/devices/bus/a2bus/ssprite.cpp +++ b/src/devices/bus/a2bus/ssprite.cpp @@ -71,8 +71,6 @@ a2bus_ssprite_device::a2bus_ssprite_device(const machine_config &mconfig, device void a2bus_ssprite_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); } void a2bus_ssprite_device::device_reset() diff --git a/src/devices/bus/a2bus/timemasterho.cpp b/src/devices/bus/a2bus/timemasterho.cpp index a75ce5cbbce..d2d6a7b4e09 100644 --- a/src/devices/bus/a2bus/timemasterho.cpp +++ b/src/devices/bus/a2bus/timemasterho.cpp @@ -138,9 +138,6 @@ a2bus_timemasterho_device::a2bus_timemasterho_device(const machine_config &mconf void a2bus_timemasterho_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_rom = device().machine().root_device().memregion(this->subtag(TIMEMASTER_ROM_REGION).c_str())->base(); } diff --git a/src/devices/bus/a2bus/transwarp.cpp b/src/devices/bus/a2bus/transwarp.cpp index d65c77a8c1d..2be8eb57ed3 100644 --- a/src/devices/bus/a2bus/transwarp.cpp +++ b/src/devices/bus/a2bus/transwarp.cpp @@ -151,9 +151,6 @@ a2bus_transwarp_device::a2bus_transwarp_device(const machine_config &mconfig, co void a2bus_transwarp_device::device_start() { - // set_a2bus_device makes m_slot valid - set_a2bus_device(); - m_timer = timer_alloc(0); save_item(NAME(m_bEnabled)); diff --git a/src/devices/bus/spectrum/exp.cpp b/src/devices/bus/spectrum/exp.cpp index c365f3644f3..06a338ffd8a 100644 --- a/src/devices/bus/spectrum/exp.cpp +++ b/src/devices/bus/spectrum/exp.cpp @@ -68,13 +68,27 @@ spectrum_expansion_slot_device::~spectrum_expansion_slot_device() } +//------------------------------------------------- +// device_validity_check - device-specific checks +//------------------------------------------------- + +void spectrum_expansion_slot_device::device_validity_check(validity_checker &valid) const +{ + device_t *const card(get_card_device()); + if (card && !dynamic_cast(card)) + osd_printf_error("Card device %s (%s) does not implement device_spectrum_expansion_interface\n", card->tag(), card->name()); +} + //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- void spectrum_expansion_slot_device::device_start() { - m_card = dynamic_cast(get_card_device()); + device_t *const card_device(get_card_device()); + m_card = dynamic_cast(card_device); + if (card_device && !m_card) + throw emu_fatalerror("spectrum_expansion_slot_device: card device %s (%s) does not implement device_spectrum_expansion_interface\n", card_device->tag(), card_device->name()); // resolve callbacks m_irq_handler.resolve_safe(); @@ -87,10 +101,6 @@ void spectrum_expansion_slot_device::device_start() void spectrum_expansion_slot_device::device_reset() { - if (get_card_device()) - { - get_card_device()->reset(); - } } //------------------------------------------------- diff --git a/src/devices/bus/spectrum/exp.h b/src/devices/bus/spectrum/exp.h index 757d27e6ec4..0c522d88bb0 100644 --- a/src/devices/bus/spectrum/exp.h +++ b/src/devices/bus/spectrum/exp.h @@ -104,6 +104,7 @@ public: protected: // device-level overrides + virtual void device_validity_check(validity_checker &valid) const override; virtual void device_start() override; virtual void device_reset() override;