sim: added extensionmodule support + progger
[calu.git] / 3b_sim / ccpu.hpp
index 24f6f31b073da00fe23c1c1adfa35ee70a4323f4..a9747c9092d8f61fa0d26161f56ebddbbe70a54f 100644 (file)
@@ -5,8 +5,13 @@
 #include "cmem.hpp"
 #include "cpmem.hpp"
 
+#include "ccolor.h"
+
 class Iinstr;
+class Iext;
 
+#include "iext.hpp"
+#include <boost/regex.hpp>
 #include "Iinstr.hpp"
 
 
@@ -15,12 +20,16 @@ class CCpu {
 
                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 tick();
@@ -34,24 +43,37 @@ class CCpu {
                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);
 
 };