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