#include "CInstrFactory.hpp"
#include "uint32_from_hex.hpp"
+#include "iext.hpp"
+#include "extensions/cprog.hpp"
+#include "extensions/cuart.hpp"
+
+#include <signal.h>
+
#include "SReadline/SReadline.h"
using namespace swift;
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;
bool exitProg = false;
+void signalCpuBreak(int)
+{
+ global_cpu->breakNext();
+}
+
void doExit(const vector<string>&)
{
exitProg = true;
while(1) {
try {
auto breakp = find(breakpoints.begin(), breakpoints.end(), global_cpu->getNextPC());
- if(breakp == breakpoints.end() || ignoreBreak) {
+ if((breakp == breakpoints.end() || ignoreBreak) && !global_cpu->shouldBreak() ) {
global_cpu->tick();
ignoreBreak = false;
}
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()) {
global_cpu->setPerf(0);
}
+void applyToExtensions(const vector<string>& in)
+{
+ global_cpu->applyToExtensions(in);
+}
+
+
void printStatus(const vector<string>&)
{
CDat stackp = global_cpu->getStack();
global_cpu = &cpu;
+ signal(SIGINT, signalCpuBreak);
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;
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;