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:
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