Browse code

Make emu_masks globals

neauoire authored on 25/08/2023 16:38:03
Showing 5 changed files
... ...
@@ -16,6 +16,8 @@ WITH REGARD TO THIS SOFTWARE.
16 16
 */
17 17
 
18 18
 char *boot_rom;
19
+Uint8 dei_masks[0x100], deo_masks[0x100];
20
+Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
19 21
 
20 22
 static const char *errors[] = {
21 23
 	"underflow",
... ...
@@ -64,12 +66,12 @@ system_inspect(Uxn *u)
64 66
 }
65 67
 
66 68
 void
67
-system_connect(Uxn *u, Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo)
69
+system_connect(Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo)
68 70
 {
69 71
 	int i, d = (device << 0x4);
70 72
 	for(i = 0; i < 0x10; i++) {
71
-		u->dei_masks[d + i] = (dei >> i) & 0x1;
72
-		u->deo_masks[d + i] = (deo >> i) & 0x1;
73
+		dei_masks[d + i] = (dei >> i) & 0x1;
74
+		deo_masks[d + i] = (deo >> i) & 0x1;
73 75
 	}
74 76
 	dev_vers[device] = ver;
75 77
 	dei_mask[device] = dei;
... ...
@@ -77,7 +79,7 @@ system_connect(Uxn *u, Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo)
77 79
 }
78 80
 
79 81
 int
80
-system_version(Uxn *u, char *name, char *date)
82
+system_version(char *name, char *date)
81 83
 {
82 84
 	int i;
83 85
 	printf("%s, %s.\n", name, date);
... ...
@@ -17,10 +17,10 @@ WITH REGARD TO THIS SOFTWARE.
17 17
 
18 18
 extern char *boot_rom;
19 19
 
20
-void system_connect(Uxn *u, Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo);
20
+void system_connect(Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo);
21 21
 void system_reboot(Uxn *u, char *rom, int soft);
22 22
 void system_inspect(Uxn *u);
23
-int system_version(Uxn *u, char *emulator, char *date);
23
+int system_version(char *emulator, char *date);
24 24
 int system_error(char *msg, const char *err);
25 25
 int system_init(Uxn *u, Uint8 *ram, char *rom);
26 26
 
... ...
@@ -11,10 +11,10 @@ WITH REGARD TO THIS SOFTWARE.
11 11
 
12 12
 /* clang-format off */
13 13
 
14
-#define POKE2(d, v) { *(d) = (v) >> 8; (d)[1] = (v); }
15 14
 #define PEEK2(d) (*(d) << 8 | (d)[1])
16
-#define DEI(p) (u->dei_masks[p] ? emu_dei(u, (p)) : u->dev[(p)])
17
-#define DEO(p, v) { u->dev[p] = v; if(u->deo_masks[p]) emu_deo(u, p); }
15
+#define POKE2(d, v) { *(d) = (v) >> 8; (d)[1] = (v); }
16
+#define DEI(p) (dei_masks[p] ? emu_dei(u, (p)) : u->dev[(p)])
17
+#define DEO(p, v) { u->dev[p] = v; if(deo_masks[p]) emu_deo(u, p); }
18 18
 
19 19
 /* clang-format on */
20 20
 
... ...
@@ -31,7 +31,7 @@ typedef struct {
31 31
 } Stack;
32 32
 
33 33
 typedef struct Uxn {
34
-	Uint8 *ram, dev[0x100], dei_masks[0x100], deo_masks[0x100];
34
+	Uint8 *ram, dev[0x100];
35 35
 	Stack wst, rst;
36 36
 } Uxn;
37 37
 
... ...
@@ -40,6 +40,7 @@ typedef struct Uxn {
40 40
 extern Uint8 emu_dei(Uxn *u, Uint8 addr);
41 41
 extern void emu_deo(Uxn *u, Uint8 addr);
42 42
 extern int emu_halt(Uxn *u, Uint8 instr, Uint8 err, Uint16 addr);
43
+extern Uint8 dei_masks[0x100], deo_masks[0x100];
43 44
 extern Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
44 45
 
45 46
 /* built-ins */
... ...
@@ -18,8 +18,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
18 18
 WITH REGARD TO THIS SOFTWARE.
19 19
 */
20 20
 
21
-Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
22
-
23 21
 Uint8
24 22
 emu_dei(Uxn *u, Uint8 addr)
25 23
 {
... ...
@@ -67,14 +65,14 @@ main(int argc, char **argv)
67 65
 	if(i == argc)
68 66
 		return system_error("usage", "uxncli [-v] file.rom [args..]");
69 67
 	/* Connect Varvara */
70
-	system_connect(&u, 0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
71
-	system_connect(&u, 0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
72
-	system_connect(&u, 0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
73
-	system_connect(&u, 0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
74
-	system_connect(&u, 0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
68
+	system_connect(0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
69
+	system_connect(0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
70
+	system_connect(0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
71
+	system_connect(0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
72
+	system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
75 73
 	/* Read flags */
76 74
 	if(argv[i][0] == '-' && argv[i][1] == 'v')
77
-		return system_version(&u, "Uxncli - Console Varvara Emulator", "19 Aug 2023");
75
+		return system_version("Uxncli - Console Varvara Emulator", "19 Aug 2023");
78 76
 	if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++]))
79 77
 		return system_error("Init", "Failed to initialize uxn.");
80 78
 	/* Game Loop */
... ...
@@ -59,8 +59,6 @@ static int window_created = 0;
59 59
 static Uint32 stdin_event, audio0_event, zoom = 1;
60 60
 static Uint64 exec_deadline, deadline_interval, ms_interval;
61 61
 
62
-Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
63
-
64 62
 static int
65 63
 clamp(int v, int min, int max)
66 64
 {
... ...
@@ -485,6 +483,7 @@ emu_run(Uxn *u, char *rom)
485 483
 static int
486 484
 emu_end(Uxn *u)
487 485
 {
486
+	free(u->ram);
488 487
 #ifdef _WIN32
489 488
 #pragma GCC diagnostic ignored "-Wint-to-pointer-cast"
490 489
 	TerminateThread((HANDLE)SDL_GetThreadID(stdin_thread), 0);
... ...
@@ -503,21 +502,21 @@ main(int argc, char **argv)
503 502
 	if(i == argc)
504 503
 		return system_error("usage", "uxnemu [-v][-2x][-3x] file.rom [args...]");
505 504
 	/* Connect Varvara */
506
-	system_connect(&u, 0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
507
-	system_connect(&u, 0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
508
-	system_connect(&u, 0x2, SCREEN_VERSION, SCREEN_DEIMASK, SCREEN_DEOMASK);
509
-	system_connect(&u, 0x3, AUDIO_VERSION, AUDIO_DEIMASK, AUDIO_DEOMASK);
510
-	system_connect(&u, 0x4, AUDIO_VERSION, AUDIO_DEIMASK, AUDIO_DEOMASK);
511
-	system_connect(&u, 0x5, AUDIO_VERSION, AUDIO_DEIMASK, AUDIO_DEOMASK);
512
-	system_connect(&u, 0x6, AUDIO_VERSION, AUDIO_DEIMASK, AUDIO_DEOMASK);
513
-	system_connect(&u, 0x8, CONTROL_VERSION, CONTROL_DEIMASK, CONTROL_DEOMASK);
514
-	system_connect(&u, 0x9, MOUSE_VERSION, MOUSE_DEIMASK, MOUSE_DEOMASK);
515
-	system_connect(&u, 0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
516
-	system_connect(&u, 0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
517
-	system_connect(&u, 0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
505
+	system_connect(0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
506
+	system_connect(0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
507
+	system_connect(0x2, SCREEN_VERSION, SCREEN_DEIMASK, SCREEN_DEOMASK);
508
+	system_connect(0x3, AUDIO_VERSION, AUDIO_DEIMASK, AUDIO_DEOMASK);
509
+	system_connect(0x4, AUDIO_VERSION, AUDIO_DEIMASK, AUDIO_DEOMASK);
510
+	system_connect(0x5, AUDIO_VERSION, AUDIO_DEIMASK, AUDIO_DEOMASK);
511
+	system_connect(0x6, AUDIO_VERSION, AUDIO_DEIMASK, AUDIO_DEOMASK);
512
+	system_connect(0x8, CONTROL_VERSION, CONTROL_DEIMASK, CONTROL_DEOMASK);
513
+	system_connect(0x9, MOUSE_VERSION, MOUSE_DEIMASK, MOUSE_DEOMASK);
514
+	system_connect(0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
515
+	system_connect(0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
516
+	system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
518 517
 	/* Read flags */
519 518
 	if(argv[i][0] == '-' && argv[i][1] == 'v')
520
-		return system_version(&u, "Uxnemu - Graphical Varvara Emulator", "19 Aug 2023");
519
+		return system_version("Uxnemu - Graphical Varvara Emulator", "19 Aug 2023");
521 520
 	if(strcmp(argv[i], "-2x") == 0 || strcmp(argv[i], "-3x") == 0)
522 521
 		set_zoom(argv[i++][1] - '0', 0);
523 522
 	if(!emu_init())