diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/code/6FD190.c | 115 | ||||
| -rw-r--r-- | src/code/6FD410.c | 51 |
2 files changed, 166 insertions, 0 deletions
diff --git a/src/code/6FD190.c b/src/code/6FD190.c new file mode 100644 index 0000000..d10af01 --- /dev/null +++ b/src/code/6FD190.c @@ -0,0 +1,115 @@ +#include "6FD190.h" + +#include "6FD410.h" +#include "alignment.h" +#include "code_variables.h" +#include "libc64/malloc.h" +#include "segment_symbols.h" +#include "unk.h" + +u16* B_80146060_jp[3]; +UNK_PTR B_8014606C_jp; +uintptr_t B_80146070_jp; + +uintptr_t func_800D94F0_jp(void) { + B_80146070_jp = 0x80400000; + B_80146070_jp &= ~0x3F; + return B_80146070_jp; +} + +void func_800D9514_jp(void) { + B_80146070_jp = 0; +} + +void func_800D9524_jp(void) { + B_80146060_jp[0] = NULL; + B_80146060_jp[1] = NULL; + B_80146060_jp[2] = NULL; + B_8014606C_jp = NULL; + func_800D9770_jp(); +} + +void func_800D955C_jp(s32 arg0) { + switch (arg0) { + case 0: + B_80146060_jp[0] = D_80000400; + break; + + case 1: + B_80146060_jp[1] = (u16*)ALIGN64((uintptr_t)malloc_r(0x2583F)); + break; + + case 2: + B_8014606C_jp = (UNK_PTR)ALIGN64((uintptr_t)malloc(0x2583F)); + break; + + case 3: + B_80146060_jp[2] = (u16*)ALIGN64((uintptr_t)malloc(0x2583F)); + break; + + default: + break; + } +} + +void func_800D9618_jp(s32 arg0) { + switch (arg0) { + case 0: + B_80146060_jp[0] = NULL; + break; + + case 1: + free(B_80146060_jp[1]); + B_80146060_jp[1] = NULL; + break; + + case 2: + free(B_8014606C_jp); + B_8014606C_jp = NULL; + break; + + case 3: + free(B_80146060_jp[2]); + B_80146060_jp[2] = NULL; + break; + + default: + break; + } +} + +void func_800D96A8_jp(void) { + func_800D9788_jp(); + func_800D9618_jp(0); + func_800D9618_jp(1); + func_800D9618_jp(2); + func_800D9618_jp(3); +} + +u16* func_800D96E8_jp(s32 arg0) { + return B_80146060_jp[arg0]; +} + +s32 func_800D9700_jp(void) { + if (B_80146060_jp[2] != NULL) { + return 3; + } + + if (B_80146060_jp[1] != NULL) { + return 2; + } + + if (B_80146060_jp[0] != NULL) { + return 1; + } + + return 0; +} + +UNK_PTR func_800D9750_jp(void) { + return B_8014606C_jp; +} + +uintptr_t func_800D9760_jp(void) { + return B_80146070_jp; +} diff --git a/src/code/6FD410.c b/src/code/6FD410.c new file mode 100644 index 0000000..ab5ecc7 --- /dev/null +++ b/src/code/6FD410.c @@ -0,0 +1,51 @@ +#include "6FD410.h" + +#include "libc/stdbool.h" + +u32 B_80146080_jp; +UNK_PTR B_80146084_jp; + +void func_800D9770_jp(void) { + B_80146080_jp = 0; + B_80146084_jp = NULL; +} + +void func_800D9788_jp(void) { + B_80146080_jp = 0; + B_80146084_jp = NULL; +} + +UNK_PTR func_800D97A0_jp(u32 arg0) { + if (arg0 < 0x25800) { + if (B_80146080_jp == 0) { + B_80146080_jp = 1; + } else if (B_80146080_jp == 3) { + B_80146080_jp = 4; + return B_80146084_jp; + } + } + return NULL; +} + +UNK_PTR func_800D97F8_jp(u32 arg0) { + UNK_PTR ret; + u32 start = osGetCount(); + + while (true) { + if ((osGetCount() - start) > ((s32)(OS_NSEC_TO_CYCLES(1333333334)))) { + return 0; + } + + ret = func_800D97A0_jp(arg0); + if (ret != NULL) { + return ret; + } + } +} + +void func_800D986C_jp(s32 arg0) { + if (arg0) { + B_80146084_jp = NULL; + B_80146080_jp = 0; + } +} |
