From a8dacad8bf3133bda7c8f90cc32fc3ee577961d0 Mon Sep 17 00:00:00 2001 From: zilmar Date: Tue, 22 Dec 2015 17:02:08 +1100 Subject: [PATCH] [Project64] Add Write32SerialInterface --- .../N64System/Mips/MemoryVirtualMem.cpp | 48 +++++++++++-------- .../N64System/Mips/MemoryVirtualMem.h | 1 + 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp index ba01ac240..85df87e08 100644 --- a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp +++ b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp @@ -2667,27 +2667,7 @@ bool CMipsMemoryVM::SW_NonMemory(uint32_t PAddr, uint32_t Value) case 0x04500000: Write32AudioInterface(); break; case 0x04600000: Write32PeripheralInterface(); break; case 0x04700000: Write32RDRAMInterface(); break; - case 0x04800000: - switch (PAddr) - { - case 0x04800000: g_Reg->SI_DRAM_ADDR_REG = Value; break; - case 0x04800004: - g_Reg->SI_PIF_ADDR_RD64B_REG = Value; - SI_DMA_READ(); - break; - case 0x04800010: - g_Reg->SI_PIF_ADDR_WR64B_REG = Value; - SI_DMA_WRITE(); - break; - case 0x04800018: - g_Reg->MI_INTR_REG &= ~MI_INTR_SI; - g_Reg->SI_STATUS_REG &= ~SI_STATUS_INTERRUPT; - g_Reg->CheckInterrupts(); - break; - default: - return false; - } - break; + case 0x04800000: Write32SerialInterface(); break; case 0x08000000: if (g_System->m_SaveUsing == SaveChip_Sram) { @@ -5767,4 +5747,30 @@ void CMipsMemoryVM::Write32RDRAMInterface(void) g_Notify->BreakPoint(__FILE__, __LINE__); } } +} + +void CMipsMemoryVM::Write32SerialInterface(void) +{ + switch (m_MemLookupAddress & 0xFFFFFFF) + { + case 0x04800000: g_Reg->SI_DRAM_ADDR_REG = m_MemLookupValue.UW[0]; break; + case 0x04800004: + g_Reg->SI_PIF_ADDR_RD64B_REG = m_MemLookupValue.UW[0]; + g_MMU->SI_DMA_READ(); + break; + case 0x04800010: + g_Reg->SI_PIF_ADDR_WR64B_REG = m_MemLookupValue.UW[0]; + g_MMU->SI_DMA_WRITE(); + break; + case 0x04800018: + g_Reg->MI_INTR_REG &= ~MI_INTR_SI; + g_Reg->SI_STATUS_REG &= ~SI_STATUS_INTERRUPT; + g_Reg->CheckInterrupts(); + break; + default: + 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 251cae70c..7f50cd6fe 100644 --- a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.h +++ b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.h @@ -204,6 +204,7 @@ private: static void Write32AudioInterface(void); static void Write32PeripheralInterface(void); static void Write32RDRAMInterface(void); + static void Write32SerialInterface(void); CMipsMemory_CallBack * const m_CBClass;