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
This commit is contained in:
tildearrow 2022-02-12 17:43:30 -05:00
parent dd460ccc42
commit 423d9fa45d
2 changed files with 11 additions and 3 deletions

View file

@ -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);
}
}

View file

@ -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),