commit 1c78615
Devine Lu Linvega
·
2024-11-27 00:06:01 +0000 UTC
parent a904916
(system) Cleanup
1 files changed,
+18,
-16
+18,
-16
1@@ -119,26 +119,28 @@ system_deo(Uxn *u, Uint8 port)
2 case 0x3: {
3 Uint16 addr = PEEK2(u->dev + 2);
4 if(u->ram[addr] == 0x0) {
5- int i, value = u->ram[addr + 7];
6- int length = PEEK2(u->ram + addr + 1);
7- int dst_page = PEEK2(u->ram + addr + 3), dst_addr = PEEK2(u->ram + addr + 5);
8- int dst = dst_page * 0x10000;
9- for(i = 0; i < length; i++)
10- u->ram[dst + (Uint16)(dst_addr + i)] = value;
11+ Uint16 i, value = u->ram[addr + 7], length = PEEK2(u->ram + addr + 1);
12+ unsigned int dst_page = PEEK2(u->ram + addr + 3), dst_addr = PEEK2(u->ram + addr + 5);
13+ unsigned int dst = dst_page * 0x10000;
14+ if(dst_page < RAM_PAGES)
15+ for(i = 0; i < length; i++)
16+ u->ram[dst + (Uint16)(dst_addr + i)] = value;
17 } else if(u->ram[addr] == 0x1) {
18 Uint16 i, length = PEEK2(u->ram + addr + 1);
19- Uint16 a_page = PEEK2(u->ram + addr + 3), a_addr = PEEK2(u->ram + addr + 5);
20- Uint16 b_page = PEEK2(u->ram + addr + 7), b_addr = PEEK2(u->ram + addr + 9);
21- int src = (a_page % (RAM_PAGES + 1)) * 0x10000, dst = (b_page % (RAM_PAGES + 1)) * 0x10000;
22- for(i = 0; i < length; i++)
23- u->ram[dst + (Uint16)(b_addr + i)] = u->ram[src + (Uint16)(a_addr + i)];
24+ unsigned int a_page = PEEK2(u->ram + addr + 3), a_addr = PEEK2(u->ram + addr + 5);
25+ unsigned int b_page = PEEK2(u->ram + addr + 7), b_addr = PEEK2(u->ram + addr + 9);
26+ unsigned int src = a_page * 0x10000, dst = b_page * 0x10000;
27+ if(a_page < RAM_PAGES && b_page < RAM_PAGES)
28+ for(i = 0; i < length; i++)
29+ u->ram[dst + (Uint16)(b_addr + i)] = u->ram[src + (Uint16)(a_addr + i)];
30 } else if(u->ram[addr] == 0x2) {
31 Uint16 i, length = PEEK2(u->ram + addr + 1);
32- Uint16 a_page = PEEK2(u->ram + addr + 3), a_addr = PEEK2(u->ram + addr + 5);
33- Uint16 b_page = PEEK2(u->ram + addr + 7), b_addr = PEEK2(u->ram + addr + 9);
34- int src = (a_page % (RAM_PAGES + 1)) * 0x10000, dst = (b_page % (RAM_PAGES + 1)) * 0x10000;
35- for(i = length - 1; i != 0xffff; i--)
36- u->ram[dst + (Uint16)(b_addr + i)] = u->ram[src + (Uint16)(a_addr + i)];
37+ unsigned int a_page = PEEK2(u->ram + addr + 3), a_addr = PEEK2(u->ram + addr + 5);
38+ unsigned int b_page = PEEK2(u->ram + addr + 7), b_addr = PEEK2(u->ram + addr + 9);
39+ unsigned int src = a_page * 0x10000, dst = b_page * 0x10000;
40+ if(a_page < RAM_PAGES && b_page < RAM_PAGES)
41+ for(i = length - 1; i != 0xffff; i--)
42+ u->ram[dst + (Uint16)(b_addr + i)] = u->ram[src + (Uint16)(a_addr + i)];
43 } else
44 fprintf(stderr, "Unknown Expansion Command 0x%02x\n", u->ram[addr]);
45 break;