§ ADC

1void ADC(byte src) {
2
3    word temp = reg_A + src + (IF_CARRY() ? 1 : 0);
4
5    SET_ZERO(temp & 0xFF);
6    SET_SIGN(temp);
7    SET_OVERFLOW((reg_A ^ src ^ 0x80) & (reg_A ^ temp)) & 0x80);
8    SET_CARRY(temp > 0xFF);
9
10    reg_A = temp & 0xff;
11}

§ ADC

1void SBC(byte src) {
2
3    temp = reg_A - src - (IF_CARRY() ? 0 : 1);
4
5    SET_SIGN(temp);
6    SET_ZERO(temp & 0xff);
7    SET_OVERFLOW(((reg_A ^ temp) & 0x80) && ((reg_A ^ src) & 0x80));
8    SET_CARRY(temp >= 0);
9
10    reg_A = temp & 0xff;
11}

§ CMP

1void CMP(byte dst, byte src) {
2
3    int src = dst - src;
4
5    SET_CARRY(src >= 0);
6    SET_SIGN(src);
7    SET_ZERO(src & 0xFF);
8}

§ AND

1void AND(byte src) {
2
3    src &= reg_A;
4    SET_SIGN(src);
5    SET_ZERO(src);
6    reg_A = src;
7}

§ EOR

1void EOR(byte src) {
2
3    src ^= reg_A;
4    SET_SIGN(src);
5    SET_ZERO(src);
6    reg_A = src;
7}

§ ORA

1void ORA(byte src) {
2
3    src |= reg_A;
4    SET_SIGN(src);
5    SET_ZERO(src);
6    reg_A = src;
7}

§ LDA

1byte LDA(byte src) {
2
3    SET_SIGN(src);
4    SET_ZERO(src);
5    return src;
6}

§ BIT

1void BIT(byte src) {
2
3    SET_SIGN(src);
4    SET_OVERFLOW(0x40 & src);
5    SET_ZERO(src & reg_A);
6}

§ INC

1byte INC(byte src) {
2
3    src = (src + 1) & 0xff;
4
5    SET_SIGN(src);
6    SET_ZERO(src);
7
8    return src;
9}

§ DEC

1byte DEC(byte src) {
2
3    src = (src - 1) & 0xff;
4
5    SET_SIGN(src);
6    SET_ZERO(src);
7
8    return src;
9}

§ ASL

1void ASL(byte src) {
2
3    SET_CARRY(src & 0x80);
4    src <<= 1;
5    src &= 0xFF;
6    SET_SIGN(src);
7    SET_ZERO(src);
8}

§ LSR

1byte LSR(byte src) {
2
3    SET_CARRY(src & 0x01);
4    src >>= 1;
5    SET_SIGN(src);
6    SET_ZERO(src);
7    return src;
8}

§ ROL

1byte ROL(byte src) {
2
3    src <<= 1;
4    if (IF_CARRY()) src |= 0x1;
5    SET_CARRY(src > 0xff);
6    src &= 0xFF;
7    SET_SIGN(src);
8    SET_ZERO(src);
9    return src;
10}

§ ROR

1byte ROR(byte src) {
2
3    if (IF_CARRY()) src |= 0x100;
4    SET_CARRY(src & 0x01);
5    src >>= 1;
6    SET_SIGN(src);
7    SET_ZERO(src);
8
9    return src;
10}