From f0ad502e4651243d6a96194b3393bd460c0f7fc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Sun, 19 Nov 2017 21:23:04 +0100 Subject: 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. --- qtmips_cli/main.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++----- qtmips_cli/qtmips_cli.pro | 8 +++++--- qtmips_cli/tracer.cpp | 14 ++++++++++++-- qtmips_cli/tracer.h | 18 ++++++++++++++---- 4 files changed, 74 insertions(+), 14 deletions(-) (limited to 'qtmips_cli') 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 +#include #include -#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 -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 +#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 -- cgit v1.2.3