void sbb_af_byte(struct emuctx *ctx, byte val1, byte val2) { /* byte two_comp = (~val2)+1 ; if (get_cf(ctx)) { if (((val1 & 0x0F) + (two_comp & 0x0F) + 0x0F) & 0x10) set_af(ctx, YES); else set_af(ctx, NO) ; } else { if (((val1 & 0x0F) + (two_comp & 0x0F)) & 0x10) set_af(ctx, NO); else set_af(ctx, YES) ; } */ if (get_cf(ctx)) { if (((val1 & 0x0F) - (val1 & 0x0F) - 1) & 0x10) set_af(ctx, YES); else set_af(ctx, NO) ; } else { if (((val1 & 0x0F) - (val2 & 0x0F)) & 0x10) set_af(ctx, YES); else set_af(ctx, NO) ; } }
void sbb_af_word(struct emuctx *ctx, word val1, word val2) { /* word two_comp ; two_comp.w = (~val2.w) + 1 ; if (get_cf(ctx)) { if (((val1.w & 0x0F) + (two_comp.w & 0x0F) + 0x0F) & 0x10) set_af(ctx, YES) ; else set_af(ctx, NO) ; } else { if (((val1.w & 0x0F) + (two_comp.w & 0x0F)) & 0x10) set_af(ctx, NO) ; else set_af(ctx, YES) ; } */ if (get_cf(ctx)) { if (((val1.w & 0x0F) - (val2.w & 0x0F) - 1) & 0x10) set_af(ctx, YES) ; else set_af(ctx, NO) ; } else { if (((val1.w & 0x0F) - (val2.w & 0x0F)) & 0x10) set_af(ctx, YES) ; else set_af(ctx, NO) ; } }
void byte_af_sub(struct emuctx *ctx, byte val1, byte val2) { /* byte two_comp = (~val2)+1 ; if (((val1 & 0x0F) + (two_comp & 0x0F)) & 0x10) set_af(ctx, NO); else set_af(ctx, YES) ; */ if (((val1 & 0x0F) - (val2 & 0x0F)) & 0x10) set_af(ctx, YES); else set_af(ctx, NO) ; }
inline void cpu_sal16(bit16u *dest, bit8u src) { bit16u tmp = *dest; *dest <<= (src & 0x1F); set_cf_sal16(src, *dest); set_zf(*dest); set_sf16(*dest); set_af(tmp, src, *dest); set_of_sal16(tmp, src, *dest); set_pf(*dest); }
inline void cpu_sal8(bit8u *dest, bit8u src) { bit8u tmp = *dest; *dest <<= (src & 0x1F); set_of_sal8(tmp, src, *dest); set_cf_sal8(src, *dest); set_af(tmp, src, *dest); set_sf8(*dest); set_zf(*dest); set_pf(*dest); }
void word_af_sub(struct emuctx *ctx, word val1, word val2) { byte result = ((val1.w & 0xF) - (val2.w & 0xF)); if (result & 0x10 ) set_af(ctx, YES) ; else { set_af(ctx, NO) ;} }
void word_af_adc(struct emuctx *ctx, word left_reg, word right_reg) { if (((left_reg.w & 0x0F) + (right_reg.w & 0x0F) + get_cf(ctx)) & 0x10) set_af(ctx, YES) ; else set_af(ctx, NO) ; }