From 9692ecf1b4457aabb5054581790d24737bd38b14 Mon Sep 17 00:00:00 2001 From: zilmar Date: Mon, 21 Dec 2015 20:49:13 +1100 Subject: [PATCH] [Project64] Add Load32SPRegisters --- .../N64System/Mips/MemoryVirtualMem.cpp | 37 ++++++++++++------- .../N64System/Mips/MemoryVirtualMem.h | 1 + 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp index cacda934b..d3cc98ee9 100644 --- a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp +++ b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp @@ -2515,20 +2515,8 @@ bool CMipsMemoryVM::LW_NonMemory(uint32_t PAddr, uint32_t* Value) *Value = m_MemLookupValue.UW[0]; break; case 0x04000000: - switch (PAddr) - { - case 0x04040010: *Value = g_Reg->SP_STATUS_REG; break; - case 0x04040014: *Value = g_Reg->SP_DMA_FULL_REG; break; - case 0x04040018: *Value = g_Reg->SP_DMA_BUSY_REG; break; - case 0x0404001C: - *Value = g_Reg->SP_SEMAPHORE_REG; - g_Reg->SP_SEMAPHORE_REG = 1; - break; - case 0x04080000: *Value = g_Reg->SP_PC_REG; break; - default: - *Value = 0; - return false; - } + Load32SPRegisters(); + *Value = m_MemLookupValue.UW[0]; break; case 0x04100000: switch (PAddr) @@ -5635,4 +5623,25 @@ void CMipsMemoryVM::Load32RDRAMRegisters(void) } } m_MemLookupValid = true; +} + +void CMipsMemoryVM::Load32SPRegisters(void) +{ + switch (m_MemLookupAddress & 0x1FFFFFFF) + { + case 0x04040010: m_MemLookupValue.UW[0] = g_Reg->SP_STATUS_REG; break; + case 0x04040014: m_MemLookupValue.UW[0] = g_Reg->SP_DMA_FULL_REG; break; + case 0x04040018: m_MemLookupValue.UW[0] = g_Reg->SP_DMA_BUSY_REG; break; + case 0x0404001C: + m_MemLookupValue.UW[0] = g_Reg->SP_SEMAPHORE_REG; + g_Reg->SP_SEMAPHORE_REG = 1; + break; + case 0x04080000: m_MemLookupValue.UW[0] = g_Reg->SP_PC_REG; break; + default: + m_MemLookupValue.UW[0] = 0; + if (bHaveDebugger()) + { + g_Notify->BreakPoint(__FILE__, __LINE__); + } + } } \ No newline at end of file diff --git a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.h b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.h index 51c4ea0e2..f679f1831 100644 --- a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.h +++ b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.h @@ -183,6 +183,7 @@ private: void Compile_StoreInstructClean(x86Reg AddressReg, int32_t Length); static void Load32RDRAMRegisters(void); + static void Load32SPRegisters(void); CMipsMemory_CallBack * const m_CBClass;