diff options
author | 2020-07-22 19:50:24 +0300 | |
---|---|---|
committer | 2020-07-22 19:50:24 +0300 | |
commit | fcc6f1aa7ce2e218ec3e2cec2044c55927a8af74 (patch) | |
tree | d819666d72117808b89d754503dee0fe27a92cae /src/devices | |
parent | e1ccaea11f6524c7d581970b53701ef8ce99adc6 (diff) |
bus/spectrum fix expansion devices chaining
Diffstat (limited to 'src/devices')
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; |