commit 301de90

Devine Lu Linvega  ·  2024-11-12 23:08:43 +0000 UTC
parent 82ffefd
Return uxn instance passing to eval()
8 files changed,  +32, -32
+1, -1
1@@ -196,7 +196,7 @@ console_input(Uint8 c, int type)
2 {
3 	uxn.dev[0x12] = c;
4 	uxn.dev[0x17] = type;
5-	return uxn_eval(PEEK2(&uxn.dev[0x10]));
6+	return uxn_eval(&uxn, PEEK2(&uxn.dev[0x10]));
7 }
8 
9 void
+3, -3
 1@@ -17,7 +17,7 @@ controller_down(Uint8 mask)
 2 {
 3 	if(mask) {
 4 		uxn.dev[0x82] |= mask;
 5-		uxn_eval(PEEK2(&uxn.dev[0x80]));
 6+		uxn_eval(&uxn, PEEK2(&uxn.dev[0x80]));
 7 	}
 8 }
 9 
10@@ -26,7 +26,7 @@ controller_up(Uint8 mask)
11 {
12 	if(mask) {
13 		uxn.dev[0x82] &= (~mask);
14-		uxn_eval(PEEK2(&uxn.dev[0x80]));
15+		uxn_eval(&uxn, PEEK2(&uxn.dev[0x80]));
16 	}
17 }
18 
19@@ -35,7 +35,7 @@ controller_key(Uint8 key)
20 {
21 	if(key) {
22 		uxn.dev[0x83] = key;
23-		uxn_eval(PEEK2(&uxn.dev[0x80]));
24+		uxn_eval(&uxn, PEEK2(&uxn.dev[0x80]));
25 		uxn.dev[0x83] = 0;
26 	}
27 }
+4, -4
 1@@ -16,14 +16,14 @@ void
 2 mouse_down(Uint8 mask)
 3 {
 4 	uxn.dev[0x96] |= mask;
 5-	uxn_eval(PEEK2(&uxn.dev[0x90]));
 6+	uxn_eval(&uxn, PEEK2(&uxn.dev[0x90]));
 7 }
 8 
 9 void
10 mouse_up(Uint8 mask)
11 {
12 	uxn.dev[0x96] &= (~mask);
13-	uxn_eval(PEEK2(&uxn.dev[0x90]));
14+	uxn_eval(&uxn, PEEK2(&uxn.dev[0x90]));
15 }
16 
17 void
18@@ -31,7 +31,7 @@ mouse_pos(Uint16 x, Uint16 y)
19 {
20 	uxn.dev[0x92] = x >> 8, uxn.dev[0x93] = x;
21 	uxn.dev[0x94] = y >> 8, uxn.dev[0x95] = y;
22-	uxn_eval(PEEK2(&uxn.dev[0x90]));
23+	uxn_eval(&uxn, PEEK2(&uxn.dev[0x90]));
24 }
25 
26 void
27@@ -39,7 +39,7 @@ mouse_scroll(Uint16 x, Uint16 y)
28 {
29 	uxn.dev[0x9a] = x >> 8, uxn.dev[0x9b] = x;
30 	uxn.dev[0x9c] = -y >> 8, uxn.dev[0x9d] = -y;
31-	uxn_eval(PEEK2(&uxn.dev[0x90]));
32+	uxn_eval(&uxn, PEEK2(&uxn.dev[0x90]));
33 	uxn.dev[0x9a] = 0, uxn.dev[0x9b] = 0;
34 	uxn.dev[0x9c] = 0, uxn.dev[0x9d] = 0;
35 }
+1, -1
1@@ -70,7 +70,7 @@ system_reboot(char *rom, int soft)
2 {
3 	system_zero(soft);
4 	if(system_load(boot_rom))
5-		if(uxn_eval(PAGE_PROGRAM))
6+		if(uxn_eval(&uxn, PAGE_PROGRAM))
7 			boot_rom = rom;
8 }
9 
+17, -17
 1@@ -16,18 +16,18 @@ WITH REGARD TO THIS SOFTWARE.
 2 	case 0x20|opc: {const int _2=1,_r=0;init body;} break;\
 3 	case 0x40|opc: {const int _2=0,_r=1;init body;} break;\
 4 	case 0x60|opc: {const int _2=1,_r=1;init body;} break;\
 5-	case 0x80|opc: {const int _2=0,_r=0,k=uxn.wst.ptr;init uxn.wst.ptr=k;body;} break;\
 6-	case 0xa0|opc: {const int _2=1,_r=0,k=uxn.wst.ptr;init uxn.wst.ptr=k;body;} break;\
 7-	case 0xc0|opc: {const int _2=0,_r=1,k=uxn.rst.ptr;init uxn.rst.ptr=k;body;} break;\
 8-	case 0xe0|opc: {const int _2=1,_r=1,k=uxn.rst.ptr;init uxn.rst.ptr=k;body;} break;\
 9+	case 0x80|opc: {const int _2=0,_r=0,k=u->wst.ptr;init u->wst.ptr=k;body;} break;\
10+	case 0xa0|opc: {const int _2=1,_r=0,k=u->wst.ptr;init u->wst.ptr=k;body;} break;\
11+	case 0xc0|opc: {const int _2=0,_r=1,k=u->rst.ptr;init u->rst.ptr=k;body;} break;\
12+	case 0xe0|opc: {const int _2=1,_r=1,k=u->rst.ptr;init u->rst.ptr=k;body;} break;\
13 }
14 
15 /* Microcode */
16 
17-#define JMI a = uxn.ram[pc] << 8 | uxn.ram[pc + 1], pc += a + 2;
18-#define REM if(_r) uxn.rst.ptr -= 1 + _2; else uxn.wst.ptr -= 1 + _2;
19-#define INC(s) uxn.s.dat[uxn.s.ptr++]
20-#define DEC(s) uxn.s.dat[--uxn.s.ptr]
21+#define JMI a = u->ram[pc] << 8 | u->ram[pc + 1], pc += a + 2;
22+#define REM if(_r) u->rst.ptr -= 1 + _2; else u->wst.ptr -= 1 + _2;
23+#define INC(s) u->s.dat[u->s.ptr++]
24+#define DEC(s) u->s.dat[--u->s.ptr]
25 #define JMP(i) pc = _2 ? i : pc + (Sint8)i;
26 #define PO1(o) o = _r ? DEC(rst) : DEC(wst);
27 #define PO2(o) o = _r ? DEC(rst) | DEC(rst) << 8 : DEC(wst) | DEC(wst) << 8;
28@@ -39,24 +39,24 @@ WITH REGARD TO THIS SOFTWARE.
29 #define PUT(i) { PU1(i[0]) if(_2) PU1(i[1]) }
30 #define DEI(i,o) o[0] = emu_dei(i); if(_2) o[1] = emu_dei(i + 1); PUT(o)
31 #define DEO(i,j) emu_deo(i, j[0]); if(_2) emu_deo(i + 1, j[1]);
32-#define PEK(i,o,m) o[0] = uxn.ram[i]; if(_2) o[1] = uxn.ram[(i + 1) & m]; PUT(o)
33-#define POK(i,j,m) uxn.ram[i] = j[0]; if(_2) uxn.ram[(i + 1) & m] = j[1];
34+#define PEK(i,o,m) o[0] = u->ram[i]; if(_2) o[1] = u->ram[(i + 1) & m]; PUT(o)
35+#define POK(i,j,m) u->ram[i] = j[0]; if(_2) u->ram[(i + 1) & m] = j[1];
36 
37 int
38-uxn_eval(Uint16 pc)
39+uxn_eval(Uxn *u, Uint16 pc)
40 {
41 	unsigned int a, b, c, x[2], y[2], z[2], step;
42-	if(!pc || uxn.dev[0x0f]) return 0;
43+	if(!pc || u->dev[0x0f]) return 0;
44 	for(step = STEP_MAX; step; step--) {
45-		switch(uxn.ram[pc++]) {
46+		switch(u->ram[pc++]) {
47 		/* BRK */ case 0x00: return 1;
48 		/* JCI */ case 0x20: if(DEC(wst)) { JMI break; } pc += 2; break;
49 		/* JMI */ case 0x40: JMI break;
50 		/* JSI */ case 0x60: c = pc + 2; INC(rst) = c >> 8; INC(rst) = c; JMI break;
51-		/* LI2 */ case 0xa0: INC(wst) = uxn.ram[pc++]; /* fall-through */
52-		/* LIT */ case 0x80: INC(wst) = uxn.ram[pc++]; break;
53-		/* L2r */ case 0xe0: INC(rst) = uxn.ram[pc++]; /* fall-through */
54-		/* LIr */ case 0xc0: INC(rst) = uxn.ram[pc++]; break;
55+		/* LI2 */ case 0xa0: INC(wst) = u->ram[pc++]; /* fall-through */
56+		/* LIT */ case 0x80: INC(wst) = u->ram[pc++]; break;
57+		/* L2r */ case 0xe0: INC(rst) = u->ram[pc++]; /* fall-through */
58+		/* LIr */ case 0xc0: INC(rst) = u->ram[pc++]; break;
59 		/* INC */ OPC(0x01,POx(a),PUx(a + 1))
60 		/* POP */ OPC(0x02,REM   ,{})
61 		/* NIP */ OPC(0x03,GET(x) REM   ,PUT(x))
+1, -1
1@@ -42,4 +42,4 @@ extern Uxn uxn;
2 
3 /* built-ins */
4 
5-int uxn_eval(Uint16 pc);
6+int uxn_eval(Uxn *u, Uint16 pc);
+3, -3
 1@@ -237,7 +237,7 @@ emu_run(void)
 2 			emu_event();
 3 		if(poll(&fds[1], 1, 0)) {
 4 			read(fds[1].fd, expirations, 8);
 5-			uxn_eval(uxn.dev[0x20] << 8 | uxn.dev[0x21]);
 6+			uxn_eval(&uxn, uxn.dev[0x20] << 8 | uxn.dev[0x21]);
 7 			if(screen_changed()) {
 8 				int x = uxn_screen.x1 * uxn_screen.scale, y = uxn_screen.y1 * uxn_screen.scale;
 9 				int w = uxn_screen.x2 * uxn_screen.scale - x, h = uxn_screen.y2 * uxn_screen.scale - y;
10@@ -259,7 +259,7 @@ int
11 main(int argc, char **argv)
12 {
13 	if(argc > 1 && argv[1][0] == '-' && argv[1][1] == 'v')
14-		fprintf(stdout, "Uxn11 - Varvara Emulator, 11 Nov 2024.\n");
15+		fprintf(stdout, "Uxn11 - Varvara Emulator, 12 Nov 2024.\n");
16 	else {
17 		int i = 1;
18 		char *rom = i == argc ? "boot.rom" : argv[i++];
19@@ -268,7 +268,7 @@ main(int argc, char **argv)
20 		if(!display_init())
21 			return !fprintf(stdout, "Could not open display.\n");
22 		uxn.dev[0x17] = argc - i;
23-		if(uxn_eval(PAGE_PROGRAM))
24+		if(uxn_eval(&uxn, PAGE_PROGRAM))
25 			console_listen(i, argc, argv), emu_run();
26 		close_console();
27 		XDestroyImage(ximage), XDestroyWindow(display, window), XCloseDisplay(display);
+2, -2
 1@@ -61,12 +61,12 @@ int
 2 main(int argc, char **argv)
 3 {
 4 	if(argc > 1 && argv[1][0] == '-' && argv[1][1] == 'v')
 5-		fprintf(stdout, "Uxn11(cli) - Varvara Emulator, 11 Nov 2024.\n");
 6+		fprintf(stdout, "Uxn11(cli) - Varvara Emulator, 12 Nov 2024.\n");
 7 	else if(argc == 1 || !system_boot(ram, argv[1]))
 8 		return !fprintf(stdout, "usage: %s [-v] file.rom [args..]\n", argv[0]);
 9 	else {
10 		uxn.dev[0x17] = argc - 2;
11-		if(uxn_eval(PAGE_PROGRAM) && uxn.dev[0x10])
12+		if(uxn_eval(&uxn, PAGE_PROGRAM) && uxn.dev[0x10])
13 			console_listen(2, argc, argv), emu_run();
14 	}
15 	return uxn.dev[0x0f] & 0x7f;