diff --git a/src/engine/platform/amiga.cpp b/src/engine/platform/amiga.cpp index b7fce6de..2fab039a 100644 --- a/src/engine/platform/amiga.cpp +++ b/src/engine/platform/amiga.cpp @@ -53,7 +53,7 @@ void DivPlatformAmiga::tick() { for (int i=0; i<4; i++) { chan[i].std.next(); if (chan[i].std.hadVol) { - chan[i].outVol=((chan[i].vol%65)*chan[i].std.vol)>>6; + chan[i].outVol=((chan[i].vol%65)*MIN(64,chan[i].std.vol))>>6; } if (chan[i].std.hadArp) { if (!chan[i].inPorta) { @@ -263,4 +263,4 @@ int DivPlatformAmiga::init(DivEngine* p, int channels, int sugRate, unsigned int } void DivPlatformAmiga::quit() { -} \ No newline at end of file +} diff --git a/src/engine/platform/arcade.cpp b/src/engine/platform/arcade.cpp index 52a1d0a5..6452aeef 100644 --- a/src/engine/platform/arcade.cpp +++ b/src/engine/platform/arcade.cpp @@ -187,7 +187,7 @@ void DivPlatformArcade::tick() { chan[i].std.next(); if (chan[i].std.hadVol) { - chan[i].outVol=(chan[i].vol*chan[i].std.vol)/127; + chan[i].outVol=(chan[i].vol*MIN(127,chan[i].std.vol))/127; for (int j=0; j<4; j++) { unsigned short baseAddr=chanOffs[i]|opOffs[j]; DivInstrumentFM::Operator& op=chan[i].state.op[j]; diff --git a/src/engine/platform/ay.cpp b/src/engine/platform/ay.cpp index 2847fd06..f348c392 100644 --- a/src/engine/platform/ay.cpp +++ b/src/engine/platform/ay.cpp @@ -47,7 +47,7 @@ void DivPlatformAY8910::tick() { for (int i=0; i<3; i++) { chan[i].std.next(); if (chan[i].std.hadVol) { - chan[i].outVol=chan[i].std.vol-(15-(chan[i].vol&15)); + chan[i].outVol=MIN(15,chan[i].std.vol)-(15-(chan[i].vol&15)); if (chan[i].outVol<0) chan[i].outVol=0; if (isMuted[i]) { rWrite(0x08+i,0); diff --git a/src/engine/platform/ay8930.cpp b/src/engine/platform/ay8930.cpp index dd3fbe96..f746334a 100644 --- a/src/engine/platform/ay8930.cpp +++ b/src/engine/platform/ay8930.cpp @@ -63,7 +63,7 @@ void DivPlatformAY8930::tick() { for (int i=0; i<3; i++) { chan[i].std.next(); if (chan[i].std.hadVol) { - chan[i].outVol=chan[i].std.vol-(31-(chan[i].vol&31)); + chan[i].outVol=MIN(31,chan[i].std.vol)-(31-(chan[i].vol&31)); if (chan[i].outVol<0) chan[i].outVol=0; if (isMuted[i]) { rWrite(0x08+i,0); diff --git a/src/engine/platform/c64.cpp b/src/engine/platform/c64.cpp index 4565c9b6..679cb269 100644 --- a/src/engine/platform/c64.cpp +++ b/src/engine/platform/c64.cpp @@ -27,7 +27,7 @@ void DivPlatformC64::tick() { DivInstrument* ins=parent->getIns(chan[i].ins); if (ins->c64.volIsCutoff) { if (ins->c64.filterIsAbs) { - filtCut=chan[i].std.vol; + filtCut=MIN(2047,chan[i].std.vol); } else { filtCut-=((signed char)chan[i].std.vol-18)*7; if (filtCut>2047) filtCut=2047; @@ -35,7 +35,7 @@ void DivPlatformC64::tick() { } updateFilter(); } else { - vol=chan[i].std.vol; + vol=MIN(15,chan[i].std.vol); updateFilter(); } } diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index a739573b..800c5d22 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -91,7 +91,7 @@ void DivPlatformGenesis::tick() { chan[i].std.next(); if (chan[i].std.hadVol) { - chan[i].outVol=(chan[i].vol*chan[i].std.vol)/127; + chan[i].outVol=(chan[i].vol*MIN(127,chan[i].std.vol))/127; for (int j=0; j<4; j++) { unsigned short baseAddr=chanOffs[i]|opOffs[j]; DivInstrumentFM::Operator& op=chan[i].state.op[j]; diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 6b8ef535..796c4f9e 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -75,7 +75,7 @@ void DivPlatformNES::tick() { chan[i].std.next(); if (chan[i].std.hadVol) { // ok, why are the volumes like that? - chan[i].outVol=chan[i].std.vol-(15-(chan[i].vol&15)); + chan[i].outVol=MIN(15,chan[i].std.vol)-(15-(chan[i].vol&15)); if (chan[i].outVol<0) chan[i].outVol=0; if (i==2) { // triangle rWrite(0x4000+i*4,(chan[i].outVol==0)?0:255); diff --git a/src/engine/platform/pce.cpp b/src/engine/platform/pce.cpp index eb2c39ed..5ca23402 100644 --- a/src/engine/platform/pce.cpp +++ b/src/engine/platform/pce.cpp @@ -99,7 +99,7 @@ void DivPlatformPCE::tick() { for (int i=0; i<6; i++) { chan[i].std.next(); if (chan[i].std.hadVol) { - chan[i].outVol=((chan[i].vol&31)*chan[i].std.vol)>>5; + chan[i].outVol=((chan[i].vol&31)*MIN(31,chan[i].std.vol))>>5; if (chan[i].furnaceDac) { // ignore for now } else { diff --git a/src/engine/platform/saa.cpp b/src/engine/platform/saa.cpp index c37fe083..b2b3a04e 100644 --- a/src/engine/platform/saa.cpp +++ b/src/engine/platform/saa.cpp @@ -37,7 +37,7 @@ void DivPlatformSAA1099::tick() { for (int i=0; i<6; i++) { chan[i].std.next(); if (chan[i].std.hadVol) { - chan[i].outVol=chan[i].std.vol-(15-(chan[i].vol&15)); + chan[i].outVol=MIN(15,chan[i].std.vol)-(15-(chan[i].vol&15)); if (chan[i].outVol<0) chan[i].outVol=0; if (isMuted[i]) { rWrite(i,0); diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index 1ab490e0..6161f726 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -20,7 +20,7 @@ void DivPlatformSMS::tick() { for (int i=0; i<4; i++) { chan[i].std.next(); if (chan[i].std.hadVol) { - chan[i].outVol=((chan[i].vol&15)*chan[i].std.vol)>>4; + chan[i].outVol=((chan[i].vol&15)*MIN(15,chan[i].std.vol))>>4; rWrite(0x90|(i<<5)|(isMuted[i]?15:(15-(chan[i].outVol&15)))); } if (chan[i].std.hadArp) { diff --git a/src/engine/platform/tia.cpp b/src/engine/platform/tia.cpp index ea69978f..ece5577f 100644 --- a/src/engine/platform/tia.cpp +++ b/src/engine/platform/tia.cpp @@ -45,7 +45,7 @@ void DivPlatformTIA::tick() { for (int i=0; i<2; i++) { chan[i].std.next(); if (chan[i].std.hadVol) { - chan[i].outVol=chan[i].std.vol-(15-(chan[i].vol&15)); + chan[i].outVol=MIN(15,chan[i].std.vol)-(15-(chan[i].vol&15)); if (chan[i].outVol<0) chan[i].outVol=0; if (isMuted[i]) { rWrite(0x19+i,0); diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index 9f4bba5d..eac1c908 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -48,7 +48,7 @@ void DivPlatformYM2610::tick() { for (int i=4; i<7; i++) { chan[i].std.next(); if (chan[i].std.hadVol) { - chan[i].outVol=chan[i].std.vol-(15-(chan[i].vol&15)); + chan[i].outVol=MIN(15,chan[i].std.vol)-(15-(chan[i].vol&15)); if (chan[i].outVol<0) chan[i].outVol=0; if (isMuted[i]) { rWrite(0x04+i,0); @@ -152,7 +152,7 @@ void DivPlatformYM2610::tick() { chan[i].std.next(); if (chan[i].std.hadVol) { - chan[i].outVol=(chan[i].vol*chan[i].std.vol)/127; + chan[i].outVol=(chan[i].vol*MIN(127,chan[i].std.vol))/127; for (int j=0; j<4; j++) { unsigned short baseAddr=chanOffs[i]|opOffs[j]; DivInstrumentFM::Operator& op=chan[i].state.op[j]; @@ -810,4 +810,4 @@ void DivPlatformYM2610::quit() { } DivPlatformYM2610::~DivPlatformYM2610() { -} \ No newline at end of file +}