summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/mb87030.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/mb87030.cpp')
-rw-r--r--src/devices/machine/mb87030.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/devices/machine/mb87030.cpp b/src/devices/machine/mb87030.cpp
index ad60af82e42..9266a81821a 100644
--- a/src/devices/machine/mb87030.cpp
+++ b/src/devices/machine/mb87030.cpp
@@ -276,6 +276,7 @@ void mb87030_device::step(bool timeout)
if ((m_sctl & SCTL_RESET_AND_DISABLE) && m_state != State::Idle) {
scsi_set_ctrl(0, S_ALL);
m_ssts &= ~SSTS_SPC_BUSY;
+ m_fifo.clear();
update_state(State::Idle);
return;
}
@@ -383,8 +384,9 @@ void mb87030_device::step(bool timeout)
if (m_scsi_phase != (ctrl & S_PHASE_MASK)) {
LOG("SCSI phase change during transfer\n");
- m_ints |= INTS_SERVICE_REQUIRED;
+ m_ints |= (INTS_SERVICE_REQUIRED | INTS_COMMAND_COMPLETE);
m_ssts &= ~SSTS_SPC_BUSY;
+ scsi_bus->data_w(scsi_refid, 0);
update_ints();
update_state(State::Idle);
break;
@@ -583,6 +585,11 @@ void mb87030_device::scmd_w(uint8_t data)
LOG("%s: %02X\n", __FUNCTION__, data);
m_scmd = data;
+ if (!(m_sctl & SCTL_RESET_AND_DISABLE))
+ {
+ scsi_set_ctrl((m_scmd & SCMD_RST_OUT) ? S_RST : 0, S_RST);
+ }
+
switch (m_scmd & SCMD_CMD_MASK) {
case SCMD_CMD_BUS_RELEASE:
LOG("%s: Bus release\n", __FUNCTION__);