diff options
Diffstat (limited to 'src/devices/machine/mb87030.cpp')
| -rw-r--r-- | src/devices/machine/mb87030.cpp | 9 |
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__); |
