summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus
diff options
context:
space:
mode:
author MetalliC <0vetal0@gmail.com>2020-07-22 19:50:24 +0300
committer MetalliC <0vetal0@gmail.com>2020-07-22 19:50:24 +0300
commitfcc6f1aa7ce2e218ec3e2cec2044c55927a8af74 (patch)
treed819666d72117808b89d754503dee0fe27a92cae /src/devices/bus
parente1ccaea11f6524c7d581970b53701ef8ce99adc6 (diff)
bus/spectrum fix expansion devices chaining
Diffstat (limited to 'src/devices/bus')
-rw-r--r--src/devices/bus/spectrum/beta.cpp6
-rw-r--r--src/devices/bus/spectrum/beta.h6
-rw-r--r--src/devices/bus/spectrum/beta128.cpp6
-rw-r--r--src/devices/bus/spectrum/beta128.h7
-rw-r--r--src/devices/bus/spectrum/floppyone.cpp3
-rw-r--r--src/devices/bus/spectrum/floppyone.h7
-rw-r--r--src/devices/bus/spectrum/fuller.cpp26
-rw-r--r--src/devices/bus/spectrum/fuller.h13
-rw-r--r--src/devices/bus/spectrum/intf1.cpp6
-rw-r--r--src/devices/bus/spectrum/intf1.h6
-rw-r--r--src/devices/bus/spectrum/kempdisc.cpp8
-rw-r--r--src/devices/bus/spectrum/kempdisc.h8
-rw-r--r--src/devices/bus/spectrum/logitek.cpp13
-rw-r--r--src/devices/bus/spectrum/logitek.h4
-rw-r--r--src/devices/bus/spectrum/melodik.cpp26
-rw-r--r--src/devices/bus/spectrum/melodik.h13
-rw-r--r--src/devices/bus/spectrum/mface.cpp5
-rw-r--r--src/devices/bus/spectrum/mface.h8
-rw-r--r--src/devices/bus/spectrum/opus.cpp5
-rw-r--r--src/devices/bus/spectrum/opus.h7
-rw-r--r--src/devices/bus/spectrum/sixword.cpp10
-rw-r--r--src/devices/bus/spectrum/sixword.h6
-rw-r--r--src/devices/bus/spectrum/speccydos.cpp3
-rw-r--r--src/devices/bus/spectrum/speccydos.h7
-rw-r--r--src/devices/bus/spectrum/uslot.cpp18
-rw-r--r--src/devices/bus/spectrum/uslot.h3
-rw-r--r--src/devices/bus/spectrum/wafa.cpp6
-rw-r--r--src/devices/bus/spectrum/wafa.h6
28 files changed, 123 insertions, 119 deletions
diff --git a/src/devices/bus/spectrum/beta.cpp b/src/devices/bus/spectrum/beta.cpp
index 42af3266936..0e907553275 100644
--- a/src/devices/bus/spectrum/beta.cpp
+++ b/src/devices/bus/spectrum/beta.cpp
@@ -820,12 +820,6 @@ uint8_t spectrum_gamma_device::mreq_r(offs_t offset)
return m_rom->base()[(offset & 0x3fff) + (m_romcs ? 0x4000 : 0)];
}
-void spectrum_betav2_device::mreq_w(offs_t offset, uint8_t data)
-{
- if (m_exp->romcs())
- m_exp->mreq_w(offset, data);
-}
-
void spectrum_betav2_device::fdc_hld_w(int state)
{
m_fdc->set_force_ready(state); // HLD connected to RDY pin
diff --git a/src/devices/bus/spectrum/beta.h b/src/devices/bus/spectrum/beta.h
index 60bfc440d3e..d92ed6fd0b2 100644
--- a/src/devices/bus/spectrum/beta.h
+++ b/src/devices/bus/spectrum/beta.h
@@ -46,11 +46,15 @@ protected:
virtual void pre_opcode_fetch(offs_t offset) override;
virtual void pre_data_fetch(offs_t offset) override;
virtual uint8_t mreq_r(offs_t offset) override;
- virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual uint8_t iorq_r(offs_t offset) override;
virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+ // passthru
+ virtual void post_opcode_fetch(offs_t offset) override { m_exp->post_opcode_fetch(offset); };
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); };
+ virtual void mreq_w(offs_t offset, uint8_t data) override { if (m_exp->romcs()) m_exp->mreq_w(offset, data); }
+
required_memory_region m_rom;
required_device<wd_fdc_device_base> m_fdc;
required_device_array<floppy_connector, 4> m_floppy;
diff --git a/src/devices/bus/spectrum/beta128.cpp b/src/devices/bus/spectrum/beta128.cpp
index 812c1f6afdf..d9d1f91b015 100644
--- a/src/devices/bus/spectrum/beta128.cpp
+++ b/src/devices/bus/spectrum/beta128.cpp
@@ -269,12 +269,6 @@ uint8_t spectrum_beta128_device::mreq_r(offs_t offset)
return data;
}
-void spectrum_beta128_device::mreq_w(offs_t offset, uint8_t data)
-{
- if (m_exp->romcs())
- m_exp->mreq_w(offset, data);
-}
-
INPUT_CHANGED_MEMBER(spectrum_beta128_device::magic_button)
{
if (newval && !oldval)
diff --git a/src/devices/bus/spectrum/beta128.h b/src/devices/bus/spectrum/beta128.h
index d82379d8605..f50e4745777 100644
--- a/src/devices/bus/spectrum/beta128.h
+++ b/src/devices/bus/spectrum/beta128.h
@@ -42,11 +42,16 @@ protected:
virtual void pre_opcode_fetch(offs_t offset) override;
virtual uint8_t mreq_r(offs_t offset) override;
- virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual uint8_t iorq_r(offs_t offset) override;
virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+ // passthru
+ virtual void post_opcode_fetch(offs_t offset) override { m_exp->post_opcode_fetch(offset); };
+ virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); };
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); };
+ virtual void mreq_w(offs_t offset, uint8_t data) override { if (m_exp->romcs()) m_exp->mreq_w(offset, data); }
+
required_memory_region m_rom;
required_device<wd_fdc_device_base> m_fdc;
required_device_array<floppy_connector, 4> m_floppy;
diff --git a/src/devices/bus/spectrum/floppyone.cpp b/src/devices/bus/spectrum/floppyone.cpp
index 2a0adbe31e5..bd19a36bac1 100644
--- a/src/devices/bus/spectrum/floppyone.cpp
+++ b/src/devices/bus/spectrum/floppyone.cpp
@@ -307,5 +307,6 @@ void spectrum_flpone_device::mreq_w(offs_t offset, uint8_t data)
}
}
- m_exp->mreq_w(offset, data);
+ if (m_exp->romcs())
+ m_exp->mreq_w(offset, data);
}
diff --git a/src/devices/bus/spectrum/floppyone.h b/src/devices/bus/spectrum/floppyone.h
index 944128bbaf7..1d91bc896fc 100644
--- a/src/devices/bus/spectrum/floppyone.h
+++ b/src/devices/bus/spectrum/floppyone.h
@@ -49,6 +49,13 @@ protected:
virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+ // passthru
+ virtual void pre_opcode_fetch(offs_t offset) override { m_exp->pre_opcode_fetch(offset); };
+ virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); };
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); };
+ virtual uint8_t iorq_r(offs_t offset) override { return m_exp->iorq_r(offset); }
+ virtual void iorq_w(offs_t offset, uint8_t data) override { m_exp->iorq_w(offset, data); }
+
DECLARE_WRITE_LINE_MEMBER(busy_w) { m_busy = state; };
required_memory_region m_rom;
diff --git a/src/devices/bus/spectrum/fuller.cpp b/src/devices/bus/spectrum/fuller.cpp
index f44965e5a03..6d3371a44aa 100644
--- a/src/devices/bus/spectrum/fuller.cpp
+++ b/src/devices/bus/spectrum/fuller.cpp
@@ -88,32 +88,6 @@ void spectrum_fuller_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ_LINE_MEMBER(spectrum_fuller_device::romcs)
-{
- return m_exp->romcs();
-}
-
-void spectrum_fuller_device::pre_opcode_fetch(offs_t offset)
-{
- m_exp->pre_opcode_fetch(offset);
-}
-
-uint8_t spectrum_fuller_device::mreq_r(offs_t offset)
-{
- uint8_t data = 0xff;
-
- if (m_exp->romcs())
- data &= m_exp->mreq_r(offset);
-
- return data;
-}
-
-void spectrum_fuller_device::mreq_w(offs_t offset, uint8_t data)
-{
- if (m_exp->romcs())
- m_exp->mreq_w(offset, data);
-}
-
uint8_t spectrum_fuller_device::iorq_r(offs_t offset)
{
uint8_t data = m_exp->iorq_r(offset);
diff --git a/src/devices/bus/spectrum/fuller.h b/src/devices/bus/spectrum/fuller.h
index cc6a4c8fec0..f75e621289f 100644
--- a/src/devices/bus/spectrum/fuller.h
+++ b/src/devices/bus/spectrum/fuller.h
@@ -37,12 +37,17 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual ioport_constructor device_input_ports() const override;
- virtual void pre_opcode_fetch(offs_t offset) override;
- virtual uint8_t mreq_r(offs_t offset) override;
- virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual uint8_t iorq_r(offs_t offset) override;
virtual void iorq_w(offs_t offset, uint8_t data) override;
- virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+
+ // passthru
+ virtual void pre_opcode_fetch(offs_t offset) override { m_exp->pre_opcode_fetch(offset); };
+ virtual void post_opcode_fetch(offs_t offset) override { m_exp->post_opcode_fetch(offset); };
+ virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); };
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); };
+ virtual uint8_t mreq_r(offs_t offset) override { return m_exp->romcs() ? m_exp->mreq_r(offset) : 0xff; }
+ virtual void mreq_w(offs_t offset, uint8_t data) override { if (m_exp->romcs()) m_exp->mreq_w(offset, data); }
+ virtual DECLARE_READ_LINE_MEMBER(romcs) override { return m_exp->romcs(); }
private:
required_device<spectrum_expansion_slot_device> m_exp;
diff --git a/src/devices/bus/spectrum/intf1.cpp b/src/devices/bus/spectrum/intf1.cpp
index bbdf324b2e0..0d3bba65618 100644
--- a/src/devices/bus/spectrum/intf1.cpp
+++ b/src/devices/bus/spectrum/intf1.cpp
@@ -156,12 +156,6 @@ uint8_t spectrum_intf1_device::mreq_r(offs_t offset)
return data;
}
-void spectrum_intf1_device::mreq_w(offs_t offset, uint8_t data)
-{
- if (m_exp->romcs())
- m_exp->mreq_w(offset, data);
-}
-
uint8_t spectrum_intf1_device::iorq_r(offs_t offset)
{
uint8_t data = 0xff;
diff --git a/src/devices/bus/spectrum/intf1.h b/src/devices/bus/spectrum/intf1.h
index b128c42ea92..33e1e42d312 100644
--- a/src/devices/bus/spectrum/intf1.h
+++ b/src/devices/bus/spectrum/intf1.h
@@ -40,11 +40,15 @@ protected:
virtual void pre_opcode_fetch(offs_t offset) override;
virtual void post_opcode_fetch(offs_t offset) override;
virtual uint8_t mreq_r(offs_t offset) override;
- virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual uint8_t iorq_r(offs_t offset) override;
virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+ // passthru
+ virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); };
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); };
+ virtual void mreq_w(offs_t offset, uint8_t data) override { if (m_exp->romcs()) m_exp->mreq_w(offset, data); }
+
private:
required_device<spectrum_expansion_slot_device> m_exp;
required_device<rs232_port_device> m_rs232;
diff --git a/src/devices/bus/spectrum/kempdisc.cpp b/src/devices/bus/spectrum/kempdisc.cpp
index 7faf0e39370..54f707b9908 100644
--- a/src/devices/bus/spectrum/kempdisc.cpp
+++ b/src/devices/bus/spectrum/kempdisc.cpp
@@ -151,7 +151,7 @@ uint8_t spectrum_kempdisc_device::iorq_r(offs_t offset)
switch (offset & 0xff)
{
case 0xe5: case 0xe7: case 0xed: case 0xef:
- data = m_fdc->read(BIT(offset, 1) | (BIT(offset, 3) << 1));
+ data &= m_fdc->read(BIT(offset, 1) | (BIT(offset, 3) << 1));
break;
}
@@ -205,9 +205,3 @@ uint8_t spectrum_kempdisc_device::mreq_r(offs_t offset)
return data;
}
-
-void spectrum_kempdisc_device::mreq_w(offs_t offset, uint8_t data)
-{
- if (m_exp->romcs())
- m_exp->mreq_w(offset, data);
-}
diff --git a/src/devices/bus/spectrum/kempdisc.h b/src/devices/bus/spectrum/kempdisc.h
index 1e7134f5bed..591ce158cae 100644
--- a/src/devices/bus/spectrum/kempdisc.h
+++ b/src/devices/bus/spectrum/kempdisc.h
@@ -39,11 +39,17 @@ protected:
virtual const tiny_rom_entry *device_rom_region() const override;
virtual uint8_t mreq_r(offs_t offset) override;
- virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual uint8_t iorq_r(offs_t offset) override;
virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+ // passthru
+ virtual void pre_opcode_fetch(offs_t offset) override { m_exp->pre_opcode_fetch(offset); };
+ virtual void post_opcode_fetch(offs_t offset) override { m_exp->post_opcode_fetch(offset); };
+ virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); };
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); };
+ virtual void mreq_w(offs_t offset, uint8_t data) override { if (m_exp->romcs()) m_exp->mreq_w(offset, data); }
+
required_memory_region m_rom;
required_device<wd_fdc_device_base> m_fdc;
required_device_array<floppy_connector, 4> m_floppy;
diff --git a/src/devices/bus/spectrum/logitek.cpp b/src/devices/bus/spectrum/logitek.cpp
index 5d09b472680..3cb8105e655 100644
--- a/src/devices/bus/spectrum/logitek.cpp
+++ b/src/devices/bus/spectrum/logitek.cpp
@@ -132,13 +132,11 @@ READ_LINE_MEMBER(spectrum_proceed_device::romcs)
return m_romcs;
}
-uint8_t spectrum_proceed_device::mreq_r(offs_t offset)
+void spectrum_proceed_device::fetch(offs_t offset)
{
- u8 data = 0xff;
-
switch (offset >> 8)
{
- // always override
+ // always override
case 0x00:
case 0x0e:
case 0x39: case 0x3a: case 0x3b: case 0x3c:
@@ -148,7 +146,7 @@ uint8_t spectrum_proceed_device::mreq_r(offs_t offset)
m_romcs = 1;
offset |= 0x0400; // 1Bxx -> 1Fxx
break;
- // override only if PIO PB7 is 0
+ // override only if PIO PB7 is 0
case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d:
case 0x0f: case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: case 0x18:
case 0x1d: case 0x1e:
@@ -158,6 +156,11 @@ uint8_t spectrum_proceed_device::mreq_r(offs_t offset)
default:
m_romcs = 0;
}
+}
+
+uint8_t spectrum_proceed_device::mreq_r(offs_t offset)
+{
+ u8 data = 0xff;
if (m_romcs)
data = m_rom->base()[offset & 0x1fff];
diff --git a/src/devices/bus/spectrum/logitek.h b/src/devices/bus/spectrum/logitek.h
index 94d5393800f..066e0db6d21 100644
--- a/src/devices/bus/spectrum/logitek.h
+++ b/src/devices/bus/spectrum/logitek.h
@@ -43,6 +43,10 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
+ void fetch(offs_t offset);
+
+ virtual void pre_opcode_fetch(offs_t offset) override { fetch(offset); };
+ virtual void pre_data_fetch(offs_t offset) override { fetch(offset); };
virtual uint8_t mreq_r(offs_t offset) override;
virtual uint8_t iorq_r(offs_t offset) override;
virtual void iorq_w(offs_t offset, uint8_t data) override;
diff --git a/src/devices/bus/spectrum/melodik.cpp b/src/devices/bus/spectrum/melodik.cpp
index 780d74c3485..95c426149a1 100644
--- a/src/devices/bus/spectrum/melodik.cpp
+++ b/src/devices/bus/spectrum/melodik.cpp
@@ -64,32 +64,6 @@ void spectrum_melodik_device::device_start()
// IMPLEMENTATION
//**************************************************************************
-READ_LINE_MEMBER(spectrum_melodik_device::romcs)
-{
- return m_exp->romcs();
-}
-
-void spectrum_melodik_device::pre_opcode_fetch(offs_t offset)
-{
- m_exp->pre_opcode_fetch(offset);
-}
-
-uint8_t spectrum_melodik_device::mreq_r(offs_t offset)
-{
- uint8_t data = 0xff;
-
- if (m_exp->romcs())
- data &= m_exp->mreq_r(offset);
-
- return data;
-}
-
-void spectrum_melodik_device::mreq_w(offs_t offset, uint8_t data)
-{
- if (m_exp->romcs())
- m_exp->mreq_w(offset, data);
-}
-
uint8_t spectrum_melodik_device::iorq_r(offs_t offset)
{
uint8_t data = m_exp->iorq_r(offset);
diff --git a/src/devices/bus/spectrum/melodik.h b/src/devices/bus/spectrum/melodik.h
index bf1514f600c..043aaab15a0 100644
--- a/src/devices/bus/spectrum/melodik.h
+++ b/src/devices/bus/spectrum/melodik.h
@@ -36,12 +36,17 @@ protected:
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
- virtual void pre_opcode_fetch(offs_t offset) override;
- virtual uint8_t mreq_r(offs_t offset) override;
- virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual uint8_t iorq_r(offs_t offset) override;
virtual void iorq_w(offs_t offset, uint8_t data) override;
- virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+
+ // passthru
+ virtual void pre_opcode_fetch(offs_t offset) override { m_exp->pre_opcode_fetch(offset); };
+ virtual void post_opcode_fetch(offs_t offset) override { m_exp->post_opcode_fetch(offset); };
+ virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); };
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); };
+ virtual uint8_t mreq_r(offs_t offset) override { return m_exp->romcs() ? m_exp->mreq_r(offset) : 0xff; }
+ virtual void mreq_w(offs_t offset, uint8_t data) override { if (m_exp->romcs()) m_exp->mreq_w(offset, data); }
+ virtual DECLARE_READ_LINE_MEMBER(romcs) override { return m_exp->romcs(); }
private:
required_device<spectrum_expansion_slot_device> m_exp;
diff --git a/src/devices/bus/spectrum/mface.cpp b/src/devices/bus/spectrum/mface.cpp
index 426dca8ca1c..148e06871cc 100644
--- a/src/devices/bus/spectrum/mface.cpp
+++ b/src/devices/bus/spectrum/mface.cpp
@@ -381,11 +381,6 @@ uint8_t spectrum_mprint_device::iorq_r(offs_t offset)
return data;
}
-void spectrum_mface_base_device::iorq_w(offs_t offset, uint8_t data)
-{
- m_exp->iorq_w(offset, data);
-}
-
void spectrum_mface1_device::iorq_w(offs_t offset, uint8_t data)
{
switch (offset & 0xff)
diff --git a/src/devices/bus/spectrum/mface.h b/src/devices/bus/spectrum/mface.h
index 7d5ed5b2145..abf1202cc0d 100644
--- a/src/devices/bus/spectrum/mface.h
+++ b/src/devices/bus/spectrum/mface.h
@@ -40,9 +40,15 @@ protected:
virtual void pre_opcode_fetch(offs_t offset) override;
virtual uint8_t mreq_r(offs_t offset) override;
virtual void mreq_w(offs_t offset, uint8_t data) override;
- virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+ // passthru
+ virtual void post_opcode_fetch(offs_t offset) override { m_exp->post_opcode_fetch(offset); };
+ virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); };
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); };
+ virtual uint8_t iorq_r(offs_t offset) override { return m_exp->iorq_r(offset); }
+ virtual void iorq_w(offs_t offset, uint8_t data) override { m_exp->iorq_w(offset, data); }
+
required_memory_region m_rom;
required_device<spectrum_expansion_slot_device> m_exp;
diff --git a/src/devices/bus/spectrum/opus.cpp b/src/devices/bus/spectrum/opus.cpp
index 8b1834d950a..0cec14aacc5 100644
--- a/src/devices/bus/spectrum/opus.cpp
+++ b/src/devices/bus/spectrum/opus.cpp
@@ -190,11 +190,6 @@ uint8_t spectrum_opus_device::iorq_r(offs_t offset)
return data;
}
-void spectrum_opus_device::iorq_w(offs_t offset, uint8_t data)
-{
- m_exp->iorq_w(offset, data);
-}
-
uint8_t spectrum_opus_device::mreq_r(offs_t offset)
{
uint8_t data = 0xff;
diff --git a/src/devices/bus/spectrum/opus.h b/src/devices/bus/spectrum/opus.h
index 674f246bd9d..0b1694007e7 100644
--- a/src/devices/bus/spectrum/opus.h
+++ b/src/devices/bus/spectrum/opus.h
@@ -46,9 +46,14 @@ protected:
virtual uint8_t mreq_r(offs_t offset) override;
virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual uint8_t iorq_r(offs_t offset) override;
- virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+ // passthru
+ virtual void pre_opcode_fetch(offs_t offset) override { m_exp->pre_opcode_fetch(offset); };
+ virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); };
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); };
+ virtual void iorq_w(offs_t offset, uint8_t data) override { m_exp->iorq_w(offset, data); }
+
private:
void pia_out_a(uint8_t data);
void pia_out_b(uint8_t data);
diff --git a/src/devices/bus/spectrum/sixword.cpp b/src/devices/bus/spectrum/sixword.cpp
index df0f707f442..5ba2aca8e4e 100644
--- a/src/devices/bus/spectrum/sixword.cpp
+++ b/src/devices/bus/spectrum/sixword.cpp
@@ -365,7 +365,8 @@ void spectrum_swiftdisc_device::mreq_w(offs_t offset, uint8_t data)
}
}
- m_exp->mreq_w(offset, data);
+ if (m_exp->romcs())
+ m_exp->mreq_w(offset, data);
}
uint8_t spectrum_swiftdisc_device::iorq_r(offs_t offset)
@@ -373,7 +374,7 @@ uint8_t spectrum_swiftdisc_device::iorq_r(offs_t offset)
uint8_t data = m_exp->iorq_r(offset);
if (!BIT(offset, 5))
- data = m_joy->read();
+ data &= m_joy->read();
return data;
}
@@ -472,7 +473,8 @@ void spectrum_swiftdisc2_device::mreq_w(offs_t offset, uint8_t data)
}
}
- m_exp->mreq_w(offset, data);
+ if (m_exp->romcs())
+ m_exp->mreq_w(offset, data);
}
uint8_t spectrum_swiftdisc2_device::iorq_r(offs_t offset)
@@ -483,7 +485,7 @@ uint8_t spectrum_swiftdisc2_device::iorq_r(offs_t offset)
data &= control_r();
if (!BIT(offset, 5) && !BIT(m_control, 3))
- data = m_joy->read();
+ data &= m_joy->read();
if (m_conf->read())
{
diff --git a/src/devices/bus/spectrum/sixword.h b/src/devices/bus/spectrum/sixword.h
index f0a369f6328..dea45e0bd58 100644
--- a/src/devices/bus/spectrum/sixword.h
+++ b/src/devices/bus/spectrum/sixword.h
@@ -51,6 +51,12 @@ protected:
virtual uint8_t iorq_r(offs_t offset) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+ // passthru
+ virtual void pre_opcode_fetch(offs_t offset) override { m_exp->pre_opcode_fetch(offset); };
+ virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); };
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); };
+ virtual void iorq_w(offs_t offset, uint8_t data) override { m_exp->iorq_w(offset, data); }
+
required_memory_region m_rom;
required_device<wd_fdc_device_base> m_fdc;
required_device_array<floppy_connector, 4> m_floppy;
diff --git a/src/devices/bus/spectrum/speccydos.cpp b/src/devices/bus/spectrum/speccydos.cpp
index 749a6993c0b..4c439a04d3d 100644
--- a/src/devices/bus/spectrum/speccydos.cpp
+++ b/src/devices/bus/spectrum/speccydos.cpp
@@ -241,5 +241,6 @@ void spectrum_speccydos_device::mreq_w(offs_t offset, uint8_t data)
}
}
- m_exp->mreq_w(offset, data);
+ if (m_exp->romcs())
+ m_exp->mreq_w(offset, data);
}
diff --git a/src/devices/bus/spectrum/speccydos.h b/src/devices/bus/spectrum/speccydos.h
index b26c1a6445c..df09043da17 100644
--- a/src/devices/bus/spectrum/speccydos.h
+++ b/src/devices/bus/spectrum/speccydos.h
@@ -46,6 +46,13 @@ protected:
virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+ // passthru
+ virtual void post_opcode_fetch(offs_t offset) override { m_exp->post_opcode_fetch(offset); };
+ virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); };
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); };
+ virtual uint8_t iorq_r(offs_t offset) override { return m_exp->iorq_r(offset); }
+ virtual void iorq_w(offs_t offset, uint8_t data) override { m_exp->iorq_w(offset, data); }
+
required_memory_region m_rom;
required_device<wd_fdc_device_base> m_fdc;
required_device_array<floppy_connector, 4> m_floppy;
diff --git a/src/devices/bus/spectrum/uslot.cpp b/src/devices/bus/spectrum/uslot.cpp
index b689df0cecb..eeef849a8fe 100644
--- a/src/devices/bus/spectrum/uslot.cpp
+++ b/src/devices/bus/spectrum/uslot.cpp
@@ -82,6 +82,24 @@ void spectrum_uslot_device::pre_opcode_fetch(offs_t offset)
m_exp2->pre_opcode_fetch(offset);
}
+void spectrum_uslot_device::post_opcode_fetch(offs_t offset)
+{
+ m_exp1->post_opcode_fetch(offset);
+ m_exp2->post_opcode_fetch(offset);
+}
+
+void spectrum_uslot_device::pre_data_fetch(offs_t offset)
+{
+ m_exp1->pre_data_fetch(offset);
+ m_exp2->pre_data_fetch(offset);
+}
+
+void spectrum_uslot_device::post_data_fetch(offs_t offset)
+{
+ m_exp1->post_data_fetch(offset);
+ m_exp2->post_data_fetch(offset);
+}
+
uint8_t spectrum_uslot_device::mreq_r(offs_t offset)
{
uint8_t data = 0xff;
diff --git a/src/devices/bus/spectrum/uslot.h b/src/devices/bus/spectrum/uslot.h
index 8df9dc79b4a..0764d014147 100644
--- a/src/devices/bus/spectrum/uslot.h
+++ b/src/devices/bus/spectrum/uslot.h
@@ -37,6 +37,9 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual void pre_opcode_fetch(offs_t offset) override;
+ virtual void post_opcode_fetch(offs_t offset) override;
+ virtual void pre_data_fetch(offs_t offset) override;
+ virtual void post_data_fetch(offs_t offset) override;
virtual uint8_t mreq_r(offs_t offset) override;
virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual uint8_t iorq_r(offs_t offset) override;
diff --git a/src/devices/bus/spectrum/wafa.cpp b/src/devices/bus/spectrum/wafa.cpp
index d3757d20e47..1dfec7e3e57 100644
--- a/src/devices/bus/spectrum/wafa.cpp
+++ b/src/devices/bus/spectrum/wafa.cpp
@@ -158,12 +158,6 @@ uint8_t spectrum_wafa_device::mreq_r(offs_t offset)
return data;
}
-void spectrum_wafa_device::mreq_w(offs_t offset, uint8_t data)
-{
- if (m_exp->romcs())
- m_exp->mreq_w(offset, data);
-}
-
uint8_t spectrum_wafa_device::iorq_r(offs_t offset)
{
uint8_t data = 0xff;
diff --git a/src/devices/bus/spectrum/wafa.h b/src/devices/bus/spectrum/wafa.h
index 81428c61e84..aeaf84a0268 100644
--- a/src/devices/bus/spectrum/wafa.h
+++ b/src/devices/bus/spectrum/wafa.h
@@ -42,11 +42,15 @@ protected:
virtual void pre_opcode_fetch(offs_t offset) override;
virtual void post_opcode_fetch(offs_t offset) override;
virtual uint8_t mreq_r(offs_t offset) override;
- virtual void mreq_w(offs_t offset, uint8_t data) override;
virtual uint8_t iorq_r(offs_t offset) override;
virtual void iorq_w(offs_t offset, uint8_t data) override;
virtual DECLARE_READ_LINE_MEMBER(romcs) override;
+ // passthru
+ virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); };
+ virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); };
+ virtual void mreq_w(offs_t offset, uint8_t data) override { if (m_exp->romcs()) m_exp->mreq_w(offset, data); }
+
private:
required_device<spectrum_expansion_slot_device> m_exp;
required_memory_region m_rom;