summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/scsi/scsi.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/scsi/scsi.h')
-rw-r--r--src/devices/bus/scsi/scsi.h88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/devices/bus/scsi/scsi.h b/src/devices/bus/scsi/scsi.h
index 66ddae370d6..e5995f970ab 100644
--- a/src/devices/bus/scsi/scsi.h
+++ b/src/devices/bus/scsi/scsi.h
@@ -17,6 +17,77 @@
#define SCSI_PORT_DEVICE6 "6"
#define SCSI_PORT_DEVICE7 "7"
+#define MCFG_SCSI_BSY_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_bsy_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_SEL_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_sel_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_CD_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_cd_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_IO_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_io_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_MSG_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_msg_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_REQ_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_req_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_ACK_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_ack_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_ATN_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_atn_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_RST_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_rst_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_DATA0_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_data0_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_DATA1_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_data1_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_DATA2_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_data2_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_DATA3_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_data3_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_DATA4_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_data4_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_DATA5_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_data5_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_DATA6_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_data6_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_DATA7_HANDLER(_devcb) \
+ downcast<scsi_port_device &>(*device).set_data7_handler(DEVCB_##_devcb);
+
+#define MCFG_SCSI_OUTPUT_LATCH_ADD(_tag, scsi_port_tag) \
+ MCFG_DEVICE_ADD(_tag, OUTPUT_LATCH, 0) \
+ MCFG_OUTPUT_LATCH_BIT0_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data0)) \
+ MCFG_OUTPUT_LATCH_BIT1_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data1)) \
+ MCFG_OUTPUT_LATCH_BIT2_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data2)) \
+ MCFG_OUTPUT_LATCH_BIT3_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data3)) \
+ MCFG_OUTPUT_LATCH_BIT4_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data4)) \
+ MCFG_OUTPUT_LATCH_BIT5_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data5)) \
+ MCFG_OUTPUT_LATCH_BIT6_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data6)) \
+ MCFG_OUTPUT_LATCH_BIT7_HANDLER(WRITELINE(scsi_port_tag, scsi_port_device, write_data7))
+
+#define MCFG_SCSI_DATA_INPUT_BUFFER(_tag) \
+ MCFG_SCSI_DATA0_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit0)) \
+ MCFG_SCSI_DATA1_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit1)) \
+ MCFG_SCSI_DATA2_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit2)) \
+ MCFG_SCSI_DATA3_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit3)) \
+ MCFG_SCSI_DATA4_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit4)) \
+ MCFG_SCSI_DATA5_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit5)) \
+ MCFG_SCSI_DATA6_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit6)) \
+ MCFG_SCSI_DATA7_HANDLER(WRITELINE(_tag, input_buffer_device, write_bit7))
class scsi_port_slot_device;
class scsi_port_interface;
@@ -29,6 +100,23 @@ public:
// construction/destruction
scsi_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+ template <class Object> devcb_base &set_bsy_handler(Object &&cb) { return m_bsy_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_sel_handler(Object &&cb) { return m_sel_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_cd_handler(Object &&cb) { return m_cd_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_io_handler(Object &&cb) { return m_io_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_msg_handler(Object &&cb) { return m_msg_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_req_handler(Object &&cb) { return m_req_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_ack_handler(Object &&cb) { return m_ack_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_atn_handler(Object &&cb) { return m_atn_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_rst_handler(Object &&cb) { return m_rst_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_data0_handler(Object &&cb) { return m_data0_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_data1_handler(Object &&cb) { return m_data1_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_data2_handler(Object &&cb) { return m_data2_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_data3_handler(Object &&cb) { return m_data3_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_data4_handler(Object &&cb) { return m_data4_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_data5_handler(Object &&cb) { return m_data5_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_data6_handler(Object &&cb) { return m_data6_handler.set_callback(std::forward<Object>(cb)); }
+ template <class Object> devcb_base &set_data7_handler(Object &&cb) { return m_data7_handler.set_callback(std::forward<Object>(cb)); }
auto bsy_handler() { return m_bsy_handler.bind(); }
auto sel_handler() { return m_sel_handler.bind(); }
auto cd_handler() { return m_cd_handler.bind(); }