diff options
author | Karel Kočí <cynerd@email.cz> | 2017-11-19 21:23:04 +0100 |
---|---|---|
committer | Karel Kočí <cynerd@email.cz> | 2017-11-19 21:23:04 +0100 |
commit | f0ad502e4651243d6a96194b3393bd460c0f7fc9 (patch) | |
tree | 4f912c24b5943bd93b5a3378df75f9611de6779b /qtmips_cli | |
parent | 2c6562fa78e884d66b8c2a306f020101e8803f2e (diff) | |
download | qtmips-f0ad502e4651243d6a96194b3393bd460c0f7fc9.tar.gz qtmips-f0ad502e4651243d6a96194b3393bd460c0f7fc9.tar.bz2 qtmips-f0ad502e4651243d6a96194b3393bd460c0f7fc9.zip |
Another huge pile of work for about two months
Well I should commit every change instead of this madness. I am not
documenting changes as all this is just improvements and implementation
progression.
Diffstat (limited to 'qtmips_cli')
-rw-r--r-- | qtmips_cli/main.cpp | 48 | ||||
-rw-r--r-- | qtmips_cli/qtmips_cli.pro | 8 | ||||
-rw-r--r-- | qtmips_cli/tracer.cpp | 14 | ||||
-rw-r--r-- | qtmips_cli/tracer.h | 18 |
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 |