sim: brr fix, interrupt
[calu.git] / 3b_sim / ccpu.hpp
index 4c250b57570b97363655da1bbf9c8374e3013843..17f90b18d6abadf65092469b230a38fd6213f101 100644 (file)
@@ -5,26 +5,39 @@
 #include "cmem.hpp"
 #include "cpmem.hpp"
 
+#include "ccolor.h"
+
 class Iinstr;
+class Iext;
 
+#include "iext.hpp"
+#include <boost/regex.hpp>
 #include "Iinstr.hpp"
 
 
 class CCpu {
        private:
 
-               bool m_Z, m_S, m_C, m_O;
+               bool m_Z, m_S, m_C, m_O, m_breakNext;
 
                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();
 
+               void breakNext();
+               bool shouldBreak();
+
                CDat getRegister(const int) const;
                void setRegister(const int, CDat);
 
@@ -34,6 +47,8 @@ class CCpu {
                Iinstr* getProg(const int) const;
                void setProg(const int, Iinstr*);
 
+               void registerExtension(Iext*);
+
                CDat getPerf() const;
                void setPerf(CDat);
                void incPerf();
@@ -61,6 +76,8 @@ class CCpu {
                int getStack() const;
                void setStack(const int);
 
+               string colorifyInstr(string instr);
+
                CCpu(int,int,int);
 
 };