tinyboy-emulator/ev.c
Hojun-Cho bc76c36ed4 add loadsave
loadsave: only for BAT features cartidge
[load|save] state: for all cartidge. It's like snapshot
2024-07-18 20:24:34 +09:00

64 lines
924 B
C

#include "gb.h"
Event evhblank, evjoypad;
Event *events[NEVENT] = {&evhblank, &evjoypad};
Event* elist;
Var evvars[] = {{nil, 0, 0}};
void
addevent(Event* ev, int time)
{
Event **p, *e;
int t = time;
for (p = &elist; (e = *p) != nil; p = &e->next) {
if (t < e->time) {
e->time -= t;
break;
}
t -= e->time;
}
ev->next = e;
ev->time = t;
*p = ev;
}
void
delevent(Event* ev)
{
Event **p, *e;
for (p = &elist; (e = *p) != nil; p = &e->next) {
if (e == ev) {
*p = e->next;
if (e->next != nil)
e->next->time += e->time;
return;
}
}
}
void
popevent(void)
{
Event* e;
int t;
do {
e = elist;
t = e->time;
elist = e->next;
e->f(e->aux);
} while ((elist->time += t) <= 0);
}
void
initevent(void)
{
evjoypad.f = joypadevent;
addevent(&evjoypad, JOYPAD_CYCLE);
evhblank.f = hblanktick;
addevent(&evhblank, 240 * 4);
}