OPL: key off after 4-op mode change

somehow fixes issue #2171
This commit is contained in:
tildearrow 2024-09-25 14:24:39 -05:00
parent b2c1f8d919
commit f7412e5234
2 changed files with 35 additions and 55 deletions

View file

@ -1218,6 +1218,15 @@ void DivPlatformOPL::tick(bool sysTick) {
memset(weWillWriteRRLater,0,64*sizeof(bool));
if (update4OpMask) {
update4OpMask=false;
if (oplType==3) {
unsigned char opMask=(int)(chan[0].fourOp)|(chan[2].fourOp<<1)|(chan[4].fourOp<<2)|(chan[6].fourOp<<3)|(chan[8].fourOp<<4)|(chan[10].fourOp<<5);
immWrite(0x104,opMask);
//printf("updating opMask to %.2x\n",opMask);
}
}
for (int i=0; i<melodicChans; i++) {
int ops=(slots[3][i]!=255 && chan[i].state.ops==4 && oplType==3)?4:2;
@ -1242,15 +1251,6 @@ void DivPlatformOPL::tick(bool sysTick) {
}
}
if (update4OpMask) {
update4OpMask=false;
if (oplType==3) {
unsigned char opMask=(int)(chan[0].fourOp)|(chan[2].fourOp<<1)|(chan[4].fourOp<<2)|(chan[6].fourOp<<3)|(chan[8].fourOp<<4)|(chan[10].fourOp<<5);
immWrite(0x104,opMask);
//printf("updating opMask to %.2x\n",opMask);
}
}
// update drums
if (properDrums) {
bool updateDrums=false;