ref: f4164657be44522e31faa295b9a461092ed3380d
parent: cdfeb3a75e08d3d82a4c1d06a24e6434387eaef2
author: Jean-André Santoni <jean.andre.santoni@gmail.com>
date: Wed Jul 10 19:55:57 EDT 2024
Implement edb3
--- a/z80.c
+++ b/z80.c
@@ -538,6 +538,16 @@
return 12;
case 0x61: z80out(s[rC], s[rH]); return 12;
case 0x69: z80out(s[rC], s[rL]); return 12;
+ case 0xb3:
+ s[rB]--;
+ uint8_t u = z80read(HL());
+ z80write(s[rC], u);
+ addhl(1);
+ if (u & 0x80) s[rF] |= FLAGN; else s[rF] &= ~FLAGN;
+ if (s[rL] + u > 0xff) s[rF] |= (FLAGC|FLAGH); else s[rF] &= ~(FLAGC|FLAGH);
+ if (((s[rL] + u) & 0x07) ^ s[rB]) s[rF] |= FLAGV; else s[rF] &= ~FLAGV;
+ if (s[rB] != 0) { pc -= 2; return 21; }+ return 16;
}
sysfatal("undefined z80 opcode ed%.2x at pc=%#.4x", op, curpc);return 0;
--
⑨