commit 4587b1d
zzo38
·
2022-10-29 21:14:56 +0000 UTC
parent b883c4e
A few corrections relating to the bicycle mode and to the extension mode.
1 files changed,
+31,
-12
M
main.c
M
main.c
+31,
-12
1@@ -248,9 +248,15 @@ static void run(Uint16 pc) {
2 }
3 }
4 fflush(stdout);
5- if(bicycle && (k=device[0].d[2])) {
6- memcpy(mem+(k<<8),ds.d,254);
7- mem[(k<<8)+0xFF]=ds.p;
8+ if(bicycle) {
9+ if(k=device[0].d[2]) {
10+ memcpy(mem+(k<<8),ds.d,254);
11+ mem[(k<<8)+0xFF]=ds.p;
12+ }
13+ if(k=device[0].d[3]) {
14+ memcpy(mem+(k<<8),rs.d,254);
15+ mem[(k<<8)+0xFF]=rs.p;
16+ }
17 }
18 return;
19 error:
20@@ -298,7 +304,18 @@ static void system_out(Device*dev,Uint8 id) {
21 ds.p=dev->d[2];
22 }
23 break;
24- case 3: if(!bicycle) rs.p=dev->d[3]; break;
25+ case 3:
26+ if(bicycle) {
27+ if(dev->d[3]) {
28+ memcpy(ds.d,mem+(dev->d[3]<<8),256);
29+ rs.p=mem[(dev->d[3]<<8)+0xFF];
30+ } else {
31+ rs.p=0;
32+ }
33+ } else {
34+ rs.p=dev->d[3];
35+ }
36+ break;
37 case 8 ... 13:
38 if(!screen) break;
39 colors[070].r=colors[074].r=(dev->d[8]>>4)*0x11;
40@@ -330,14 +347,16 @@ static void extension_out(Device*dev,Uint8 id) {
41 Uint16 len;
42 switch(id) {
43 case 8:
44- x=GET16(dev->d+2);
45- y=GET16(dev->d+4);
46- len=GET16(dev->d+6);
47- if(dev->d[8]&4) len=256;
48- if(x+len>0x10000 || y+len>0x10000) uxnerr(5,x);
49- *(dev->d[8]&1?&p:&q)=mem+x;
50- *(dev->d[8]&1?&q:&p)=mem+y+(dev->d[8]&2?0x20000:0x10000);
51- memcpy(q,p,len);
52+ if((dev->d[8]>>4)==0) {
53+ x=GET16(dev->d+2);
54+ y=GET16(dev->d+4);
55+ len=GET16(dev->d+6);
56+ if(dev->d[8]&4) len=256;
57+ if(x+len>0x10000 || y+len>0x10000) uxnerr(5,x);
58+ *(dev->d[8]&1?&p:&q)=mem+x;
59+ *(dev->d[8]&1?&q:&p)=mem+y+(dev->d[8]&2?0x20000:0x10000);
60+ memcpy(q,p,len);
61+ }
62 dev->d[8]=0;
63 break;
64 case 11: case 13: case 15: