From b24c5726328ec66e162bbe43dbbc59235c5f559d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 15 Feb 2022 15:19:36 -0500 Subject: [PATCH] prevent division by zero, part 1 --- src/engine/engine.cpp | 2 +- src/engine/platform/genesis.cpp | 5 +++-- src/engine/platform/pce.cpp | 2 +- src/engine/platform/tia.cpp | 1 + 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 9129c874..fab98860 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -4017,7 +4017,7 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop) { } } if (nextToTouch>=0) { - double waitTime=totalWait+(loopTimer[nextToTouch]*(44100.0/loopFreq[nextToTouch])); + double waitTime=totalWait+(loopTimer[nextToTouch]*(44100.0/MIN(1,loopFreq[nextToTouch]))); if (waitTime>0) { w->writeC(0x61); w->writeS(waitTime); diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index e580e2cc..945ec60b 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -385,7 +385,8 @@ void DivPlatformGenesis::tick() { off=8363.0/(double)s->centerRate; } } - dacRate=(1280000*1.25*off)/chan[i].baseFreq; + dacRate=(1280000*1.25*off)/MIN(1,chan[i].baseFreq); + if (dacRate<1) dacRate=1; if (dumpWrites) addWrite(0xffff0001,1280000/dacRate); } chan[i].freqChanged=false; @@ -514,7 +515,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { } dacPos=0; dacPeriod=0; - dacRate=1280000/parent->song.sample[dacSample]->rate; + dacRate=1280000/MIN(1,parent->song.sample[dacSample]->rate); if (dumpWrites) addWrite(0xffff0001,parent->song.sample[dacSample]->rate); chan[c.chan].furnaceDac=false; } diff --git a/src/engine/platform/pce.cpp b/src/engine/platform/pce.cpp index df11d6da..301f8509 100644 --- a/src/engine/platform/pce.cpp +++ b/src/engine/platform/pce.cpp @@ -209,7 +209,7 @@ void DivPlatformPCE::tick() { off=8363.0/(double)s->centerRate; } } - chan[i].dacRate=((double)chipClock/2)/(off*chan[i].freq); + chan[i].dacRate=((double)chipClock/2)/MIN(1,off*chan[i].freq); if (dumpWrites) addWrite(0xffff0001+(i<<8),chan[i].dacRate); } if (chan[i].freq>4095) chan[i].freq=4095; diff --git a/src/engine/platform/tia.cpp b/src/engine/platform/tia.cpp index 9f97a7e5..f2c23310 100644 --- a/src/engine/platform/tia.cpp +++ b/src/engine/platform/tia.cpp @@ -57,6 +57,7 @@ unsigned char DivPlatformTIA::dealWithFreq(unsigned char shape, int base, int pi } int bp=base+pitch; double mult=0.25*(parent->song.tuning*0.0625)*pow(2.0,double(768+bp)/(256.0*12.0)); + if (mult<0.5) mult=0.5; switch (shape) { case 1: // buzzy return ceil(31400/(30.6*mult))-1;