uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit 22797644b5d9d163b04656d8ebce37a7d72a4cf9
parent b894ba4c57831e11537bd31151f7afff2aaa09be
Author: Devine Lu Linvega <aliceffekt@gmail.com>
Date:   Sat, 28 Jan 2023 10:54:54 -0800

Returned to simpler run function

Diffstat:
Msrc/uxnemu.c | 24++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/uxnemu.c b/src/uxnemu.c @@ -432,20 +432,28 @@ handle_events(Uxn *u) static int run(Uxn *u) { - Uint64 now = SDL_GetPerformanceCounter(), frame_end = now, frame_interval = SDL_GetPerformanceFrequency() / 60; - for(; !u->dev[0x0f]; now = SDL_GetPerformanceCounter()) { + 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; exec_deadline = now + deadline_interval; if(!handle_events(u)) return 0; - if(((Sint64)(frame_end - SDL_GetPerformanceCounter())) <= 0) { - frame_end = now + frame_interval; - uxn_eval(u, GETVEC(&u->dev[0x20])); - } + uxn_eval(u, GETVEC(&u->dev[0x20])); if(uxn_screen.fg.changed || uxn_screen.bg.changed) redraw(); - SDL_WaitEventTimeout(NULL, GETVEC(&u->dev[0x20]) ? (frame_end - SDL_GetPerformanceCounter()) / ms_interval : 0x100000); + 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); } - return error("Run", "Ended."); + return error("SDL_WaitEvent", SDL_GetError());; } int