shithub: sms

Download patch

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;
--