§ 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}