commit e16ffc7

Devine Lu Linvega  ·  2026-02-15 17:14:43 +0000 UTC
parent c01a35d
Merged all POP macros
1 files changed,  +27, -28
+27, -28
 1@@ -1032,12 +1032,11 @@ emu_deo(const Uint8 port, const Uint8 value)
 2 #define REM ptr[_r] -= 1 + _2;
 3 #define DEC(m) stk[m][--ptr[m]]
 4 #define INC(m) stk[m][ptr[m]++]
 5+#define POx(o,d) o = DEC(_r); if(d) o |= DEC(_r) << 8;
 6+
 7 #define IMM(r) { r = ram[pc++] << 8, r |= ram[pc++]; }
 8 #define MOV(x) { if(_2) pc = x; else pc += (signed char)x; }
 9-#define PO1(o) o = DEC(_r);
10-#define PO2(o) { PO1(o) o |= DEC(_r) << 8; }
11-#define POx(o) if(_2) PO2(o) else PO1(o)
12-#define GOT(o) if(_2) PO1(o[1]) PO1(o[0])
13+#define GOT(o) if(_2) o[1] = DEC(_r); o[0] = DEC(_r);
14 #define DEO(o,r) emu_deo(o, r[0]); if(_2) emu_deo(o + 1, r[1]);
15 #define POK(o,r,m) ram[o] = r[0]; if(_2) ram[(o + 1) & m] = r[1];
16 #define RP1(i) INC(!_r) = i;
17@@ -1061,37 +1060,37 @@ uxn_eval(unsigned short pc)
18 	/* LIT */ case 0x80: INC(0) = ram[pc++]; break;
19 	/* L2r */ case 0xe0: INC(1) = ram[pc++]; /* fall-through */
20 	/* LIr */ case 0xc0: INC(1) = ram[pc++]; break;
21-	/* INC */ OPC(0x01,POx(a),PUx(a + 1))
22+	/* INC */ OPC(0x01,POx(a,_2),PUx(a + 1))
23 	/* POP */ OPC(0x02,REM,{})
24 	/* NIP */ OPC(0x03,GOT(x) REM,PUT(x))
25 	/* SWP */ OPC(0x04,GOT(x) GOT(y),PUT(x) PUT(y))
26 	/* ROT */ OPC(0x05,GOT(x) GOT(y) GOT(z),PUT(y) PUT(x) PUT(z))
27 	/* DUP */ OPC(0x06,GOT(x),PUT(x) PUT(x))
28 	/* OVR */ OPC(0x07,GOT(x) GOT(y),PUT(y) PUT(x) PUT(y))
29-	/* EQU */ OPC(0x08,POx(a) POx(b),PU1(b == a))
30-	/* NEQ */ OPC(0x09,POx(a) POx(b),PU1(b != a))
31-	/* GTH */ OPC(0x0a,POx(a) POx(b),PU1(b > a))
32-	/* LTH */ OPC(0x0b,POx(a) POx(b),PU1(b < a))
33-	/* JMP */ OPC(0x0c,POx(a),MOV(a))
34-	/* JCN */ OPC(0x0d,POx(a) PO1(b),if(b) MOV(a))
35-	/* JSR */ OPC(0x0e,POx(a),RP1(pc >> 8) RP1(pc) MOV(a))
36+	/* EQU */ OPC(0x08,POx(a,_2) POx(b,_2),PU1(b == a))
37+	/* NEQ */ OPC(0x09,POx(a,_2) POx(b,_2),PU1(b != a))
38+	/* GTH */ OPC(0x0a,POx(a,_2) POx(b,_2),PU1(b > a))
39+	/* LTH */ OPC(0x0b,POx(a,_2) POx(b,_2),PU1(b < a))
40+	/* JMP */ OPC(0x0c,POx(a,_2),MOV(a))
41+	/* JCN */ OPC(0x0d,POx(a,_2) POx(b,0),if(b) MOV(a))
42+	/* JSR */ OPC(0x0e,POx(a,_2),RP1(pc >> 8) RP1(pc) MOV(a))
43 	/* STH */ OPC(0x0f,GOT(x),RP1(x[0]) if(_2) RP1(x[1]))
44-	/* LDZ */ OPC(0x10,PO1(a),PEK(a, x, 0xff))
45-	/* STZ */ OPC(0x11,PO1(a) GOT(y),POK(a, y, 0xff))
46-	/* LDR */ OPC(0x12,PO1(a),PEK(pc + (signed char)a, x, 0xffff))
47-	/* STR */ OPC(0x13,PO1(a) GOT(y),POK(pc + (signed char)a, y, 0xffff))
48-	/* LDA */ OPC(0x14,PO2(a),PEK(a, x, 0xffff))
49-	/* STA */ OPC(0x15,PO2(a) GOT(y),POK(a, y, 0xffff))
50-	/* DEI */ OPC(0x16,PO1(a),DEI(a, x))
51-	/* DEO */ OPC(0x17,PO1(a) GOT(y),DEO(a, y))
52-	/* ADD */ OPC(0x18,POx(a) POx(b),PUx(b + a))
53-	/* SUB */ OPC(0x19,POx(a) POx(b),PUx(b - a))
54-	/* MUL */ OPC(0x1a,POx(a) POx(b),PUx(b * a))
55-	/* DIV */ OPC(0x1b,POx(a) POx(b),PUx(a ? b / a : 0))
56-	/* AND */ OPC(0x1c,POx(a) POx(b),PUx(b & a))
57-	/* ORA */ OPC(0x1d,POx(a) POx(b),PUx(b | a))
58-	/* EOR */ OPC(0x1e,POx(a) POx(b),PUx(b ^ a))
59-	/* SFT */ OPC(0x1f,PO1(a) POx(b),PUx(b >> (a & 0xf) << (a >> 4)))
60+	/* LDZ */ OPC(0x10,POx(a,0),PEK(a, x, 0xff))
61+	/* STZ */ OPC(0x11,POx(a,0) GOT(y),POK(a, y, 0xff))
62+	/* LDR */ OPC(0x12,POx(a,0),PEK(pc + (signed char)a, x, 0xffff))
63+	/* STR */ OPC(0x13,POx(a,0) GOT(y),POK(pc + (signed char)a, y, 0xffff))
64+	/* LDA */ OPC(0x14,POx(a,1),PEK(a, x, 0xffff))
65+	/* STA */ OPC(0x15,POx(a,1) GOT(y),POK(a, y, 0xffff))
66+	/* DEI */ OPC(0x16,POx(a,0),DEI(a, x))
67+	/* DEO */ OPC(0x17,POx(a,0) GOT(y),DEO(a, y))
68+	/* ADD */ OPC(0x18,POx(a,_2) POx(b,_2),PUx(b + a))
69+	/* SUB */ OPC(0x19,POx(a,_2) POx(b,_2),PUx(b - a))
70+	/* MUL */ OPC(0x1a,POx(a,_2) POx(b,_2),PUx(b * a))
71+	/* DIV */ OPC(0x1b,POx(a,_2) POx(b,_2),PUx(a ? b / a : 0))
72+	/* AND */ OPC(0x1c,POx(a,_2) POx(b,_2),PUx(b & a))
73+	/* ORA */ OPC(0x1d,POx(a,_2) POx(b,_2),PUx(b | a))
74+	/* EOR */ OPC(0x1e,POx(a,_2) POx(b,_2),PUx(b ^ a))
75+	/* SFT */ OPC(0x1f,POx(a,0) POx(b,_2),PUx(b >> (a & 0xf) << (a >> 4)))
76 	}} return 0;
77 }
78