summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/sound/ymf278b.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/sound/ymf278b.cpp')
-rw-r--r--src/devices/sound/ymf278b.cpp24
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);