From 7e7a5a8e3037cdf0415a1db3adb512ad04a4fc9e Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 11 Aug 2022 01:34:18 -0500 Subject: [PATCH] Game Boy: software envelopes, part 4 fixes --- src/engine/platform/gb.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/engine/platform/gb.cpp b/src/engine/platform/gb.cpp index 2fad226ae..3797d5bca 100644 --- a/src/engine/platform/gb.cpp +++ b/src/engine/platform/gb.cpp @@ -171,13 +171,17 @@ void DivPlatformGB::tick(bool sysTick) { chan[i].outVol=VOL_SCALE_LINEAR(chan[i].vol&15,MIN(15,chan[i].std.vol.val),15); if (chan[i].outVol<0) chan[i].outVol=0; - chan[i].envLen=0; - chan[i].envDir=1; - chan[i].envVol=chan[i].outVol; - chan[i].soundLen=64; + if (i==2) { + rWrite(16+i*5+2,gbVolMap[chan[i].outVol]); + } else { + chan[i].envLen=0; + chan[i].envDir=1; + chan[i].envVol=chan[i].outVol; + chan[i].soundLen=64; - if (!chan[i].keyOn) chan[i].killIt=true; - chan[i].freqChanged=true; + if (!chan[i].keyOn) chan[i].killIt=true; + chan[i].freqChanged=true; + } } } if (chan[i].std.arp.had) { @@ -452,6 +456,10 @@ int DivPlatformGB::dispatch(DivCommand c) { } if (!chan[c.chan].softEnv) { chan[c.chan].envVol=chan[c.chan].vol; + } else if (c.chan!=2) { + chan[c.chan].envVol=chan[c.chan].vol; + if (!chan[c.chan].keyOn) chan[c.chan].killIt=true; + chan[c.chan].freqChanged=true; } break; case DIV_CMD_GET_VOLUME: