summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorskidau <skidau@gmail.com>2013-04-07 07:18:28 +1000
committerskidau <skidau@gmail.com>2013-04-07 07:18:28 +1000
commit8a2109691ad6372cc5ad2e10fe7ac5fbb645979e (patch)
tree8936a250a19c8de8d78692501ae38694676b170f /Source/Core
parentecb4337209486c733ef20a132334df8485c64f01 (diff)
Quick fix to get Zelda: Wind Waker booting again.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.cpp23
-rw-r--r--Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h3
2 files changed, 17 insertions, 9 deletions
diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.cpp
index dc2f20dda1..ba9f4ec222 100644
--- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.cpp
+++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.cpp
@@ -112,16 +112,23 @@ u8 *CUCode_Zelda::GetARAMPointer(u32 address)
void CUCode_Zelda::Update(int cycles)
{
- if (!IsLightVersion())
- {
- if (m_rMailHandler.GetNextMail() == DSP_FRAME_END)
- DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP);
- }
+ m_cycles += cycles;
- if (NeedsResumeMail())
+ if (m_cycles >= 243000)
{
- m_rMailHandler.PushMail(DSP_RESUME);
- DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP);
+ m_cycles = 0;
+
+ if (!IsLightVersion())
+ {
+ if (m_rMailHandler.GetNextMail() == DSP_FRAME_END)
+ DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP);
+ }
+
+ if (NeedsResumeMail())
+ {
+ m_rMailHandler.PushMail(DSP_RESUME);
+ DSP::GenerateDSPInterruptFromDSPEmu(DSP::INT_DSP);
+ }
}
}
diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h
index f8a69536c2..d105d3dea9 100644
--- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h
+++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_Zelda.h
@@ -218,7 +218,6 @@ private:
s32* m_LeftBuffer;
s32* m_RightBuffer;
-
// If you add variables, remember to keep DoState() and the constructor up to date.
s16 m_AFCCoefTable[32];
@@ -276,6 +275,8 @@ private:
u32 m_PBAddress; // The main param block array
u32 m_PBAddress2; // 4 smaller param blocks
+ u32 m_cycles;
+
void ExecuteList();
u8 *GetARAMPointer(u32 address);