summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2013-02-04 16:00:11 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2013-02-04 17:41:10 -0600
commit2ad30958d622bb304e2d6ef36e5fdc3d8d7c0f4c (patch)
treea86ebb318fd258e5bbd47c951134511d5149e677 /Source
parent03d9cca2fee67da0ca73e93bc2e867a02bb1a2bd (diff)
Stuck an IPC HLE Update call in WII_IPCInterface::Write32.
While hacky, this seems to fix various problems without increasing IPC HLE freq to infinity. Thanks to Aristar for helping test. Increase IPC command reply delay to 1/100th of a second. (fixes DKCR hanging)
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/Src/HW/SystemTimers.cpp5
-rw-r--r--Source/Core/Core/Src/HW/WII_IPC.cpp1
-rw-r--r--Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp3
3 files changed, 6 insertions, 3 deletions
diff --git a/Source/Core/Core/Src/HW/SystemTimers.cpp b/Source/Core/Core/Src/HW/SystemTimers.cpp
index 318b1213af..a041a3b0ad 100644
--- a/Source/Core/Core/Src/HW/SystemTimers.cpp
+++ b/Source/Core/Core/Src/HW/SystemTimers.cpp
@@ -248,10 +248,11 @@ void Init()
DSP_PERIOD = (int)(GetTicksPerSecond() * 0.003f);
// AyuanX: TO BE TWEAKED
- // Now the 1500 is (was) a pure assumption
+ // Now the 1500 is a pure assumption
// We need to figure out the real frequency though
- const int freq = 8000;
+ // FYI, WII_IPC_HLE_Interface::Update is also called in WII_IPCInterface::Write32
+ const int freq = 1500;
const int fields = SConfig::GetInstance().m_LocalCoreStartupParameter.
bVBeam ? 2 : 1;
IPC_HLE_PERIOD = GetTicksPerSecond() / (freq * fields);
diff --git a/Source/Core/Core/Src/HW/WII_IPC.cpp b/Source/Core/Core/Src/HW/WII_IPC.cpp
index 74af1ecdea..3651eef8ab 100644
--- a/Source/Core/Core/Src/HW/WII_IPC.cpp
+++ b/Source/Core/Core/Src/HW/WII_IPC.cpp
@@ -221,6 +221,7 @@ void Write32(const u32 _Value, const u32 _Address)
break;
}
+ WII_IPC_HLE_Interface::Update();
UpdateInterrupts();
}
diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp
index 4aee5cb045..620d6c7052 100644
--- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp
+++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp
@@ -515,7 +515,8 @@ void ExecuteCommand(u32 _Address)
if (CmdSuccess)
{
// Generate a reply to the IPC command
- EnqReply(_Address, SystemTimers::GetTicksPerSecond() / 150);
+ // TODO: should probably figure out which commands need delayed replies and which don't
+ EnqReply(_Address, SystemTimers::GetTicksPerSecond() / 100);
}
else
{