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: