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 }