summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Patrick Mackinlay <pmackinlay@hotmail.com>2018-11-20 18:39:42 +0700
committer Patrick Mackinlay <pmackinlay@hotmail.com>2018-11-20 18:39:42 +0700
commit9d6a17633e7bdb2790cd41cabcb3141f2b9822c6 (patch)
tree3e4d937951f61d1832f8baaa696a2c113b9e0b8c
parentc91fdfe962d8c040c34f54101ec5559979de3a1d (diff)
aic6250: minor fixes (nw)
* clear REQ flag after asserting ACK * check for possibly unmasked interrupts
-rw-r--r--src/devices/machine/aic6250.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/devices/machine/aic6250.cpp b/src/devices/machine/aic6250.cpp
index 714d5c401ad..769968569c8 100644
--- a/src/devices/machine/aic6250.cpp
+++ b/src/devices/machine/aic6250.cpp
@@ -302,6 +302,8 @@ void aic6250_device::int_msk_reg_0_w(u8 data)
}
m_int_msk_reg_0 = data;
+
+ int_check();
}
void aic6250_device::offset_cntrl_w(u8 data)
@@ -373,6 +375,8 @@ void aic6250_device::int_msk_reg_1_w(u8 data)
m_status_reg_0 &= ~R07R_BUS_FREE_DETECT;
m_int_msk_reg_1 = data;
+
+ int_check();
}
u8 aic6250_device::status_reg_0_r()
@@ -488,6 +492,9 @@ void aic6250_device::scsi_signal_reg_w(u8 data)
if (!(m_control_reg_0 & R07W_TARGET_MODE) && phase_match(data, scsi_bus->ctrl_r()))
m_status_reg_0 &= ~R07R_PHASE_MISMATCH_ERR;
+ if (!(m_control_reg_0 & R07W_TARGET_MODE) && (data & R09W_SCSI_ACK_OUT))
+ m_status_reg_0 &= ~R07R_SCSI_REQ_ON;
+
m_scsi_signal_reg = data;
// HACK: trigger check for phase match
@@ -774,6 +781,7 @@ int aic6250_device::state_step()
u8 const data = scsi_bus->data_r();
LOGMASKED(LOG_STATE, "dma in 0x%02x\n", data);
+ m_status_reg_0 &= ~R07R_SCSI_REQ_ON;
m_dma_count--;
m_fifo.enqueue(data);
@@ -827,6 +835,7 @@ int aic6250_device::state_step()
u8 const data = m_fifo.dequeue();
LOGMASKED(LOG_STATE, "dma out 0x%02x\n", data);
+ m_status_reg_0 &= ~R07R_SCSI_REQ_ON;
m_dma_count--;
m_state = DMA_OUT_NEXT;
@@ -879,13 +888,18 @@ int aic6250_device::state_step()
case AUTO_PIO_IN:
m_state = AUTO_PIO_DONE;
+
+ m_status_reg_0 &= ~R07R_SCSI_REQ_ON;
m_scsi_latch_data = scsi_bus->data_r();
+
LOGMASKED(LOG_STATE, "auto pio in 0x%02x\n", m_scsi_latch_data);
scsi_bus->ctrl_w(scsi_refid, S_ACK, S_ACK);
break;
case AUTO_PIO_OUT:
LOGMASKED(LOG_STATE, "auto pio out 0x%02x\n", m_scsi_id_data);
+ m_status_reg_0 &= ~R07R_SCSI_REQ_ON;
+
m_state = AUTO_PIO_DONE;
scsi_bus->data_w(scsi_refid, m_scsi_id_data);