ref: 47cf02e0c5a922a7d6d01eb3dffdd1fe56978362
parent: e90ba58902d0f695732b76fe86acedf3a4d1be74
author: Jean-André Santoni <jean.andre.santoni@gmail.com>
date: Sat Mar 7 16:13:06 EST 2026
Implement ed6f
--- a/z80.c
+++ b/z80.c
@@ -420,6 +420,29 @@
}
static int
+rrd_rld(u8int op)
+{+ u8int v = z80read(HL());
+
+ if(op == 0x67){+ z80write(HL(), v >> 4 | s[rA] << 4);
+ s[rA] = s[rA] & 0xf0 | v & 0x0f;
+ }else{+ z80write(HL(), v << 4 | s[rA] & 0x0f);
+ s[rA] = s[rA] & 0xf0 | v >> 4;
+ }
+
+ s[rF] &= FLAGC;
+ if(s[rA] == 0)
+ s[rF] |= FLAGZ;
+ if((s[rA] & 0x80) != 0)
+ s[rF] |= FLAGS;
+ if(!parity(s[rA]))
+ s[rF] |= FLAGV;
+ return 18;
+}
+
+static int
ed(void)
{u8int op, v, u, l;
@@ -609,24 +632,8 @@
case 0x56: intm = intm & 0xc0 | 1; return 8;
case 0x47: ipage = s[rA]; return 9;
case 0x57: s[rA] = ipage; return 9;
- case 0x67:
- v = z80read(HL());
- z80write(HL(), v >> 4 | s[rA] << 4);
- s[rA] = s[rA] & 0xf0 | v & 0x0f;
- if(0){- case 0x6f:
- v = z80read(HL());
- z80write(HL(), v << 4 | s[rA] & 0xf);
- s[rA] = s[rA] & 0xf0 | v >> 4;
- }
- s[rF] &= FLAGC;
- if(s[rA] == 0)
- s[rF] |= FLAGZ;
- if((s[rA] & 0x80) != 0)
- s[rF] |= FLAGS;
- if(!parity(s[rA]))
- s[rF] |= FLAGV;
- return 18;
+ case 0x67: return rrd_rld(op);
+ case 0x6f: return rrd_rld(op);
case 0x4a: adchl(BC()); return 15;
case 0x5a: adchl(DE()); return 15;
case 0x6a: adchl(HL()); return 15;
--
⑨