diff options
author | bd <bdunahu@operationnull.com> | 2025-04-18 23:27:43 -0400 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-04-18 23:27:43 -0400 |
commit | c2af6262df9c37f83dc47901529e7e5e28d69636 (patch) | |
tree | 7c9e3523d9040d210d7a4a84cc7a7d77b043e06e /gui/gui.h | |
parent | 80dba1457231afd13a667a85f07c3db74f30aa87 (diff) |
Swap to just priming file on button click, status display
Diffstat (limited to 'gui/gui.h')
-rw-r--r-- | gui/gui.h | 207 |
1 files changed, 105 insertions, 102 deletions
@@ -1,117 +1,120 @@ #ifndef GUI_H #define GUI_H -#include <QMainWindow> -#include <QThread> -#include <QFileDialog> +#include "worker.h" #include <QFile> -#include <QTextStream> -#include <QTextEdit> -#include <QMessageBox> +#include <QFileDialog> #include <QInputDialog> -#include "worker.h" +#include <QMainWindow> +#include <QMessageBox> +#include <QTextEdit> +#include <QTextStream> +#include <QThread> +#include <functional> QT_BEGIN_NAMESPACE -namespace Ui { +namespace Ui +{ class GUI; } QT_END_NAMESPACE class GUI : public QMainWindow { - Q_OBJECT - -public: - GUI(QWidget *parent = nullptr); - ~GUI(); - bool is_pipelined = false; - std::vector<int> ways; - -signals: - void sendRefreshDram(); - void sendRefreshCache(); - void sendRefreshRegisters(); - void sendRunSteps(int steps); - void sendLoadProgram(std::vector<signed int> program); - -private slots: - void onWorkerClockCycles(int value, int pc); - - void onWorkerFetchInfo(const std::vector<int> info); - - void onWorkerDecodeInfo(const std::vector<int> info); - - void onWorkerExecuteInfo(const std::vector<int> info); - - void onWorkerMemoryInfo(const std::vector<int> info); - - void onWorkerWriteBackInfo(const std::vector<int> info); - - void onWorkerShowDram(const std::vector<std::array<signed int, LINE_SIZE>> data); - - void onWorkerShowCache(const std::vector<std::array<signed int, LINE_SIZE>> data); - - void onWorkerShowRegisters(const std::array<int, GPR_NUM> &data); - - void onWorkerFinished(); - - void on_upload_intructions_btn_clicked(); - - void on_upload_program_state_btn_clicked(); - - void on_enable_pipeline_checkbox_checkStateChanged(const Qt::CheckState &arg1); - - void on_step_btn_clicked(); - - void on_save_program_state_btn_clicked(); - -private: - Ui::GUI *ui; - QThread workerThread; - Worker *worker; - QVector<int> step_values = {1, 5, 10, 50, 250, 1000, 10000}; - const std::map<Mnemonic, QString> mnemonicNameMap = { - {Mnemonic::ADD, "ADD"}, - {Mnemonic::SUB, "SUB"}, - {Mnemonic::MUL, "MUL"}, - {Mnemonic::QUOT, "QUOT"}, - {Mnemonic::SFTR, "SFTR"}, - {Mnemonic::SFTL, "SFTL"}, - {Mnemonic::AND, "AND"}, - {Mnemonic::OR, "OR"}, - {Mnemonic::NOT, "NOT"}, - {Mnemonic::XOR, "XOR"}, - {Mnemonic::ADDV, "ADDV"}, - {Mnemonic::SUBV, "SUBV"}, - {Mnemonic::MULV, "MULV"}, - {Mnemonic::DIVV, "DIVV"}, - {Mnemonic::CMP, "CMP"}, - {Mnemonic::CEV, "CEV"}, - {Mnemonic::LOAD, "LOAD"}, - {Mnemonic::LOADV, "LOADV"}, - {Mnemonic::ADDI, "ADDI"}, - {Mnemonic::SUBI, "SUBI"}, - {Mnemonic::SFTRI, "SFTRI"}, - {Mnemonic::SFTLI, "SFTLI"}, - {Mnemonic::ANDI, "ANDI"}, - {Mnemonic::ORI, "ORI"}, - {Mnemonic::XORI, "XORI"}, - {Mnemonic::STORE, "STORE"}, - {Mnemonic::STOREV, "STOREV"}, - {Mnemonic::JMP, "JMP"}, - {Mnemonic::JRL, "JRL"}, - {Mnemonic::JAL, "JAL"}, - {Mnemonic::BEQ, "BEQ"}, - {Mnemonic::BGT, "BGT"}, - {Mnemonic::BUF, "BUF"}, - {Mnemonic::BOF, "BOF"}, - {Mnemonic::PUSH, "PUSH"}, - {Mnemonic::POP, "POP"}, - {Mnemonic::NOP, "NOP"}, - }; - QString mnemonicToString(Mnemonic mnemonic) { - auto it = mnemonicNameMap.find(mnemonic); - return (it != mnemonicNameMap.end()) ? it->second : "Unknown"; - } + Q_OBJECT + + public: + GUI(QWidget *parent = nullptr); + ~GUI(); + bool is_pipelined = false; + std::vector<int> ways; + + signals: + void sendRefreshDram(); + void sendRefreshCache(); + void sendRefreshRegisters(); + void sendRunSteps(int steps); + + private slots: + void onWorkerClockCycles(int value, int pc); + + void onWorkerFetchInfo(const std::vector<int> info); + + void onWorkerDecodeInfo(const std::vector<int> info); + + void onWorkerExecuteInfo(const std::vector<int> info); + + void onWorkerMemoryInfo(const std::vector<int> info); + + void onWorkerWriteBackInfo(const std::vector<int> info); + + void + onWorkerShowDram(const std::vector<std::array<signed int, LINE_SIZE>> data); + + void onWorkerShowCache( + const std::vector<std::array<signed int, LINE_SIZE>> data); + + void onWorkerShowRegisters(const std::array<int, GPR_NUM> &data); + + void onWorkerFinished(); + + void on_upload_intructions_btn_clicked(); + + void on_upload_program_state_btn_clicked(); + + void + on_enable_pipeline_checkbox_checkStateChanged(const Qt::CheckState &arg1); + + void on_step_btn_clicked(); + + void on_save_program_state_btn_clicked(); + + private: + Ui::GUI *ui; + + /** + * The message displayed on the status bar. + */ + QLabel *status_label; + + /** + * The currently loaded program. + */ + std::vector<signed int> p; + + QThread workerThread; + + Worker *worker; + + QVector<int> step_values = {1, 5, 10, 50, 250, 1000, 10000}; + + const std::map<Mnemonic, QString> mnemonicNameMap = { + {Mnemonic::ADD, "ADD"}, {Mnemonic::SUB, "SUB"}, + {Mnemonic::MUL, "MUL"}, {Mnemonic::QUOT, "QUOT"}, + {Mnemonic::SFTR, "SFTR"}, {Mnemonic::SFTL, "SFTL"}, + {Mnemonic::AND, "AND"}, {Mnemonic::OR, "OR"}, + {Mnemonic::NOT, "NOT"}, {Mnemonic::XOR, "XOR"}, + {Mnemonic::ADDV, "ADDV"}, {Mnemonic::SUBV, "SUBV"}, + {Mnemonic::MULV, "MULV"}, {Mnemonic::DIVV, "DIVV"}, + {Mnemonic::CMP, "CMP"}, {Mnemonic::CEV, "CEV"}, + {Mnemonic::LOAD, "LOAD"}, {Mnemonic::LOADV, "LOADV"}, + {Mnemonic::ADDI, "ADDI"}, {Mnemonic::SUBI, "SUBI"}, + {Mnemonic::SFTRI, "SFTRI"}, {Mnemonic::SFTLI, "SFTLI"}, + {Mnemonic::ANDI, "ANDI"}, {Mnemonic::ORI, "ORI"}, + {Mnemonic::XORI, "XORI"}, {Mnemonic::STORE, "STORE"}, + {Mnemonic::STOREV, "STOREV"}, {Mnemonic::JMP, "JMP"}, + {Mnemonic::JRL, "JRL"}, {Mnemonic::JAL, "JAL"}, + {Mnemonic::BEQ, "BEQ"}, {Mnemonic::BGT, "BGT"}, + {Mnemonic::BUF, "BUF"}, {Mnemonic::BOF, "BOF"}, + {Mnemonic::PUSH, "PUSH"}, {Mnemonic::POP, "POP"}, + {Mnemonic::NOP, "NOP"}, + }; + QString mnemonicToString(Mnemonic mnemonic) + { + auto it = mnemonicNameMap.find(mnemonic); + return (it != mnemonicNameMap.end()) ? it->second : "Unknown"; + } + + QString make_status(const std::function<std::string()> &func); }; #endif // GUI_H |