wd33c93: handle 'polled DMA' in vme_hcpu30 (nw)

This commit is contained in:
Sergey Svishchev 2020-09-02 23:20:24 +03:00
parent fd99568b8c
commit dd52821ceb

View File

@ -901,8 +901,8 @@ void wd33c9x_base_device::step(bool timeout)
set_scsi_state(FINISHED);
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;
set_scsi_state(FINISHED);
irq_fifo_push(SCSI_STATUS_DISCONNECT);
}
break;
@ -1164,6 +1164,8 @@ void wd33c9x_base_device::step(bool timeout)
delay(send_byte());
} else if ((m_regs[CONTROL] & CONTROL_DM) == CONTROL_DM_POLLED) {
m_regs[AUXILIARY_STATUS] |= AUXILIARY_STATUS_DBR;
} else {
delay(1);
}
break;
@ -1208,9 +1210,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;