commit 4a97a20

Devine Lu Linvega  ·  2024-03-18 17:37:44 +0000 UTC
parent 52f9f9d
Added extra System/Expansion ports
4 files changed,  +77, -6
+56, -0
 1@@ -0,0 +1,56 @@
 2+|00 @System &vector $2 &expansion $2 &wst $1 &rst $1 &metadata $2 &r $2 &g $2 &b $2 &debug $1 &state $1
 3+|100
 4+
 5+@on-reset ( -> )
 6+	;buf <pstr>
 7+	#2018 DEO
 8+	;buf <pstr>
 9+	#0a18 DEO
10+	( | copy left )
11+	;buf #0006 ADD2 ;mmu-cpyl/a STA2
12+	;buf #0003 ADD2 ;mmu-cpyl/b STA2
13+	;mmu-cpyl .System/expansion DEO2
14+	;buf <pstr>
15+	#2018 DEO
16+	;res1 <pstr>
17+	#0a18 DEO
18+	( | copy right )
19+	;buf #0003 ADD2 ;mmu-cpyr/a STA2
20+	;buf #0009 ADD2 ;mmu-cpyr/b STA2
21+	;mmu-cpyr .System/expansion DEO2
22+	;buf <pstr>
23+	#2018 DEO
24+	;res2 <pstr>
25+	#0a18 DEO
26+	( | copy left )
27+	;buf #0009 ADD2 ;mmu-cpyl/a STA2
28+	;buf #0006 ADD2 ;mmu-cpyl/b STA2
29+	;mmu-cpyl .System/expansion DEO2
30+	;buf <pstr>
31+	#2018 DEO
32+	;res3 <pstr>
33+	#0a18 DEO
34+	( | memset )
35+	;buf #0003 ADD2 ;mmu-fill/a STA2
36+	;mmu-fill .System/expansion DEO2
37+	;buf <pstr>
38+	#2018 DEO
39+	;res4 <pstr>
40+	#0a18 DEO
41+	BRK
42+
43+@<pstr> ( str* -- )
44+	LDAk #18 DEO
45+	INC2 LDAk ?<pstr>
46+	POP2 JMP2r
47+
48+@buf  [ "......[hello]..... $1 ]
49+@res1 [ "...[hello]o]...... $1 ]
50+@res2 [ "...[hello[hello].. $1 ]
51+@res3 [ "...[he[hello]lo].. $1 ]
52+@res4 [ "...-------------.. $1 ]
53+
54+@mmu-fill [ 00 000d 0000 &a $2 2d ]
55+@mmu-cpyl [ 01 0007 0000 &a $2 0000 &b $2 ]
56+@mmu-cpyr [ 02 0007 0000 &a $2 0000 &b $2 ]
57+
+19, -4
 1@@ -116,14 +116,29 @@ system_deo(Uxn *u, Uint8 *d, Uint8 port)
 2 	case 0x3:
 3 		ram = u->ram;
 4 		addr = PEEK2(d + 2);
 5-		if(ram[addr] == 0x1) {
 6+		if(ram[addr] == 0x0) {
 7+			Uint8 value = ram[addr + 7];
 8 			Uint16 i, length = PEEK2(ram + addr + 1);
 9-			Uint16 a_page = PEEK2(ram + addr + 1 + 2), a_addr = PEEK2(ram + addr + 1 + 4);
10-			Uint16 b_page = PEEK2(ram + addr + 1 + 6), b_addr = PEEK2(ram + addr + 1 + 8);
11+			Uint16 dst_page = PEEK2(ram + addr + 3), dst_addr = PEEK2(ram + addr + 5);
12+			int dst = (dst_page % RAM_PAGES) * 0x10000;
13+			for(i = 0; i < length; i++)
14+				ram[dst + (Uint16)(dst_addr + i)] = value;
15+		} else if(ram[addr] == 0x1) {
16+			Uint16 i, length = PEEK2(ram + addr + 1);
17+			Uint16 a_page = PEEK2(ram + addr + 3), a_addr = PEEK2(ram + addr + 5);
18+			Uint16 b_page = PEEK2(ram + addr + 7), b_addr = PEEK2(ram + addr + 9);
19 			int src = (a_page % RAM_PAGES) * 0x10000, dst = (b_page % RAM_PAGES) * 0x10000;
20 			for(i = 0; i < length; i++)
21 				ram[dst + (Uint16)(b_addr + i)] = ram[src + (Uint16)(a_addr + i)];
22-		}
23+		} else if(ram[addr] == 0x2) {
24+			Uint16 i, length = PEEK2(ram + addr + 1);
25+			Uint16 a_page = PEEK2(ram + addr + 3), a_addr = PEEK2(ram + addr + 5);
26+			Uint16 b_page = PEEK2(ram + addr + 7), b_addr = PEEK2(ram + addr + 9);
27+			int src = (a_page % RAM_PAGES) * 0x10000, dst = (b_page % RAM_PAGES) * 0x10000;
28+			for(i = length - 1; i != 0xffff; i--)
29+				ram[dst + (Uint16)(b_addr + i)] = ram[src + (Uint16)(a_addr + i)];
30+		} else
31+			fprintf(stderr, "Unknown Expansion Command 0x%02x\n", ram[addr]);
32 		break;
33 	case 0x4:
34 		u->wst.ptr = d[4];
+1, -1
1@@ -271,7 +271,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, 7 Mar 2023.\n");
6+		fprintf(stdout, "Uxn11 - Varvara Emulator, 18 Mar 2024.\n");
7 		i++;
8 	}
9 	rom = i == argc ? "boot.rom" : argv[i++];
+1, -1
1@@ -71,7 +71,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 system_version("Uxncli - Console Varvara Emulator", "4 Mar 2024");
6+		return system_version("Uxncli - Console Varvara Emulator", "18 Mar 2024");
7 	if(!system_boot(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++]))
8 		return system_error("Init", "Failed to initialize uxn.");
9 	/* Game Loop */