... | ... |
@@ -18,20 +18,19 @@ WITH REGARD TO THIS SOFTWARE. |
18 | 18 |
*/ |
19 | 19 |
|
20 | 20 |
#define T *ptr |
21 |
-#define N *(ptr-1) |
|
22 |
-#define L *(ptr-2) |
|
23 |
-#define T2 PEEK2((ptr-1)) |
|
24 |
-#define H2 PEEK2((ptr-2)) |
|
25 |
-#define N2 PEEK2((ptr-3)) |
|
26 |
-#define L2 PEEK2((ptr-5)) |
|
27 |
- |
|
28 |
-#define HALT(c) { return emu_halt(u, ins, c, pc - 1); } |
|
29 |
-#define FLIP { s = ins & 0x40 ? &u->wst : &u->rst; } |
|
30 |
-#define SET(x, y) { r = s->ptr; if(x > r) HALT(1) r += (x & k) + y; if(r > 254) HALT(2) ptr = s->dat + r - 1; s->ptr = r; } |
|
31 |
-#define PUT1(a) { *(ptr) = a; } |
|
32 |
-#define PUT1x2(a, b) { *(ptr) = a; *(ptr - 1) = b; } |
|
33 |
-#define PUT1x3(a, b, c) { *(ptr) = a; *(ptr - 1) = b; *(ptr - 2) = c; } |
|
34 |
-#define PUT2(a) { POKE2(ptr - 1, a) } |
|
21 |
+#define N *(ptr - 1) |
|
22 |
+#define L *(ptr - 2) |
|
23 |
+#define T2 PEEK2((ptr - 1)) |
|
24 |
+#define H2 PEEK2((ptr - 2)) |
|
25 |
+#define N2 PEEK2((ptr - 3)) |
|
26 |
+#define L2 PEEK2((ptr - 5)) |
|
27 |
+#define HALT(c) { return emu_halt(u, ins, c, pc - 1); } |
|
28 |
+#define FLIP { s = ins & 0x40 ? &u->wst : &u->rst; } |
|
29 |
+#define SET(x, y) { r = s->ptr; if(x > r) HALT(1) r += (x & k) + y; if(r > 254) HALT(2) ptr = s->dat + r - 1; s->ptr = r; } |
|
30 |
+#define PUT1(a) { *ptr = a; } |
|
31 |
+#define PUT1x2(a, b) { *ptr = a; *(ptr - 1) = b; } |
|
32 |
+#define PUT1x3(a, b, c) { *ptr = a; *(ptr - 1) = b; *(ptr - 2) = c; } |
|
33 |
+#define PUT2(a) { r = (a); POKE2(ptr - 1, r) } |
|
35 | 34 |
#define PUT2x2(a, b) { POKE2(ptr - 1, a) POKE2(ptr - 3, b) } |
36 | 35 |
#define PUT2x3(a, b, c) { POKE2(ptr - 1, a) POKE2(ptr - 3, b) POKE2(ptr - 5, c) } |
37 | 36 |
|
... | ... |
@@ -49,7 +48,7 @@ uxn_eval(Uxn *u, Uint16 pc) |
49 | 48 |
switch(ins & 0x1f ? ins & 0x3f : ins << 4) { |
50 | 49 |
/* IMM */ |
51 | 50 |
case 0x000: /* BRK */ return 1; |
52 |
- case 0x200: /* JCI */ if(!s->dat[--s->ptr]) { pc += 2; break; } /* else fallthrough */ |
|
51 |
+ case 0x200: /* JCI */ t=T; SET(0,-1) if(!t) { pc += 2; break; } /* else fallthrough */ |
|
53 | 52 |
case 0x400: /* JMI */ pc += PEEK2(ram + pc) + 2; break; |
54 | 53 |
case 0x600: /* JSI */ SET(0, 2) PUT2(pc + 2) pc += PEEK2(ram + pc) + 2; break; |
55 | 54 |
case 0x800: /* LIT */ case 0xc00: SET(0, 1) PUT1(ram[pc++]) break; |
... | ... |
@@ -72,7 +72,7 @@ main(int argc, char **argv) |
72 | 72 |
system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK); |
73 | 73 |
/* Read flags */ |
74 | 74 |
if(argv[i][0] == '-' && argv[i][1] == 'v') |
75 |
- return system_version("Uxncli - Console Varvara Emulator", "29 Aug 2023"); |
|
75 |
+ return system_version("Uxncli - Console Varvara Emulator", "30 Aug 2023"); |
|
76 | 76 |
if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++])) |
77 | 77 |
return system_error("Init", "Failed to initialize uxn."); |
78 | 78 |
/* Game Loop */ |
... | ... |
@@ -516,7 +516,7 @@ main(int argc, char **argv) |
516 | 516 |
system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK); |
517 | 517 |
/* Read flags */ |
518 | 518 |
if(argv[i][0] == '-' && argv[i][1] == 'v') |
519 |
- return system_version("Uxnemu - Graphical Varvara Emulator", "29 Aug 2023"); |
|
519 |
+ return system_version("Uxnemu - Graphical Varvara Emulator", "30 Aug 2023"); |
|
520 | 520 |
if(strcmp(argv[i], "-2x") == 0 || strcmp(argv[i], "-3x") == 0) |
521 | 521 |
set_zoom(argv[i++][1] - '0', 0); |
522 | 522 |
if(!emu_init()) |