§ ADC
void ADC(byte src) { word temp = reg_A + src + (IF_CARRY() ? 1 : 0); SET_ZERO(temp & 0xFF); SET_SIGN(temp); SET_OVERFLOW((reg_A ^ src ^ 0x80) & (reg_A ^ temp)) & 0x80); SET_CARRY(temp > 0xFF); reg_A = temp & 0xff; }
§ ADC
void SBC(byte src) { temp = reg_A - src - (IF_CARRY() ? 0 : 1); SET_SIGN(temp); SET_ZERO(temp & 0xff); SET_OVERFLOW(((reg_A ^ temp) & 0x80) && ((reg_A ^ src) & 0x80)); SET_CARRY(temp >= 0); reg_A = temp & 0xff; }
§ CMP
void CMP(byte dst, byte src) { int src = dst - src; SET_CARRY(src >= 0); SET_SIGN(src); SET_ZERO(src & 0xFF); }
§ AND
void AND(byte src) { src &= reg_A; SET_SIGN(src); SET_ZERO(src); reg_A = src; }
§ EOR
void EOR(byte src) { src ^= reg_A; SET_SIGN(src); SET_ZERO(src); reg_A = src; }
§ ORA
void ORA(byte src) { src |= reg_A; SET_SIGN(src); SET_ZERO(src); reg_A = src; }
§ LDA
byte LDA(byte src) { SET_SIGN(src); SET_ZERO(src); return src; }
§ BIT
void BIT(byte src) { SET_SIGN(src); SET_OVERFLOW(0x40 & src); SET_ZERO(src & reg_A); }
§ INC
byte INC(byte src) { src = (src + 1) & 0xff; SET_SIGN(src); SET_ZERO(src); return src; }
§ DEC
byte DEC(byte src) { src = (src - 1) & 0xff; SET_SIGN(src); SET_ZERO(src); return src; }
§ ASL
void ASL(byte src) { SET_CARRY(src & 0x80); src <<= 1; src &= 0xFF; SET_SIGN(src); SET_ZERO(src); }
§ LSR
byte LSR(byte src) { SET_CARRY(src & 0x01); src >>= 1; SET_SIGN(src); SET_ZERO(src); return src; }
§ ROL
byte ROL(byte src) { src <<= 1; if (IF_CARRY()) src |= 0x1; SET_CARRY(src > 0xff); src &= 0xFF; SET_SIGN(src); SET_ZERO(src); return src; }
§ ROR
byte ROR(byte src) { if (IF_CARRY()) src |= 0x100; SET_CARRY(src & 0x01); src >>= 1; SET_SIGN(src); SET_ZERO(src); return src; }
6 мая, 2020
© 2007-2023 Мутил лиственный предмет