From fa1ced3e6cdbf2523cae4f0014dc83fec9405bfc Mon Sep 17 00:00:00 2001 From: Happy-yappH Date: Mon, 24 Feb 2020 13:32:52 -0700 Subject: multibus : Add interrupt lines to multibus slot device (nw) (#6359) * multibus : Add interrupt lines to slot device (nw) * oops (nw) --- src/devices/bus/multibus/multibus.cpp | 14 ++++++ src/devices/bus/multibus/multibus.h | 93 +++++++++++++++++++++++++++++++++-- 2 files changed, 104 insertions(+), 3 deletions(-) diff --git a/src/devices/bus/multibus/multibus.cpp b/src/devices/bus/multibus/multibus.cpp index 11ee4e7fb0d..0bf13449394 100644 --- a/src/devices/bus/multibus/multibus.cpp +++ b/src/devices/bus/multibus/multibus.cpp @@ -18,6 +18,8 @@ DEFINE_DEVICE_TYPE(MULTIBUS_SLOT, multibus_slot_device, "multibus_slot", "Intel multibus_slot_device::multibus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig , MULTIBUS_SLOT , tag , owner , clock) , device_single_card_slot_interface(mconfig , *this) + , m_irq_cb(*this) + , m_irqa_cb(*this) { option_reset(); option_add("isbc202" , ISBC202); @@ -47,6 +49,8 @@ void multibus_slot_device::install_mem_rw(address_space& space) void multibus_slot_device::device_start() { + m_irq_cb.resolve_all_safe(); + m_irqa_cb.resolve_safe(); } device_multibus_interface::device_multibus_interface(const machine_config &mconfig , device_t &device) @@ -57,3 +61,13 @@ device_multibus_interface::device_multibus_interface(const machine_config &mconf device_multibus_interface::~device_multibus_interface() { } + +WRITE_LINE_MEMBER( multibus_slot_device::irq0_w ) { m_irq_cb[0](state); } +WRITE_LINE_MEMBER( multibus_slot_device::irq1_w ) { m_irq_cb[1](state); } +WRITE_LINE_MEMBER( multibus_slot_device::irq2_w ) { m_irq_cb[2](state); } +WRITE_LINE_MEMBER( multibus_slot_device::irq3_w ) { m_irq_cb[3](state); } +WRITE_LINE_MEMBER( multibus_slot_device::irq4_w ) { m_irq_cb[4](state); } +WRITE_LINE_MEMBER( multibus_slot_device::irq5_w ) { m_irq_cb[5](state); } +WRITE_LINE_MEMBER( multibus_slot_device::irq6_w ) { m_irq_cb[6](state); } +WRITE_LINE_MEMBER( multibus_slot_device::irq7_w ) { m_irq_cb[7](state); } +WRITE_LINE_MEMBER( multibus_slot_device::irqa_w ) { m_irqa_cb(state); } diff --git a/src/devices/bus/multibus/multibus.h b/src/devices/bus/multibus/multibus.h index f45a486a516..3f7ee5cbf77 100644 --- a/src/devices/bus/multibus/multibus.h +++ b/src/devices/bus/multibus/multibus.h @@ -5,7 +5,70 @@ multibus.h Intel Multibus - + + P1 Multibus connector: + + Power supplies + 1 GND 2 GND + 3 +5Vdc 4 +5Vdc + 5 +5Vdc 6 +5Vdc + 7 +12Vdc 8 +12Vdc + 9 -5Vdc 10 -5Vdc + 11 GND 12 GND + Bus controls + 13 BCLK/ 14 INIT/ + 15 BPRN/ 16 BPRO/ + 17 BUSY/ 18 BREQ/ + 19 MRDC/ 20 MWTC/ + 21 IORC/ 22 IOWC/ + 23 XACK/ 24 INH1/ + Bus controls and address + 25 LOCK/ 26 INH2/ + 27 BHEN/ 28 ADR10/ + 29 CBRQ/ 30 ADR11/ + 31 CCLK/ 32 ADR12/ + 33 INTA/ 34 ADR13/ + Interrupts + 35 INT6/ 36 INT7/ + 37 INT4/ 38 INT5/ + 39 INT2/ 40 INT3/ + 41 INT0/ 42 INT1/ + Address + 43 ADRE/ 44 ADRF/ + 45 ADRC/ 46 ADRD/ + 47 ADRA/ 48 ADRB/ + 49 ADR8/ 50 ADR9/ + 51 ADR6/ 52 ADR7/ + 53 ADR4/ 54 ADR5/ + 55 ADR2/ 56 ADR3/ + 57 ADR0/ 58 ADR1/ + Data + 59 DATE/ 60 DATF/ + 61 DATC/ 62 DATD/ + 63 DATA/ 64 DATB/ + 65 DAT8/ 66 DAT9/ + 67 DAT6/ 68 DAT7/ + 69 DAT4/ 70 DAT5/ + 71 DAT2/ 72 DAT3/ + 73 DAT0/ 74 DAT1/ + Power supplies + 75 GND 76 GND + 77 reserved 78 reserved + 79 -12Vdc 80 -12Vdc + 81 +5Vdc 82 +5Vdc + 83 +5Vdc 84 +5Vdc + 85 GND 86 GND + + P2 Multibus connector: + + 1-54 reserved for iLBX bus + + Address + 55 ADR16/ 56 ADR17/ + 57 ADR14/ 58 ADR15/ + + 59-60 reserved for iLBx bus + *********************************************************************/ #ifndef MAME_BUS_MULTIBUS_MULTIBUS_H @@ -29,9 +92,33 @@ public: // Set memory space void install_mem_rw(address_space& space); - + + auto irq0_callback() { return m_irq_cb[0].bind(); } + auto irq1_callback() { return m_irq_cb[1].bind(); } + auto irq2_callback() { return m_irq_cb[2].bind(); } + auto irq3_callback() { return m_irq_cb[3].bind(); } + auto irq4_callback() { return m_irq_cb[4].bind(); } + auto irq5_callback() { return m_irq_cb[5].bind(); } + auto irq6_callback() { return m_irq_cb[6].bind(); } + auto irq7_callback() { return m_irq_cb[7].bind(); } + auto irqa_callback() { return m_irqa_cb.bind(); } + + DECLARE_WRITE_LINE_MEMBER( irq0_w ); + DECLARE_WRITE_LINE_MEMBER( irq1_w ); + DECLARE_WRITE_LINE_MEMBER( irq2_w ); + DECLARE_WRITE_LINE_MEMBER( irq3_w ); + DECLARE_WRITE_LINE_MEMBER( irq4_w ); + DECLARE_WRITE_LINE_MEMBER( irq5_w ); + DECLARE_WRITE_LINE_MEMBER( irq6_w ); + DECLARE_WRITE_LINE_MEMBER( irq7_w ); + DECLARE_WRITE_LINE_MEMBER( irqa_w ); + protected: virtual void device_start() override; + + devcb_write_line::array<8> m_irq_cb; + devcb_write_line m_irqa_cb; + }; class device_multibus_interface : public device_interface @@ -42,7 +129,7 @@ public: // Set CPU memory space virtual void install_mem_rw(address_space& space) = 0; - + protected: device_multibus_interface(const machine_config &mconfig , device_t &device); virtual ~device_multibus_interface(); -- cgit v1.2.3