mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 06:39:46 -06:00
Merge pull request #8722 from Minty-Meeo/master
Configurable MEM1 and MEM2 sizes at runtime via Dolphin.ini
This commit is contained in:
@ -571,7 +571,7 @@ void CheatsManager::NewSearch()
|
||||
return;
|
||||
|
||||
Core::RunAsCPUThread([&] {
|
||||
for (u32 i = 0; i < Memory::REALRAM_SIZE - GetTypeSize(); i++)
|
||||
for (u32 i = 0; i < Memory::GetRamSizeReal() - GetTypeSize(); i++)
|
||||
{
|
||||
if (PowerPC::HostIsRAMAddress(base_address + i) && matches_func(base_address + i))
|
||||
m_results.push_back(
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "Core/Debugger/RSO.h"
|
||||
#include "Core/HLE/HLE.h"
|
||||
#include "Core/HW/AddressSpace.h"
|
||||
#include "Core/HW/Memmap.h"
|
||||
#include "Core/HW/WiiSave.h"
|
||||
#include "Core/HW/Wiimote.h"
|
||||
#include "Core/IOS/ES/ES.h"
|
||||
@ -1178,13 +1179,15 @@ void MenuBar::ClearSymbols()
|
||||
|
||||
void MenuBar::GenerateSymbolsFromAddress()
|
||||
{
|
||||
PPCAnalyst::FindFunctions(0x80000000, 0x81800000, &g_symbolDB);
|
||||
PPCAnalyst::FindFunctions(Memory::MEM1_BASE_ADDR,
|
||||
Memory::MEM1_BASE_ADDR + Memory::GetRamSizeReal(), &g_symbolDB);
|
||||
emit NotifySymbolsUpdated();
|
||||
}
|
||||
|
||||
void MenuBar::GenerateSymbolsFromSignatureDB()
|
||||
{
|
||||
PPCAnalyst::FindFunctions(0x80000000, 0x81800000, &g_symbolDB);
|
||||
PPCAnalyst::FindFunctions(Memory::MEM1_BASE_ADDR,
|
||||
Memory::MEM1_BASE_ADDR + Memory::GetRamSizeReal(), &g_symbolDB);
|
||||
SignatureDB db(SignatureDB::HandlerType::DSY);
|
||||
if (db.Load(File::GetSysDirectory() + TOTALDB))
|
||||
{
|
||||
@ -1315,7 +1318,8 @@ void MenuBar::LoadSymbolMap()
|
||||
if (!map_exists)
|
||||
{
|
||||
g_symbolDB.Clear();
|
||||
PPCAnalyst::FindFunctions(0x81300000, 0x81800000, &g_symbolDB);
|
||||
PPCAnalyst::FindFunctions(Memory::MEM1_BASE_ADDR + 0x1300000,
|
||||
Memory::MEM1_BASE_ADDR + Memory::GetRamSizeReal(), &g_symbolDB);
|
||||
SignatureDB db(SignatureDB::HandlerType::DSY);
|
||||
if (db.Load(File::GetSysDirectory() + TOTALDB))
|
||||
db.Apply(&g_symbolDB);
|
||||
@ -1554,7 +1558,8 @@ void MenuBar::SearchInstruction()
|
||||
return;
|
||||
|
||||
bool found = false;
|
||||
for (u32 addr = 0x80000000; addr < 0x81800000; addr += 4)
|
||||
for (u32 addr = Memory::MEM1_BASE_ADDR; addr < Memory::MEM1_BASE_ADDR + Memory::GetRamSizeReal();
|
||||
addr += 4)
|
||||
{
|
||||
auto ins_name =
|
||||
QString::fromStdString(PPCTables::GetInstructionName(PowerPC::HostRead_U32(addr)));
|
||||
|
@ -96,6 +96,44 @@ void AdvancedPane::CreateLayout()
|
||||
cpu_clock_override_description->setWordWrap(true);
|
||||
clock_override_layout->addWidget(cpu_clock_override_description);
|
||||
|
||||
auto* ram_override = new QGroupBox(tr("Memory Override"));
|
||||
auto* ram_override_layout = new QVBoxLayout();
|
||||
ram_override->setLayout(ram_override_layout);
|
||||
main_layout->addWidget(ram_override);
|
||||
|
||||
m_ram_override_checkbox = new QCheckBox(tr("Enable Emulated Memory Size Override"));
|
||||
ram_override_layout->addWidget(m_ram_override_checkbox);
|
||||
|
||||
auto* mem1_override_slider_layout = new QHBoxLayout();
|
||||
mem1_override_slider_layout->setContentsMargins(0, 0, 0, 0);
|
||||
ram_override_layout->addLayout(mem1_override_slider_layout);
|
||||
|
||||
m_mem1_override_slider = new QSlider(Qt::Horizontal);
|
||||
m_mem1_override_slider->setRange(24, 64);
|
||||
mem1_override_slider_layout->addWidget(m_mem1_override_slider);
|
||||
|
||||
m_mem1_override_slider_label = new QLabel();
|
||||
mem1_override_slider_layout->addWidget(m_mem1_override_slider_label);
|
||||
|
||||
auto* mem2_override_slider_layout = new QHBoxLayout();
|
||||
mem2_override_slider_layout->setContentsMargins(0, 0, 0, 0);
|
||||
ram_override_layout->addLayout(mem2_override_slider_layout);
|
||||
|
||||
m_mem2_override_slider = new QSlider(Qt::Horizontal);
|
||||
m_mem2_override_slider->setRange(64, 128);
|
||||
mem2_override_slider_layout->addWidget(m_mem2_override_slider);
|
||||
|
||||
m_mem2_override_slider_label = new QLabel();
|
||||
mem2_override_slider_layout->addWidget(m_mem2_override_slider_label);
|
||||
|
||||
auto* ram_override_description =
|
||||
new QLabel(tr("Adjusts the emulated sizes of MEM1 and MEM2.\n\n"
|
||||
"Some titles may recognize the larger memory arena(s) and take "
|
||||
"advantage of it, though retail titles should be optimized for "
|
||||
"the retail memory limitations."));
|
||||
ram_override_description->setWordWrap(true);
|
||||
ram_override_layout->addWidget(ram_override_description);
|
||||
|
||||
auto* rtc_options = new QGroupBox(tr("Custom RTC Options"));
|
||||
rtc_options->setLayout(new QVBoxLayout());
|
||||
main_layout->addWidget(rtc_options);
|
||||
@ -154,6 +192,24 @@ void AdvancedPane::ConnectLayout()
|
||||
Update();
|
||||
});
|
||||
|
||||
m_ram_override_checkbox->setChecked(Config::Get(Config::MAIN_RAM_OVERRIDE_ENABLE));
|
||||
connect(m_ram_override_checkbox, &QCheckBox::toggled, [this](bool enable_ram_override) {
|
||||
Config::SetBaseOrCurrent(Config::MAIN_RAM_OVERRIDE_ENABLE, enable_ram_override);
|
||||
Update();
|
||||
});
|
||||
|
||||
connect(m_mem1_override_slider, &QSlider::valueChanged, [this](int slider_value) {
|
||||
const u32 mem1_size = m_mem1_override_slider->value() * 0x100000;
|
||||
Config::SetBaseOrCurrent(Config::MAIN_MEM1_SIZE, mem1_size);
|
||||
Update();
|
||||
});
|
||||
|
||||
connect(m_mem2_override_slider, &QSlider::valueChanged, [this](int slider_value) {
|
||||
const u32 mem2_size = m_mem2_override_slider->value() * 0x100000;
|
||||
Config::SetBaseOrCurrent(Config::MAIN_MEM2_SIZE, mem2_size);
|
||||
Update();
|
||||
});
|
||||
|
||||
m_custom_rtc_checkbox->setChecked(SConfig::GetInstance().bEnableCustomRTC);
|
||||
connect(m_custom_rtc_checkbox, &QCheckBox::toggled, [this](bool enable_custom_rtc) {
|
||||
SConfig::GetInstance().bEnableCustomRTC = enable_custom_rtc;
|
||||
@ -173,6 +229,7 @@ void AdvancedPane::Update()
|
||||
{
|
||||
const bool running = Core::GetState() != Core::State::Uninitialized;
|
||||
const bool enable_cpu_clock_override_widgets = SConfig::GetInstance().m_OCEnable;
|
||||
const bool enable_ram_override_widgets = Config::Get(Config::MAIN_RAM_OVERRIDE_ENABLE);
|
||||
const bool enable_custom_rtc_widgets = SConfig::GetInstance().bEnableCustomRTC && !running;
|
||||
|
||||
const std::vector<PowerPC::CPUCore>& available_cpu_cores = PowerPC::AvailableCPUCores();
|
||||
@ -208,6 +265,36 @@ void AdvancedPane::Update()
|
||||
return tr("%1 % (%2 MHz)").arg(QString::number(percent), QString::number(clock));
|
||||
}());
|
||||
|
||||
m_ram_override_checkbox->setEnabled(!running);
|
||||
|
||||
m_mem1_override_slider->setEnabled(enable_ram_override_widgets && !running);
|
||||
m_mem1_override_slider_label->setEnabled(enable_ram_override_widgets && !running);
|
||||
|
||||
{
|
||||
const QSignalBlocker blocker(m_mem1_override_slider);
|
||||
const u32 mem1_size = Config::Get(Config::MAIN_MEM1_SIZE) / 0x100000;
|
||||
m_mem1_override_slider->setValue(mem1_size);
|
||||
}
|
||||
|
||||
m_mem1_override_slider_label->setText([] {
|
||||
const u32 mem1_size = Config::Get(Config::MAIN_MEM1_SIZE) / 0x100000;
|
||||
return tr("%1MB (MEM1)").arg(QString::number(mem1_size));
|
||||
}());
|
||||
|
||||
m_mem2_override_slider->setEnabled(enable_ram_override_widgets && !running);
|
||||
m_mem2_override_slider_label->setEnabled(enable_ram_override_widgets && !running);
|
||||
|
||||
{
|
||||
const QSignalBlocker blocker(m_mem2_override_slider);
|
||||
const u32 mem2_size = Config::Get(Config::MAIN_MEM2_SIZE) / 0x100000;
|
||||
m_mem2_override_slider->setValue(mem2_size);
|
||||
}
|
||||
|
||||
m_mem2_override_slider_label->setText([] {
|
||||
const u32 mem2_size = Config::Get(Config::MAIN_MEM2_SIZE) / 0x100000;
|
||||
return tr("%1MB (MEM2)").arg(QString::number(mem2_size));
|
||||
}());
|
||||
|
||||
m_custom_rtc_checkbox->setEnabled(!running);
|
||||
m_custom_rtc_datetime->setEnabled(enable_custom_rtc_widgets);
|
||||
}
|
||||
|
@ -40,4 +40,11 @@ private:
|
||||
|
||||
QCheckBox* m_custom_rtc_checkbox;
|
||||
QDateTimeEdit* m_custom_rtc_datetime;
|
||||
|
||||
QCheckBox* m_ram_override_checkbox;
|
||||
QSlider* m_mem1_override_slider;
|
||||
QLabel* m_mem1_override_slider_label;
|
||||
QSlider* m_mem2_override_slider;
|
||||
QLabel* m_mem2_override_slider_label;
|
||||
QLabel* m_ram_override_description;
|
||||
};
|
||||
|
Reference in New Issue
Block a user