Browse code

Store instance device in Uxn itself

neauoire authored on 12/11/2023 04:57:28
Showing 4 changed files
... ...
@@ -48,7 +48,7 @@ uxn_eval(Uxn *u, Uint16 pc)
48 48
 		case 0x00: case 0x20:
49 49
 			switch(ins) {
50 50
 			case 0x00: /* BRK  */                       return 1;
51
-			case 0x20: /* JCI  */ t=T;        SHIFT(-1) if(!t) { pc += 2; break; }
51
+			case 0x20: /* JCI  */ t=T;        SHIFT(-1) if(!t) { pc += 2; break; } /* fall-through */
52 52
 			case 0x40: /* JMI  */                       rr = ram + pc; pc += 2 + PEEK2(rr); break;
53 53
 			case 0x60: /* JSI  */             SHIFT( 2) rr = ram + pc; pc += 2; T2_(pc); pc += PEEK2(rr); break;
54 54
 			case 0x80: /* LIT  */ case 0xc0:  SHIFT( 1) T = ram[pc++]; break;
... ...
@@ -29,7 +29,7 @@ typedef struct {
29 29
 } Stack;
30 30
 
31 31
 typedef struct Uxn {
32
-	Uint8 *ram, *dev;
32
+	Uint8 *ram, dev[0x100];
33 33
 	Stack wst, rst;
34 34
 } Uxn;
35 35
 
... ...
@@ -64,9 +64,7 @@ emu_end(Uxn *u)
64 64
 int
65 65
 main(int argc, char **argv)
66 66
 {
67
-	Uint8 dev[0x100] = {0};
68
-	Uxn u;
69
-	u.dev = (Uint8 *)&dev;
67
+	Uxn u = {0};
70 68
 	int i = 1;
71 69
 	if(i == argc)
72 70
 		return system_error("usage", "uxncli [-v] file.rom [args..]");
... ...
@@ -486,11 +486,9 @@ emu_end(Uxn *u)
486 486
 int
487 487
 main(int argc, char **argv)
488 488
 {
489
-	Uint8 dev[0x100] = {0};
490
-	Uxn u = {0};
491
-	Uxn u_audio = {0};
492
-	u.dev = (Uint8 *)&dev;
493
-	u_audio.dev = (Uint8 *)&dev;
489
+	Uint8 *ram;
490
+	char *rom;
491
+	Uxn u = {0}, u_audio = {0};
494 492
 	int i = 1;
495 493
 	if(i == argc)
496 494
 		return system_error("usage", "uxnemu [-v] | uxnemu [-f | -2x | -3x | --] file.rom [args...]");
... ...
@@ -508,11 +506,9 @@ main(int argc, char **argv)
508 506
 		}
509 507
 	}
510 508
 	/* Start system. */
511
-	Uint8 *ram = (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8));
512
-	char *rom = argv[i++];
513
-	if(!system_init(&u, ram, rom))
514
-		return system_error("Init", "Failed to initialize uxn.");
515
-	if(!system_init(&u_audio, ram, rom))
509
+	ram = (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8));
510
+	rom = argv[i++];
511
+	if(!system_init(&u, ram, rom) || !system_init(&u_audio, ram, rom))
516 512
 		return system_error("Init", "Failed to initialize uxn.");
517 513
 	if(!emu_init(&u_audio))
518 514
 		return system_error("Init", "Failed to initialize varvara.");