From 37c3d8780797502af911094f338e42b698874691 Mon Sep 17 00:00:00 2001 From: tyfighter Date: Fri, 9 Aug 2019 21:06:52 -0500 Subject: [PATCH] wd33c9x - clarify hardware reset Hardware reset triggers a SCSI_STATUS_RESET interrupt when the MR signal is asserted, but this is also true when the device first powers on. Move the interrupt generation to device_reset so all hardware resets trigger the interrupt. --- src/devices/machine/wd33c9x.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/devices/machine/wd33c9x.cpp b/src/devices/machine/wd33c9x.cpp index f3efe1f1dab..7c84c86f72d 100644 --- a/src/devices/machine/wd33c9x.cpp +++ b/src/devices/machine/wd33c9x.cpp @@ -415,6 +415,8 @@ void wd33c9x_base_device::device_start() void wd33c9x_base_device::device_reset() { + // This is a hardware reset. Software reset is handled + // under COMMAND_CC_RESET. scsi_bus->ctrl_w(scsi_refid, 0, S_ALL); scsi_bus->ctrl_wait(scsi_refid, S_SEL|S_BSY|S_RST, S_ALL); m_addr = 0; @@ -433,6 +435,10 @@ void wd33c9x_base_device::device_reset() m_irq_cb(CLEAR_LINE); m_drq_cb(CLEAR_LINE); m_drq_state = false; + + // Hardware reset triggers a SCSI_STATUS_RESET interrupt. + irq_fifo_push(SCSI_STATUS_RESET); + update_irq(); } @@ -668,13 +674,7 @@ WRITE_LINE_MEMBER(wd33c9x_base_device::reset_w) { if (state) { LOGMASKED(LOG_LINES, "Reset via MR line\n"); - // FIXME: hardware reset is not the same as software reset, and - // wd33c93a behaves differently to wd33c93 device_reset(); - - // hardware reset produces an interrupt - m_regs[AUXILIARY_STATUS] |= AUXILIARY_STATUS_INT; - m_irq_cb(ASSERT_LINE); } }