From 6a06ad9d9e36cb7c1daec2b5dd0e59fa0e864a71 Mon Sep 17 00:00:00 2001 From: Extrems Date: Sun, 14 Apr 2024 19:07:27 -0400 Subject: [PATCH] - Enable EXI device lock to be requested by multiple callbacks. --- cube/swiss/source/patcher.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/cube/swiss/source/patcher.c b/cube/swiss/source/patcher.c index 4f17ecf5..e1886ed1 100644 --- a/cube/swiss/source/patcher.c +++ b/cube/swiss/source/patcher.c @@ -6161,6 +6161,39 @@ int Patch_Hypervisor(u32 *data, u32 length, int dataType) u32 *EXILock = Calc_ProperAddress(data, dataType, i * sizeof(u32)); if (EXILock) { + if (devices[DEVICE_CUR]->emulated() & EMU_BUS_ARBITER) { + switch (j) { + case 0: + data[i + 56] = 0x38030024; // addi r0, r3, 36 + data[i + 58] = 0x7C00C840; // cmplw r0, r25 + break; + case 1: + case 2: + data[i + 56] = 0x3803002C; // addi r0, r3, 44 + data[i + 58] = 0x7C00C840; // cmplw r0, r25 + break; + case 3: + data[i + 23] = 0x80030024; // lwz r0, 36 (r3) + data[i + 24] = 0x7C00E840; // cmplw r0, r29 + break; + case 4: + data[i + 23] = 0x8003002C; // lwz r0, 44 (r3) + data[i + 24] = 0x7C00E840; // cmplw r0, r29 + break; + case 5: + data[i + 21] = 0x3803002C; // addi r0, r3, 44 + data[i + 23] = 0x7C00D840; // cmplw r0, r27 + break; + case 6: + data[i + 23] = 0x8003002C; // lwz r0, 44 (r3) + data[i + 24] = 0x7C00E040; // cmplw r0, r28 + break; + case 7: + data[i + 24] = 0x8003002C; // lwz r0, 44 (r3) + data[i + 25] = 0x7C00E040; // cmplw r0, r28 + break; + } + } if ((k = SystemCallVectorSig.offsetFoundAt)) data[k + 6] = (u32)EXILock;