dcs: Reinstate hastily removed eat_cycles. Fixes MT07027. (nw)

This commit is contained in:
Ted Green 2018-06-29 15:08:36 -06:00
parent b47f66a760
commit 60fc9da0c8
2 changed files with 7 additions and 1 deletions

View File

@ -729,7 +729,8 @@ dcs_audio_device::dcs_audio_device(const machine_config &mconfig, device_type ty
m_external_program_ram(nullptr),
m_internal_data_ram(nullptr),
m_dram_in_mb(0),
m_iram(*this, "iram")
m_iram(*this, "iram"),
m_maincpu(*this, ":maincpu")
{
m_dmadac[0] = m_dmadac[1] = m_dmadac[2] = m_dmadac[3] = m_dmadac[4] = m_dmadac[5] = nullptr;
memset(m_control_regs, 0, sizeof(m_control_regs));
@ -1642,6 +1643,10 @@ void dcs_audio_device::ack_w()
uint16_t dcs_audio_device::data_r()
{
// If the cpu is reading empty data it is probably polling so eat some cyles
if IS_OUTPUT_EMPTY()
m_maincpu->eat_cycles(4444);
/* data is actually only 8 bit (read from d8-d15, which is d0-d7 from the data access instructions POV) on early dcs, but goes 16 on later (seattle) */
if (m_last_output_full && !m_output_full_cb.isnull())
m_output_full_cb(m_last_output_full = 0);

View File

@ -251,6 +251,7 @@ protected:
int m_dram_in_mb;
optional_shared_ptr<uint16_t> m_iram;
optional_device<device_execute_interface> m_maincpu;
};