Game Boy: software envelopes, part 4

fixes
This commit is contained in:
tildearrow 2022-08-11 01:34:18 -05:00
parent d30f9bc8a0
commit 7e7a5a8e30
1 changed files with 14 additions and 6 deletions

View File

@ -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); 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; if (chan[i].outVol<0) chan[i].outVol=0;
chan[i].envLen=0; if (i==2) {
chan[i].envDir=1; rWrite(16+i*5+2,gbVolMap[chan[i].outVol]);
chan[i].envVol=chan[i].outVol; } else {
chan[i].soundLen=64; 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; if (!chan[i].keyOn) chan[i].killIt=true;
chan[i].freqChanged=true; chan[i].freqChanged=true;
}
} }
} }
if (chan[i].std.arp.had) { if (chan[i].std.arp.had) {
@ -452,6 +456,10 @@ int DivPlatformGB::dispatch(DivCommand c) {
} }
if (!chan[c.chan].softEnv) { if (!chan[c.chan].softEnv) {
chan[c.chan].envVol=chan[c.chan].vol; 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; break;
case DIV_CMD_GET_VOLUME: case DIV_CMD_GET_VOLUME: