From 1fe8fd1299871ffae539e341a1e2c8e1513ed411 Mon Sep 17 00:00:00 2001 From: zilmar Date: Mon, 16 May 2022 11:00:20 +0930 Subject: [PATCH] Core: have MemoryValue32 be able to read from rom --- .../N64System/Mips/MemoryVirtualMem.cpp | 15 ++++++++++++++- .../N64System/Mips/MemoryVirtualMem.h | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp index 389f85d24..8ffb157ec 100755 --- a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp +++ b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp @@ -43,7 +43,8 @@ CMipsMemoryVM::CMipsMemoryVM(CN64System & System, bool SavesReadOnly) : m_TLB_WriteMap(nullptr), m_RDRAM(nullptr), m_DMEM(nullptr), - m_IMEM(nullptr) + m_IMEM(nullptr), + m_Rom(*g_Rom) { g_Settings->RegisterChangeCB(Game_RDRamSize, this, (CSettings::SettingChangedFunc)RdramChanged); } @@ -343,6 +344,18 @@ bool CMipsMemoryVM::MemoryValue32(uint32_t VAddr, uint32_t& Value) Value = *(uint32_t*)(m_IMEM + (PAddr - 0x04001000)); return true; } + if (PAddr >= 0x10000000 && PAddr < 0x16000000) + { + if ((PAddr & 0xFFFFFFF) < m_Rom.GetRomSize()) + { + Value = *(uint32_t *)&m_Rom.GetRomAddress()[(PAddr & 0xFFFFFFF)]; + } + else + { + Value = (PAddr << 16) | (PAddr & 0xFFFF); + } + return true; + } g_Notify->BreakPoint(__FILE__, __LINE__); return false; } diff --git a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.h b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.h index ff7aeff11..538192c19 100644 --- a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.h +++ b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.h @@ -184,6 +184,7 @@ private: VideoInterfaceHandler m_VideoInterfaceHandler; uint8_t * m_RDRAM, *m_DMEM, *m_IMEM; uint32_t m_AllocatedRdramSize; + CN64Rom & m_Rom; mutable char m_strLabelName[100]; uint32_t * m_TLB_ReadMap;