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;