commit f43a943

Devine Lu Linvega  ·  2026-02-18 19:09:30 +0000 UTC
parent 3652117
IMM use temp register a
1 files changed,  +6, -7
+6, -7
 1@@ -1023,10 +1023,9 @@ emu_deo(const Uint8 port, const Uint8 value)
 2 	case 0xa0|opc: {const Uint8 d=1,r=0,k=ptr[0];A ptr[0]=k;B} break;\
 3 	case 0xc0|opc: {const Uint8 d=0,r=1,k=ptr[1];A ptr[1]=k;B} break;\
 4 	case 0xe0|opc: {const Uint8 d=1,r=1,k=ptr[1];A ptr[1]=k;B} break;}
 5-#define REM ptr[r] -= 1 + d;
 6 #define DEC(m) stk[m][--ptr[m]]
 7 #define INC(m) stk[m][ptr[m]++]
 8-#define IMM c = ram[pc++] << 8, c |= ram[pc++];
 9+#define IMM a = ram[pc++] << 8, a |= ram[pc++];
10 #define MOV pc = d ? (Uint16)a : pc + (Sint8)a;
11 #define POx(o,m) o = DEC(r); if(m) o |= DEC(r) << 8;
12 #define PUx(i,m,s) if(m) c = (i), INC(s) = c >> 8, INC(s) = c; else INC(s) = i;
13@@ -1044,16 +1043,16 @@ uxn_eval(Uint16 pc)
14 	for(;;)
15 	switch(ram[pc++]) {
16 	/* BRK */ case 0x00: return 1;
17-	/* JCI */ case 0x20: if(DEC(0)) { IMM pc += c; } else pc += 2; break;
18-	/* JMI */ case 0x40: IMM pc += c; break;
19-	/* JSI */ case 0x60: IMM INC(1) = pc >> 8, INC(1) = pc, pc += c; break;
20+	/* JCI */ case 0x20: if(DEC(0)) { IMM pc += a; } else pc += 2; break;
21+	/* JMI */ case 0x40: IMM pc += a; break;
22+	/* JSI */ case 0x60: IMM PUx(pc, 1, 1) pc += a; break;
23 	/* LI2 */ case 0xa0: INC(0) = ram[pc++]; /* fall-through */
24 	/* LIT */ case 0x80: INC(0) = ram[pc++]; break;
25 	/* L2r */ case 0xe0: INC(1) = ram[pc++]; /* fall-through */
26 	/* LIr */ case 0xc0: INC(1) = ram[pc++]; break;
27 	/* INC */ OPC(0x01,POx(a,d),PUx(a + 1,d,r))
28-	/* POP */ OPC(0x02,REM,{})
29-	/* NIP */ OPC(0x03,GOT(x) REM,PUT(x,r))
30+	/* POP */ OPC(0x02,ptr[r] -= 1 + d;,{})
31+	/* NIP */ OPC(0x03,GOT(x) ptr[r] -= 1 + d;,PUT(x,r))
32 	/* SWP */ OPC(0x04,GOT(x) GOT(y),PUT(x,r) PUT(y,r))
33 	/* ROT */ OPC(0x05,GOT(x) GOT(y) GOT(z),PUT(y,r) PUT(x,r) PUT(z,r))
34 	/* DUP */ OPC(0x06,GOT(x),PUT(x,r) PUT(x,r))