--- z80pack-1.17/z80sim/sim4.c 2008-10-20 22:02:11.000000000 +0200 +++ z80pack-1.18/z80sim/sim4.c 2010-03-31 13:45:51.000000000 +0200 @@ -1329,7 +1329,7 @@ fp_sampleLightGroup(0, 0); #endif i = *(ram + ((H << 8) + L)); - ((i & 0xf) > (A & 0xF)) ? (F |= H_FLAG) : (F &= ~H_FLAG); + ((i & 0xf) > (A & 0xf)) ? (F |= H_FLAG) : (F &= ~H_FLAG); i = A - i; L++; if (!L) @@ -1345,12 +1345,12 @@ } static int op_cpir(void) /* CPIR */ - /* H Flag not set!!! */ { register int t = -21; register BYTE *s; register BYTE d; register WORD i; + register BYTE tmp; i = (B << 8) + C; s = ram + (H << 8) + L; @@ -1361,7 +1361,9 @@ #ifdef FRONTPANEL fp_sampleLightGroup(0, 0); #endif - d = A - *s++; + tmp = *s++; + ((tmp & 0xf) > (A & 0xf)) ? (F |= H_FLAG) : (F &= ~H_FLAG); + d = A - tmp; t += 21; } while (--i && d); F |= N_FLAG; @@ -1386,7 +1388,7 @@ fp_sampleLightGroup(0, 0); #endif i = *(ram + ((H << 8) + L)); - ((i & 0xf) > (A & 0xF)) ? (F |= H_FLAG) : (F &= ~H_FLAG); + ((i & 0xf) > (A & 0xf)) ? (F |= H_FLAG) : (F &= ~H_FLAG); i = A - i; L--; if (L == 0xff) @@ -1402,12 +1404,12 @@ } static int op_cpdr(void) /* CPDR */ - /* H Flag not set!!! */ { register int t = -21; register BYTE *s; register BYTE d; register WORD i; + register BYTE tmp; i = (B << 8) + C; s = ram + (H << 8) + L; @@ -1418,7 +1420,9 @@ #ifdef FRONTPANEL fp_sampleLightGroup(0, 0); #endif - d = A - *s--; + tmp = *s--; + ((tmp & 0xf) > (A & 0xf)) ? (F |= H_FLAG) : (F &= ~H_FLAG); + d = A - tmp; t += 21; } while (--i && d); F |= N_FLAG;