sim: added uart extension
[calu.git] / 3b_sim / sim.cpp
index 3200e92a798370baf0ada9c066d7a80fc3d9e65c..09808a0d25ba085233574376b3971ee181c4854f 100644 (file)
 #include "CInstrFactory.hpp"
 #include "uint32_from_hex.hpp"
 
+#include "iext.hpp"
+#include "extensions/cprog.hpp"
+#include "extensions/cuart.hpp"
+
 #include "SReadline/SReadline.h"
 using namespace swift;
 
@@ -68,12 +72,15 @@ class CHelpExec
 void close_prog(const std::vector<std::string> &);
 
 CCpu* Iinstr::m_cpu;
+CCpu* Iext::m_cpu;
 disasm* Iinstr::m_disasm;
+disasm* Iext::m_disasm;
 
 CCpu* global_cpu = NULL;
 
 vector<CDat> breakpoints;
 
+
 #include <map>
 
 multimap<int,string> dataCommentsStore, progCommentsStore, dataLabelStore, progLabelStore;
@@ -403,7 +410,7 @@ void printPROG(const vector<string>& in)
                        cout << std::hex << "0x" << setw(8) << setfill('0') << i << ": NOP";
                }
                else {
-                       cout << std::hex << "0x" << setw(8) << setfill('0') << i << ": " << std::dec << pi->toString();
+                       cout << std::hex << "0x" << setw(8) << setfill('0') << i << ": " << std::dec << global_cpu->colorifyInstr(pi->toString());
                }
                auto iter = progLineCommentStore.find(i);
                if(iter != progLineCommentStore.end()) {
@@ -449,6 +456,12 @@ void resetPerf(const vector<string>&)
        global_cpu->setPerf(0);
 }
 
+void applyToExtensions(const vector<string>& in)
+{
+       global_cpu->applyToExtensions(in);
+}
+
+
 void printStatus(const vector<string>&)
 {
        CDat stackp = global_cpu->getStack();
@@ -535,10 +548,15 @@ int main(int argc, char* argv[])
        global_cpu = &cpu;
 
        Iinstr::setCPU(&cpu);
+       Iext::setCPU(&cpu);
 
        disasm disasm(instr);
 
        Iinstr::setDisasm(&disasm);
+       Iext::setDisasm(&disasm);
+
+       global_cpu->registerExtension(new Cprog());
+       global_cpu->registerExtension(new Cuart());
 
        vector<string> commentDefer;
        vector<string> labelDefer;
@@ -710,7 +728,7 @@ int main(int argc, char* argv[])
        Completers.push_back(CompleterElement("status",&printStatus, "Prints status of CPU."));
        Completers.push_back(CompleterElement("getperf",&getPerf, "Prints performance counter."));
        Completers.push_back(CompleterElement("resetperf",&resetPerf, "Resets performance counter to 0."));
-
+       Completers.push_back(CompleterElement("extension",&applyToExtensions, "Write to extensions."));
        Reader.RegisterCompletions(Completers);
 
        string UserInput;