games/gba: very subtle timer bug fixed

This commit is contained in:
aiju 2015-03-28 10:20:52 +01:00
parent 177cbace73
commit 5a34ad16cd
3 changed files with 7 additions and 5 deletions

View file

@ -209,7 +209,7 @@ sampletick(void *)
s16int s[2]; s16int s[2];
int i; int i;
addevent(&evsamp, sratediv + evsamp.time); addevent(&evsamp, sratediv);
if(--envctr == 0){ if(--envctr == 0){
envctr = envrel; envctr = envrel;

View file

@ -185,9 +185,11 @@ timertick(void *aux)
Timer *t; Timer *t;
u32int v; u32int v;
int to; int to;
ulong clock0;
t = aux; t = aux;
t->clock = clock + t->time & -(1 << t->sh); clock0 = clock + t->time;
t->clock = clock0 & -(1 << t->sh);
t->val = -t->time >> t->sh; t->val = -t->time >> t->sh;
do{ do{
to = 0; to = 0;
@ -196,7 +198,7 @@ timertick(void *aux)
to++; to++;
}while(v >= 0x10000); }while(v >= 0x10000);
if(t == aux) if(t == aux)
addevent(t, (0x10000 - t->val << t->sh) + (-clock & (1 << t->sh) - 1)); addevent(t, (0x10000 - t->val << t->sh) + (-clock0 & (1 << t->sh) - 1));
if((*t->cnt & TIMERIRQ) != 0) if((*t->cnt & TIMERIRQ) != 0)
setif(IRQTIM0 << t->i); setif(IRQTIM0 << t->i);
if(t->snd) if(t->snd)

View file

@ -733,7 +733,7 @@ hblanktick(void *)
stat = reg[DISPSTAT]; stat = reg[DISPSTAT];
if(hblank){ if(hblank){
hblclock = clock + evhblank.time; hblclock = clock + evhblank.time;
addevent(&evhblank, 240*4 + evhblank.time); addevent(&evhblank, 240*4);
hblank = 0; hblank = 0;
ppux0 = 0; ppux0 = 0;
memset(pixpri, VACANT, sizeof(pixpri)); memset(pixpri, VACANT, sizeof(pixpri));
@ -755,7 +755,7 @@ hblanktick(void *)
}else{ }else{
syncppu(240); syncppu(240);
linecopy(); linecopy();
addevent(&evhblank, 68*4 + evhblank.time); addevent(&evhblank, 68*4);
hblank = 1; hblank = 1;
if((stat & IRQHBLEN) != 0) if((stat & IRQHBLEN) != 0)
setif(IRQHBL); setif(IRQHBL);