commit b0e0522
Devine Lu Linvega
·
2026-02-15 17:37:41 +0000 UTC
parent e16ffc7
Removed redundant macros
1 files changed,
+39,
-42
+39,
-42
1@@ -1021,30 +1021,27 @@ emu_deo(const Uint8 port, const Uint8 value)
2 /* clang-format off */
3
4 #define OPC(opc, A, B) {\
5- case 0x00|opc: {const Uint8 _2=0,_r=0;A B} break;\
6- case 0x20|opc: {const Uint8 _2=1,_r=0;A B} break;\
7- case 0x40|opc: {const Uint8 _2=0,_r=1;A B} break;\
8- case 0x60|opc: {const Uint8 _2=1,_r=1;A B} break;\
9- case 0x80|opc: {const Uint8 _2=0,_r=0,k=ptr[0];A ptr[0]=k;B} break;\
10- case 0xa0|opc: {const Uint8 _2=1,_r=0,k=ptr[0];A ptr[0]=k;B} break;\
11- case 0xc0|opc: {const Uint8 _2=0,_r=1,k=ptr[1];A ptr[1]=k;B} break;\
12- case 0xe0|opc: {const Uint8 _2=1,_r=1,k=ptr[1];A ptr[1]=k;B} break;}
13-#define REM ptr[_r] -= 1 + _2;
14+ case 0x00|opc: {const Uint8 d=0,r=0;A B} break;\
15+ case 0x20|opc: {const Uint8 d=1,r=0;A B} break;\
16+ case 0x40|opc: {const Uint8 d=0,r=1;A B} break;\
17+ case 0x60|opc: {const Uint8 d=1,r=1;A B} break;\
18+ case 0x80|opc: {const Uint8 d=0,r=0,k=ptr[0];A ptr[0]=k;B} break;\
19+ case 0xa0|opc: {const Uint8 d=1,r=0,k=ptr[0];A ptr[0]=k;B} break;\
20+ case 0xc0|opc: {const Uint8 d=0,r=1,k=ptr[1];A ptr[1]=k;B} break;\
21+ case 0xe0|opc: {const Uint8 d=1,r=1,k=ptr[1];A ptr[1]=k;B} break;}
22+#define REM ptr[r] -= 1 + d;
23 #define DEC(m) stk[m][--ptr[m]]
24 #define INC(m) stk[m][ptr[m]++]
25-#define POx(o,d) o = DEC(_r); if(d) o |= DEC(_r) << 8;
26-
27-#define IMM(r) { r = ram[pc++] << 8, r |= ram[pc++]; }
28-#define MOV(x) { if(_2) pc = x; else pc += (signed char)x; }
29-#define GOT(o) if(_2) o[1] = DEC(_r); o[0] = DEC(_r);
30-#define DEO(o,r) emu_deo(o, r[0]); if(_2) emu_deo(o + 1, r[1]);
31-#define POK(o,r,m) ram[o] = r[0]; if(_2) ram[(o + 1) & m] = r[1];
32-#define RP1(i) INC(!_r) = i;
33-#define PU1(i) INC(_r) = i;
34-#define PUx(i) if(_2) { c = (i); PU1(c >> 8) PU1(c) } else PU1(i)
35-#define PUT(i) PU1(i[0]) if(_2) PU1(i[1])
36-#define DEI(i,r) r[0] = emu_dei(i); if(_2) r[1] = emu_dei(i + 1); PUT(r)
37-#define PEK(i,r,m) r[0] = ram[i]; if(_2) r[1] = ram[(i + 1) & m]; PUT(r)
38+#define IMM(o) o = ram[pc++] << 8, o |= ram[pc++];
39+#define MOV(o) { pc = d ? (unsigned short)o : pc + (Sint8)o; }
40+#define POx(o,m) o = DEC(r); if(m) o |= DEC(r) << 8;
41+#define PUx(i,m) if(m) c = (i), INC(r) = c >> 8, INC(r) = c; else INC(r) = i;
42+#define GOT(o) if(d) o[1] = DEC(r); o[0] = DEC(r);
43+#define PUT(i) PUx(i[0],0) if(d) { PUx(i[1],0) }
44+#define DEO(o,v) emu_deo(o, v[0]); if(d) emu_deo(o + 1, v[1]);
45+#define DEI(i,v) v[0] = emu_dei(i); if(d) v[1] = emu_dei(i + 1); PUT(v)
46+#define POK(o,v,m) ram[o] = v[0]; if(d) ram[(o + 1) & m] = v[1];
47+#define PEK(i,v,m) v[0] = ram[i]; if(d) v[1] = ram[(i + 1) & m]; PUT(v)
48
49 static unsigned int
50 uxn_eval(unsigned short pc)
51@@ -1060,37 +1057,37 @@ uxn_eval(unsigned short pc)
52 /* LIT */ case 0x80: INC(0) = ram[pc++]; break;
53 /* L2r */ case 0xe0: INC(1) = ram[pc++]; /* fall-through */
54 /* LIr */ case 0xc0: INC(1) = ram[pc++]; break;
55- /* INC */ OPC(0x01,POx(a,_2),PUx(a + 1))
56+ /* INC */ OPC(0x01,POx(a,d),PUx(a + 1, d))
57 /* POP */ OPC(0x02,REM,{})
58 /* NIP */ OPC(0x03,GOT(x) REM,PUT(x))
59 /* SWP */ OPC(0x04,GOT(x) GOT(y),PUT(x) PUT(y))
60 /* ROT */ OPC(0x05,GOT(x) GOT(y) GOT(z),PUT(y) PUT(x) PUT(z))
61 /* DUP */ OPC(0x06,GOT(x),PUT(x) PUT(x))
62 /* OVR */ OPC(0x07,GOT(x) GOT(y),PUT(y) PUT(x) PUT(y))
63- /* EQU */ OPC(0x08,POx(a,_2) POx(b,_2),PU1(b == a))
64- /* NEQ */ OPC(0x09,POx(a,_2) POx(b,_2),PU1(b != a))
65- /* GTH */ OPC(0x0a,POx(a,_2) POx(b,_2),PU1(b > a))
66- /* LTH */ OPC(0x0b,POx(a,_2) POx(b,_2),PU1(b < a))
67- /* JMP */ OPC(0x0c,POx(a,_2),MOV(a))
68- /* JCN */ OPC(0x0d,POx(a,_2) POx(b,0),if(b) MOV(a))
69- /* JSR */ OPC(0x0e,POx(a,_2),RP1(pc >> 8) RP1(pc) MOV(a))
70- /* STH */ OPC(0x0f,GOT(x),RP1(x[0]) if(_2) RP1(x[1]))
71+ /* EQU */ OPC(0x08,POx(a,d) POx(b,d),PUx(b == a,0))
72+ /* NEQ */ OPC(0x09,POx(a,d) POx(b,d),PUx(b != a,0))
73+ /* GTH */ OPC(0x0a,POx(a,d) POx(b,d),PUx(b > a,0))
74+ /* LTH */ OPC(0x0b,POx(a,d) POx(b,d),PUx(b < a,0))
75+ /* JMP */ OPC(0x0c,POx(a,d),MOV(a))
76+ /* JCN */ OPC(0x0d,POx(a,d) POx(b,0),if(b) MOV(a))
77+ /* JSR */ OPC(0x0e,POx(a,d),INC(!r) = pc >> 8; INC(!r) = pc; MOV(a))
78+ /* STH */ OPC(0x0f,GOT(x),INC(!r) = x[0]; if(d) INC(!r) = x[1];)
79 /* LDZ */ OPC(0x10,POx(a,0),PEK(a, x, 0xff))
80 /* STZ */ OPC(0x11,POx(a,0) GOT(y),POK(a, y, 0xff))
81- /* LDR */ OPC(0x12,POx(a,0),PEK(pc + (signed char)a, x, 0xffff))
82- /* STR */ OPC(0x13,POx(a,0) GOT(y),POK(pc + (signed char)a, y, 0xffff))
83+ /* LDR */ OPC(0x12,POx(a,0),PEK(pc + (Sint8)a, x, 0xffff))
84+ /* STR */ OPC(0x13,POx(a,0) GOT(y),POK(pc + (Sint8)a, y, 0xffff))
85 /* LDA */ OPC(0x14,POx(a,1),PEK(a, x, 0xffff))
86 /* STA */ OPC(0x15,POx(a,1) GOT(y),POK(a, y, 0xffff))
87 /* DEI */ OPC(0x16,POx(a,0),DEI(a, x))
88 /* DEO */ OPC(0x17,POx(a,0) GOT(y),DEO(a, y))
89- /* ADD */ OPC(0x18,POx(a,_2) POx(b,_2),PUx(b + a))
90- /* SUB */ OPC(0x19,POx(a,_2) POx(b,_2),PUx(b - a))
91- /* MUL */ OPC(0x1a,POx(a,_2) POx(b,_2),PUx(b * a))
92- /* DIV */ OPC(0x1b,POx(a,_2) POx(b,_2),PUx(a ? b / a : 0))
93- /* AND */ OPC(0x1c,POx(a,_2) POx(b,_2),PUx(b & a))
94- /* ORA */ OPC(0x1d,POx(a,_2) POx(b,_2),PUx(b | a))
95- /* EOR */ OPC(0x1e,POx(a,_2) POx(b,_2),PUx(b ^ a))
96- /* SFT */ OPC(0x1f,POx(a,0) POx(b,_2),PUx(b >> (a & 0xf) << (a >> 4)))
97+ /* ADD */ OPC(0x18,POx(a,d) POx(b,d),PUx(b + a, d))
98+ /* SUB */ OPC(0x19,POx(a,d) POx(b,d),PUx(b - a, d))
99+ /* MUL */ OPC(0x1a,POx(a,d) POx(b,d),PUx(b * a, d))
100+ /* DIV */ OPC(0x1b,POx(a,d) POx(b,d),PUx(a ? b / a : 0, d))
101+ /* AND */ OPC(0x1c,POx(a,d) POx(b,d),PUx(b & a, d))
102+ /* ORA */ OPC(0x1d,POx(a,d) POx(b,d),PUx(b | a, d))
103+ /* EOR */ OPC(0x1e,POx(a,d) POx(b,d),PUx(b ^ a, d))
104+ /* SFT */ OPC(0x1f,POx(a,0) POx(b,d),PUx(b >> (a & 0xf) << (a >> 4), d))
105 }} return 0;
106 }
107
108@@ -1308,7 +1305,7 @@ main(int argc, char **argv)
109 {
110 int i = 1;
111 if(argc == 2 && argv[1][0] == '-' && argv[1][1] == 'v')
112- return !fprintf(stdout, "%s - Varvara Emulator, 11 Feb 2026.\n", argv[0]);
113+ return !fprintf(stdout, "%s - Varvara Emulator, 15 Feb 2026.\n", argv[0]);
114 else if(argc == 1)
115 return !fprintf(stdout, "usage: %s [-v] file.rom [args..]\n", argv[0]);
116 else if(!system_boot(argv[i++], argc > 2))