From d7c5fceac49a956d685001a8ea01c201c8feee57 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 21 Jun 2025 17:46:27 -0500 Subject: [PATCH] OPL4: fix PCM chan osc on ymfm for real issue #2566 --- src/engine/platform/opl.cpp | 2 ++ src/engine/platform/sound/ymfm/ymfm_pcm.cpp | 10 ++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index d28bdaa28..13eee6a39 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -724,6 +724,8 @@ void DivPlatformOPL::acquire_ymfm4(short** buf, size_t len) { unsigned char oscOffs=i+pcmChanOffs; int chOut=pcmChan[i]->debug_output(0); chOut+=pcmChan[i]->debug_output(1); + chOut+=pcmChan[i]->debug_output(2); + chOut+=pcmChan[i]->debug_output(3); oscBuf[oscOffs]->putSample(h,CLAMP(chOut<<1,-32768,32767)); } } diff --git a/src/engine/platform/sound/ymfm/ymfm_pcm.cpp b/src/engine/platform/sound/ymfm/ymfm_pcm.cpp index 30fbe2396..3025c2b35 100644 --- a/src/engine/platform/sound/ymfm/ymfm_pcm.cpp +++ b/src/engine/platform/sound/ymfm/ymfm_pcm.cpp @@ -338,11 +338,13 @@ void pcm_channel::output(output_data &output) const // fetch current sample and add int16_t sample = fetch_sample(); + int32_t outl = (lvol * sample) >> 15; + int32_t outr = (rvol * sample) >> 15; uint32_t outnum = m_regs.ch_output_channel(m_choffs) * 2; - output.data[outnum + 0] += (lvol * sample) >> 15; - output.data[outnum + 1] += (rvol * sample) >> 15; - m_output[outnum + 0] = output.data[outnum + 0]; - m_output[outnum + 1] = output.data[outnum + 1]; + output.data[outnum + 0] += outl; + output.data[outnum + 1] += outr; + m_output[outnum + 0] = outl; + m_output[outnum + 1] = outr; }