Browse code

Abstracted emu_end()

neauoire authored on 16/08/2023 01:44:16
Showing 2 changed files
... ...
@@ -41,6 +41,13 @@ emu_deo(Uxn *u, Uint8 addr)
41 41
 	}
42 42
 }
43 43
 
44
+int
45
+emu_end(Uxn *u)
46
+{
47
+	free(u->ram);
48
+	return u->dev[0x0f] & 0x7f;
49
+}
50
+
44 51
 int
45 52
 main(int argc, char **argv)
46 53
 {
... ...
@@ -69,6 +76,5 @@ main(int argc, char **argv)
69 76
 			console_input(&u, (Uint8)c, CONSOLE_STD);
70 77
 		}
71 78
 	}
72
-	free(u.ram);
73
-	return u.dev[0x0f] & 0x7f;
79
+	return emu_end(&u);
74 80
 }
... ...
@@ -251,6 +251,8 @@ emu_init(void)
251 251
 	SDL_SetRenderDrawColor(emu_renderer, 0x00, 0x00, 0x00, 0xff);
252 252
 	ms_interval = SDL_GetPerformanceFrequency() / 1000;
253 253
 	deadline_interval = ms_interval * TIMEOUT_MS;
254
+	exec_deadline = SDL_GetPerformanceCounter() + deadline_interval;
255
+	screen_resize(WIDTH, HEIGHT);
254 256
 	return 1;
255 257
 }
256 258
 
... ...
@@ -269,6 +271,7 @@ static void
269 271
 emu_restart(Uxn *u)
270 272
 {
271 273
 	screen_resize(WIDTH, HEIGHT);
274
+	SDL_SetWindowTitle(emu_window, rom_path);
272 275
 	if(!emu_start(u, "launcher.rom"))
273 276
 		emu_start(u, rom_path);
274 277
 }
... ...
@@ -476,7 +479,7 @@ handle_events(Uxn *u)
476 479
 }
477 480
 
478 481
 static int
479
-run(Uxn *u, char *rom)
482
+emu_run(Uxn *u, char *rom)
480 483
 {
481 484
 	Uint64 next_refresh = 0;
482 485
 	Uint64 frame_interval = SDL_GetPerformanceFrequency() / 60;
... ...
@@ -514,6 +517,19 @@ run(Uxn *u, char *rom)
514 517
 	}
515 518
 }
516 519
 
520
+int
521
+emu_end(Uxn *u)
522
+{
523
+#ifdef _WIN32
524
+#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"
525
+	TerminateThread((HANDLE)SDL_GetThreadID(stdin_thread), 0);
526
+#elif !defined(__APPLE__)
527
+	close(0); /* make stdin thread exit */
528
+#endif
529
+	SDL_Quit();
530
+	return u->dev[0x0f] & 0x7f;
531
+}
532
+
517 533
 int
518 534
 main(int argc, char **argv)
519 535
 {
... ...
@@ -544,21 +560,11 @@ main(int argc, char **argv)
544 560
 		return system_error("Init", "Failed to initialize varvara.");
545 561
 	if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), rom_path))
546 562
 		return system_error("Init", "Failed to initialize uxn.");
563
+	/* Game Loop */
547 564
 	u.dev[0x17] = argc - i;
548
-	/* load rom */
549
-	if(!emu_start(&u, rom_path))
550
-		return system_error("Start", "Failed");
551
-	/* read arguments */
552
-	console_listen(&u, i, argc, argv);
553
-	/* start rom */
554
-	run(&u, rom_path);
555
-	/* finished */
556
-#ifdef _WIN32
557
-#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"
558
-	TerminateThread((HANDLE)SDL_GetThreadID(stdin_thread), 0);
559
-#elif !defined(__APPLE__)
560
-	close(0); /* make stdin thread exit */
561
-#endif
562
-	SDL_Quit();
563
-	return 0;
565
+	if(uxn_eval(&u, PAGE_PROGRAM)) {
566
+		console_listen(&u, i, argc, argv);
567
+		emu_run(&u, rom_path);
568
+	}
569
+	return emu_end(&u);
564 570
 }