#ifndef __CPU__H__ #define __CPU__H__ #include "cdat.hpp" #include "cmem.hpp" #include "cpmem.hpp" #include "ccolor.h" class Iinstr; class Iext; #include "iext.hpp" #include #include "Iinstr.hpp" class CCpu { private: bool m_Z, m_S, m_C, m_O, m_breakNext; CDat m_pc, m_pc_next, m_perf; CMem m_reg, m_ram; CPMem m_prog; vector m_exts; CDat m_stack; static const int EXT_MODEL_OFFSET = 0x2000; public: void registerExtension() {}; void applyToExtensions(const vector& in); void tick(); void breakNext(); bool shouldBreak(); CDat getRegister(const int) const; void setRegister(const int, CDat); CDat getRAM(const int) const; void setRAM(const int, CDat); Iinstr* getProg(const int) const; void setProg(const int, Iinstr*); void registerExtension(Iext*); CDat getPerf() const; void setPerf(CDat); void incPerf(); void incPerfBy(short); CDat getCurPC() const; CDat getNextPC() const; void setNextPC(CDat); CDat getFlags() const; void setFlags(CDat); /* will only change zero and sign */ void updateFlags(CDat); /* will change all flags */ void updateFlags(CDatd, CDat, CDat); /* will change all flags */ void updateFlags(bool z, bool o, bool c, bool s); /* will change carry */ void updateCarry(bool c); bool getCarry(); bool conditionMet(short); int getStack() const; void setStack(const int); string colorifyInstr(string instr); CCpu(int,int,int); }; #endif