Browse code

(uxn.c) Removed used of stack pointer for circular arithmetic

neauoire authored on 30/10/2023 16:29:40
Showing 2 changed files
... ...
@@ -17,12 +17,12 @@ WITH REGARD TO THIS SOFTWARE.
17 17
 [   L2   ][   N2   ][   T2   ] <
18 18
 */
19 19
 
20
-#define T *(ptr)
21
-#define N *(ptr - 1)
22
-#define L *(ptr - 2)
23
-#define X *(ptr - 3)
24
-#define Y *(ptr - 4)
25
-#define Z *(ptr - 5)
20
+#define T *(s->dat + s->ptr - 1)
21
+#define N *(s->dat + s->ptr - 2)
22
+#define L *(s->dat + s->ptr - 3)
23
+#define X *(s->dat + s->ptr - 4)
24
+#define Y *(s->dat + s->ptr - 5)
25
+#define Z *(s->dat + s->ptr - 6)
26 26
 #define T2 (N << 8 | T)
27 27
 #define H2 (L << 8 | N)
28 28
 #define N2 (X << 8 | L)
... ...
@@ -30,12 +30,10 @@ WITH REGARD TO THIS SOFTWARE.
30 30
 #define T2_(v) { r = (v); T = r; N = r >> 8; }
31 31
 #define N2_(v) { r = (v); L = r; X = r >> 8; }
32 32
 #define L2_(v) { r = (v); Y = r; Z = r >> 8; }
33
-
34 33
 #define DEI(p) (dei_masks[p] ? emu_dei(u, (p)) : u->dev[(p)])
35 34
 #define DEO(p, v) { u->dev[p] = v; if(deo_masks[p]) emu_deo(u, p); }
36
-
37 35
 #define FLIP      { s = ins & 0x40 ? &u->wst : &u->rst; }
38
-#define SHIFT(y)  { s->ptr += (y); ptr = s->dat + s->ptr - 1; }
36
+#define SHIFT(y)  { s->ptr += (y); }
39 37
 #define SET(x, y) { SHIFT((ins & 0x80) ? x + y : y) }
40 38
 
41 39
 int
... ...
@@ -47,7 +45,6 @@ uxn_eval(Uxn *u, Uint16 pc)
47 45
 	for(;;) {
48 46
 		int ins = ram[pc++];
49 47
 		Stack *s = ins & 0x40 ? &u->rst : &u->wst;
50
-		Uint8 *ptr = s->dat + s->ptr - 1;
51 48
 		switch(ins & 0x1f ? ins & 0x3f : ins << 4) {
52 49
 			/* IMM */
53 50
 			case 0x000: /* BRK  */                          return 1;
... ...
@@ -561,7 +561,7 @@ main(int argc, char **argv)
561 561
 	/* Read flag. Right now, there can be only one. */
562 562
 	if(argv[i][0] == '-') {
563 563
 		if(argv[i][1] == 'v')
564
-			return system_version("Uxnemu - Graphical Varvara Emulator", "25 Oct 2023");
564
+			return system_version("Uxnemu - Graphical Varvara Emulator", "30 Oct 2023");
565 565
 		if(argv[i][1] == '-')
566 566
 			i++;
567 567
 		if(strcmp(argv[i], "-2x") == 0 || strcmp(argv[i], "-3x") == 0)