public static void doLDI(CpuContext ctx) { //ctx->tstates += 2; byte val = ctx.ReadMemory1(ctx.HL); ctx.WriteMemory1(ctx.DE, val); ctx.DE++; ctx.HL++; ctx.BC--; ctx.VALFLAG(Z80Flags.F_5, ((ctx.A + val) & 0x02) != 0); ctx.VALFLAG(Z80Flags.F_3, ((Z80Flags)(ctx.A + val) & Z80Flags.F_3) != 0); ctx.RESFLAG(Z80Flags.F_H | Z80Flags.F_N); ctx.VALFLAG(Z80Flags.F_PV, ctx.BC != 0); }
public static void doOUTI(CpuContext ctx) { var value = ctx.ReadMemory1(ctx.HL); ctx.B = doIncDec(ctx, ctx.B, true); ctx.ioWrite(ctx.BC, value); ctx.HL++; int flag_value = value + ctx.L; ctx.VALFLAG(Z80Flags.F_N, (value & 0x80) != 0); ctx.VALFLAG(Z80Flags.F_H, flag_value > 0xff); ctx.VALFLAG(Z80Flags.F_C, flag_value > 0xff); ctx.VALFLAG(Z80Flags.F_PV, parityBit[(flag_value & 7) ^ ctx.B]); adjustFlags(ctx, ctx.B); }
public static byte doCP_HL(CpuContext ctx) { byte val = ctx.ReadMemory1(ctx.HL); byte result = doArithmeticByte(ctx, ctx.A, val, false, true); adjustFlags(ctx, val); return result; }