From 6d5b313973a25bc5296dd38ee044326fc7bae384 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 18 Aug 2023 04:10:16 -0500 Subject: [PATCH] now the other OPNs --- src/engine/platform/ym2203ext.cpp | 16 +++++++++------- src/engine/platform/ym2608ext.cpp | 16 +++++++++------- src/engine/platform/ym2610bext.cpp | 16 +++++++++------- src/engine/platform/ym2610ext.cpp | 16 +++++++++------- 4 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index 31294bd4..06243110 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -606,13 +606,15 @@ void DivPlatformYM2203Ext::muteChannel(int ch, bool mute) { DivPlatformYM2203::muteChannel(extChanOffs,IS_EXTCH_MUTED); if (extMode) { - int ordch=orderedOps[ch-2]; - unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; - DivInstrumentFM::Operator op=chan[2].state.op[ordch]; - if (isOpMuted[ch-2] || !op.enable) { - rWrite(baseAddr+0x40,127); - } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-2].outVol&0x7f,127)); + for (int i=0; i<4; i++) { + int ordch=orderedOps[i]; + unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; + DivInstrumentFM::Operator op=chan[2].state.op[ordch]; + if (isOpMuted[i] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[i].outVol&0x7f,127)); + } } } } diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index 860c370f..e09afa18 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -641,13 +641,15 @@ void DivPlatformYM2608Ext::muteChannel(int ch, bool mute) { DivPlatformYM2608::muteChannel(extChanOffs,IS_EXTCH_MUTED); if (extMode) { - int ordch=orderedOps[ch-2]; - unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; - DivInstrumentFM::Operator op=chan[2].state.op[ordch]; - if (isOpMuted[ch-2] || !op.enable) { - rWrite(baseAddr+0x40,127); - } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-2].outVol&0x7f,127)); + for (int i=0; i<4; i++) { + int ordch=orderedOps[i]; + unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; + DivInstrumentFM::Operator op=chan[2].state.op[ordch]; + if (isOpMuted[i] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[i].outVol&0x7f,127)); + } } rWrite(chanOffs[2]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch-2].pan<<6))|(chan[2].state.fms&7)|((chan[2].state.ams&3)<<4)); diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index ff2a398f..747f3f60 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -636,13 +636,15 @@ void DivPlatformYM2610BExt::muteChannel(int ch, bool mute) { DivPlatformYM2610B::muteChannel(extChanOffs,IS_EXTCH_MUTED); if (extMode) { - int ordch=orderedOps[ch-extChanOffs]; - unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch]; - DivInstrumentFM::Operator op=chan[extChanOffs].state.op[ordch]; - if (isOpMuted[ch-extChanOffs] || !op.enable) { - rWrite(baseAddr+0x40,127); - } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-extChanOffs].outVol&0x7f,127)); + for (int i=0; i<4; i++) { + int ordch=orderedOps[i]; + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch]; + DivInstrumentFM::Operator op=chan[extChanOffs].state.op[ordch]; + if (isOpMuted[i] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[i].outVol&0x7f,127)); + } } rWrite(chanOffs[extChanOffs]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch-extChanOffs].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index 65124f47..21f38048 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -636,13 +636,15 @@ void DivPlatformYM2610Ext::muteChannel(int ch, bool mute) { DivPlatformYM2610::muteChannel(extChanOffs,IS_EXTCH_MUTED); if (extMode) { - int ordch=orderedOps[ch-extChanOffs]; - unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch]; - DivInstrumentFM::Operator op=chan[extChanOffs].state.op[ordch]; - if (isOpMuted[ch-extChanOffs] || !op.enable) { - rWrite(baseAddr+0x40,127); - } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch-extChanOffs].outVol&0x7f,127)); + for (int i=0; i<4; i++) { + int ordch=orderedOps[i]; + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch]; + DivInstrumentFM::Operator op=chan[extChanOffs].state.op[ordch]; + if (isOpMuted[i] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[i].outVol&0x7f,127)); + } } rWrite(chanOffs[extChanOffs]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch-extChanOffs].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4));