summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Happy-yappH <Happy-yappH@users.noreply.github.com>2020-02-24 13:32:52 -0700
committer GitHub <noreply@github.com>2020-02-24 15:32:52 -0500
commitfa1ced3e6cdbf2523cae4f0014dc83fec9405bfc (patch)
treea556a4235dc510e27d2fedce472e99497628beec
parent062c11bc9d13a904767decaf68c154c1f3744ec8 (diff)
multibus : Add interrupt lines to multibus slot device (nw) (#6359)
* multibus : Add interrupt lines to slot device (nw) * oops (nw)
-rw-r--r--src/devices/bus/multibus/multibus.cpp14
-rw-r--r--src/devices/bus/multibus/multibus.h93
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<device_multibus_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();