aboutsummaryrefslogtreecommitdiff
path: root/qtmips_gui
diff options
context:
space:
mode:
Diffstat (limited to 'qtmips_gui')
-rw-r--r--qtmips_gui/memorydock.cpp14
-rw-r--r--qtmips_gui/memorymodel.cpp18
-rw-r--r--qtmips_gui/memorymodel.h2
3 files changed, 27 insertions, 7 deletions
diff --git a/qtmips_gui/memorydock.cpp b/qtmips_gui/memorydock.cpp
index ccb3b6a..323f053 100644
--- a/qtmips_gui/memorydock.cpp
+++ b/qtmips_gui/memorydock.cpp
@@ -44,8 +44,6 @@
#include "memorytableview.h"
#include "hexlineedit.h"
-
-
MemoryDock::MemoryDock(QWidget *parent, QSettings *settings) : Super(parent) {
setObjectName("Memory");
setWindowTitle("Memory");
@@ -58,6 +56,10 @@ MemoryDock::MemoryDock(QWidget *parent, QSettings *settings) : Super(parent) {
cell_size->addItem("Word", MemoryModel::CELLSIZE_WORD);
cell_size->setCurrentIndex(MemoryModel::CELLSIZE_WORD);
+ QComboBox *cached_access = new QComboBox();
+ cached_access->addItem("Direct", 0);
+ cached_access->addItem("Cached", 1);
+
QTableView *memory_content = new MemoryTableView(0, settings);
// memory_content->setSizePolicy();
MemoryModel *memory_model = new MemoryModel(0);
@@ -67,8 +69,12 @@ MemoryDock::MemoryDock(QWidget *parent, QSettings *settings) : Super(parent) {
QLineEdit *go_edit = new HexLineEdit(0, 8, 16, "0x");
+ QHBoxLayout *layout_top = new QHBoxLayout;
+ layout_top->addWidget(cell_size);
+ layout_top->addWidget(cached_access);
+
QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(cell_size);
+ layout->addLayout(layout_top);
layout->addWidget(memory_content);
layout->addWidget(go_edit);
@@ -79,6 +85,8 @@ MemoryDock::MemoryDock(QWidget *parent, QSettings *settings) : Super(parent) {
connect(this, &MemoryDock::machine_setup, memory_model, &MemoryModel::setup);
connect(cell_size, SIGNAL(currentIndexChanged(int)),
memory_content, SLOT(set_cell_size(int)));
+ connect(cached_access, SIGNAL(currentIndexChanged(int)),
+ memory_model, SLOT(cached_access(int)));
connect(go_edit, SIGNAL(value_edit_finished(std::uint32_t)),
memory_content, SLOT(go_to_address(std::uint32_t)));
connect(memory_content, SIGNAL(address_changed(std::uint32_t)),
diff --git a/qtmips_gui/memorymodel.cpp b/qtmips_gui/memorymodel.cpp
index 66da84c..12b3fcb 100644
--- a/qtmips_gui/memorymodel.cpp
+++ b/qtmips_gui/memorymodel.cpp
@@ -46,6 +46,7 @@ MemoryModel::MemoryModel(QObject *parent)
machine = nullptr;
memory_change_counter = 0;
cache_data_change_counter = 0;
+ access_through_cache = 0;
}
int MemoryModel::rowCount(const QModelIndex & /*parent*/) const {
@@ -80,6 +81,7 @@ QVariant MemoryModel::data(const QModelIndex &index, int role) const {
QString s, t;
std::uint32_t address;
std::uint32_t data;
+ const machine::MemoryAccess *mem;
if (!get_row_address(address, index.row()))
return QString("");
if (index.column() == 0) {
@@ -89,21 +91,24 @@ QVariant MemoryModel::data(const QModelIndex &index, int role) const {
}
if (machine == nullptr)
return QString("");
- if (machine->memory() == nullptr)
+ mem = machine->memory();
+ if (mem == nullptr)
return QString("");
+ if ((access_through_cache > 0) && (machine->cache_data() != nullptr))
+ mem = machine->cache_data();
address += cellSizeBytes() * (index.column() - 1);
if (address < index0_offset)
return QString("");
switch (cell_size) {
case CELLSIZE_BYTE:
- data = machine->memory()->read_byte(address);
+ data = mem->read_byte(address, true);
break;
case CELLSIZE_HWORD:
- data = machine->memory()->read_hword(address);
+ data = mem->read_hword(address, true);
break;
default:
case CELLSIZE_WORD:
- data = machine->memory()->read_word(address);
+ data = mem->read_word(address, true);
break;
}
@@ -215,3 +220,8 @@ bool MemoryModel::adjustRowAndOffset(int &row, int optimal_row, std::uint32_t ad
}
return get_row_for_address(row, address);
}
+
+void MemoryModel::cached_access(int cached) {
+ access_through_cache = cached;
+ update_all();
+}
diff --git a/qtmips_gui/memorymodel.h b/qtmips_gui/memorymodel.h
index f093dbb..83bc057 100644
--- a/qtmips_gui/memorymodel.h
+++ b/qtmips_gui/memorymodel.h
@@ -106,6 +106,7 @@ public slots:
void setup(machine::QtMipsMachine *machine);
void set_cell_size(int index);
void check_for_updates();
+ void cached_access(int cached);
signals:
void cell_size_changed();
@@ -118,6 +119,7 @@ private:
machine::QtMipsMachine *machine;
std::uint32_t memory_change_counter;
std::uint32_t cache_data_change_counter;
+ int access_through_cache;
};