diff options
Diffstat (limited to 'src/devices/bus/spectrum/exp.h')
-rw-r--r-- | src/devices/bus/spectrum/exp.h | 95 |
1 files changed, 50 insertions, 45 deletions
diff --git a/src/devices/bus/spectrum/exp.h b/src/devices/bus/spectrum/exp.h index 5de81d4ae43..030986fa6e8 100644 --- a/src/devices/bus/spectrum/exp.h +++ b/src/devices/bus/spectrum/exp.h @@ -8,34 +8,38 @@ Pinout: - A15 1 A14 - A13 2 A12 - D7 3 +5v - ¬OE 4 NC - SLOT 5 SLOT - D0 6 0v - D1 7 0v - D2 8 ¬CK - D6 9 A0 - D5 10 A1 - D3 11 A2 - D4 12 A3 - ¬INT 13 NC - ¬NMI 14 0v - ¬HALT 15 ¬OE - ¬MREQ 16 NC - ¬IORQ 17 NC - ¬RD 18 NC - ¬WR 19 ¬BUSRQ - NC 20 ¬RESET - ¬WAIT 21 A7 - +12v 22 A6 - NC 23 A5 - ¬M1 24 A4 - ¬RFSH 25 ¬ROMCS - A8 26 ¬BUSACK - A10 27 A9 - NC 28 A11 + 48K 128K/+2 +2A/+2B/+3/3B + + A B A B A B + A15 1 A14 A15 1 A14 A15 1 A14 + A13 2 A12 A13 2 A12 A13 2 A12 + D7 3 +5V D7 3 +5v D7 3 +5v + NC 4 +9V NC 4 +9V /OE ROM1 4 NC + SLOT 5 SLOT SLOT 5 SLOT SLOT 5 SLOT + D0 6 GND D0 6 GND D0 6 GND + D1 7 GND D1 7 GND D1 7 GND + D2 8 CLK D2 8 CLK D2 8 CKEXT + D6 9 A0 D6 9 A0 D6 9 A0 + D5 10 A1 D5 10 A1 D5 10 A1 + D3 11 A2 D3 11 A2 D3 11 A2 + D4 12 A3 D4 12 A3 D4 12 A3 + /INT 13 /IORQGE /INT 13 /IORQGE (+2 only) /INT 13 NC + /NMI 14 GND /NMI 14 GND /NMI 14 GND + /HALT 15 VIDEO /HALT 15 NC /HALT 15 /OE ROM2 + /MREQ 16 /Y /MREQ 16 NC /MREQ 16 /DRD + /IORQ 17 V /IORQ 17 NC /IORQ 17 /DWR + /RD 18 U /RD 18 NC /RD 18 /MTR + /WR 19 /BUSRQ /WR 19 /BUSRQ /WR 19 /BUSRQ + -5V 20 /RESET -5V 20 /RESET NC 20 /RESET + /WAIT 21 A7 /WAIT 21 A7 /WAIT 21 A7 + +12V 22 A6 +12V 22 A6 +12V 22 A6 + 12VAC 23 A5 12VAC 23 A5 -12V 23 A5 + /M1 24 A4 /M1 24 A4 /M1 24 A4 + /RFSH 25 /ROMCS /RFSH 25 /ROMCS /RFSH 25 NC + A8 26 /BUSACK A8 26 /BUSACK A8 26 /BUSACK + A10 27 A9 A10 27 A9 A10 27 A9 + NC 28 A11 NC 28 A11 RESET 28 A11 + **********************************************************************/ @@ -53,7 +57,7 @@ class device_spectrum_expansion_interface; -class spectrum_expansion_slot_device : public device_t, public device_slot_interface +class spectrum_expansion_slot_device : public device_t, public device_single_card_slot_interface<device_spectrum_expansion_interface> { public: // construction/destruction @@ -72,6 +76,7 @@ public: // callbacks auto irq_handler() { return m_irq_handler.bind(); } auto nmi_handler() { return m_nmi_handler.bind(); } + auto fb_r_handler() { return m_fb_r_handler.bind(); } void pre_opcode_fetch(offs_t offset); void post_opcode_fetch(offs_t offset); @@ -82,45 +87,45 @@ public: void mreq_w(offs_t offset, uint8_t data); uint8_t iorq_r(offs_t offset); void iorq_w(offs_t offset, uint8_t data); - DECLARE_READ_LINE_MEMBER( romcs ); + bool romcs(); - DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_irq_handler(state); } - DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_handler(state); } + void irq_w(int state) { m_irq_handler(state); } + void nmi_w(int state) { m_nmi_handler(state); } + uint8_t fb_r() { return m_fb_r_handler(); } protected: // device-level overrides - virtual void device_validity_check(validity_checker &valid) const override; - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; device_spectrum_expansion_interface *m_card; private: devcb_write_line m_irq_handler; devcb_write_line m_nmi_handler; + devcb_read8 m_fb_r_handler; }; // ======================> device_spectrum_expansion_interface -class device_spectrum_expansion_interface : public device_slot_card_interface +class device_spectrum_expansion_interface : public device_interface { public: - // construction/destruction - device_spectrum_expansion_interface(const machine_config &mconfig, device_t &device); - // reading and writing - virtual void pre_opcode_fetch(offs_t offset) { }; - virtual void post_opcode_fetch(offs_t offset) { }; - virtual void pre_data_fetch(offs_t offset) { }; - virtual void post_data_fetch(offs_t offset) { }; + virtual void pre_opcode_fetch(offs_t offset) { } + virtual void post_opcode_fetch(offs_t offset) { } + virtual void pre_data_fetch(offs_t offset) { } + virtual void post_data_fetch(offs_t offset) { } virtual uint8_t mreq_r(offs_t offset) { return 0xff; } virtual void mreq_w(offs_t offset, uint8_t data) { } - virtual uint8_t iorq_r(offs_t offset) { return 0xff; } + virtual uint8_t iorq_r(offs_t offset) { return offset & 1 ? m_slot->fb_r() : 0xff; } virtual void iorq_w(offs_t offset, uint8_t data) { } - virtual DECLARE_READ_LINE_MEMBER(romcs) { return 0; } + virtual bool romcs() { return 0; } protected: + // construction/destruction + device_spectrum_expansion_interface(const machine_config &mconfig, device_t &device); + spectrum_expansion_slot_device *m_slot; }; |