From 88d36e8ec747b8f1be7b9c5d29f8276e2e26e567 Mon Sep 17 00:00:00 2001 From: Phillip Stephens Date: Wed, 29 Mar 2023 21:34:08 -0700 Subject: [PATCH] Math and link GBAJoyBoot --- configure.py | 2 +- src/Dolphin/GBA/GBAJoyBoot.c | 41 ++++++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/configure.py b/configure.py index b6d7cef3..c2cb767a 100755 --- a/configure.py +++ b/configure.py @@ -1040,7 +1040,7 @@ LIBS = [ "objects": [ ["Dolphin/GBA/GBA", True], ["Dolphin/GBA/GBAGetProcessStatus", False], - ["Dolphin/GBA/GBAJoyBoot", False], + ["Dolphin/GBA/GBAJoyBoot", True], ["Dolphin/GBA/GBARead", True], ["Dolphin/GBA/GBAWrite", True], ["Dolphin/GBA/GBAXfer", True], diff --git a/src/Dolphin/GBA/GBAJoyBoot.c b/src/Dolphin/GBA/GBAJoyBoot.c index 5c8724dd..98f542bd 100644 --- a/src/Dolphin/GBA/GBAJoyBoot.c +++ b/src/Dolphin/GBA/GBAJoyBoot.c @@ -30,12 +30,36 @@ static u32 F72(u32 crc, u32 src, vu8* keyp) { src >>= 1; } + + return crc; } -u32 F95(u32 src, vu8* keyp) { - return src * ((keyp[4] << keyp[0x11]) | keyp[1] | (keyp[4] << keyp[0x18]) | - (keyp[3] << keyp[0x16])) - - (keyp[7] - keyp[6]); +/* +.fn F95, local + lbz r5, 0x4(keyp) + lbz r0, 0x11(keyp) + lbz r7, 0x1(keyp) + slw r6, r5, r0 + lbz r5, 0x4(keyp) + lbz r0, 0x18(keyp) + or r6, r7, r6 + lbz r8, 0x3(keyp) + slw r0, r5, r0 + lbz r7, 0x16(keyp) + or r0, r6, r0 + lbz r6, 0x6(keyp) + slw r5, r8, r7 + lbz r4, 0x7(keyp) + or r0, r5, r0 + mullw r0, src, r0 + subf src, r6, r4 + subf src, src, r0 + blr +.endfn F95 +*/ +static u32 F95(u32 src, vu8* keyp) { + src = (src * ((keyp[3] << keyp[0x16]) | ((keyp[1] | (keyp[4] << keyp[0x11])) | (keyp[4] << keyp[0x18])))) - (keyp[7] - keyp[6]); + return src; } static void F104(s32 chan, s32 ret) { @@ -185,10 +209,13 @@ void __GBAX01(s32 chan, s32 ret) { } static void F31(s32 chan, s32 ret) { - GBAControl* gba = &__GBA[chan]; - GBABootInfo* bootInfo = &__GBA[chan].bootInfo; + GBAControl* gba; + GBABootInfo* bootInfo; u32 writeWord; + gba = &__GBA[chan]; + bootInfo = &__GBA[chan].bootInfo; + if (ret == GBA_READY) { if (bootInfo->firstXfer != FALSE) { bootInfo->firstXfer = FALSE; @@ -253,7 +280,7 @@ static void F31(s32 chan, s32 ret) { bootInfo->dummyWord[(2 - (1 - bootInfo->i))] * bootInfo->dummyWord[4 - bootInfo->i]; bootInfo->dummyWord[5 - (1 - bootInfo->i)] = bootInfo->dummyWord[((1 - bootInfo->i))] * bootInfo->dummyWord[1 - (1 - bootInfo->i)]; - bootInfo->dummyWord[7 - bootInfo->i] = + bootInfo->dummyWord[7 - bootInfo->i] = bootInfo->dummyWord[(-(1 - bootInfo->i))] * bootInfo->dummyWord[4 - bootInfo->i]; }