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