Skip to content
Permalink
Browse files
Merge pull request #10574 from EternityShack/master
MemoryWidget: Load Files to Memory
  • Loading branch information
AdmiralCurtiss committed Apr 11, 2022
2 parents 1f4df1d + c5b0b92 commit 2f90a2c
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
@@ -12,6 +12,7 @@
#include <QButtonGroup>
#include <QCheckBox>
#include <QComboBox>
#include <QFileDialog>
#include <QGroupBox>
#include <QHBoxLayout>
#include <QLabel>
@@ -112,6 +113,7 @@ void MemoryWidget::CreateWidgets()
m_data_edit = new QLineEdit;
m_base_check = new QCheckBox(tr("Hex"));
m_set_value = new QPushButton(tr("Set &Value"));
m_from_file = new QPushButton(tr("Set Value From File"));
m_data_preview = new QLabel;

m_base_check->setLayoutDirection(Qt::RightToLeft);
@@ -229,6 +231,7 @@ void MemoryWidget::CreateWidgets()
sidebar_layout->addWidget(m_input_combo);
sidebar_layout->addWidget(m_data_preview);
sidebar_layout->addWidget(m_set_value);
sidebar_layout->addWidget(m_from_file);
sidebar_layout->addItem(new QSpacerItem(1, 20));
sidebar_layout->addWidget(m_dump_mram);
sidebar_layout->addWidget(m_dump_exram);
@@ -271,6 +274,7 @@ void MemoryWidget::ConnectWidgets()
&MemoryWidget::ValidateAndPreviewInputValue);

connect(m_set_value, &QPushButton::clicked, this, &MemoryWidget::OnSetValue);
connect(m_from_file, &QPushButton::clicked, this, &MemoryWidget::OnSetValueFromFile);

connect(m_dump_mram, &QPushButton::clicked, this, &MemoryWidget::OnDumpMRAM);
connect(m_dump_exram, &QPushButton::clicked, this, &MemoryWidget::OnDumpExRAM);
@@ -689,6 +693,56 @@ void MemoryWidget::OnSetValue()
Update();
}

void MemoryWidget::OnSetValueFromFile()
{
if (!Core::IsRunning())
return;

auto target_addr = GetTargetAddress();

if (!target_addr.is_good_address)
{
ModalMessageBox::critical(this, tr("Error"), tr("Bad address provided."));
return;
}

if (!target_addr.is_good_offset)
{
ModalMessageBox::critical(this, tr("Error"), tr("Bad offset provided."));
return;
}

QString path = QFileDialog::getOpenFileName(this, tr("Select a file"), QDir::currentPath(),
tr("All files (*)"));
if (path.isNull())
{
return;
}

File::IOFile f(path.toStdString(), "rb");

if (!f)
{
ModalMessageBox::critical(this, tr("Error"), tr("Unable to open file."));
return;
}

const u64 file_length = f.GetSize();
std::vector<u8> file_contents(file_length);
if (!f.ReadBytes(file_contents.data(), file_length))
{
ModalMessageBox::critical(this, tr("Error"), tr("Unable to read file."));
return;
}

AddressSpace::Accessors* accessors = AddressSpace::GetAccessors(m_memory_view->GetAddressSpace());

for (u8 b : file_contents)
accessors->WriteU8(target_addr.address++, b);

Update();
}

static void DumpArray(const std::string& filename, const u8* data, size_t length)
{
if (!data)
@@ -73,6 +73,7 @@ class MemoryWidget : public QDockWidget
void OnFindPreviousValue();

void OnSetValue();
void OnSetValueFromFile();

void OnDumpMRAM();
void OnDumpExRAM();
@@ -95,6 +96,7 @@ class MemoryWidget : public QDockWidget
QCheckBox* m_base_check;
QLabel* m_data_preview;
QPushButton* m_set_value;
QPushButton* m_from_file;
QPushButton* m_dump_mram;
QPushButton* m_dump_exram;
QPushButton* m_dump_aram;

0 comments on commit 2f90a2c

Please sign in to comment.