Browse code

Added stack pointer accessors to system device

neauoire authored on 19/08/2023 14:34:14
Showing 5 changed files
... ...
@@ -120,7 +120,7 @@ screen_resize(Uint16 width, Uint16 height)
120 120
 {
121 121
 	Uint8 *bg, *fg;
122 122
 	Uint32 *pixels = NULL;
123
-	if(width < 0x8 || height < 0x8 || width >= 0x400 || height >= 0x400)
123
+	if(width < 0x8 || height < 0x8 || width >= 0x800 || height >= 0x800)
124 124
 		return;
125 125
 	if(uxn_screen.width == width && uxn_screen.height == height)
126 126
 		return;
... ...
@@ -116,6 +116,16 @@ system_init(Uxn *u, Uint8 *ram, char *rom)
116 116
 
117 117
 /* IO */
118 118
 
119
+Uint8
120
+system_dei(Uxn *u, Uint8 addr)
121
+{
122
+	switch(addr) {
123
+	case 0x4: return u->wst.ptr;
124
+	case 0x5: return u->rst.ptr;
125
+	default: return u->dev[addr];
126
+	}
127
+}
128
+
119 129
 void
120 130
 system_deo(Uxn *u, Uint8 *d, Uint8 port)
121 131
 {
... ...
@@ -134,6 +144,12 @@ system_deo(Uxn *u, Uint8 *d, Uint8 port)
134 144
 				ram[dst + (Uint16)(b_addr + i)] = ram[src + (Uint16)(a_addr + i)];
135 145
 		}
136 146
 		break;
147
+	case 0x4:
148
+		u->wst.ptr = d[4];
149
+		break;
150
+	case 0x5:
151
+		u->rst.ptr = d[5];
152
+		break;
137 153
 	case 0xe:
138 154
 		system_inspect(u);
139 155
 		break;
... ...
@@ -9,9 +9,9 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 9
 WITH REGARD TO THIS SOFTWARE.
10 10
 */
11 11
 
12
-#define SYSTEM_VERSION 1
13
-#define SYSTEM_DEIMASK 0x0000
14
-#define SYSTEM_DEOMASK 0xff08
12
+#define SYSTEM_VERSION 2
13
+#define SYSTEM_DEIMASK 0x0030
14
+#define SYSTEM_DEOMASK 0xff38
15 15
 
16 16
 #define RAM_PAGES 0x10
17 17
 
... ...
@@ -24,4 +24,5 @@ int system_version(Uxn *u, 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
 
27
+Uint8 system_dei(Uxn *u, Uint8 addr);
27 28
 void system_deo(Uxn *u, Uint8 *d, Uint8 port);
... ...
@@ -24,6 +24,7 @@ Uint8
24 24
 emu_dei(Uxn *u, Uint8 addr)
25 25
 {
26 26
 	switch(addr & 0xf0) {
27
+	case 0x00: return system_dei(u, addr);
27 28
 	case 0xc0: return datetime_dei(u, addr);
28 29
 	}
29 30
 	return u->dev[addr];
... ...
@@ -73,7 +74,7 @@ main(int argc, char **argv)
73 74
 	system_connect(&u, 0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
74 75
 	/* Read flags */
75 76
 	if(argv[i][0] == '-' && argv[i][1] == 'v')
76
-		return system_version(&u, "Uxncli - Console Varvara Emulator", "17 Aug 2023");
77
+		return system_version(&u, "Uxncli - Console Varvara Emulator", "19 Aug 2023");
77 78
 	if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++]))
78 79
 		return system_error("Init", "Failed to initialize uxn.");
79 80
 	/* Game Loop */
... ...
@@ -96,6 +96,7 @@ emu_dei(Uxn *u, Uint8 addr)
96 96
 {
97 97
 	Uint8 p = addr & 0x0f, d = addr & 0xf0;
98 98
 	switch(d) {
99
+	case 0x00: return system_dei(u, addr);
99 100
 	case 0x20: return screen_dei(u, addr);
100 101
 	case 0x30: return audio_dei(0, &u->dev[d], p);
101 102
 	case 0x40: return audio_dei(1, &u->dev[d], p);
... ...
@@ -516,7 +517,7 @@ main(int argc, char **argv)
516 517
 	system_connect(&u, 0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
517 518
 	/* Read flags */
518 519
 	if(argv[i][0] == '-' && argv[i][1] == 'v')
519
-		return system_version(&u, "Uxnemu - Graphical Varvara Emulator", "17 Aug 2023");
520
+		return system_version(&u, "Uxnemu - Graphical Varvara Emulator", "19 Aug 2023");
520 521
 	if(strcmp(argv[i], "-2x") == 0 || strcmp(argv[i], "-3x") == 0)
521 522
 		set_zoom(argv[i++][1] - '0', 0);
522 523
 	if(!emu_init())