commit f8433ac

Devine Lu Linvega  ·  2026-02-15 18:15:49 +0000 UTC
parent dc078a2
STH opcode use PUT macro
1 files changed,  +9, -9
+9, -9
 1@@ -1037,11 +1037,11 @@ emu_deo(const Uint8 port, const Uint8 value)
 2 #define POx(o,m) o = DEC(r); if(m) o |= DEC(r) << 8;
 3 #define PUx(i,m,s) if(m) c = (i), INC(s) = c >> 8, INC(s) = c; else INC(s) = i;
 4 #define GOT(o) if(d) o[1] = DEC(r); o[0] = DEC(r);
 5-#define PUT(i) INC(r) = i[0]; if(d) INC(r) = i[1];
 6+#define PUT(i,m,s) INC(s) = i[0]; if(m) INC(s) = i[1];
 7 #define DEO(o,v) emu_deo(o, v[0]); if(d) emu_deo(o + 1, v[1]);
 8-#define DEI(i,v) v[0] = emu_dei(i); if(d) v[1] = emu_dei(i + 1); PUT(v)
 9+#define DEI(i,v) v[0] = emu_dei(i); if(d) v[1] = emu_dei(i + 1); PUT(v,d,r)
10 #define POK(o,v,m) ram[o] = v[0]; if(d) ram[(o + 1) & m] = v[1];
11-#define PEK(i,v,m) v[0] = ram[i]; if(d) v[1] = ram[(i + 1) & m]; PUT(v)
12+#define PEK(i,v,m) v[0] = ram[i]; if(d) v[1] = ram[(i + 1) & m]; PUT(v,d,r)
13 
14 static unsigned int
15 uxn_eval(Uint16 pc)
16@@ -1059,11 +1059,11 @@ uxn_eval(Uint16 pc)
17 	/* LIr */ case 0xc0: INC(1) = ram[pc++]; break;
18 	/* INC */ OPC(0x01,POx(a,d),PUx(a + 1,d,r))
19 	/* POP */ OPC(0x02,REM,{})
20-	/* NIP */ OPC(0x03,GOT(x) REM,PUT(x))
21-	/* SWP */ OPC(0x04,GOT(x) GOT(y),PUT(x) PUT(y))
22-	/* ROT */ OPC(0x05,GOT(x) GOT(y) GOT(z),PUT(y) PUT(x) PUT(z))
23-	/* DUP */ OPC(0x06,GOT(x),PUT(x) PUT(x))
24-	/* OVR */ OPC(0x07,GOT(x) GOT(y),PUT(y) PUT(x) PUT(y))
25+	/* NIP */ OPC(0x03,GOT(x) REM,PUT(x,d,r))
26+	/* SWP */ OPC(0x04,GOT(x) GOT(y),PUT(x,d,r) PUT(y,d,r))
27+	/* ROT */ OPC(0x05,GOT(x) GOT(y) GOT(z),PUT(y,d,r) PUT(x,d,r) PUT(z,d,r))
28+	/* DUP */ OPC(0x06,GOT(x),PUT(x,d,r) PUT(x,d,r))
29+	/* OVR */ OPC(0x07,GOT(x) GOT(y),PUT(y,d,r) PUT(x,d,r) PUT(y,d,r))
30 	/* EQU */ OPC(0x08,POx(a,d) POx(b,d),PUx(b == a,0,r))
31 	/* NEQ */ OPC(0x09,POx(a,d) POx(b,d),PUx(b != a,0,r))
32 	/* GTH */ OPC(0x0a,POx(a,d) POx(b,d),PUx(b > a,0,r))
33@@ -1071,7 +1071,7 @@ uxn_eval(Uint16 pc)
34 	/* JMP */ OPC(0x0c,POx(a,d),MOV(a))
35 	/* JCN */ OPC(0x0d,POx(a,d) POx(b,0),if(b) MOV(a))
36 	/* JSR */ OPC(0x0e,POx(a,d),PUx(pc,1,!r) MOV(a))
37-	/* STH */ OPC(0x0f,GOT(x),INC(!r) = x[0]; if(d) INC(!r) = x[1];)
38+	/* STH */ OPC(0x0f,GOT(x),PUT(x,d,!r))
39 	/* LDZ */ OPC(0x10,POx(a,0),PEK(a, x, 0xff))
40 	/* STZ */ OPC(0x11,POx(a,0) GOT(y),POK(a, y, 0xff))
41 	/* LDR */ OPC(0x12,POx(a,0),PEK(pc + (Sint8)a, x, 0xffff))