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))