aboutsummaryrefslogtreecommitdiff
path: root/qtmips_cli
diff options
context:
space:
mode:
Diffstat (limited to 'qtmips_cli')
-rw-r--r--qtmips_cli/main.cpp48
-rw-r--r--qtmips_cli/qtmips_cli.pro8
-rw-r--r--qtmips_cli/tracer.cpp14
-rw-r--r--qtmips_cli/tracer.h18
4 files changed, 74 insertions, 14 deletions
diff --git a/qtmips_cli/main.cpp b/qtmips_cli/main.cpp
index 780f782..6240414 100644
--- a/qtmips_cli/main.cpp
+++ b/qtmips_cli/main.cpp
@@ -1,12 +1,50 @@
#include <QCoreApplication>
+#include <QCommandLineParser>
#include <iostream>
-#include "machineapp.h"
+#include "tracer.h"
-#include "instructions/arithmetic.h"
+void create_parser(QCommandLineParser &p) {
+ p.setApplicationDescription("QtMips CLI machine simulator");
+ p.addHelpOption();
+ p.addVersionOption();
-int main(int argc, char *argv[])
-{
- MachineApp app(argc, argv);
+ p.addPositionalArgument("FILE", "Input ELF executable file");
+}
+
+void configure_machine(QCommandLineParser &p, MachineConfig &cc) {
+ QStringList pa = p.positionalArguments();
+ if (pa.size() != 1) {
+ std::cerr << "Single ELF file has to be specified" << std::endl;
+ exit(1);
+ }
+ cc.set_elf(pa[0]);
+
+ // TODO
+}
+
+void configure_tracer(QCommandLineParser &p, Tracer &tr) {
+ // TODO
+ tr.reg_pc();
+}
+
+int main(int argc, char *argv[]) {
+ QCoreApplication app(argc, argv);
+ app.setApplicationName("qtmips_cli");
+ app.setApplicationVersion("0.1");
+
+ QCommandLineParser p;
+ create_parser(p);
+ p.process(app);
+
+ MachineConfig cc;
+ configure_machine(p, cc);
+ QtMipsMachine machine(cc);
+
+ app.connect(&machine, SIGNAL(program_exit()), &app, SLOT(quit()));
+
+ Tracer tr(&machine);
+ configure_tracer(p, tr);
+ machine.play(); // Run machine
return app.exec();
}
diff --git a/qtmips_cli/qtmips_cli.pro b/qtmips_cli/qtmips_cli.pro
index a541451..088a015 100644
--- a/qtmips_cli/qtmips_cli.pro
+++ b/qtmips_cli/qtmips_cli.pro
@@ -12,11 +12,13 @@ LIBS += -L$$OUT_PWD/../qtmips_machine/ -lqtmips_machine
INCLUDEPATH += $$PWD/../qtmips_machine
DEPENDPATH += $$PWD/../qtmips_machine
QMAKE_CXXFLAGS += -std=c++0x
+QMAKE_CXXFLAGS += -ggdb
DEFINES += QT_DEPRECATED_WARNINGS
-SOURCES += main.cpp \
- machineapp.cpp
+SOURCES += \
+ main.cpp \
+ tracer.cpp
HEADERS += \
- machineapp.h
+ tracer.h
diff --git a/qtmips_cli/tracer.cpp b/qtmips_cli/tracer.cpp
index 63d00d1..5cbf339 100644
--- a/qtmips_cli/tracer.cpp
+++ b/qtmips_cli/tracer.cpp
@@ -1,6 +1,16 @@
#include "tracer.h"
+#include <iostream>
-Tracer::Tracer()
-{
+using namespace std;
+Tracer::Tracer(QtMipsMachine *machine) {
+ this->machine = machine;
+}
+
+void Tracer::reg_pc() {
+ connect(machine->registers(), SIGNAL(pc_update(std::uint32_t)), this, SLOT(regs_pc_update(std::uint32_t)));
+}
+
+void Tracer::regs_pc_update(std::uint32_t val) {
+ cout << "PC:" << hex << val << endl;
}
diff --git a/qtmips_cli/tracer.h b/qtmips_cli/tracer.h
index 5c99970..7055cd8 100644
--- a/qtmips_cli/tracer.h
+++ b/qtmips_cli/tracer.h
@@ -2,11 +2,21 @@
#define TRACER_H
#include <QObject>
+#include "qtmipsmachine.h"
-class Tracer
-{
+class Tracer : public QObject {
+ Q_OBJECT
public:
- Tracer();
+ Tracer(QtMipsMachine *machine);
+
+ // Trace registers
+ void reg_pc();
+
+private slots:
+ void regs_pc_update(std::uint32_t val);
+
+private:
+ QtMipsMachine *machine;
};
-#endif // TRACER_H \ No newline at end of file
+#endif // TRACER_H