commit 5946ad4

Devine Lu Linvega  ·  2025-01-22 00:54:40 +0000 UTC
parent 1fb9750
Optimizing expansion port
3 files changed,  +65, -8
+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]lo]..... $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+
+4, -1
 1@@ -18,7 +18,7 @@ debug: bin/uxnasm-debug bin/uxncli-debug bin/uxn11-debug bin/opctest.rom bin/con
 2 screen: bin/uxn11 
 3 	@ uxnasm etc/screen.bounds.tal bin/test.rom
 4 	@ bin/uxn11 bin/test.rom
 5-test: all bin/opctest.rom
 6+test: all bin/opctest.rom bin/expansion.rom
 7 	bin/uxncli
 8 	bin/uxncli -v
 9 	bin/uxn11
10@@ -26,6 +26,7 @@ test: all bin/opctest.rom
11 	bin/uxnasm
12 	bin/uxnasm -v
13 	bin/uxncli bin/opctest.rom
14+	bin/uxncli bin/expansion.rom
15 install: all
16 	@ mkdir -p ${PREFIX}/bin
17 	@ cp bin/uxn11 bin/uxnasm bin/uxncli ${PREFIX}/bin
18@@ -46,6 +47,8 @@ clean:
19 
20 bin/opctest.rom: bin/uxnasm
21 	@ bin/uxnasm etc/opctest.tal bin/opctest.rom
22+bin/expansion.rom: bin/uxnasm
23+	@ bin/uxnasm etc/system.expansion.tal bin/expansion.rom
24 bin/mouse.rom: bin/uxnasm etc/mouse.tal
25 	@ bin/uxnasm etc/mouse.tal bin/mouse.rom
26 bin/console.rom: bin/uxnasm etc/console.tal
+5, -7
 1@@ -83,20 +83,20 @@ system_dei(Uint8 addr)
 2 void
 3 system_deo(Uint8 port)
 4 {
 5-	Uint16 i, length, value;
 6 	switch(port) {
 7 	case 0x3: {
 8+		Uint16 i, value;
 9 		Uint16 addr = PEEK2(uxn.dev + 2);
10 		Uint8 *aptr = uxn.ram + addr;
11+		Uint16 length = PEEK2(aptr + 1);
12 		if(uxn.ram[addr] == 0x0) {
13 			unsigned int dst_page = PEEK2(aptr + 3);
14 			unsigned int dst_addr = PEEK2(aptr + 5);
15 			unsigned int dst = dst_page * 0x10000;
16+			unsigned int a = dst + dst_addr;
17+			unsigned int b = a + length;
18 			value = uxn.ram[addr + 7];
19-			length = PEEK2(aptr + 1);
20-			if(dst_page < RAM_PAGES)
21-				for(i = 0; i < length; i++)
22-					uxn.ram[dst + (Uint16)(dst_addr + i)] = value;
23+			for(a = a; a < b; uxn.ram[a] = value, a++);
24 		} else if(uxn.ram[addr] == 0x1) {
25 			unsigned int src_page = PEEK2(aptr + 3);
26 			unsigned int src_addr = PEEK2(aptr + 5);
27@@ -104,7 +104,6 @@ system_deo(Uint8 port)
28 			unsigned int dst_addr = PEEK2(aptr + 9);
29 			unsigned int src = src_page * 0x10000;
30 			unsigned int dst = dst_page * 0x10000;
31-			length = PEEK2(aptr + 1);
32 			if(src_page < RAM_PAGES && dst_page < RAM_PAGES)
33 				for(i = 0; i < length; i++)
34 					uxn.ram[dst + (Uint16)(dst_addr + i)] = uxn.ram[src + (Uint16)(src_addr + i)];
35@@ -115,7 +114,6 @@ system_deo(Uint8 port)
36 			unsigned int dst_addr = PEEK2(aptr + 9);
37 			unsigned int src = src_page * 0x10000;
38 			unsigned int dst = dst_page * 0x10000;
39-			length = PEEK2(aptr + 1);
40 			if(src_page < RAM_PAGES && dst_page < RAM_PAGES)
41 				for(i = length - 1; i != 0xffff; i--)
42 					uxn.ram[dst + (Uint16)(dst_addr + i)] = uxn.ram[src + (Uint16)(src_addr + i)];