~rabbits/uxn

63108c178acb6a6c9ac949c55dee34e9b1b03ad5 — Devine Lu Linvega a month ago b5fa665
Tighter run
1 files changed, 8 insertions(+), 16 deletions(-)

M src/uxnemu.c
M src/uxnemu.c => src/uxnemu.c +8 -16
@@ 432,28 432,20 @@ handle_events(Uxn *u)
static int
run(Uxn *u)
{
	Uint64 now = SDL_GetPerformanceCounter(), frame_end, frame_interval = SDL_GetPerformanceFrequency() / 60;
	for(;;) {
		/* .System/halt */
		if(u->dev[0x0f])
			return error("Run", "Ended.");
		frame_end = now + frame_interval;
	Uint64 now = SDL_GetPerformanceCounter(), frame_end = now, frame_interval = SDL_GetPerformanceFrequency() / 60;
	for(;!u->dev[0x0f]; now = SDL_GetPerformanceCounter()) {
		exec_deadline = now + deadline_interval;
		if(!handle_events(u))
			return 0;
		uxn_eval(u, GETVEC(&u->dev[0x20]));
		if (((Sint64)(frame_end - SDL_GetPerformanceCounter())) >= 0) {
			frame_end = now + frame_interval;
			uxn_eval(u, GETVEC(&u->dev[0x20]));
		}
		if(uxn_screen.fg.changed || uxn_screen.bg.changed)
			redraw();
		now = SDL_GetPerformanceCounter();
		if(u->dev[0x20]) {
			if(!BENCH && ((Sint64)(frame_end - now)) > 0) {
				SDL_Delay((frame_end - now) / ms_interval);
				now = frame_end;
			}
		} else
			SDL_WaitEvent(NULL);
		SDL_WaitEventTimeout(NULL, GETVEC(&u->dev[0x20]) ? (frame_end - SDL_GetPerformanceCounter()) / ms_interval : 0x100000);
	}
	return error("SDL_WaitEvent", SDL_GetError());
	return error("Run", "Ended.");
}

int