summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/a2bus/a2alfam2.cpp2
-rw-r--r--src/devices/bus/a2bus/a2applicard.cpp3
-rw-r--r--src/devices/bus/a2bus/a2arcadebd.cpp2
-rw-r--r--src/devices/bus/a2bus/a2bus.cpp28
-rw-r--r--src/devices/bus/a2bus/a2bus.h15
-rw-r--r--src/devices/bus/a2bus/a2cffa.cpp5
-rw-r--r--src/devices/bus/a2bus/a2corvus.cpp3
-rw-r--r--src/devices/bus/a2bus/a2diskii.cpp3
-rw-r--r--src/devices/bus/a2bus/a2diskiing.cpp3
-rw-r--r--src/devices/bus/a2bus/a2dx1.cpp2
-rw-r--r--src/devices/bus/a2bus/a2echoii.cpp2
-rw-r--r--src/devices/bus/a2bus/a2hsscsi.cpp3
-rw-r--r--src/devices/bus/a2bus/a2mcms.cpp11
-rw-r--r--src/devices/bus/a2bus/a2memexp.cpp17
-rw-r--r--src/devices/bus/a2bus/a2midi.cpp2
-rw-r--r--src/devices/bus/a2bus/a2mockingboard.cpp5
-rw-r--r--src/devices/bus/a2bus/a2pic.cpp3
-rw-r--r--src/devices/bus/a2bus/a2sam.cpp2
-rw-r--r--src/devices/bus/a2bus/a2scsi.cpp3
-rw-r--r--src/devices/bus/a2bus/a2softcard.cpp3
-rw-r--r--src/devices/bus/a2bus/a2ssc.cpp3
-rw-r--r--src/devices/bus/a2bus/a2swyft.cpp3
-rw-r--r--src/devices/bus/a2bus/a2themill.cpp3
-rw-r--r--src/devices/bus/a2bus/a2thunderclock.cpp3
-rw-r--r--src/devices/bus/a2bus/a2ultraterm.cpp5
-rw-r--r--src/devices/bus/a2bus/a2videoterm.cpp3
-rw-r--r--src/devices/bus/a2bus/a2vulcan.cpp5
-rw-r--r--src/devices/bus/a2bus/a2zipdrive.cpp5
-rw-r--r--src/devices/bus/a2bus/agat7langcard.cpp3
-rw-r--r--src/devices/bus/a2bus/agat7ram.cpp3
-rw-r--r--src/devices/bus/a2bus/agat840k_hle.cpp3
-rw-r--r--src/devices/bus/a2bus/corvfdc01.cpp3
-rw-r--r--src/devices/bus/a2bus/corvfdc02.cpp3
-rw-r--r--src/devices/bus/a2bus/ezcgi.cpp6
-rw-r--r--src/devices/bus/a2bus/laser128.cpp36
-rw-r--r--src/devices/bus/a2bus/mouse.cpp3
-rw-r--r--src/devices/bus/a2bus/pc_xporter.cpp3
-rw-r--r--src/devices/bus/a2bus/ramcard128k.cpp3
-rw-r--r--src/devices/bus/a2bus/ramcard16k.cpp3
-rw-r--r--src/devices/bus/a2bus/ssbapple.cpp7
-rw-r--r--src/devices/bus/a2bus/ssprite.cpp2
-rw-r--r--src/devices/bus/a2bus/timemasterho.cpp3
-rw-r--r--src/devices/bus/a2bus/transwarp.cpp3
-rw-r--r--src/devices/bus/spectrum/exp.cpp20
-rw-r--r--src/devices/bus/spectrum/exp.h1
45 files changed, 77 insertions, 175 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_a2bus_card_interface &>(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);
+ if (!m_a2bus)
+ {
+ // extract the slot number from the last digit of the slot tag
+ size_t const tlen = strlen(m_a2bus_slottag);
- m_slot = (m_a2bus_slottag[tlen-1] - '0');
+ 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);
- 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<a2bus_device *>(device().machine().device(m_a2bus_tag));
- m_a2bus->add_a2bus_card(m_slot, this);
+ m_a2bus = dynamic_cast<a2bus_device *>(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<a2bus_mcms1_device *>(m_a2bus->m_device_list[m_slot-1]);
+ m_card1 = downcast<a2bus_mcms1_device *>(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
@@ -69,12 +69,26 @@ 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<device_spectrum_expansion_interface *>(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<device_spectrum_expansion_interface *>(get_card_device());
+ device_t *const card_device(get_card_device());
+ m_card = dynamic_cast<device_spectrum_expansion_interface *>(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;