mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-29 00:59:44 -06:00
HW/Memmap: Refactor Memory to class, move to Core::System.
This commit is contained in:
@ -13,6 +13,7 @@
|
||||
#include "Common/MsgHandler.h"
|
||||
#include "Core/Config/MainSettings.h"
|
||||
#include "Core/HW/Memmap.h"
|
||||
#include "Core/System.h"
|
||||
|
||||
constexpr u32 FILE_ID = 0x0d01f1f0;
|
||||
constexpr u32 VERSION_NUMBER = 5;
|
||||
@ -161,8 +162,10 @@ bool FifoDataFile::Save(const std::string& filename)
|
||||
|
||||
header.flags = m_Flags;
|
||||
|
||||
header.mem1_size = Memory::GetRamSizeReal();
|
||||
header.mem2_size = Memory::GetExRamSizeReal();
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
header.mem1_size = memory.GetRamSizeReal();
|
||||
header.mem2_size = memory.GetExRamSizeReal();
|
||||
|
||||
file.Seek(0, File::SeekOrigin::Begin);
|
||||
file.WriteBytes(&header, sizeof(FileHeader));
|
||||
@ -267,14 +270,15 @@ std::unique_ptr<FifoDataFile> FifoDataFile::Load(const std::string& filename, bo
|
||||
// It should be noted, however, that Dolphin *will still crash* from the nullptr being returned
|
||||
// in a non-flagsOnly context, so if this code becomes necessary, it should be moved above the
|
||||
// prior conditional.
|
||||
if (header.mem1_size != Memory::GetRamSizeReal() ||
|
||||
header.mem2_size != Memory::GetExRamSizeReal())
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
if (header.mem1_size != memory.GetRamSizeReal() || header.mem2_size != memory.GetExRamSizeReal())
|
||||
{
|
||||
CriticalAlertFmtT("Emulated memory size mismatch!\n"
|
||||
"Current: MEM1 {0:08X} ({1} MiB), MEM2 {2:08X} ({3} MiB)\n"
|
||||
"DFF: MEM1 {4:08X} ({5} MiB), MEM2 {6:08X} ({7} MiB)",
|
||||
Memory::GetRamSizeReal(), Memory::GetRamSizeReal() / 0x100000,
|
||||
Memory::GetExRamSizeReal(), Memory::GetExRamSizeReal() / 0x100000,
|
||||
memory.GetRamSizeReal(), memory.GetRamSizeReal() / 0x100000,
|
||||
memory.GetExRamSizeReal(), memory.GetExRamSizeReal() / 0x100000,
|
||||
header.mem1_size, header.mem1_size / 0x100000, header.mem2_size,
|
||||
header.mem2_size / 0x100000);
|
||||
return nullptr;
|
||||
|
@ -494,12 +494,14 @@ void FifoPlayer::WriteAllMemoryUpdates()
|
||||
|
||||
void FifoPlayer::WriteMemory(const MemoryUpdate& memUpdate)
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
u8* mem = nullptr;
|
||||
|
||||
if (memUpdate.address & 0x10000000)
|
||||
mem = &Memory::m_pEXRAM[memUpdate.address & Memory::GetExRamMask()];
|
||||
mem = &memory.GetEXRAM()[memUpdate.address & memory.GetExRamMask()];
|
||||
else
|
||||
mem = &Memory::m_pRAM[memUpdate.address & Memory::GetRamMask()];
|
||||
mem = &memory.GetRAM()[memUpdate.address & memory.GetRamMask()];
|
||||
|
||||
std::copy(memUpdate.data.begin(), memUpdate.data.end(), mem);
|
||||
}
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
#include "Core/ConfigManager.h"
|
||||
#include "Core/HW/Memmap.h"
|
||||
#include "Core/System.h"
|
||||
|
||||
#include "VideoCommon/OpcodeDecoding.h"
|
||||
#include "VideoCommon/XFStructs.h"
|
||||
@ -229,8 +230,10 @@ void FifoRecorder::StartRecording(s32 numFrames, CallbackFunc finishedCb)
|
||||
// - Global variables suck
|
||||
// - Multithreading with the above two sucks
|
||||
//
|
||||
m_Ram.resize(Memory::GetRamSize());
|
||||
m_ExRam.resize(Memory::GetExRamSize());
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
m_Ram.resize(memory.GetRamSize());
|
||||
m_ExRam.resize(memory.GetExRamSize());
|
||||
|
||||
std::fill(m_Ram.begin(), m_Ram.end(), 0);
|
||||
std::fill(m_ExRam.begin(), m_ExRam.end(), 0);
|
||||
@ -310,17 +313,20 @@ void FifoRecorder::WriteGPCommand(const u8* data, u32 size)
|
||||
|
||||
void FifoRecorder::UseMemory(u32 address, u32 size, MemoryUpdate::Type type, bool dynamicUpdate)
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
|
||||
u8* curData;
|
||||
u8* newData;
|
||||
if (address & 0x10000000)
|
||||
{
|
||||
curData = &m_ExRam[address & Memory::GetExRamMask()];
|
||||
newData = &Memory::m_pEXRAM[address & Memory::GetExRamMask()];
|
||||
curData = &m_ExRam[address & memory.GetExRamMask()];
|
||||
newData = &memory.GetEXRAM()[address & memory.GetExRamMask()];
|
||||
}
|
||||
else
|
||||
{
|
||||
curData = &m_Ram[address & Memory::GetRamMask()];
|
||||
newData = &Memory::m_pRAM[address & Memory::GetRamMask()];
|
||||
curData = &m_Ram[address & memory.GetRamMask()];
|
||||
newData = &memory.GetRAM()[address & memory.GetRamMask()];
|
||||
}
|
||||
|
||||
if (!dynamicUpdate && memcmp(curData, newData, size) != 0)
|
||||
|
Reference in New Issue
Block a user