Browse code

Returned to simpler run function

Devine Lu Linvega authored on 28/01/2023 18:54:54
Showing 1 changed files
... ...
@@ -432,20 +432,28 @@ handle_events(Uxn *u)
432 432
 static int
433 433
 run(Uxn *u)
434 434
 {
435
-	Uint64 now = SDL_GetPerformanceCounter(), frame_end = now, frame_interval = SDL_GetPerformanceFrequency() / 60;
436
-	for(; !u->dev[0x0f]; now = SDL_GetPerformanceCounter()) {
435
+	Uint64 now = SDL_GetPerformanceCounter(), frame_end, frame_interval = SDL_GetPerformanceFrequency() / 60;
436
+	for(;;) {
437
+		/* .System/halt */
438
+		if(u->dev[0x0f])
439
+			return error("Run", "Ended.");
440
+		frame_end = now + frame_interval;
437 441
 		exec_deadline = now + deadline_interval;
438 442
 		if(!handle_events(u))
439 443
 			return 0;
440
-		if(((Sint64)(frame_end - SDL_GetPerformanceCounter())) <= 0) {
441
-			frame_end = now + frame_interval;
442
-			uxn_eval(u, GETVEC(&u->dev[0x20]));
443
-		}
444
+		uxn_eval(u, GETVEC(&u->dev[0x20]));
444 445
 		if(uxn_screen.fg.changed || uxn_screen.bg.changed)
445 446
 			redraw();
446
-		SDL_WaitEventTimeout(NULL, GETVEC(&u->dev[0x20]) ? (frame_end - SDL_GetPerformanceCounter()) / ms_interval : 0x100000);
447
+		now = SDL_GetPerformanceCounter();
448
+		if(u->dev[0x20]) {
449
+			if(!BENCH && ((Sint64)(frame_end - now)) > 0) {
450
+				SDL_Delay((frame_end - now) / ms_interval);
451
+				now = frame_end;
452
+			}
453
+		} else
454
+			SDL_WaitEvent(NULL);
447 455
 	}
448
-	return error("Run", "Ended.");
456
+	return error("SDL_WaitEvent", SDL_GetError());;
449 457
 }
450 458
 
451 459
 int