
Сообщение от
Lisitsin
А все команды CP, CPI копируют биты 3, 5 из операнда в F?
CP n и CP r работают так. CPI, CPD, CPIR и CPDR выставляют эти флаги по-другому:
Код:
case 0201: /* CPI, CPD, CPIR, CPDR: f(4) f(4) r(3) e(5) + e(5) */
if(y < 4) return Z80_PC;
s = Z80_AF, w = Z80_HL, do_alu(7, r = READ(w)), CONT5(w);
r = LIB_UZX_DATA_HIGH(Z80_AF) - r - !!(Z80_AF & Z80_HF);
Z80_BC = DEC16(Z80_BC);
Z80_AF = (Z80_AF & (LIB_UZX_DATA_HIGH_MASK | Z80_SF | Z80_ZF | Z80_HF)) |
((r << 4) & Z80_YF) | (r & Z80_XF) | ((Z80_BC != 0) << PF_BIT) | Z80_NF | (s & Z80_CF);
if(y & 1) Z80_HL = DEC16(Z80_HL), z80_MEMPTR = DEC16(z80_MEMPTR);
else Z80_HL = INC16(Z80_HL), z80_MEMPTR = INC16(z80_MEMPTR);
if((y & 2) && !(Z80_AF & Z80_ZF) && Z80_BC != 0)
return (CONT5(w), Z80_PC = SUB16(Z80_PC, 2), z80_MEMPTR = INC16(Z80_PC));
return Z80_PC;