int flag_z = 0; int flag_c = 0; //ignoring flag_ov, flag_ac #define MOV(dst, src) dst = src; #define SL(dst) flag_c = (dst>>7); dst <<= 1; #define SR(dst) flag_c = (dst&01); dst >>= 1; #define SWAP(dst) dst = (dst<<4 | dst>>4); #define AND(dst, src) dst &= src; flag_z = (dst==0); #define OR(dst, src) dst |= src; flag_z = (dst==0); #define CLEAR(dst) dst = 0; #define ADD(dst, src) flag_c = (src+dst)>>8; dst += src; flag_z = (dst==0); #define INC(dst) dst += 1; flag_c = flag_z = (dst==0); #define ADDC0(dst) dst += flag_c; flag_c = flag_z = (dst==0); #define CALL(addr) addr(); #define XOR(dst, src) dst ^= src; flag_z = (dst==0); #define SUB(dst, src) flag_c = (src > dst); dst -= src; flag_z = (dst==0); #define XCH(dst) acc ^= dst; dst ^= acc; acc ^= dst; #define DEC(dst) dst -= 1; flag_c = flag_z = (dst==0); #define NEG(dst) dst *= -1; flag_z = (dst==0);