Browse code

Removed param in PUSH() macro

Devine Lu Linvega authored on 26/02/2023 17:55:39
Showing 1 changed files
... ...
@@ -11,17 +11,17 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 11
 WITH REGARD TO THIS SOFTWARE.
12 12
 */
13 13
 
14
-/*	a,b,c: general use.  bs: byte/short bool. src, dst: stack ptrs, swapped in return mode.
14
+/*	a,b,c: general use.  bs: byte/short bool.
15 15
 	pc: program counter. sp: ptr to src stack ptr. kptr: "keep" mode copy of src stack ptr.
16 16
 	x,y: macro in params. d: macro in device. j: macro temp variables. o: macro out param. */
17 17
 
18 18
 #define HALT(c) { return uxn_halt(u, instr, (c), pc - 1); }
19 19
 #define JUMP(x) { if(bs) pc = (x); else pc += (Sint8)(x); }
20
-#define PUSH8(s, x) { if(s->ptr == 0xff) HALT(2) s->dat[s->ptr++] = (x); }
21
-#define PUSH16(s, x) { if((j = s->ptr) >= 0xfe) HALT(2) k = (x); s->dat[j] = k >> 8; s->dat[j + 1] = k; s->ptr = j + 2; }
22
-#define PUSH(s, x) { if(bs) { PUSH16(s, (x)) } else { PUSH8(s, (x)) } }
23
-#define POP8(o) { if(!(j = *sp)) HALT(1) o = (Uint16)src->dat[--j]; *sp = j; }
24
-#define POP16(o) { if((j = *sp) <= 1) HALT(1) o = (src->dat[j - 2] << 8) + src->dat[j - 1]; *sp = j - 2; }
20
+#define PUSH8(x) { if(s->ptr == 0xff) HALT(2) s->dat[s->ptr++] = (x); }
21
+#define PUSH16(x) { if((j = s->ptr) >= 0xfe) HALT(2) k = (x); s->dat[j] = k >> 8; s->dat[j + 1] = k; s->ptr = j + 2; }
22
+#define PUSH(x) { if(bs) { PUSH16(x) } else { PUSH8(x) } }
23
+#define POP8(o) { if(!(j = *sp)) HALT(1) o = (Uint16)s->dat[--j]; *sp = j; }
24
+#define POP16(o) { if((j = *sp) <= 1) HALT(1) o = (s->dat[j - 2] << 8) + s->dat[j - 1]; *sp = j - 2; }
25 25
 #define POP(o) { if(bs) { POP16(o) } else { POP8(o) } }
26 26
 #define POKE(x, y) { if(bs) { u->ram[(x)] = (y) >> 8; u->ram[(x) + 1] = (y); } else { u->ram[(x)] = y; } }
27 27
 #define PEEK16(o, x) { o = (u->ram[(x)] << 8) + u->ram[(x) + 1]; }
... ...
@@ -34,61 +34,61 @@ uxn_eval(Uxn *u, Uint16 pc)
34 34
 {
35 35
 	Uint8 kptr, *sp;
36 36
 	Uint16 a, b, c, j, k, bs, instr, opcode;
37
-	Stack *src, *dst;
37
+	Stack *s;
38 38
 	if(!pc || u->dev[0x0f]) return 0;
39 39
 	for(;;) {
40 40
 		instr = u->ram[pc++];
41
-		/* Return Mode */
42
-		if(instr & 0x40) { src = u->rst; dst = u->wst; }
43
-		else { src = u->wst; dst = u->rst; }
44
-		/* Keep Mode */
45
-		if(instr & 0x80) { kptr = src->ptr; sp = &kptr; }
46
-		else sp = &src->ptr;
47 41
 		/* Short Mode */
48 42
 		bs = instr & 0x20;
43
+		/* Return Mode */
44
+		s = instr & 0x40 ? u->rst : u->wst;
45
+		/* Keep Mode */
46
+		if(instr & 0x80) { kptr = s->ptr; sp = &kptr; }
47
+		else sp = &s->ptr;
48
+		/* Opcodes */
49 49
 		opcode = instr & 0x1f;
50 50
 		switch(opcode - (!opcode * (instr >> 5))) {
51
-		/* Literals/Calls */
51
+		/* Immediate */
52 52
 		case -0x0: /* BRK */ return 1;
53 53
 		case -0x1: /* JCI */ POP8(b) if(!b) { pc += 2; break; }
54 54
 		case -0x2: /* JMI */ PEEK16(a, pc) pc += a + 2; break;
55
-		case -0x3: /* JSI */ PUSH16(u->rst, pc + 2) PEEK16(a, pc) pc += a + 2; break;
55
+		case -0x3: /* JSI */ s = u->rst; PUSH16(pc + 2) PEEK16(a, pc) pc += a + 2; break;
56 56
 		case -0x4: /* LIT */
57
-		case -0x6: /* LITr */ a = u->ram[pc++]; PUSH8(src, a) break;
57
+		case -0x6: /* LITr */ a = u->ram[pc++]; PUSH8(a) break;
58 58
 		case -0x5: /* LIT2 */
59
-		case -0x7: /* LIT2r */ PEEK16(a, pc) PUSH16(src, a) pc += 2; break;
59
+		case -0x7: /* LIT2r */ PEEK16(a, pc) PUSH16(a) pc += 2; break;
60 60
 		/* ALU */
61
-		case 0x01: /* INC */ POP(a) PUSH(src, a + 1) break;
61
+		case 0x01: /* INC */ POP(a) PUSH(a + 1) break;
62 62
 		case 0x02: /* POP */ POP(a) break;
63
-		case 0x03: /* NIP */ POP(a) POP(b) PUSH(src, a) break;
64
-		case 0x04: /* SWP */ POP(a) POP(b) PUSH(src, a) PUSH(src, b) break;
65
-		case 0x05: /* ROT */ POP(a) POP(b) POP(c) PUSH(src, b) PUSH(src, a) PUSH(src, c) break;
66
-		case 0x06: /* DUP */ POP(a) PUSH(src, a) PUSH(src, a) break;
67
-		case 0x07: /* OVR */ POP(a) POP(b) PUSH(src, b) PUSH(src, a) PUSH(src, b) break;
68
-		case 0x08: /* EQU */ POP(a) POP(b) PUSH8(src, b == a) break;
69
-		case 0x09: /* NEQ */ POP(a) POP(b) PUSH8(src, b != a) break;
70
-		case 0x0a: /* GTH */ POP(a) POP(b) PUSH8(src, b > a) break;
71
-		case 0x0b: /* LTH */ POP(a) POP(b) PUSH8(src, b < a) break;
63
+		case 0x03: /* NIP */ POP(a) POP(b) PUSH(a) break;
64
+		case 0x04: /* SWP */ POP(a) POP(b) PUSH(a) PUSH(b) break;
65
+		case 0x05: /* ROT */ POP(a) POP(b) POP(c) PUSH(b) PUSH(a) PUSH(c) break;
66
+		case 0x06: /* DUP */ POP(a) PUSH(a) PUSH(a) break;
67
+		case 0x07: /* OVR */ POP(a) POP(b) PUSH(b) PUSH(a) PUSH(b) break;
68
+		case 0x08: /* EQU */ POP(a) POP(b) PUSH8(b == a) break;
69
+		case 0x09: /* NEQ */ POP(a) POP(b) PUSH8(b != a) break;
70
+		case 0x0a: /* GTH */ POP(a) POP(b) PUSH8(b > a) break;
71
+		case 0x0b: /* LTH */ POP(a) POP(b) PUSH8(b < a) break;
72 72
 		case 0x0c: /* JMP */ POP(a) JUMP(a) break;
73 73
 		case 0x0d: /* JCN */ POP(a) POP8(b) if(b) JUMP(a) break;
74
-		case 0x0e: /* JSR */ POP(a) PUSH16(dst, pc) JUMP(a) break;
75
-		case 0x0f: /* STH */ POP(a) PUSH(dst, a) break;
76
-		case 0x10: /* LDZ */ POP8(a) PEEK(b, a) PUSH(src, b) break;
74
+		case 0x0e: /* JSR */ POP(a) s = (instr & 0x40) ? u->wst : u->rst; PUSH16(pc) JUMP(a) break;
75
+		case 0x0f: /* STH */ POP(a) s = (instr & 0x40) ? u->wst : u->rst; PUSH(a) break;
76
+		case 0x10: /* LDZ */ POP8(a) PEEK(b, a) PUSH(b) break;
77 77
 		case 0x11: /* STZ */ POP8(a) POP(b) POKE(a, b) break;
78
-		case 0x12: /* LDR */ POP8(a) b = pc + (Sint8)a; PEEK(c, b) PUSH(src, c) break;
78
+		case 0x12: /* LDR */ POP8(a) b = pc + (Sint8)a; PEEK(c, b) PUSH(c) break;
79 79
 		case 0x13: /* STR */ POP8(a) POP(b) c = pc + (Sint8)a; POKE(c, b) break;
80
-		case 0x14: /* LDA */ POP16(a) PEEK(b, a) PUSH(src, b) break;
80
+		case 0x14: /* LDA */ POP16(a) PEEK(b, a) PUSH(b) break;
81 81
 		case 0x15: /* STA */ POP16(a) POP(b) POKE(a, b) break;
82
-		case 0x16: /* DEI */ POP8(a) DEVR(b, a) PUSH(src, b) break;
82
+		case 0x16: /* DEI */ POP8(a) DEVR(b, a) PUSH(b) break;
83 83
 		case 0x17: /* DEO */ POP8(a) POP(b) DEVW(a, b) break;
84
-		case 0x18: /* ADD */ POP(a) POP(b) PUSH(src, b + a) break;
85
-		case 0x19: /* SUB */ POP(a) POP(b) PUSH(src, b - a) break;
86
-		case 0x1a: /* MUL */ POP(a) POP(b) PUSH(src, (Uint32)b * a) break;
87
-		case 0x1b: /* DIV */ POP(a) POP(b) if(!a) HALT(3) PUSH(src, b / a) break;
88
-		case 0x1c: /* AND */ POP(a) POP(b) PUSH(src, b & a) break;
89
-		case 0x1d: /* ORA */ POP(a) POP(b) PUSH(src, b | a) break;
90
-		case 0x1e: /* EOR */ POP(a) POP(b) PUSH(src, b ^ a) break;
91
-		case 0x1f: /* SFT */ POP8(a) POP(b) PUSH(src, b >> (a & 0x0f) << ((a & 0xf0) >> 4)) break;
84
+		case 0x18: /* ADD */ POP(a) POP(b) PUSH(b + a) break;
85
+		case 0x19: /* SUB */ POP(a) POP(b) PUSH(b - a) break;
86
+		case 0x1a: /* MUL */ POP(a) POP(b) PUSH((Uint32)b * a) break;
87
+		case 0x1b: /* DIV */ POP(a) POP(b) if(!a) HALT(3) PUSH(b / a) break;
88
+		case 0x1c: /* AND */ POP(a) POP(b) PUSH(b & a) break;
89
+		case 0x1d: /* ORA */ POP(a) POP(b) PUSH(b | a) break;
90
+		case 0x1e: /* EOR */ POP(a) POP(b) PUSH(b ^ a) break;
91
+		case 0x1f: /* SFT */ POP8(a) POP(b) PUSH(b >> (a & 0x0f) << ((a & 0xf0) >> 4)) break;
92 92
 		}
93 93
 	}
94 94
 }