commit 2c56068

neauoire  ·  2023-08-25 16:40:25 +0000 UTC
parent bd976ce
Moved masks to system
5 files changed,  +28, -31
+6, -4
 1@@ -16,6 +16,8 @@ WITH REGARD TO THIS SOFTWARE.
 2 */
 3 
 4 char *boot_rom;
 5+Uint8 dei_masks[0x100], deo_masks[0x100];
 6+Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
 7 
 8 static const char *errors[] = {
 9 	"underflow",
10@@ -64,12 +66,12 @@ system_inspect(Uxn *u)
11 }
12 
13 void
14-system_connect(Uxn *u, Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo)
15+system_connect(Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo)
16 {
17 	int i, d = (device << 0x4);
18 	for(i = 0; i < 0x10; i++) {
19-		u->dei_masks[d + i] = (dei >> i) & 0x1;
20-		u->deo_masks[d + i] = (deo >> i) & 0x1;
21+		dei_masks[d + i] = (dei >> i) & 0x1;
22+		deo_masks[d + i] = (deo >> i) & 0x1;
23 	}
24 	dev_vers[device] = ver;
25 	dei_mask[device] = dei;
26@@ -77,7 +79,7 @@ system_connect(Uxn *u, Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo)
27 }
28 
29 int
30-system_version(Uxn *u, char *name, char *date)
31+system_version(char *name, char *date)
32 {
33 	int i;
34 	printf("%s, %s.\n", name, date);
+2, -2
 1@@ -17,10 +17,10 @@ WITH REGARD TO THIS SOFTWARE.
 2 
 3 extern char *boot_rom;
 4 
 5-void system_connect(Uxn *u, Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo);
 6+void system_connect(Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo);
 7 void system_reboot(Uxn *u, char *rom, int soft);
 8 void system_inspect(Uxn *u);
 9-int system_version(Uxn *u, char *emulator, char *date);
10+int system_version(char *emulator, char *date);
11 int system_error(char *msg, const char *err);
12 int system_init(Uxn *u, Uint8 *ram, char *rom);
13 
+5, -4
 1@@ -11,10 +11,10 @@ WITH REGARD TO THIS SOFTWARE.
 2 
 3 /* clang-format off */
 4 
 5-#define POKE2(d, v) { *(d) = (v) >> 8; (d)[1] = (v); }
 6 #define PEEK2(d) (*(d) << 8 | (d)[1])
 7-#define DEI(p) (u->dei_masks[p] ? emu_dei(u, (p)) : u->dev[(p)])
 8-#define DEO(p, v) { u->dev[p] = v; if(u->deo_masks[p]) emu_deo(u, p); }
 9+#define POKE2(d, v) { *(d) = (v) >> 8; (d)[1] = (v); }
10+#define DEI(p) (dei_masks[p] ? emu_dei(u, (p)) : u->dev[(p)])
11+#define DEO(p, v) { u->dev[p] = v; if(deo_masks[p]) emu_deo(u, p); }
12 
13 /* clang-format on */
14 
15@@ -31,7 +31,7 @@ typedef struct {
16 } Stack;
17 
18 typedef struct Uxn {
19-	Uint8 *ram, dev[0x100], dei_masks[0x100], deo_masks[0x100];
20+	Uint8 *ram, dev[0x100];
21 	Stack wst, rst;
22 } Uxn;
23 
24@@ -40,6 +40,7 @@ typedef struct Uxn {
25 extern Uint8 emu_dei(Uxn *u, Uint8 addr);
26 extern void emu_deo(Uxn *u, Uint8 addr);
27 extern int emu_halt(Uxn *u, Uint8 instr, Uint8 err, Uint16 addr);
28+extern Uint8 dei_masks[0x100], deo_masks[0x100];
29 extern Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
30 
31 /* built-ins */
+9, -11
 1@@ -38,8 +38,6 @@ static Window window;
 2 #define SCALE 1
 3 #define CONINBUFSIZE 256
 4 
 5-Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
 6-
 7 static int
 8 clamp(int val, int min, int max)
 9 {
10@@ -261,17 +259,17 @@ main(int argc, char **argv)
11 	if(i == argc)
12 		return system_error("usage", "uxn11 [-v] file.rom [args...]");
13 	/* Connect Varvara */
14-	system_connect(&u, 0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
15-	system_connect(&u, 0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
16-	system_connect(&u, 0x2, SCREEN_VERSION, SCREEN_DEIMASK, SCREEN_DEOMASK);
17-	system_connect(&u, 0x8, CONTROL_VERSION, CONTROL_DEIMASK, CONTROL_DEOMASK);
18-	system_connect(&u, 0x9, MOUSE_VERSION, MOUSE_DEIMASK, MOUSE_DEOMASK);
19-	system_connect(&u, 0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
20-	system_connect(&u, 0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
21-	system_connect(&u, 0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
22+	system_connect(0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
23+	system_connect(0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
24+	system_connect(0x2, SCREEN_VERSION, SCREEN_DEIMASK, SCREEN_DEOMASK);
25+	system_connect(0x8, CONTROL_VERSION, CONTROL_DEIMASK, CONTROL_DEOMASK);
26+	system_connect(0x9, MOUSE_VERSION, MOUSE_DEIMASK, MOUSE_DEOMASK);
27+	system_connect(0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
28+	system_connect(0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
29+	system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
30 	/* Read flags */
31 	if(argv[i][0] == '-' && argv[i][1] == 'v')
32-		return system_version(&u, "Uxn11 - Graphical Varvara Emulator", "17 Aug 2023");
33+		return system_version("Uxn11 - Graphical Varvara Emulator", "17 Aug 2023");
34 	if(!emu_init())
35 		return system_error("Init", "Failed to initialize varvara.");
36 	if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++]))
+6, -10
 1@@ -6,7 +6,6 @@
 2 #include "devices/console.h"
 3 #include "devices/file.h"
 4 #include "devices/datetime.h"
 5-#include "devices/link.h"
 6 
 7 /*
 8 Copyright (c) 2021-2023 Devine Lu Linvega, Andrew Alderwick
 9@@ -19,8 +18,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 WITH REGARD TO THIS SOFTWARE.
11 */
12 
13-Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
14-
15 Uint8
16 emu_dei(Uxn *u, Uint8 addr)
17 {
18@@ -40,7 +37,6 @@ emu_deo(Uxn *u, Uint8 addr)
19 	case 0x10: console_deo(&u->dev[d], p); break;
20 	case 0xa0: file_deo(0, u->ram, &u->dev[d], p); break;
21 	case 0xb0: file_deo(1, u->ram, &u->dev[d], p); break;
22-	case 0xf0: link_deo(u, &u->dev[d], p); break;
23 	}
24 }
25 
26@@ -69,14 +65,14 @@ main(int argc, char **argv)
27 	if(i == argc)
28 		return system_error("usage", "uxncli [-v] file.rom [args..]");
29 	/* Connect Varvara */
30-	system_connect(&u, 0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
31-	system_connect(&u, 0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
32-	system_connect(&u, 0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
33-	system_connect(&u, 0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
34-	system_connect(&u, 0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
35+	system_connect(0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
36+	system_connect(0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
37+	system_connect(0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
38+	system_connect(0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
39+	system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
40 	/* Read flags */
41 	if(argv[i][0] == '-' && argv[i][1] == 'v')
42-		return system_version(&u, "Uxncli - Console Varvara Emulator", "19 Aug 2023");
43+		return system_version("Uxncli - Console Varvara Emulator", "19 Aug 2023");
44 	if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++]))
45 		return system_error("Init", "Failed to initialize uxn.");
46 	/* Game Loop */