i8251, upd765: Allow read side effects to be disabled (nw)

This commit is contained in:
AJR 2019-03-10 16:56:06 -04:00
parent 79040abaf0
commit afd80b1a98
2 changed files with 22 additions and 14 deletions

View File

@ -674,9 +674,11 @@ uint8_t i8251_device::data_r()
{ {
LOG("read data: %02x, STATUS=%02x\n",m_rx_data,m_status); LOG("read data: %02x, STATUS=%02x\n",m_rx_data,m_status);
/* reading clears */ /* reading clears */
if (!machine().side_effects_disabled())
{
m_status &= ~I8251_STATUS_RX_READY; m_status &= ~I8251_STATUS_RX_READY;
update_rx_ready(); update_rx_ready();
}
return m_rx_data; return m_rx_data;
} }

View File

@ -444,7 +444,7 @@ uint8_t upd765_family_device::msr_r()
} }
msr |= get_drive_busy(); msr |= get_drive_busy();
if(data_irq) { if(data_irq && !machine().side_effects_disabled()) {
data_irq = false; data_irq = false;
check_irq(); check_irq();
} }
@ -471,6 +471,8 @@ uint8_t upd765_family_device::fifo_r()
uint8_t r = 0xff; uint8_t r = 0xff;
switch(main_phase) { switch(main_phase) {
case PHASE_EXEC: case PHASE_EXEC:
if(machine().side_effects_disabled())
return fifo[0];
if(internal_drq) if(internal_drq)
return fifo_pop(false); return fifo_pop(false);
LOGFIFO("fifo_r in phase %d\n", main_phase); LOGFIFO("fifo_r in phase %d\n", main_phase);
@ -478,6 +480,7 @@ uint8_t upd765_family_device::fifo_r()
case PHASE_RESULT: case PHASE_RESULT:
r = result[0]; r = result[0];
if(!machine().side_effects_disabled()) {
result_pos--; result_pos--;
memmove(result, result+1, result_pos); memmove(result, result+1, result_pos);
if(!result_pos) if(!result_pos)
@ -489,6 +492,7 @@ uint8_t upd765_family_device::fifo_r()
fi.main_state = IDLE; fi.main_state = IDLE;
clr_drive_busy(); clr_drive_busy();
} }
}
break; break;
default: default:
LOGFIFO("fifo_r in phase %d\n", main_phase); LOGFIFO("fifo_r in phase %d\n", main_phase);
@ -645,6 +649,8 @@ void upd765_family_device::fifo_expect(int size, bool write)
uint8_t upd765_family_device::dma_r() uint8_t upd765_family_device::dma_r()
{ {
if(machine().side_effects_disabled())
return fifo[0];
return fifo_pop(false); return fifo_pop(false);
} }