commit 2987ebe
Devine Lu Linvega
·
2025-01-22 03:28:27 +0000 UTC
parent 15c5354
Faster expansion port
1 files changed,
+6,
-10
+6,
-10
1@@ -85,7 +85,7 @@ system_deo(Uint8 port)
2 {
3 switch(port) {
4 case 0x3: {
5- Uint16 i, value;
6+ Uint16 value;
7 Uint16 addr = PEEK2(uxn.dev + 2);
8 Uint8 *aptr = uxn.ram + addr;
9 Uint16 length = PEEK2(aptr + 1);
10@@ -100,15 +100,11 @@ system_deo(Uint8 port)
11 unsigned int c = PEEK2(aptr + 7) * 0x10000 + PEEK2(aptr + 9);
12 for(; a < b; uxn.ram[c++] = uxn.ram[a++]);
13 } else if(uxn.ram[addr] == 0x2) {
14- unsigned int src_page = PEEK2(aptr + 3);
15- unsigned int src_addr = PEEK2(aptr + 5);
16- unsigned int dst_page = PEEK2(aptr + 7);
17- unsigned int dst_addr = PEEK2(aptr + 9);
18- unsigned int src = src_page * 0x10000;
19- unsigned int dst = dst_page * 0x10000;
20- if(src_page < RAM_PAGES && dst_page < RAM_PAGES)
21- for(i = length - 1; i != 0xffff; i--)
22- uxn.ram[dst + (Uint16)(dst_addr + i)] = uxn.ram[src + (Uint16)(src_addr + i)];
23+ unsigned int a = PEEK2(aptr + 3) * 0x10000 + PEEK2(aptr + 5);
24+ unsigned int b = a + length - 1;
25+ unsigned int c = PEEK2(aptr + 7) * 0x10000 + PEEK2(aptr + 9);
26+ unsigned int d = c + length - 1;
27+ for(; b >= a; uxn.ram[d--] = uxn.ram[b--]);
28 } else
29 fprintf(stderr, "Unknown Expansion Command 0x%02x\n", uxn.ram[addr]);
30 break;