diff --git a/src/engine/platform/amiga.cpp b/src/engine/platform/amiga.cpp index 82a21813..c2a9d0f7 100644 --- a/src/engine/platform/amiga.cpp +++ b/src/engine/platform/amiga.cpp @@ -69,9 +69,15 @@ void DivPlatformAmiga::acquire(short* bufL, short* bufR, size_t start, size_t le } else { chan[i].sample=-1; } - /*if (chan[i].freq<124) { - // ??? - }*/ + if (chan[i].freq<124) { + if (++chan[i].busClock>=512) { + unsigned int rAmount=(124-chan[i].freq)*2; + if (chan[i].audPos>=rAmount) { + chan[i].audPos-=rAmount; + } + chan[i].busClock=0; + } + } chan[i].audSub+=MAX(114,chan[i].freq); } } diff --git a/src/engine/platform/amiga.h b/src/engine/platform/amiga.h index 7dba475e..c37a8d65 100644 --- a/src/engine/platform/amiga.h +++ b/src/engine/platform/amiga.h @@ -15,6 +15,7 @@ class DivPlatformAmiga: public DivDispatch { signed char audDat; int sample, wave; unsigned char ins; + int busClock; int note; bool active, insChanged, freqChanged, keyOn, keyOff, inPorta, useWave; signed char vol, outVol; @@ -31,6 +32,7 @@ class DivPlatformAmiga: public DivDispatch { sample(-1), wave(0), ins(-1), + busClock(0), note(0), active(false), insChanged(true),