[APT] Some hacks
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user