diff options
Diffstat (limited to 'src/devices/sound/ymf278b.cpp')
-rw-r--r-- | src/devices/sound/ymf278b.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/devices/sound/ymf278b.cpp b/src/devices/sound/ymf278b.cpp index d44f8cdaf00..18451d71732 100644 --- a/src/devices/sound/ymf278b.cpp +++ b/src/devices/sound/ymf278b.cpp @@ -778,6 +778,14 @@ READ8_MEMBER( ymf278b_device::read ) /**************************************************************************/ //------------------------------------------------- +// device_post_load - device-specific post load +//------------------------------------------------- +void ymf278b_device::device_post_load() +{ + ymf262_post_load(m_ymf262); +} + +//------------------------------------------------- // device_reset - device-specific reset //------------------------------------------------- @@ -841,6 +849,20 @@ void ymf278b_device::device_stop() m_ymf262 = nullptr; } +void ymf278b_device::device_clock_changed() +{ + m_stream->set_sample_rate(clock()/768); + + m_clock = clock(); + m_timer_base = m_clock ? attotime::from_hz(m_clock) * (19 * 36) : attotime::zero; + + // YMF262 related + + int ymf262_clock = clock() / (19/8.0); + ymf262_clock_changed(m_ymf262, ymf262_clock, ymf262_clock / 288); + m_stream_ymf262->set_sample_rate(ymf262_clock / 288); +} + void ymf278b_device::rom_bank_updated() { m_stream->update(); @@ -949,7 +971,7 @@ void ymf278b_device::device_start() m_clock = clock(); m_irq_handler.resolve(); - m_timer_base = attotime::from_hz(m_clock) * (19*36); + m_timer_base = m_clock ? attotime::from_hz(m_clock) * (19*36) : attotime::zero; m_timer_a = timer_alloc(TIMER_A); m_timer_b = timer_alloc(TIMER_B); m_timer_busy = timer_alloc(TIMER_BUSY_CLEAR); |