aboutsummaryrefslogtreecommitdiff
path: root/qtmips_cli/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qtmips_cli/main.cpp')
-rw-r--r--qtmips_cli/main.cpp48
1 files changed, 43 insertions, 5 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();
}