commit e379cfa

Devine Lu Linvega  ·  2024-07-01 01:45:25 +0000 UTC
parent 9d0803e
Faster imm opcodes
3 files changed,  +15, -8
+13, -6
 1@@ -47,12 +47,19 @@ uxn_eval(Uint16 pc)
 2 		/* IMM */
 3 		case 0x00: case 0x20:
 4 			switch(ins) {
 5-			case 0x00: /* BRK  */                       return 1;
 6-			case 0x20: /* JCI  */ t=T;        SHIFT(-1) if(!t) { pc += 2; break; } /* fall-through */
 7-			case 0x40: /* JMI  */                       rr = uxn.ram + pc; pc += 2 + PEEK2(rr); break;
 8-			case 0x60: /* JSI  */             SHIFT( 2) rr = uxn.ram + pc; pc += 2; T2_(pc); pc += PEEK2(rr); break;
 9-			case 0x80: /* LIT  */ case 0xc0:  SHIFT( 1) T = uxn.ram[pc++]; break;
10-			case 0xa0: /* LIT2 */ case 0xe0:  SHIFT( 2) N = uxn.ram[pc++]; T = uxn.ram[pc++]; break;
11+			case 0x00: /* BRK   */ return 1;
12+			case 0x20: /* JCI   */ if(!uxn.wst.dat[uxn.wst.ptr--]) { pc += 2; break; } /* fall-through */
13+			case 0x40: /* JMI   */ rr = uxn.ram + pc; pc += 2 + PEEK2(rr); break;
14+			case 0x60: /* JSI   */ uxn.rst.ptr += 2;
15+			rr = uxn.ram + pc;
16+			pc += 2; r = pc;
17+			uxn.rst.dat[uxn.rst.ptr] = pc;
18+			uxn.rst.dat[(Uint8)(uxn.rst.ptr - 1)] = pc >> 8;
19+			pc += PEEK2(rr); break;
20+			case 0xa0: /* LIT2  */ uxn.wst.dat[++uxn.wst.ptr] = uxn.ram[pc++]; /* fall-through */
21+			case 0x80: /* LIT   */ uxn.wst.dat[++uxn.wst.ptr] = uxn.ram[pc++]; break;
22+			case 0xe0: /* LIT2r */ uxn.rst.dat[++uxn.rst.ptr] = uxn.ram[pc++]; /* fall-through */
23+			case 0xc0: /* LITr  */ uxn.rst.dat[++uxn.rst.ptr] = uxn.ram[pc++]; break;
24 			} break;
25 		/* ALU */
26 		case 0x01: /* INC  */ t=T;            SET(1, 0) T = t + 1; break;
+1, -1
1@@ -272,7 +272,7 @@ main(int argc, char **argv)
2 	int i = 1;
3 	char *rom;
4 	if(i != argc && argv[i][0] == '-' && argv[i][1] == 'v') {
5-		fprintf(stdout, "Uxn11 - Varvara Emulator, 29 Jun 2024.\n");
6+		fprintf(stdout, "Uxn11 - Varvara Emulator, 30 Jun 2024.\n");
7 		i++;
8 	}
9 	rom = i == argc ? "boot.rom" : argv[i++];
+1, -1
1@@ -72,7 +72,7 @@ main(int argc, char **argv)
2 		return system_error("usage", "uxncli [-v] file.rom [args..]");
3 	/* Read flags */
4 	if(argv[i][0] == '-' && argv[i][1] == 'v')
5-		return !printf("Uxncli - Console Varvara Emulator, 29 Jun 2024\n");
6+		return !printf("Uxncli - Console Varvara Emulator, 30 Jun 2024\n");
7 	if(!system_boot((Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++]))
8 		return system_error("Init", "Failed to initialize uxn.");
9 	/* Game Loop */