OPL4: fix use of invalid samples

issue #2217
This commit is contained in:
tildearrow 2025-06-24 03:46:08 -05:00
parent 6d7a354531
commit 801f5c5720

View file

@ -1464,7 +1464,8 @@ void DivPlatformOPL::tick(bool sysTick) {
chan[i].freqL=(chan[i].freq>>chan[i].freqH)&0x3ff; chan[i].freqL=(chan[i].freq>>chan[i].freqH)&0x3ff;
chan[i].freqH=8^chan[i].freqH; chan[i].freqH=8^chan[i].freqH;
ctrl|=(chan[i].active?0x80:0)|(chan[i].damp?0x40:0)|(chan[i].lfoReset?0x20:0)|(chan[i].ch?0x10:0)|(isMuted[i]?8:(chan[i].pan&0xf)); ctrl|=(chan[i].active?0x80:0)|(chan[i].damp?0x40:0)|(chan[i].lfoReset?0x20:0)|(chan[i].ch?0x10:0)|(isMuted[i]?8:(chan[i].pan&0xf));
unsigned int waveNum=chan[i].sample; int waveNum=chan[i].sample;
if (waveNum>=0) {
if (ramSize<=0x200000) { if (ramSize<=0x200000) {
waveNum=CLAMP(waveNum,0,0x7f)|0x180; waveNum=CLAMP(waveNum,0,0x7f)|0x180;
} }
@ -1497,6 +1498,10 @@ void DivPlatformOPL::tick(bool sysTick) {
immWrite(PCM_ADDR_KEY_DAMP_LFORST_CH_PAN+PCM_REG(i),ctrl); immWrite(PCM_ADDR_KEY_DAMP_LFORST_CH_PAN+PCM_REG(i),ctrl);
chan[i].writeCtrl=false; chan[i].writeCtrl=false;
} }
} else {
// cut if we don't have a sample
immWrite(PCM_ADDR_KEY_DAMP_LFORST_CH_PAN+PCM_REG(i),ctrl&~0x80);
}
} }
} else { } else {
if (chan[i].freqChanged) { if (chan[i].freqChanged) {