From 63108c178acb6a6c9ac949c55dee34e9b1b03ad5 Mon Sep 17 00:00:00 2001 From: Devine Lu Linvega Date: Thu, 26 Jan 2023 10:56:14 -0800 Subject: [PATCH] Tighter run --- src/uxnemu.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/uxnemu.c b/src/uxnemu.c index 87e671b..e390506 100644 --- a/src/uxnemu.c +++ b/src/uxnemu.c @@ -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