Лисья Нора

Оглавление


§ Инструкция 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;
}