diff --git a/z80.cpp b/z80.cpp index c32bdc3..02ac84a 100644 --- a/z80.cpp +++ b/z80.cpp @@ -613,6 +613,7 @@ void z80::ed() { b += A; flags.P = (BC != 0); _35(b); + flags._5 = ((b & 0x02) != 0); flags.N = flags.H = 0; break; case 0xa1: @@ -630,6 +631,7 @@ void z80::ed() { flags.C = f; flags.P = (BC != 0); _35(b); + flags._5 = ((b & 0x02) != 0); _memptr++; break; case 0xa2: @@ -667,11 +669,12 @@ void z80::ed() { b += A; flags.P = (BC != 0); _35(b); + flags._5 = ((b & 0x02) != 0); flags.N = flags.H = 0; break; case 0xa9: b = _rb(HL); - c = A - b; + c = A - b - flags.H; _mc(HL, 1); _mc(HL, 1); _mc(HL, 1); _mc(HL, 1); _mc(HL, 1); HL--; @@ -679,6 +682,7 @@ void z80::ed() { flags.N = 1; flags.P = (BC != 0); _sz35(c); + flags._5 = ((c & 0x02) != 0); _memptr--; // FIXME: flag H break; @@ -793,6 +797,7 @@ void z80::ed() { b += A; flags.P = (BC != 0); _35(b); + flags._5 = ((b & 0x02) != 0); flags.N = flags.H = 0; if (BC) { _mc(DE, 1); _mc(DE, 1); _mc(DE, 1); @@ -812,6 +817,7 @@ void z80::ed() { flags.N = 1; flags.P = (BC != 0); _sz35(c); + flags._5 = ((c & 0x02) != 0); // FIXME: flag H _memptr--; if (BC) {