tms52xx: Do not treat write accesses during SPEAK execution as NOP, but delay them.

This commit is contained in:
Michael Zapf 2024-12-30 16:27:17 +01:00
parent da7e509780
commit a74ff88d24

View File

@ -1728,15 +1728,24 @@ TIMER_CALLBACK_MEMBER(tms5220_device::set_io_ready)
{ {
LOGMASKED(LOG_IO_READY, "m_timer_io_ready: in SPKEXT and FIFO was full! cannot service write now, delaying 16 cycles...\n"); LOGMASKED(LOG_IO_READY, "m_timer_io_ready: in SPKEXT and FIFO was full! cannot service write now, delaying 16 cycles...\n");
m_timer_io_ready->adjust(clocks_to_attotime(16), 1); m_timer_io_ready->adjust(clocks_to_attotime(16), 1);
break;
} }
else else
{ {
LOGMASKED(LOG_IO_READY, "m_timer_io_ready: Serviced write: %02x\n", m_write_latch); // MZ: Tests with a real TI Speech Synthesizer seem to prove
data_write(m_write_latch); // that during SPEAK, writes are not serviced either.
m_io_ready = param; if (talk_status())
break; {
LOGMASKED(LOG_IO_READY, "m_timer_io_ready: Speech generation is active! Cannot service write now, delaying 16 cycles...\n");
m_timer_io_ready->adjust(clocks_to_attotime(16), 1);
}
else
{
LOGMASKED(LOG_IO_READY, "m_timer_io_ready: Serviced write: %02x\n", m_write_latch);
data_write(m_write_latch);
m_io_ready = param;
}
} }
break;
case 0x01: case 0x01:
/* Read */ /* Read */
m_read_latch = status_read(true); m_read_latch = status_read(true);