diff options
| author | Léo Lam <leo@innovatetechnologi.es> | 2018-02-28 17:00:26 +0100 |
|---|---|---|
| committer | Léo Lam <leo@innovatetechnologi.es> | 2018-03-16 18:51:08 +0100 |
| commit | d029f2a7b6544933fcd35befceae456da29cf280 (patch) | |
| tree | 04dfff38134f8d901fd6abdc8e28fd3eba1af27e /Source/Core | |
| parent | 1a71076e50dbf4fd33fc5834cfc61367d5a19ea6 (diff) | |
IPC: Clear X1 when acknowledging a reply
Hardware tests indicate that IOS clears X1 when it acknowledges
an IPC request.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/HW/WII_IPC.cpp | 5 | ||||
| -rw-r--r-- | Source/Core/Core/HW/WII_IPC.h | 1 | ||||
| -rw-r--r-- | Source/Core/Core/IOS/IOS.cpp | 1 |
3 files changed, 7 insertions, 0 deletions
diff --git a/Source/Core/Core/HW/WII_IPC.cpp b/Source/Core/Core/HW/WII_IPC.cpp index 5a60b0f04f..d231adcfd2 100644 --- a/Source/Core/Core/HW/WII_IPC.cpp +++ b/Source/Core/Core/HW/WII_IPC.cpp @@ -211,6 +211,11 @@ static void UpdateInterrupts(u64 userdata, s64 cyclesLate) !!(ppc_irq_flags & ppc_irq_masks)); } +void ClearX1() +{ + ctrl.X1 = 0; +} + void GenerateAck(u32 _Address) { ctrl.Y2 = 1; diff --git a/Source/Core/Core/HW/WII_IPC.h b/Source/Core/Core/HW/WII_IPC.h index d97e7eab0c..34419b8988 100644 --- a/Source/Core/Core/HW/WII_IPC.h +++ b/Source/Core/Core/HW/WII_IPC.h @@ -42,6 +42,7 @@ void DoState(PointerWrap& p); void RegisterMMIO(MMIO::Mapping* mmio, u32 base); +void ClearX1(); void GenerateAck(u32 _Address); void GenerateReply(u32 _Address); diff --git a/Source/Core/Core/IOS/IOS.cpp b/Source/Core/Core/IOS/IOS.cpp index 90d63c0f4f..cd94693723 100644 --- a/Source/Core/Core/IOS/IOS.cpp +++ b/Source/Core/Core/IOS/IOS.cpp @@ -629,6 +629,7 @@ void Kernel::UpdateIPC() if (m_request_queue.size()) { + ClearX1(); GenerateAck(m_request_queue.front()); u32 command = m_request_queue.front(); m_request_queue.pop_front(); |
