[APT] Some hacks

This commit is contained in:
wheremyfoodat 2023-01-05 21:10:35 +02:00
parent 3ce9dc1d7b
commit 400db8ef0a
2 changed files with 7 additions and 3 deletions

View file

@ -37,7 +37,7 @@ void Kernel::clearEvent() {
logSVC("ClearEvent(event handle = %X)\n", handle); logSVC("ClearEvent(event handle = %X)\n", handle);
if (event == nullptr) [[unlikely]] { if (event == nullptr) [[unlikely]] {
Helpers::panic("Tried to clear non-existent event"); Helpers::panic("Tried to clear non-existent event (handle = %X)", handle);
regs[0] = SVCResult::BadHandle; regs[0] = SVCResult::BadHandle;
return; return;
} }
@ -154,6 +154,7 @@ void Kernel::waitSynchronizationN() {
} }
regs[0] = SVCResult::Success; regs[0] = SVCResult::Success;
regs[1] = waitAll ? handleCount - 1 : 0; // Index of the handle that triggered the exit. STUBBED
t.status = ThreadStatus::WaitSyncAll; t.status = ThreadStatus::WaitSyncAll;
t.waitAll = waitAll; t.waitAll = waitAll;
t.outPointer = outPointer; t.outPointer = outPointer;

View file

@ -104,9 +104,12 @@ void APTService::initialize(u32 messagePointer) {
} }
void APTService::inquireNotification(u32 messagePointer) { void APTService::inquireNotification(u32 messagePointer) {
log("APT::InquireNotification\n"); log("APT::InquireNotification (STUBBED TO FAIL)\n");
mem.write32(messagePointer + 4, Result::Success); // Thanks to our silly WaitSynchronization hacks, sometimes games will switch to the APT thread without actually getting a notif
// After REing the APT code, I figured that making InquireNotification fail is one way of making games not crash when this happens
// We should fix this in the future, when the sync object implementation is less hacky.
mem.write32(messagePointer + 4, Result::Failure);
mem.write32(messagePointer + 8, static_cast<u32>(NotificationType::None)); mem.write32(messagePointer + 8, static_cast<u32>(NotificationType::None));
} }