diff --git a/src/engine/platform/amiga.cpp b/src/engine/platform/amiga.cpp index 6cc6ddd36..fe44d50a7 100644 --- a/src/engine/platform/amiga.cpp +++ b/src/engine/platform/amiga.cpp @@ -116,7 +116,7 @@ int DivPlatformAmiga::dispatch(DivCommand c) { chan[c.chan].std.init(NULL); break; case DIV_CMD_INSTRUMENT: - if (chan[c.chan].ins!=c.value) { + if (chan[c.chan].ins!=c.value || c.value2==1) { chan[c.chan].ins=c.value; } break; diff --git a/src/engine/platform/arcade.cpp b/src/engine/platform/arcade.cpp index 279e31aab..ed37414bc 100644 --- a/src/engine/platform/arcade.cpp +++ b/src/engine/platform/arcade.cpp @@ -286,7 +286,7 @@ int DivPlatformArcade::dispatch(DivCommand c) { break; } case DIV_CMD_INSTRUMENT: - if (chan[c.chan].ins!=c.value) { + if (chan[c.chan].ins!=c.value || c.value2==1) { chan[c.chan].insChanged=true; } chan[c.chan].ins=c.value; diff --git a/src/engine/platform/ay.cpp b/src/engine/platform/ay.cpp index d309bf877..23de4a54b 100644 --- a/src/engine/platform/ay.cpp +++ b/src/engine/platform/ay.cpp @@ -157,7 +157,7 @@ int DivPlatformAY8910::dispatch(DivCommand c) { break; } case DIV_CMD_INSTRUMENT: - if (chan[c.chan].ins!=c.value) { + if (chan[c.chan].ins!=c.value || c.value2==1) { chan[c.chan].insChanged=true; } chan[c.chan].ins=c.value; diff --git a/src/engine/platform/ay8930.cpp b/src/engine/platform/ay8930.cpp index a1e254d23..b59f71de5 100644 --- a/src/engine/platform/ay8930.cpp +++ b/src/engine/platform/ay8930.cpp @@ -184,7 +184,7 @@ int DivPlatformAY8930::dispatch(DivCommand c) { break; } case DIV_CMD_INSTRUMENT: - if (chan[c.chan].ins!=c.value) { + if (chan[c.chan].ins!=c.value || c.value2==1) { chan[c.chan].insChanged=true; } chan[c.chan].ins=c.value; diff --git a/src/engine/platform/c64.cpp b/src/engine/platform/c64.cpp index 8b8a5e2d3..e0966d88d 100644 --- a/src/engine/platform/c64.cpp +++ b/src/engine/platform/c64.cpp @@ -143,7 +143,7 @@ int DivPlatformC64::dispatch(DivCommand c) { //chan[c.chan].std.init(NULL); break; case DIV_CMD_INSTRUMENT: - if (chan[c.chan].ins!=c.value) { + if (chan[c.chan].ins!=c.value || c.value2==1) { chan[c.chan].insChanged=true; chan[c.chan].ins=c.value; } diff --git a/src/engine/platform/gb.cpp b/src/engine/platform/gb.cpp index 5d07868db..b66cf6a60 100644 --- a/src/engine/platform/gb.cpp +++ b/src/engine/platform/gb.cpp @@ -193,7 +193,7 @@ int DivPlatformGB::dispatch(DivCommand c) { chan[c.chan].std.init(NULL); break; case DIV_CMD_INSTRUMENT: - if (chan[c.chan].ins!=c.value) { + if (chan[c.chan].ins!=c.value || c.value2==1) { chan[c.chan].ins=c.value; if (c.chan!=2) { chan[c.chan].vol=parent->getIns(chan[c.chan].ins)->gb.envVol; diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 1e1a58c6f..383f457f4 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -241,7 +241,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { break; } case DIV_CMD_INSTRUMENT: - if (chan[c.chan].ins!=c.value) { + if (chan[c.chan].ins!=c.value || c.value2==1) { chan[c.chan].insChanged=true; } chan[c.chan].ins=c.value; diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index 792b0c7ee..c20bebdec 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -74,7 +74,7 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) { break; } case DIV_CMD_INSTRUMENT: - if (opChan[ch].ins!=c.value) { + if (opChan[ch].ins!=c.value || c.value2==1) { opChan[ch].insChanged=true; } opChan[ch].ins=c.value; diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 5a37ce1df..40c8d210c 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -192,7 +192,7 @@ int DivPlatformNES::dispatch(DivCommand c) { chan[c.chan].std.init(NULL); break; case DIV_CMD_INSTRUMENT: - if (chan[c.chan].ins!=c.value) { + if (chan[c.chan].ins!=c.value || c.value2==1) { chan[c.chan].ins=c.value; } break; diff --git a/src/engine/platform/pce.cpp b/src/engine/platform/pce.cpp index 36dfb654b..19df399ab 100644 --- a/src/engine/platform/pce.cpp +++ b/src/engine/platform/pce.cpp @@ -173,7 +173,7 @@ int DivPlatformPCE::dispatch(DivCommand c) { chan[c.chan].std.init(NULL); break; case DIV_CMD_INSTRUMENT: - if (chan[c.chan].ins!=c.value) { + if (chan[c.chan].ins!=c.value || c.value2==1) { chan[c.chan].ins=c.value; } break; diff --git a/src/engine/platform/saa.cpp b/src/engine/platform/saa.cpp index 60a639ff1..e853e9556 100644 --- a/src/engine/platform/saa.cpp +++ b/src/engine/platform/saa.cpp @@ -158,7 +158,7 @@ int DivPlatformSAA1099::dispatch(DivCommand c) { break; } case DIV_CMD_INSTRUMENT: - if (chan[c.chan].ins!=c.value) { + if (chan[c.chan].ins!=c.value || c.value2==1) { chan[c.chan].insChanged=true; } chan[c.chan].ins=c.value; diff --git a/src/engine/platform/tia.cpp b/src/engine/platform/tia.cpp index ca448c8fe..9bab0b4e0 100644 --- a/src/engine/platform/tia.cpp +++ b/src/engine/platform/tia.cpp @@ -145,7 +145,7 @@ int DivPlatformTIA::dispatch(DivCommand c) { break; } case DIV_CMD_INSTRUMENT: - if (chan[c.chan].ins!=c.value) { + if (chan[c.chan].ins!=c.value || c.value2==1) { chan[c.chan].insChanged=true; } chan[c.chan].ins=c.value; diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index 90326fc59..1258a409c 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -309,7 +309,7 @@ int DivPlatformYM2610::dispatch(DivCommand c) { break; } case DIV_CMD_INSTRUMENT: - if (chan[c.chan].ins!=c.value) { + if (chan[c.chan].ins!=c.value || c.value2==1) { chan[c.chan].insChanged=true; } chan[c.chan].ins=c.value; diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index ad1466313..6f307a91c 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -74,7 +74,7 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { break; } case DIV_CMD_INSTRUMENT: - if (opChan[ch].ins!=c.value) { + if (opChan[ch].ins!=c.value || c.value2==1) { opChan[ch].insChanged=true; } opChan[ch].ins=c.value; diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 18c9535b3..bb2f5c318 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -755,7 +755,7 @@ bool DivEngine::nextTick(bool noAccum) { while (!pendingNotes.empty()) { DivNoteEvent& note=pendingNotes.front(); if (note.on) { - dispatchCmd(DivCommand(DIV_CMD_INSTRUMENT,note.channel,note.ins)); + dispatchCmd(DivCommand(DIV_CMD_INSTRUMENT,note.channel,note.ins,1)); dispatchCmd(DivCommand(DIV_CMD_NOTE_ON,note.channel,note.note)); } else { dispatchCmd(DivCommand(DIV_CMD_NOTE_OFF,note.channel));