commit cfc8349

Devine Lu Linvega  ·  2024-06-29 19:35:34 +0000 UTC
parent 6e094ca
Removed indirection in uxn_eval call
8 files changed,  +33, -32
+1, -1
1@@ -87,7 +87,7 @@ console_input(char c, int type)
2 	Uint8 *d = &uxn.dev[0x10];
3 	d[0x2] = c;
4 	d[0x7] = type;
5-	return uxn_eval(&uxn, PEEK2(d));
6+	return uxn_eval(PEEK2(d));
7 }
8 
9 void
+3, -3
 1@@ -17,7 +17,7 @@ controller_down(Uint8 *d, Uint8 mask)
 2 {
 3 	if(mask) {
 4 		d[2] |= mask;
 5-		uxn_eval(&uxn, PEEK2(d));
 6+		uxn_eval(PEEK2(d));
 7 	}
 8 }
 9 
10@@ -26,7 +26,7 @@ controller_up(Uint8 *d, Uint8 mask)
11 {
12 	if(mask) {
13 		d[2] &= (~mask);
14-		uxn_eval(&uxn, PEEK2(d));
15+		uxn_eval(PEEK2(d));
16 	}
17 }
18 
19@@ -35,7 +35,7 @@ controller_key(Uint8 *d, Uint8 key)
20 {
21 	if(key) {
22 		d[3] = key;
23-		uxn_eval(&uxn, PEEK2(d));
24+		uxn_eval(PEEK2(d));
25 		d[3] = 0x00;
26 	}
27 }
+4, -4
 1@@ -16,14 +16,14 @@ void
 2 mouse_down(Uint8 *d, Uint8 mask)
 3 {
 4 	d[6] |= mask;
 5-	uxn_eval(&uxn, PEEK2(d));
 6+	uxn_eval(PEEK2(d));
 7 }
 8 
 9 void
10 mouse_up(Uint8 *d, Uint8 mask)
11 {
12 	d[6] &= (~mask);
13-	uxn_eval(&uxn, PEEK2(d));
14+	uxn_eval(PEEK2(d));
15 }
16 
17 void
18@@ -31,7 +31,7 @@ mouse_pos(Uint8 *d, Uint16 x, Uint16 y)
19 {
20 	*(d + 2) = x >> 8, *(d + 3) = x;
21 	*(d + 4) = y >> 8, *(d + 5) = y;
22-	uxn_eval(&uxn, PEEK2(d));
23+	uxn_eval(PEEK2(d));
24 }
25 
26 void
27@@ -39,7 +39,7 @@ mouse_scroll(Uint8 *d, Uint16 x, Uint16 y)
28 {
29 	*(d + 0xa) = x >> 8, *(d + 0xb) = x;
30 	*(d + 0xc) = -y >> 8, *(d + 0xd) = -y;
31-	uxn_eval(&uxn, PEEK2(d));
32+	uxn_eval(PEEK2(d));
33 	*(d + 0xa) = 0, *(d + 0xb) = 0;
34 	*(d + 0xc) = 0, *(d + 0xd) = 0;
35 }
+1, -1
1@@ -72,7 +72,7 @@ system_reboot(char *rom, int soft)
2 {
3 	system_zero(soft);
4 	if(system_load(boot_rom))
5-		if(uxn_eval(&uxn, PAGE_PROGRAM))
6+		if(uxn_eval(PAGE_PROGRAM))
7 			boot_rom = rom;
8 }
9 
+20, -19
 1@@ -35,13 +35,14 @@ WITH REGARD TO THIS SOFTWARE.
 2 #define SET(x, y) { SHIFT((ins & 0x80) ? x + y : y) }
 3 
 4 int
 5-uxn_eval(Uxn *u, Uint16 pc)
 6+uxn_eval(Uint16 pc)
 7 {
 8+	Uxn *u = &uxn;
 9 	Uint16 t, n, l, r;
10-	Uint8 *ram = u->ram, *rr;
11+	Uint8 *rr;
12 	if(!pc || u->dev[0x0f]) return 0;
13 	for(;;) {
14-		Uint8 ins = ram[pc++];
15+		Uint8 ins = uxn.ram[pc++];
16 		Stack *s = ins & 0x40 ? &u->rst : &u->wst;
17 		switch(ins & 0x3f) {
18 		/* IMM */
19@@ -49,10 +50,10 @@ uxn_eval(Uxn *u, Uint16 pc)
20 			switch(ins) {
21 			case 0x00: /* BRK  */                       return 1;
22 			case 0x20: /* JCI  */ t=T;        SHIFT(-1) if(!t) { pc += 2; break; } /* fall-through */
23-			case 0x40: /* JMI  */                       rr = ram + pc; pc += 2 + PEEK2(rr); break;
24-			case 0x60: /* JSI  */             SHIFT( 2) rr = ram + pc; pc += 2; T2_(pc); pc += PEEK2(rr); break;
25-			case 0x80: /* LIT  */ case 0xc0:  SHIFT( 1) T = ram[pc++]; break;
26-			case 0xa0: /* LIT2 */ case 0xe0:  SHIFT( 2) N = ram[pc++]; T = ram[pc++]; break;
27+			case 0x40: /* JMI  */                       rr = uxn.ram + pc; pc += 2 + PEEK2(rr); break;
28+			case 0x60: /* JSI  */             SHIFT( 2) rr = uxn.ram + pc; pc += 2; T2_(pc); pc += PEEK2(rr); break;
29+			case 0x80: /* LIT  */ case 0xc0:  SHIFT( 1) T = uxn.ram[pc++]; break;
30+			case 0xa0: /* LIT2 */ case 0xe0:  SHIFT( 2) N = uxn.ram[pc++]; T = uxn.ram[pc++]; break;
31 			} break;
32 		/* ALU */
33 		case 0x01: /* INC  */ t=T;            SET(1, 0) T = t + 1; break;
34@@ -85,18 +86,18 @@ uxn_eval(Uxn *u, Uint16 pc)
35 		case 0x2e: /* JSR2 */ t=T2;           SET(2,-2) FLIP SHIFT(2) T2_(pc) pc = t; break;
36 		case 0x0f: /* STH  */ t=T;            SET(1,-1) FLIP SHIFT(1) T = t; break;
37 		case 0x2f: /* STH2 */ t=T2;           SET(2,-2) FLIP SHIFT(2) T2_(t) break;
38-		case 0x10: /* LDZ  */ t=T;            SET(1, 0) T = ram[t]; break;
39-		case 0x30: /* LDZ2 */ t=T;            SET(1, 1) N = ram[t++]; T = ram[(Uint8)t]; break;
40-		case 0x11: /* STZ  */ t=T;n=N;        SET(2,-2) ram[t] = n; break;
41-		case 0x31: /* STZ2 */ t=T;n=H2;       SET(3,-3) ram[t++] = n >> 8; ram[(Uint8)t] = n; break;
42-		case 0x12: /* LDR  */ t=T;            SET(1, 0) r = pc + (Sint8)t; T = ram[r]; break;
43-		case 0x32: /* LDR2 */ t=T;            SET(1, 1) r = pc + (Sint8)t; N = ram[r++]; T = ram[r]; break;
44-		case 0x13: /* STR  */ t=T;n=N;        SET(2,-2) r = pc + (Sint8)t; ram[r] = n; break;
45-		case 0x33: /* STR2 */ t=T;n=H2;       SET(3,-3) r = pc + (Sint8)t; ram[r++] = n >> 8; ram[r] = n; break;
46-		case 0x14: /* LDA  */ t=T2;           SET(2,-1) T = ram[t]; break;
47-		case 0x34: /* LDA2 */ t=T2;           SET(2, 0) N = ram[t++]; T = ram[t]; break;
48-		case 0x15: /* STA  */ t=T2;n=L;       SET(3,-3) ram[t] = n; break;
49-		case 0x35: /* STA2 */ t=T2;n=N2;      SET(4,-4) ram[t++] = n >> 8; ram[t] = n; break;
50+		case 0x10: /* LDZ  */ t=T;            SET(1, 0) T = uxn.ram[t]; break;
51+		case 0x30: /* LDZ2 */ t=T;            SET(1, 1) N = uxn.ram[t++]; T = uxn.ram[(Uint8)t]; break;
52+		case 0x11: /* STZ  */ t=T;n=N;        SET(2,-2) uxn.ram[t] = n; break;
53+		case 0x31: /* STZ2 */ t=T;n=H2;       SET(3,-3) uxn.ram[t++] = n >> 8; uxn.ram[(Uint8)t] = n; break;
54+		case 0x12: /* LDR  */ t=T;            SET(1, 0) r = pc + (Sint8)t; T = uxn.ram[r]; break;
55+		case 0x32: /* LDR2 */ t=T;            SET(1, 1) r = pc + (Sint8)t; N = uxn.ram[r++]; T = uxn.ram[r]; break;
56+		case 0x13: /* STR  */ t=T;n=N;        SET(2,-2) r = pc + (Sint8)t; uxn.ram[r] = n; break;
57+		case 0x33: /* STR2 */ t=T;n=H2;       SET(3,-3) r = pc + (Sint8)t; uxn.ram[r++] = n >> 8; uxn.ram[r] = n; break;
58+		case 0x14: /* LDA  */ t=T2;           SET(2,-1) T = uxn.ram[t]; break;
59+		case 0x34: /* LDA2 */ t=T2;           SET(2, 0) N = uxn.ram[t++]; T = uxn.ram[t]; break;
60+		case 0x15: /* STA  */ t=T2;n=L;       SET(3,-3) uxn.ram[t] = n; break;
61+		case 0x35: /* STA2 */ t=T2;n=N2;      SET(4,-4) uxn.ram[t++] = n >> 8; uxn.ram[t] = n; break;
62 		case 0x16: /* DEI  */ t=T;            SET(1, 0) T = emu_dei(t); break;
63 		case 0x36: /* DEI2 */ t=T;            SET(1, 1) N = emu_dei(t++); T = emu_dei(t); break;
64 		case 0x17: /* DEO  */ t=T;n=N;        SET(2,-2) emu_deo(t, n); break;
+1, -1
1@@ -41,4 +41,4 @@ extern Uxn uxn;
2 
3 /* built-ins */
4 
5-int uxn_eval(Uxn *u, Uint16 pc);
6+int uxn_eval(Uint16 pc);
+2, -2
 1@@ -248,7 +248,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, uxn.dev[0x20] << 8 | uxn.dev[0x21]);
 6+			uxn_eval(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@@ -286,7 +286,7 @@ main(int argc, char **argv)
11 	}
12 	/* Game Loop */
13 	uxn.dev[0x17] = argc - i;
14-	if(uxn_eval(&uxn, PAGE_PROGRAM)) {
15+	if(uxn_eval(PAGE_PROGRAM)) {
16 		console_listen(i, argc, argv);
17 		emu_run();
18 	}
+1, -1
1@@ -77,7 +77,7 @@ main(int argc, char **argv)
2 		return system_error("Init", "Failed to initialize uxn.");
3 	/* Game Loop */
4 	uxn.dev[0x17] = argc - i;
5-	if(uxn_eval(&uxn, PAGE_PROGRAM) && PEEK2(uxn.dev + 0x10)) {
6+	if(uxn_eval(PAGE_PROGRAM) && PEEK2(uxn.dev + 0x10)) {
7 		console_listen(i, argc, argv);
8 		emu_run();
9 	}