summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/BPStructs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/BPStructs.cpp')
-rw-r--r--Source/Core/VideoCommon/BPStructs.cpp16
1 files changed, 5 insertions, 11 deletions
diff --git a/Source/Core/VideoCommon/BPStructs.cpp b/Source/Core/VideoCommon/BPStructs.cpp
index cd3302beb3..79c24778bd 100644
--- a/Source/Core/VideoCommon/BPStructs.cpp
+++ b/Source/Core/VideoCommon/BPStructs.cpp
@@ -269,19 +269,13 @@ static void BPWritten(const BPCmd& bp)
{
u32 tlutTMemAddr = (bp.newvalue & 0x3FF) << 9;
u32 tlutXferCount = (bp.newvalue & 0x1FFC00) >> 5;
+ u32 addr = bpmem.tmem_config.tlut_src << 5;
- u32 addr = 0;
+ // The GameCube ignores the upper bits of this address. Some games (WW, MKDD) set them.
+ if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bWii)
+ addr = addr & 0x01FFFFFF;
- // TODO - figure out a cleaner way.
- if (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii)
- addr = bpmem.tmem_config.tlut_src << 5;
- else
- addr = (bpmem.tmem_config.tlut_src & 0xFFFFF) << 5;
-
- if (addr)
- Memory::CopyFromEmu(texMem + tlutTMemAddr, addr, tlutXferCount);
- else
- PanicAlert("Invalid palette pointer %08x %08x %08x", bpmem.tmem_config.tlut_src, bpmem.tmem_config.tlut_src << 5, (bpmem.tmem_config.tlut_src & 0xFFFFF)<< 5);
+ Memory::CopyFromEmu(texMem + tlutTMemAddr, addr, tlutXferCount);
return;
}