Browse code

Added per-device versions

neauoire authored on 08/08/2023 21:44:17
Showing 12 changed files
... ...
@@ -12,10 +12,9 @@ WITH REGARD TO THIS SOFTWARE.
12 12
 
13 13
 typedef signed int Sint32;
14 14
 
15
-
16 15
 #define AUDIO_VERSION 1
17
-#define AUDIO_DEIMASK 0x0000
18
-#define AUDIO_DEOMASK 0x0000
16
+#define AUDIO_DEIMASK 0x0014
17
+#define AUDIO_DEOMASK 0x8000
19 18
 
20 19
 #define SAMPLE_FREQUENCY 44100
21 20
 #define POLYPHONY 4
... ...
@@ -11,7 +11,7 @@ WITH REGARD TO THIS SOFTWARE.
11 11
 
12 12
 #define CONSOLE_VERSION 1
13 13
 #define CONSOLE_DEIMASK 0x0000
14
-#define CONSOLE_DEOMASK 0x0000
14
+#define CONSOLE_DEOMASK 0x0300
15 15
 
16 16
 #define CONSOLE_STD 0x1
17 17
 #define CONSOLE_ARG 0x2
... ...
@@ -10,7 +10,7 @@ WITH REGARD TO THIS SOFTWARE.
10 10
 */
11 11
 
12 12
 #define DATETIME_VERSION 1
13
-#define DATETIME_DEIMASK 0x0000
13
+#define DATETIME_DEIMASK 0x07ff
14 14
 #define DATETIME_DEOMASK 0x0000
15 15
 
16 16
 Uint8 datetime_dei(Uxn *u, Uint8 addr);
... ...
@@ -11,7 +11,7 @@ WITH REGARD TO THIS SOFTWARE.
11 11
 
12 12
 #define FILE_VERSION 1
13 13
 #define FILE_DEIMASK 0x0000
14
-#define FILE_DEOMASK 0x0000
14
+#define FILE_DEOMASK 0xa260
15 15
 
16 16
 #define POLYFILEY 2
17 17
 #define DEV_FILE0 0xa
... ...
@@ -9,7 +9,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 9
 WITH REGARD TO THIS SOFTWARE.
10 10
 */
11 11
 
12
-
13 12
 #define MOUSE_VERSION 1
14 13
 #define MOUSE_DEIMASK 0x0000
15 14
 #define MOUSE_DEOMASK 0x0000
... ...
@@ -11,8 +11,8 @@ WITH REGARD TO THIS SOFTWARE.
11 11
 */
12 12
 
13 13
 #define SCREEN_VERSION 1
14
-#define SCREEN_DEIMASK 0x0000
15
-#define SCREEN_DEOMASK 0x0000
14
+#define SCREEN_DEIMASK 0x003c
15
+#define SCREEN_DEOMASK 0xc028
16 16
 
17 17
 typedef struct UxnScreen {
18 18
 	int width, height, x1, y1, x2, y2;
... ...
@@ -74,6 +74,15 @@ system_inspect(Uxn *u)
74 74
 	system_print(&u->rst, "rst");
75 75
 }
76 76
 
77
+void
78
+system_connect(Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo)
79
+{
80
+	/* printf("%02x -> v%d %04x %04x\n", device, ver, dei, deo); */
81
+	dev_vers[device] = ver;
82
+	dei_mask[device] = dei;
83
+	deo_mask[device] = deo;
84
+}
85
+
77 86
 /* IO */
78 87
 
79 88
 void
... ...
@@ -11,10 +11,11 @@ WITH REGARD TO THIS SOFTWARE.
11 11
 
12 12
 #define SYSTEM_VERSION 1
13 13
 #define SYSTEM_DEIMASK 0x0000
14
-#define SYSTEM_DEOMASK 0x0000
14
+#define SYSTEM_DEOMASK 0xff28
15 15
 
16 16
 #define RAM_PAGES 0x10
17 17
 
18
+void system_connect(Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo);
18 19
 int system_load(Uxn *u, char *filename);
19 20
 void system_inspect(Uxn *u);
20 21
 int system_error(char *msg, const char *err);
... ...
@@ -95,4 +95,5 @@ uxn_boot(Uxn *u, Uint8 *ram)
95 95
 		cptr[i] = 0;
96 96
 	u->ram = ram;
97 97
 	return 1;
98
+
98 99
 }
... ...
@@ -42,8 +42,7 @@ typedef struct Uxn {
42 42
 extern Uint8 emu_dei(Uxn *u, Uint8 addr);
43 43
 extern void emu_deo(Uxn *u, Uint8 addr);
44 44
 extern int emu_halt(Uxn *u, Uint8 instr, Uint8 err, Uint16 addr);
45
-extern Uint16 dei_mask[];
46
-extern Uint16 deo_mask[];
45
+extern Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
47 46
 
48 47
 /* built-ins */
49 48
 
... ...
@@ -18,8 +18,7 @@ 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 deo_mask[] = {0xc028, 0x0300, 0xc028, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x0000, 0x0000, 0xa260, 0xa260, 0x0000, 0x0000, 0x0000, 0x0000};
22
-Uint16 dei_mask[] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07ff, 0x0000, 0x0000, 0x0000};
21
+Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
23 22
 
24 23
 Uint8
25 24
 emu_dei(Uxn *u, Uint8 addr)
... ...
@@ -53,6 +52,12 @@ main(int argc, char **argv)
53 52
 		return system_error("Boot", "Failed");
54 53
 	if(!system_load(&u, argv[i++]))
55 54
 		return system_error("Load", "Failed");
55
+	/* connect devices */
56
+	system_connect(0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
57
+	system_connect(0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
58
+	system_connect(0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
59
+	system_connect(0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
60
+	system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
56 61
 	u.dev[0x17] = argc - i;
57 62
 	if(uxn_eval(&u, PAGE_PROGRAM)) {
58 63
 		for(; i < argc; i++) {
... ...
@@ -60,8 +60,7 @@ static Uint32 stdin_event, audio0_event, zoom = 1;
60 60
 static Uint64 exec_deadline, deadline_interval, ms_interval;
61 61
 static char *rom_path;
62 62
 
63
-Uint16 deo_mask[] = {0xff28, 0x0300, 0xc028, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x0000, 0x0000, 0xa260, 0xa260, 0x0000, 0x0000, 0x0000, 0x0000};
64
-Uint16 dei_mask[] = {0x0000, 0x0000, 0x003c, 0x0014, 0x0014, 0x0014, 0x0014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07ff, 0x0000, 0x0000, 0x0000};
63
+Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
65 64
 
66 65
 static int
67 66
 clamp(int v, int min, int max)
... ...
@@ -252,6 +251,19 @@ emu_init(void)
252 251
 	SDL_SetRenderDrawColor(emu_renderer, 0x00, 0x00, 0x00, 0xff);
253 252
 	ms_interval = SDL_GetPerformanceFrequency() / 1000;
254 253
 	deadline_interval = ms_interval * TIMEOUT_MS;
254
+	/* connect devices */
255
+	system_connect(0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
256
+	system_connect(0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
257
+	system_connect(0x2, SCREEN_VERSION, SCREEN_DEIMASK, SCREEN_DEOMASK);
258
+	system_connect(0x3, AUDIO_VERSION, AUDIO_DEIMASK, AUDIO_DEOMASK);
259
+	system_connect(0x4, AUDIO_VERSION, AUDIO_DEIMASK, AUDIO_DEOMASK);
260
+	system_connect(0x5, AUDIO_VERSION, AUDIO_DEIMASK, AUDIO_DEOMASK);
261
+	system_connect(0x6, AUDIO_VERSION, AUDIO_DEIMASK, AUDIO_DEOMASK);
262
+	system_connect(0x8, CONTROL_VERSION, CONTROL_DEIMASK, CONTROL_DEOMASK);
263
+	system_connect(0x9, MOUSE_VERSION, MOUSE_DEIMASK, MOUSE_DEOMASK);
264
+	system_connect(0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
265
+	system_connect(0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
266
+	system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
255 267
 	return 1;
256 268
 }
257 269