From 89e057a2baafce2b339b12cedd21d940b35c8db0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 24 Dec 2022 18:29:01 -0500 Subject: [PATCH] OPLL: fix possible overflow --- src/engine/platform/opll.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/opll.cpp b/src/engine/platform/opll.cpp index d902e2422..0136123e3 100644 --- a/src/engine/platform/opll.cpp +++ b/src/engine/platform/opll.cpp @@ -248,6 +248,7 @@ void DivPlatformOPLL::tick(bool sysTick) { if (chan[i].freq<0) chan[i].freq=0; if (chan[i].freq>65535) chan[i].freq=65535; int freqt=toFreq(chan[i].freq); + if (freqt>2047) freqt=2047; chan[i].freqL=freqt&0xff; if (i>=6 && properDrums && (i<9 || !noTopHatFreq)) { immWrite(0x10+drumSlot[i],freqt&0xff); @@ -257,7 +258,7 @@ void DivPlatformOPLL::tick(bool sysTick) { immWrite(0x10+i,freqt&0xff); } } - chan[i].freqH=freqt>>8; + chan[i].freqH=(freqt>>8)&15; } if (chan[i].keyOn && i>=6 && properDrums) { if (!isMuted[i]) {