From 423d9fa45d07a3b24f7cffc4ee91aa7c5a068e59 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 12 Feb 2022 17:43:30 -0500 Subject: [PATCH] Amiga: early bus limits emulation it appears that if the period is lower than 124, the positions start to desync this is emulated by UAE, but i am not sure whether this happens on a real machine and this isn't emulated properly here either --- src/engine/platform/amiga.cpp | 12 +++++++++--- src/engine/platform/amiga.h | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-) 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),