[Project64] Add Load32Rom

This commit is contained in:
zilmar 2015-12-22 08:24:37 +11:00
parent 4fe7ce8242
commit d5ceb3d367
2 changed files with 68 additions and 58 deletions

View File

@ -2479,35 +2479,14 @@ bool CMipsMemoryVM::LW_NonMemory(uint32_t PAddr, uint32_t* Value)
return true; return true;
} }
#endif #endif
m_MemLookupAddress = PAddr;
if (PAddr >= 0x10000000 && PAddr < 0x16000000) if (PAddr >= 0x10000000 && PAddr < 0x16000000)
{ {
if (m_RomWrittenTo) Load32Rom();
{
*Value = m_RomWroteValue;
//LogMessage("%X: Read crap from Rom %08X from %08X",PROGRAM_COUNTER,*Value,PAddr);
m_RomWrittenTo = false;
#ifdef ROM_IN_MAPSPACE
{
uint32_t OldProtect;
VirtualProtect(ROM,RomFileSize,PAGE_READONLY, &OldProtect);
}
#endif
return true;
}
if ((PAddr - 0x10000000) < m_RomSize)
{
*Value = *(uint32_t *)&m_Rom[PAddr - 0x10000000];
return true;
} }
else else
{ {
*Value = PAddr & 0xFFFF;
*Value = (*Value << 16) | *Value;
return false;
}
}
m_MemLookupAddress = PAddr;
switch (PAddr & 0xFFF00000) switch (PAddr & 0xFFF00000)
{ {
case 0x03F00000: Load32RDRAMRegisters(); break; case 0x03F00000: Load32RDRAMRegisters(); break;
@ -2530,6 +2509,7 @@ bool CMipsMemoryVM::LW_NonMemory(uint32_t PAddr, uint32_t* Value)
m_MemLookupValue.UW[0] = PAddr & 0xFFFF; m_MemLookupValue.UW[0] = PAddr & 0xFFFF;
m_MemLookupValue.UW[0] = (m_MemLookupValue.UW[0] << 16) | m_MemLookupValue.UW[0]; m_MemLookupValue.UW[0] = (m_MemLookupValue.UW[0] << 16) | m_MemLookupValue.UW[0];
} }
}
*Value = m_MemLookupValue.UW[0]; *Value = m_MemLookupValue.UW[0];
return true; return true;
} }
@ -2568,7 +2548,7 @@ bool CMipsMemoryVM::SB_NonMemory(uint32_t PAddr, uint8_t Value)
break; break;
default: default:
return false; return false;
} }
return true; return true;
} }
@ -2608,7 +2588,7 @@ bool CMipsMemoryVM::SH_NonMemory(uint32_t PAddr, uint16_t Value)
break; break;
default: default:
return false; return false;
} }
return true; return true;
} }
@ -2633,7 +2613,7 @@ bool CMipsMemoryVM::SW_NonMemory(uint32_t PAddr, uint32_t Value)
{ {
return false; return false;
} }
} }
switch (PAddr & 0xFFF00000) switch (PAddr & 0xFFF00000)
{ {
@ -2655,7 +2635,7 @@ bool CMipsMemoryVM::SW_NonMemory(uint32_t PAddr, uint32_t Value)
g_Notify->DisplayError(L"FrameBufferWrite %X", PAddr); g_Notify->DisplayError(L"FrameBufferWrite %X", PAddr);
if (FrameBufferWrite) { FrameBufferWrite(PAddr, 4); } if (FrameBufferWrite) { FrameBufferWrite(PAddr, 4); }
break; break;
} }
#endif #endif
if (PAddr < RdramSize()) if (PAddr < RdramSize())
{ {
@ -3228,7 +3208,7 @@ bool CMipsMemoryVM::SW_NonMemory(uint32_t PAddr, uint32_t Value)
} }
return true; return true;
} }
void CMipsMemoryVM::UpdateHalfLine() void CMipsMemoryVM::UpdateHalfLine()
{ {
@ -5705,3 +5685,32 @@ void CMipsMemoryVM::Load32PifRam(void)
} }
} }
} }
void CMipsMemoryVM::Load32Rom(void)
{
if (g_MMU->m_RomWrittenTo)
{
m_MemLookupValue.UW[0] = g_MMU->m_RomWroteValue;
//LogMessage("%X: Read crap from Rom %08X from %08X",PROGRAM_COUNTER,*Value,PAddr);
g_MMU->m_RomWrittenTo = false;
#ifdef ROM_IN_MAPSPACE
{
uint32_t OldProtect;
VirtualProtect(ROM, RomFileSize, PAGE_READONLY, &OldProtect);
}
#endif
}
else if ((m_MemLookupAddress & 0xFFFFFFF) < g_MMU->m_RomSize)
{
m_MemLookupValue.UW[0] = *(uint32_t *)&g_MMU->m_Rom[(m_MemLookupAddress & 0xFFFFFFF)];
}
else
{
m_MemLookupValue.UW[0] = m_MemLookupAddress & 0xFFFF;
m_MemLookupValue.UW[0] = (m_MemLookupValue.UW[0] << 16) | m_MemLookupValue.UW[0];
if (bHaveDebugger())
{
g_Notify->BreakPoint(__FILE__, __LINE__);
}
}
}

View File

@ -194,6 +194,7 @@ private:
static void Load32CartridgeDomain2Address1(void); static void Load32CartridgeDomain2Address1(void);
static void Load32CartridgeDomain2Address2(void); static void Load32CartridgeDomain2Address2(void);
static void Load32PifRam(void); static void Load32PifRam(void);
static void Load32Rom(void);
CMipsMemory_CallBack * const m_CBClass; CMipsMemory_CallBack * const m_CBClass;