Skip to content

Instantly share code, notes, and snippets.

@shattered
Created August 14, 2020 19:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shattered/d581ede02accd87e0927c9371c0bb4a4 to your computer and use it in GitHub Desktop.
Save shattered/d581ede02accd87e0927c9371c0bb4a4 to your computer and use it in GitHub Desktop.
diff --git a/src/devices/machine/wd33c9x.cpp b/src/devices/machine/wd33c9x.cpp
--- a/src/devices/machine/wd33c9x.cpp
+++ b/src/devices/machine/wd33c9x.cpp
@@ -902,7 +906,9 @@ void wd33c9x_base_device::step(bool timeout)
irq_fifo_push(SCSI_STATUS_SELECT_TRANSFER_SUCCESS);
} else {
// Makes very little sense, but the previous code did it and warzard seems to need it - XXX
- m_regs[CONTROL] |= CONTROL_EDI;
+// m_regs[CONTROL] |= CONTROL_EDI;
+ set_scsi_state(FINISHED);
+ irq_fifo_push(SCSI_STATUS_DISCONNECT);
}
break;
@@ -1208,9 +1214,13 @@ void wd33c9x_base_device::step(bool timeout)
if (!data_fifo_full()) {
// if it's the last message byte, ACK remains asserted, terminate with function_complete()
//state = (m_xfr_phase == S_PHASE_MSG_IN && (!dma_command || tcounter == 1)) ? INIT_XFR_RECV_BYTE_NACK : INIT_XFR_RECV_BYTE_ACK;
- scsi_bus->ctrl_wait(scsi_refid, S_REQ, S_REQ);
- set_scsi_state((RECV_WAIT_REQ_1 << SUB_SHIFT) | INIT_XFR_RECV_BYTE_ACK);
- step(false);
+ if (m_drq_state) {
+ delay(1);
+ } else {
+ scsi_bus->ctrl_wait(scsi_refid, S_REQ, S_REQ);
+ set_scsi_state((RECV_WAIT_REQ_1 << SUB_SHIFT) | INIT_XFR_RECV_BYTE_ACK);
+ step(false);
+ }
}
break;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment