diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 6abc2c343..e0f23d5f9 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -160,7 +160,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { unsigned short baseAddr=chanOffs[c.chan]|opOffs[i]; DivInstrumentFM::Operator op=ins->fm.op[i]; if (isOutput[ins->fm.alg][i]) { - rWrite(baseAddr+0x40,127-(((127-op.tl)*chan[c.chan].vol)/127)); + rWrite(baseAddr+0x40,127-(((127-op.tl)*(chan[c.chan].vol&0x7f))/127)); } else { if (chan[c.chan].insChanged) { rWrite(baseAddr+0x40,op.tl); @@ -198,7 +198,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { unsigned short baseAddr=chanOffs[c.chan]|opOffs[i]; DivInstrumentFM::Operator op=ins->fm.op[i]; if (isOutput[ins->fm.alg][i]) { - rWrite(baseAddr+0x40,127-(((127-op.tl)*chan[c.chan].vol)/127)); + rWrite(baseAddr+0x40,127-(((127-op.tl)*(chan[c.chan].vol&0x7f))/127)); } else { rWrite(baseAddr+0x40,op.tl); } @@ -279,7 +279,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { unsigned short baseAddr=chanOffs[c.chan]|opOffs[orderedOps[c.value]]; DivInstrument* ins=parent->getIns(chan[c.chan].ins); if (isOutput[ins->fm.alg][c.value]) { - rWrite(baseAddr+0x40,127-(((127-c.value2)*chan[c.chan].vol)/127)); + rWrite(baseAddr+0x40,127-(((127-c.value2)*(chan[c.chan].vol&0x7f))/127)); } else { rWrite(baseAddr+0x40,c.value2); } diff --git a/src/engine/platform/genesis.h b/src/engine/platform/genesis.h index e0d5a9f79..8f486e180 100644 --- a/src/engine/platform/genesis.h +++ b/src/engine/platform/genesis.h @@ -14,7 +14,7 @@ class DivPlatformGenesis: public DivDispatch { unsigned char ins; signed char konCycles; bool active, insChanged, freqChanged, keyOn, keyOff; - signed char vol; + int vol; unsigned char pan; Channel(): freqH(0), freqL(0), freq(0), baseFreq(0), pitch(0), ins(-1), active(false), insChanged(true), freqChanged(false), keyOn(false), keyOff(false), vol(0), pan(3) {} };