#include "cmem.hpp"
#include "cpmem.hpp"
+#include "ccolor.h"
+
class Iinstr;
+class Iext;
+#include "iext.hpp"
+#include <boost/regex.hpp>
#include "Iinstr.hpp"
bool m_Z, m_S, m_C, m_O;
- CDat m_pc, m_pc_next;
+ CDat m_pc, m_pc_next, m_perf;
CMem<CDat> m_reg, m_ram;
CPMem<Iinstr*> m_prog;
+ vector<Iext*> m_exts;
+
CDat m_stack;
+ static const int EXT_MODEL_OFFSET = 0x2000;
+
public:
void registerExtension() {};
+ void applyToExtensions(const vector<string>& in);
void tick();
CDat getRegister(const int) const;
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);
};