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+
M
makefile
+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)];