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 */