From 3b37a5334a19478adac1f4b354bd08eea36f2b50 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 19 Aug 2025 04:23:58 -0500 Subject: [PATCH] OPNA/B: fix SSG DAC/TFX not working with LLE core --- src/engine/platform/ym2608.cpp | 10 ++++++++++ src/engine/platform/ym2610.cpp | 10 ++++++++++ src/engine/platform/ym2610b.cpp | 10 ++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index f412b56b8..3553ff5ba 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -531,6 +531,16 @@ void DivPlatformYM2608::acquire_lle(short** buf, size_t len) { signed char subCycle=0; unsigned char subSubCycle=0; + // AY -> OPN + ay->runDAC(); + ay->runTFX(rate); + ay->flushWrites(); + for (DivRegWrite& i: ay->getRegisterWrites()) { + if (i.addr>15) continue; + immWrite(i.addr&15,i.val); + } + ay->getRegisterWrites().clear(); + for (int i=0; i<6; i++) { fmOut[i]=0; } diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index 0255a4fd6..91518bd55 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -465,6 +465,16 @@ void DivPlatformYM2610::acquire_lle(short** buf, size_t len) { signed char subCycle=0; unsigned char subSubCycle=0; + // AY -> OPN + ay->runDAC(); + ay->runTFX(rate); + ay->flushWrites(); + for (DivRegWrite& i: ay->getRegisterWrites()) { + if (i.addr>15) continue; + immWrite(i.addr&15,i.val); + } + ay->getRegisterWrites().clear(); + for (int i=0; i<6; i++) { fmOut[i]=0; } diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index 89e08ec1b..99a406a7f 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -533,6 +533,16 @@ void DivPlatformYM2610B::acquire_lle(short** buf, size_t len) { signed char subCycle=0; unsigned char subSubCycle=0; + // AY -> OPN + ay->runDAC(); + ay->runTFX(rate); + ay->flushWrites(); + for (DivRegWrite& i: ay->getRegisterWrites()) { + if (i.addr>15) continue; + immWrite(i.addr&15,i.val); + } + ay->getRegisterWrites().clear(); + for (int i=0; i<6; i++) { fmOut[i]=0; }