commit 7250a2a
Devine Lu Linvega
·
2025-01-22 00:38:25 +0000 UTC
parent 2fe1517
Cleaning up system device
1 files changed,
+24,
-14
+24,
-14
1@@ -83,32 +83,42 @@ 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 addr = PEEK2(uxn.dev + 2);
9+ Uint16 aptr = uxn.ram + addr;
10 if(uxn.ram[addr] == 0x0) {
11- Uint16 i, value = uxn.ram[addr + 7], length = PEEK2(uxn.ram + addr + 1);
12- unsigned int dst_page = PEEK2(uxn.ram + addr + 3), dst_addr = PEEK2(uxn.ram + addr + 5);
13+ value = uxn.ram[addr + 7];
14+ length = PEEK2(aptr + 1);
15+ unsigned int dst_page = PEEK2(aptr + 3);
16+ unsigned int dst_addr = PEEK2(aptr + 5);
17 unsigned int dst = dst_page * 0x10000;
18 if(dst_page < RAM_PAGES)
19 for(i = 0; i < length; i++)
20 uxn.ram[dst + (Uint16)(dst_addr + i)] = value;
21 } else if(uxn.ram[addr] == 0x1) {
22- Uint16 i, length = PEEK2(uxn.ram + addr + 1);
23- unsigned int a_page = PEEK2(uxn.ram + addr + 3), a_addr = PEEK2(uxn.ram + addr + 5);
24- unsigned int b_page = PEEK2(uxn.ram + addr + 7), b_addr = PEEK2(uxn.ram + addr + 9);
25- unsigned int src = a_page * 0x10000, dst = b_page * 0x10000;
26- if(a_page < RAM_PAGES && b_page < RAM_PAGES)
27+ length = PEEK2(aptr + 1);
28+ unsigned int src_page = PEEK2(aptr + 3);
29+ unsigned int src_addr = PEEK2(aptr + 5);
30+ unsigned int dst_page = PEEK2(aptr + 7);
31+ unsigned int dst_addr = PEEK2(aptr + 9);
32+ unsigned int src = src_page * 0x10000;
33+ unsigned int dst = dst_page * 0x10000;
34+ if(src_page < RAM_PAGES && dst_page < RAM_PAGES)
35 for(i = 0; i < length; i++)
36- uxn.ram[dst + (Uint16)(b_addr + i)] = uxn.ram[src + (Uint16)(a_addr + i)];
37+ uxn.ram[dst + (Uint16)(dst_addr + i)] = uxn.ram[src + (Uint16)(src_addr + i)];
38 } else if(uxn.ram[addr] == 0x2) {
39- Uint16 i, length = PEEK2(uxn.ram + addr + 1);
40- unsigned int a_page = PEEK2(uxn.ram + addr + 3), a_addr = PEEK2(uxn.ram + addr + 5);
41- unsigned int b_page = PEEK2(uxn.ram + addr + 7), b_addr = PEEK2(uxn.ram + addr + 9);
42- unsigned int src = a_page * 0x10000, dst = b_page * 0x10000;
43- if(a_page < RAM_PAGES && b_page < RAM_PAGES)
44+ length = PEEK2(aptr + 1);
45+ unsigned int src_page = PEEK2(aptr + 3);
46+ unsigned int src_addr = PEEK2(aptr + 5);
47+ unsigned int dst_page = PEEK2(aptr + 7);
48+ unsigned int dst_addr = PEEK2(aptr + 9);
49+ unsigned int src = src_page * 0x10000;
50+ unsigned int dst = dst_page * 0x10000;
51+ if(src_page < RAM_PAGES && dst_page < RAM_PAGES)
52 for(i = length - 1; i != 0xffff; i--)
53- uxn.ram[dst + (Uint16)(b_addr + i)] = uxn.ram[src + (Uint16)(a_addr + i)];
54+ uxn.ram[dst + (Uint16)(dst_addr + i)] = uxn.ram[src + (Uint16)(src_addr + i)];
55 } else
56 fprintf(stderr, "Unknown Expansion Command 0x%02x\n", uxn.ram[addr]);
57 break;