From bb4de6fcb0c86ecab3e5a4e937a2b6ed584de9c2 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 6 Sep 2023 18:39:56 -0500 Subject: [PATCH] OPL/OPNA/OPNB: fix ADPCM-B freq not being clamped --- src/engine/platform/opl.cpp | 2 ++ src/engine/platform/ym2608.cpp | 2 ++ src/engine/platform/ym2610.cpp | 2 ++ src/engine/platform/ym2610b.cpp | 2 ++ 4 files changed, 8 insertions(+) diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index c8c5c944c..dff366d32 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -549,6 +549,8 @@ void DivPlatformOPL::tick(bool sysTick) { chan[adpcmChan].freq=5461; // 4KHz } } + if (chan[adpcmChan].freq<0) chan[adpcmChan].freq=0; + if (chan[adpcmChan].freq>65535) chan[adpcmChan].freq=65535; immWrite(16,chan[adpcmChan].freq&0xff); immWrite(17,(chan[adpcmChan].freq>>8)&0xff); if (chan[adpcmChan].keyOn || chan[adpcmChan].keyOff) { diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 93c09fd67..dcab9dd5f 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -783,6 +783,8 @@ void DivPlatformYM2608::tick(bool sysTick) { chan[15].freq=0; } } + if (chan[adpcmBChanOffs].freq<0) chan[adpcmBChanOffs].freq=0; + if (chan[adpcmBChanOffs].freq>65535) chan[adpcmBChanOffs].freq=65535; immWrite(0x109,chan[15].freq&0xff); immWrite(0x10a,(chan[15].freq>>8)&0xff); hardResetElapsed+=2; diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index b7dcdb231..8b9295d9f 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -717,6 +717,8 @@ void DivPlatformYM2610::tick(bool sysTick) { } else { chan[adpcmBChanOffs].freq=0; } + if (chan[adpcmBChanOffs].freq<0) chan[adpcmBChanOffs].freq=0; + if (chan[adpcmBChanOffs].freq>65535) chan[adpcmBChanOffs].freq=65535; immWrite(0x19,chan[adpcmBChanOffs].freq&0xff); immWrite(0x1a,(chan[adpcmBChanOffs].freq>>8)&0xff); hardResetElapsed+=2; diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index fe5dbb581..7369265f9 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -784,6 +784,8 @@ void DivPlatformYM2610B::tick(bool sysTick) { } else { chan[adpcmBChanOffs].freq=0; } + if (chan[adpcmBChanOffs].freq<0) chan[adpcmBChanOffs].freq=0; + if (chan[adpcmBChanOffs].freq>65535) chan[adpcmBChanOffs].freq=65535; immWrite(0x19,chan[adpcmBChanOffs].freq&0xff); immWrite(0x1a,(chan[adpcmBChanOffs].freq>>8)&0xff); hardResetElapsed+=2;