games/gba: very subtle timer bug fixed
This commit is contained in:
parent
177cbace73
commit
5a34ad16cd
3 changed files with 7 additions and 5 deletions
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue