From 32bcaa10ddb195b74e269c11e074974879c5a722 Mon Sep 17 00:00:00 2001 From: Banjo Kazooie Date: Fri, 26 Aug 2022 15:26:03 -0500 Subject: [PATCH] core2/code_98CB0.c progress --- progress/progress_core2.svg | 4 +- src/core2/code_98CB0.c | 73 ++++++++++++++++++++----------------- 2 files changed, 41 insertions(+), 36 deletions(-) diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg index ffd19282..3e43ed99 100644 --- a/progress/progress_core2.svg +++ b/progress/progress_core2.svg @@ -17,7 +17,7 @@ core2 - 82.0707% - 82.0707% + 82.1194% + 82.1194% \ No newline at end of file diff --git a/src/core2/code_98CB0.c b/src/core2/code_98CB0.c index b43588af..1692c772 100644 --- a/src/core2/code_98CB0.c +++ b/src/core2/code_98CB0.c @@ -19,10 +19,12 @@ struct unkfunc_80304ED0 *func_80304ED0(void*, f32 *); void func_8031CD44(s32, s32, f32, f32, s32); void func_80256E24(f32 *, f32, f32, f32, f32, f32); +#define OBSCURE(ptr) (((((s32)(ptr) ^ 0x746DF219) & 0xFF) + ((((s32)(ptr) >> 0x18) & 0xFF) << 0x18) + ((((s32)(ptr) >> 8) & 0xFFFF) << 8)) ^ 0x19) + + /* .data */ extern s32 D_8036DDF0; - /* .bss */ struct { s32 unk0; @@ -38,12 +40,30 @@ struct { u8 D_803831F8[0x21]; //copy of D_803831D0 + /* .code */ #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_98CB0/func_8031FC40.s") -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_98CB0/func_8031FE40.s") +u32 func_8031FE40(void) { + u8 *obscured_addr; + u32 var_v1; + u32 var_a2; + u32 var_v0; -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_98CB0/func_8031FEC0.s") + var_v1 = 0xDE1C05; + var_v0 = 0x25; + obscured_addr = (u8*)OBSCURE(&D_803831A0.unk8[0]); + for(var_a2 = 0; var_a2 < var_v0; var_a2++){ + var_v1 += ((var_v1 % 4) + var_a2) * obscured_addr[var_a2]; + } + return var_v1; +} + +void func_8031FEC0(void) { + u32 *obscured_addr; + obscured_addr = (u32*)OBSCURE(&D_803831A0.unk4); + *obscured_addr = func_8031FE40(); +} s32 func_8031FF1C(s32 index) { return func_803200A4(D_803831A0.unk8, index); @@ -132,29 +152,19 @@ s32 func_80320240(void){return 1;} s32 func_80320248(void){return 1;} -// regalloc -// s32 func_80320250(void) { -// s32 addr = (s32) &D_803831D0.unk8[0]; -// u32 checksum = 0x6CE9E91F; -// s32 len = 25; -// s32 scrambled; -// u32 i; +u32 func_80320250(void) { + u32 checksum = 0x6CE9E91F; + u8 *obscured_addr = (u8*)OBSCURE(&D_803831D0.unk8[0]); + s32 len = 25; + u32 i; -// // Scrambles the input address -// scrambled = (addr ^ 0x746DF219) & 0xFF; // scrambled = (low byte of addr) ^ 0x19 -// scrambled += (addr >> 0x18) << 0x18; // scrambled = (high byte of addr | low byte of addr) ^ 0x19 -// scrambled += ((addr >> 8) & 0xFFFF) << 8; // scrambled = addr ^ 0x19 -// // Unscrambles the input address - -// for (i = 0; i < len; i++) { -// s32 val = ((u8*)(scrambled ^ 0x19))[i]; -// checksum = val ^ (((checksum + val & 0xF) << 0x18) ^ (checksum >> 3)); -// } - -// return checksum; -// } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_98CB0/func_80320250.s") + for (i = 0; i < len; i++) { + s32 val = obscured_addr[i]; + checksum = val ^ (((checksum + val & 0xF) << 0x18) ^ (checksum >> 3)); + } + return checksum; +} void func_803202D0(void) { s32 addr = (s32) &D_803831D0.unk0; @@ -187,16 +197,11 @@ s32 func_80320320(void) { return checksum; } -// regalloc -// void func_803203A0(void) { -// s32 addr = (s32) &D_803831D0.unk4; -// s32 scrambled; -// scrambled = (addr ^ 0x746DF219) & 0xFF; // scrambled = (low byte of addr) ^ 0x19 -// scrambled += (addr >> 0x18) << 0x18; // scrambled = (high byte of addr | low byte of addr) ^ 0x19 -// scrambled += ((addr >> 8) & 0xFFFF) << 8; // scrambled = addr ^ 0x19 -// *(s32*)(scrambled ^ 0x19) = func_80320320(); -// } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_98CB0/func_803203A0.s") +void func_803203A0(void) { + u32 *obscured_addr = (u32*)OBSCURE(&D_803831D0.unk4); + + *obscured_addr = func_80320320(); +} s32 func_803203FC(s32 index) { return func_803200A4(D_803831D0.unk8, index);