OPNA: proper ADPCM muting

This commit is contained in:
tildearrow 2022-05-14 01:05:05 -05:00
parent 031a0fc133
commit ae5dcd3746

View file

@ -817,7 +817,9 @@ int DivPlatformYM2608::dispatch(DivCommand c) {
} }
if (c.chan>8) { // RSS if (c.chan>8) { // RSS
if (skipRegisterWrites) break; if (skipRegisterWrites) break;
writeRSSOn|=(1<<(c.chan-9)); if (!isMuted[c.chan]) {
writeRSSOn|=(1<<(c.chan-9));
}
immWrite(0x18+(c.chan-9),isMuted[c.chan]?0:((chan[c.chan].pan<<6)|chan[c.chan].vol)); immWrite(0x18+(c.chan-9),isMuted[c.chan]?0:((chan[c.chan].pan<<6)|chan[c.chan].vol));
break; break;
} }
@ -942,7 +944,7 @@ int DivPlatformYM2608::dispatch(DivCommand c) {
chan[c.chan].pan=(c.value2>0)|((c.value>0)<<1); chan[c.chan].pan=(c.value2>0)|((c.value>0)<<1);
} }
if (c.chan>14) { if (c.chan>14) {
immWrite(0x101,isMuted[c.chan]?0:(chan[c.chan].pan<<6)); immWrite(0x101,(isMuted[c.chan]?0:(chan[c.chan].pan<<6))|2);
break; break;
} }
if (c.chan>8) { if (c.chan>8) {
@ -1246,7 +1248,7 @@ int DivPlatformYM2608::dispatch(DivCommand c) {
void DivPlatformYM2608::muteChannel(int ch, bool mute) { void DivPlatformYM2608::muteChannel(int ch, bool mute) {
isMuted[ch]=mute; isMuted[ch]=mute;
if (ch>14) { // ADPCM-B if (ch>14) { // ADPCM-B
//immWrite(0x11,isMuted[ch]?0:(chan[ch].pan<<6)); immWrite(0x101,(isMuted[ch]?0:(chan[ch].pan<<6))|2);
} }
if (ch>8) { // ADPCM-A if (ch>8) { // ADPCM-A
immWrite(0x18+(ch-9),isMuted[ch]?0:((chan[ch].pan<<6)|chan[ch].vol)); immWrite(0x18+(ch-9),isMuted[ch]?0:((chan[ch].pan<<6)|chan[ch].vol));