// 6502.h // Main elements of the 6502 CPU #include"6502.h" byte acc, X, Y, P, S = 0x00; address PC = 0x0000; byte* Memory; byte GetFlag(byte flag) { return (P & flag) ? 1 : 0; } void SetFlag(byte flag, int x) { P = (P & ~flag) | ((x != 0) ? flag : 0); } void SetFlag_N(byte x){ P = (x & flag_N) | (P & ~flag_N); } void SetFlag_V(byte x, byte y){ address z = (address)x + (address)y; if ((x & 0x80) != (y & 0x80)) SetFlag(flag_V, 1); else SetFlag(flag_V, 0); } void SetFlag_Z(int x){ if (x == 0) SetFlag(flag_Z, 1); else SetFlag(flag_Z, 0); } byte GetStack() { S--; return GetMemory(0x01FF - S); } void SetStack(byte x) { SetMemory(0x01FF - S, x); S++; }