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;