summaryrefslogtreecommitdiff
path: root/gui/gui.h
blob: b8451244995e3453a7014aaec84a4e76752bae99 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#ifndef GUI_H
#define GUI_H

#include <QMainWindow>
#include <QThread>
#include <QFileDialog>
#include <QFile>
#include <QTextStream>
#include <QTextEdit>
#include <QMessageBox>
#include "worker.h"

QT_BEGIN_NAMESPACE
namespace Ui {
class GUI;
}
QT_END_NAMESPACE

class GUI : public QMainWindow
{
    Q_OBJECT

public:
    GUI(QWidget *parent = nullptr);
    ~GUI();

signals:
    void sendRefreshDram();
    void sendRefreshCache();
    void sendRefreshRegisters();
    void sendRunSteps(int steps);
    void sendRunStep();

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_refresh_dram_btn_clicked();
    
    void on_refresh_cache_btn_clicked();
    
    void on_refresh_registers_btn_clicked();
    
    void on_enable_pipeline_checkbox_checkStateChanged(const Qt::CheckState &arg1);
    
    void on_enabl_cache_checkbox_checkStateChanged(const Qt::CheckState &arg1);
    
    void on_run_steps_btn_clicked();
    
    void on_step_btn_clicked();
    
    void on_save_program_state_btn_clicked();

private:
    Ui::GUI *ui;
    QThread workerThread;
    Worker *worker;
    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";
    }
};
#endif // GUI_H