summaryrefslogtreecommitdiff
path: root/gui/gui.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gui/gui.cc')
-rw-r--r--gui/gui.cc65
1 files changed, 20 insertions, 45 deletions
diff --git a/gui/gui.cc b/gui/gui.cc
index b4feda6..395c6e6 100644
--- a/gui/gui.cc
+++ b/gui/gui.cc
@@ -17,9 +17,10 @@
#include "gui.h"
#include "./ui_gui.h"
+#include "cachewaysselector.h"
#include "digitlabeldelegate.h"
-#include "dynamicwaysentry.h"
#include "messages.h"
+#include "registerview.h"
#include "storageview.h"
#include "util.h"
#include <QHeaderView>
@@ -72,6 +73,8 @@ GUI::GUI(QWidget *parent) : QMainWindow(parent), ui(new Ui::GUI)
connect(worker, &Worker::wb_info, this, &GUI::onWorkerWriteBackInfo);
+ connect(worker, &Worker::steps_done, this, &GUI::onWorkerStepsDone);
+
// Display cache
connect(worker, &Worker::storage, this, &GUI::onWorkerShowStorage);
@@ -109,37 +112,10 @@ GUI::~GUI()
delete ui;
}
-void displayArrayHTML(QTextEdit *textEdit, const std::array<int, GPR_NUM> &data)
-{
- textEdit->setReadOnly(false);
- QString tableText = "<table border='1' cellspacing='0' cellpadding='8' "
- "style='border-collapse: collapse; width: 100%; "
- "border: 2px solid black;'>";
-
- tableText += "<tr>";
- int index = 0;
- for (int value : data) {
- tableText += QString("<td align='center' style='border: 2px solid "
- "black; min-width: 60px; padding: 10px;'>"
- "%1 <sup style='font-size: 10px; font-weight: "
- "bold; color: black;'>%2</sup>"
- "</td>")
- .arg(QString::asprintf("%04X", value))
- .arg(index);
- index++;
- }
- tableText += "</tr>";
- tableText += "</table>";
-
- textEdit->setHtml(tableText);
- textEdit->setReadOnly(true);
-}
-
void GUI::on_worker_refresh_gui(int cycles, int pc)
{
ui->p_counter->set_value(pc);
ui->cycle_counter->set_value(cycles);
- this->set_status(get_waiting, "idle");
}
void GUI::onWorkerFetchInfo(const InstrDTO *i)
@@ -215,15 +191,20 @@ void GUI::onWorkerWriteBackInfo(const InstrDTO *i)
}
}
+void GUI::onWorkerStepsDone() { this->set_status(get_waiting, "idle"); }
+
void GUI::onWorkerShowStorage(const QVector<QVector<int>> &data, int i)
{
this->tab_boxes.at(i)->set_data(data);
}
-void GUI::onWorkerShowRegisters(const std::array<int, GPR_NUM> &data)
+void GUI::onWorkerShowRegisters(
+ const QVector<signed int> &gprs, const QVector<QVector<signed int>> &vrs)
{
- ;
- // displayArrayHTML(this->tab_boxes.at(0), data);
+ RegisterView *rv;
+
+ rv = dynamic_cast<RegisterView *>(this->tab_boxes.at(0));
+ rv->set_data(gprs, vrs);
}
void GUI::on_upload_intructions_btn_clicked()
@@ -301,21 +282,15 @@ void GUI::on_config_clicked()
{
std::vector<unsigned int> ways;
QStringList entries;
- signed int i;
- DynamicWaysEntry *dwe = ui->cache_way_selector;
+ CacheWaysSelector *cws = ui->cache_ways_selector;
- for (const QString &s : dwe->get_entries()) {
+ for (int i : cws->values()) {
- if (s.isEmpty())
+ // invalid
+ if (i == -1)
continue;
- i = dwe->parse_valid_way(s);
- if (i >= 0) {
- ways.push_back((unsigned int)i);
- } else {
- this->set_status(get_bad_cache, "angry");
- return;
- }
+ ways.push_back((unsigned int)i);
}
if (this->p.empty()) {
@@ -355,15 +330,15 @@ void GUI::make_tabs(int num)
for (i = 0; i < num; ++i) {
if (i == 0) {
n = "Registers";
- e = new StorageView(0, this);
+ e = new RegisterView(GPR_NUM + V_NUM, V_R_LIMIT, this);
} else if (i == num - 1) {
n = "DRAM";
- e = new StorageView(MEM_LINES, this);
+ e = new StorageView(MEM_LINES, LINE_SIZE, this);
} else {
n = QString("L%1").arg(i);
e = new StorageView(
(1 << cache_size_mapper(this->curr_cache_levels - 1, i - 1)),
- this);
+ LINE_SIZE, this);
}
t = new QTableView(ui->storage);