From 697c2313123690ebb4af45629cbc337d19941d04 Mon Sep 17 00:00:00 2001 From: red031000 Date: Mon, 9 Nov 2020 19:49:19 +0000 Subject: start decompiling mod21_02254854 --- CMakeLists.txt | 2 +- arm9/arm9.lsf | 3 +- arm9/modules/21/asm/mod21_02254854.s | 312 ------------------------------- arm9/modules/21/asm/mod21_02254854_asm.s | 275 +++++++++++++++++++++++++++ arm9/modules/21/include/mod21_02254854.h | 8 + arm9/modules/21/src/mod21_02254854_src.c | 21 +++ arm9/modules/21/src/module_21_sinit.c | 2 +- arm9/src/unk_0200CA44.c | 20 +- include/unk_0200CA44.h | 8 +- 9 files changed, 322 insertions(+), 329 deletions(-) delete mode 100644 arm9/modules/21/asm/mod21_02254854.s create mode 100644 arm9/modules/21/asm/mod21_02254854_asm.s create mode 100644 arm9/modules/21/include/mod21_02254854.h create mode 100644 arm9/modules/21/src/mod21_02254854_src.c diff --git a/CMakeLists.txt b/CMakeLists.txt index dc3f7fcc..4ef6e929 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ add_compile_options(-fms-extensions) file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_SOURCE_DIR} "*.c" "*.cpp") add_executable(PokeDiamond ${SOURCES}) -target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/05/include arm9/modules/59/include arm9/modules/63/include) +target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/05/include arm9/modules/21/include arm9/modules/59/include arm9/modules/63/include) add_executable(calcrom .travis/calcrom/calcrom.cpp) target_include_directories(calcrom PRIVATE /usr/local/include) diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index d95024ae..20c1b64c 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -664,7 +664,8 @@ Overlay MODULE_21 ##Pokétch Clock## After MODULE_20 Object module_21_sinit.o - Object mod21_02254854.o + Object mod21_02254854_src.o + Object mod21_02254854_asm.o Object mod21_02254A6C.o } diff --git a/arm9/modules/21/asm/mod21_02254854.s b/arm9/modules/21/asm/mod21_02254854.s deleted file mode 100644 index bcbbf915..00000000 --- a/arm9/modules/21/asm/mod21_02254854.s +++ /dev/null @@ -1,312 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - thumb_func_start MOD21_02254854 -MOD21_02254854: ; 0x02254854 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - add r6, r1, #0 - mov r0, #8 - mov r1, #0x2c - add r7, r2, #0 - str r3, [sp] - bl AllocFromHeap - add r4, r0, #0 - beq _02254892 - ldr r3, [sp] - add r1, r6, #0 - add r2, r7, #0 - bl MOD21_0225489C - cmp r0, #0 - beq _0225488C - ldr r0, _02254898 ; =MOD21_02254930 - add r1, r4, #0 - mov r2, #1 - bl FUN_0200CA44 - cmp r0, #0 - beq _0225488C - str r4, [r5] - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} -_0225488C: - add r0, r4, #0 - bl FreeToHeap -_02254892: - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} - nop -_02254898: .word MOD21_02254930 - thumb_func_end MOD21_02254854 - - thumb_func_start MOD21_0225489C -MOD21_0225489C: ; 0x0225489C - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - add r1, r5, #0 - add r0, #0x24 - add r1, #0x14 - bl MOD21_02254A6C - cmp r0, #0 - beq _0225490A - mov r1, #0 - strb r1, [r5] - strb r1, [r5, #1] - strb r1, [r5, #2] - mov r0, #1 - strb r0, [r5, #3] - strb r1, [r5, #6] - add r0, r5, #0 - str r1, [r5, #0x20] - add r0, #0x14 - bl GF_RTC_CopyTime - ldr r0, [r5, #0x14] - cmp r0, #0x18 - blo _022548D6 - mov r1, #0x18 - bl _u32_div_f - str r1, [r5, #0x14] -_022548D6: - ldr r0, [r5, #0x18] - cmp r0, #0x3c - blo _022548E6 - ldr r0, [r5, #0x14] - mov r1, #0x3c - bl _u32_div_f - str r1, [r5, #0x14] -_022548E6: - ldr r0, [r5, #0x18] - ldr r2, _02254910 ; =MOD21_02254974 - strb r0, [r5, #5] - mov r0, #8 - str r0, [sp] - ldr r0, _02254914 ; =MOD21_02254D80 - mov r1, #1 - add r3, r5, #0 - bl MOD20_02254130 - str r0, [r5, #0x10] - cmp r0, #0 - bne _02254904 - mov r0, #0 - pop {r3, r4, r5, pc} -_02254904: - str r4, [r5, #0x28] - mov r0, #1 - pop {r3, r4, r5, pc} -_0225490A: - mov r0, #0 - pop {r3, r4, r5, pc} - nop -_02254910: .word MOD21_02254974 -_02254914: .word MOD21_02254D80 - thumb_func_end MOD21_0225489C - - thumb_func_start MOD21_02254918 -MOD21_02254918: ; 0x02254918 - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #0x24] - bl MOD21_02254B04 - ldr r0, [r4, #0x10] - bl MOD20_02254198 - add r0, r4, #0 - bl FreeToHeap - pop {r4, pc} - thumb_func_end MOD21_02254918 - - thumb_func_start MOD21_02254930 -MOD21_02254930: ; 0x02254930 - push {r3, r4, r5, lr} - add r4, r1, #0 - add r5, r0, #0 - ldrb r0, [r4] - cmp r0, #3 - bhs _02254966 - ldr r0, [r4, #0x28] - ldr r1, [r4, #0x10] - bl MOD20_02252C14 - ldrb r1, [r4] - add r0, r4, #0 - lsl r2, r1, #2 - ldr r1, _02254968 ; =MOD21_02254D84 - ldr r1, [r1, r2] - blx r1 - cmp r0, #0 - beq _02254966 - add r0, r4, #0 - bl MOD21_02254918 - add r0, r5, #0 - bl FUN_0200CAB4 - ldr r0, [r4, #0x28] - bl MOD20_022529A0 -_02254966: - pop {r3, r4, r5, pc} - .align 2, 0 -_02254968: .word MOD21_02254D84 - thumb_func_end MOD21_02254930 - - thumb_func_start MOD21_0225496C -MOD21_0225496C: ; 0x0225496C - mov r1, #1 - strb r1, [r0, #2] - bx lr - .align 2, 0 - thumb_func_end MOD21_0225496C - - thumb_func_start MOD21_02254974 -MOD21_02254974: ; 0x02254974 - cmp r2, #0 - beq _02254984 - cmp r2, #1 - bne _0225498C - mov r0, #1 - str r0, [r3, #0x20] - strb r0, [r3, #6] - bx lr -_02254984: - mov r0, #0 - str r0, [r3, #0x20] - mov r0, #1 - strb r0, [r3, #6] -_0225498C: - bx lr - .align 2, 0 - thumb_func_end MOD21_02254974 - - thumb_func_start MOD21_02254990 -MOD21_02254990: ; 0x02254990 - ldrb r2, [r0, #2] - cmp r2, #0 - bne _02254998 - b _0225499A -_02254998: - mov r1, #2 -_0225499A: - strb r1, [r0] - mov r1, #0 - strb r1, [r0, #1] - bx lr - .align 2, 0 - thumb_func_end MOD21_02254990 - - thumb_func_start MOD21_022549A4 -MOD21_022549A4: ; 0x022549A4 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _022549B4 - cmp r0, #1 - beq _022549C4 - b _022549DE -_022549B4: - ldr r0, [r4, #0x24] - mov r1, #0 - bl MOD21_02254B10 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _022549DE -_022549C4: - ldr r0, [r4, #0x24] - mov r1, #0 - bl MOD21_02254B34 - cmp r0, #0 - beq _022549DE - ldr r0, [r4, #0x28] - bl MOD20_0225298C - add r0, r4, #0 - mov r1, #1 - bl MOD21_02254990 -_022549DE: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_022549A4 - - thumb_func_start MOD21_022549E4 -MOD21_022549E4: ; 0x022549E4 - push {r4, lr} - add r4, r0, #0 - ldrb r1, [r4, #2] - cmp r1, #0 - beq _022549F8 - mov r1, #2 - bl MOD21_02254990 - mov r0, #0 - pop {r4, pc} -_022549F8: - ldrb r0, [r4, #6] - cmp r0, #0 - beq _02254A0A - mov r0, #0 - strb r0, [r4, #6] - ldr r0, [r4, #0x24] - mov r1, #2 - bl MOD21_02254B10 -_02254A0A: - ldr r0, [r4, #0x24] - mov r1, #1 - bl MOD21_02254B34 - cmp r0, #0 - beq _02254A32 - ldr r0, [r4, #0x18] - strb r0, [r4, #5] - add r0, r4, #0 - add r0, #0x14 - bl GF_RTC_CopyTime - ldrb r1, [r4, #5] - ldr r0, [r4, #0x18] - cmp r1, r0 - beq _02254A32 - ldr r0, [r4, #0x24] - mov r1, #1 - bl MOD21_02254B10 -_02254A32: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_022549E4 - - thumb_func_start MOD21_02254A38 -MOD21_02254A38: ; 0x02254A38 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254A48 - cmp r0, #1 - beq _02254A58 - b _02254A66 -_02254A48: - ldr r0, [r4, #0x24] - mov r1, #3 - bl MOD21_02254B10 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _02254A66 -_02254A58: - ldr r0, [r4, #0x24] - bl MOD21_02254B40 - cmp r0, #0 - beq _02254A66 - mov r0, #1 - pop {r4, pc} -_02254A66: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_02254A38 - - .section .rodata - - .global MOD21_02254D80 -MOD21_02254D80: ; 0x02254D80 - .byte 0x10, 0xAF, 0x10, 0xCF - - .global MOD21_02254D84 -MOD21_02254D84: ; 0x02254D84 - .word MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s new file mode 100644 index 00000000..5e5dd958 --- /dev/null +++ b/arm9/modules/21/asm/mod21_02254854_asm.s @@ -0,0 +1,275 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD21_0225489C +MOD21_0225489C: ; 0x0225489C + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + add r1, r5, #0 + add r0, #0x24 + add r1, #0x14 + bl MOD21_02254A6C + cmp r0, #0 + beq _0225490A + mov r1, #0 + strb r1, [r5] + strb r1, [r5, #1] + strb r1, [r5, #2] + mov r0, #1 + strb r0, [r5, #3] + strb r1, [r5, #6] + add r0, r5, #0 + str r1, [r5, #0x20] + add r0, #0x14 + bl GF_RTC_CopyTime + ldr r0, [r5, #0x14] + cmp r0, #0x18 + blo _022548D6 + mov r1, #0x18 + bl _u32_div_f + str r1, [r5, #0x14] +_022548D6: + ldr r0, [r5, #0x18] + cmp r0, #0x3c + blo _022548E6 + ldr r0, [r5, #0x14] + mov r1, #0x3c + bl _u32_div_f + str r1, [r5, #0x14] +_022548E6: + ldr r0, [r5, #0x18] + ldr r2, _02254910 ; =MOD21_02254974 + strb r0, [r5, #5] + mov r0, #8 + str r0, [sp] + ldr r0, _02254914 ; =MOD21_02254D80 + mov r1, #1 + add r3, r5, #0 + bl MOD20_02254130 + str r0, [r5, #0x10] + cmp r0, #0 + bne _02254904 + mov r0, #0 + pop {r3, r4, r5, pc} +_02254904: + str r4, [r5, #0x28] + mov r0, #1 + pop {r3, r4, r5, pc} +_0225490A: + mov r0, #0 + pop {r3, r4, r5, pc} + nop +_02254910: .word MOD21_02254974 +_02254914: .word MOD21_02254D80 + thumb_func_end MOD21_0225489C + + thumb_func_start MOD21_02254918 +MOD21_02254918: ; 0x02254918 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x24] + bl MOD21_02254B04 + ldr r0, [r4, #0x10] + bl MOD20_02254198 + add r0, r4, #0 + bl FreeToHeap + pop {r4, pc} + thumb_func_end MOD21_02254918 + + thumb_func_start MOD21_02254930 +MOD21_02254930: ; 0x02254930 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldrb r0, [r4] + cmp r0, #3 + bhs _02254966 + ldr r0, [r4, #0x28] + ldr r1, [r4, #0x10] + bl MOD20_02252C14 + ldrb r1, [r4] + add r0, r4, #0 + lsl r2, r1, #2 + ldr r1, _02254968 ; =MOD21_02254D84 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _02254966 + add r0, r4, #0 + bl MOD21_02254918 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0x28] + bl MOD20_022529A0 +_02254966: + pop {r3, r4, r5, pc} + .align 2, 0 +_02254968: .word MOD21_02254D84 + thumb_func_end MOD21_02254930 + + thumb_func_start MOD21_0225496C +MOD21_0225496C: ; 0x0225496C + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD21_0225496C + + thumb_func_start MOD21_02254974 +MOD21_02254974: ; 0x02254974 + cmp r2, #0 + beq _02254984 + cmp r2, #1 + bne _0225498C + mov r0, #1 + str r0, [r3, #0x20] + strb r0, [r3, #6] + bx lr +_02254984: + mov r0, #0 + str r0, [r3, #0x20] + mov r0, #1 + strb r0, [r3, #6] +_0225498C: + bx lr + .align 2, 0 + thumb_func_end MOD21_02254974 + + thumb_func_start MOD21_02254990 +MOD21_02254990: ; 0x02254990 + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254998 + b _0225499A +_02254998: + mov r1, #2 +_0225499A: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD21_02254990 + + thumb_func_start MOD21_022549A4 +MOD21_022549A4: ; 0x022549A4 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _022549B4 + cmp r0, #1 + beq _022549C4 + b _022549DE +_022549B4: + ldr r0, [r4, #0x24] + mov r1, #0 + bl MOD21_02254B10 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _022549DE +_022549C4: + ldr r0, [r4, #0x24] + mov r1, #0 + bl MOD21_02254B34 + cmp r0, #0 + beq _022549DE + ldr r0, [r4, #0x28] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD21_02254990 +_022549DE: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD21_022549A4 + + thumb_func_start MOD21_022549E4 +MOD21_022549E4: ; 0x022549E4 + push {r4, lr} + add r4, r0, #0 + ldrb r1, [r4, #2] + cmp r1, #0 + beq _022549F8 + mov r1, #2 + bl MOD21_02254990 + mov r0, #0 + pop {r4, pc} +_022549F8: + ldrb r0, [r4, #6] + cmp r0, #0 + beq _02254A0A + mov r0, #0 + strb r0, [r4, #6] + ldr r0, [r4, #0x24] + mov r1, #2 + bl MOD21_02254B10 +_02254A0A: + ldr r0, [r4, #0x24] + mov r1, #1 + bl MOD21_02254B34 + cmp r0, #0 + beq _02254A32 + ldr r0, [r4, #0x18] + strb r0, [r4, #5] + add r0, r4, #0 + add r0, #0x14 + bl GF_RTC_CopyTime + ldrb r1, [r4, #5] + ldr r0, [r4, #0x18] + cmp r1, r0 + beq _02254A32 + ldr r0, [r4, #0x24] + mov r1, #1 + bl MOD21_02254B10 +_02254A32: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD21_022549E4 + + thumb_func_start MOD21_02254A38 +MOD21_02254A38: ; 0x02254A38 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254A48 + cmp r0, #1 + beq _02254A58 + b _02254A66 +_02254A48: + ldr r0, [r4, #0x24] + mov r1, #3 + bl MOD21_02254B10 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254A66 +_02254A58: + ldr r0, [r4, #0x24] + bl MOD21_02254B40 + cmp r0, #0 + beq _02254A66 + mov r0, #1 + pop {r4, pc} +_02254A66: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD21_02254A38 + + .section .rodata + + .global MOD21_02254D80 +MOD21_02254D80: ; 0x02254D80 + .byte 0x10, 0xAF, 0x10, 0xCF + + .global MOD21_02254D84 +MOD21_02254D84: ; 0x02254D84 + .word MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h new file mode 100644 index 00000000..061e7e4b --- /dev/null +++ b/arm9/modules/21/include/mod21_02254854.h @@ -0,0 +1,8 @@ +#ifndef POKEDIAMOND_MOD21_02254854_H +#define POKEDIAMOND_MOD21_02254854_H + +#include "nitro/types.h" + +BOOL MOD21_02254854(u32 *param0, u32 param1, u32 param2, u32 param3); + +#endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c new file mode 100644 index 00000000..8a0c4146 --- /dev/null +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "heap.h" +#include "unk_0200CA44.h" + +extern BOOL MOD21_0225489C(void *param0, u32 param1, u32 param2, u32 param3); +extern void MOD21_02254930(void *, void *); + +THUMB_FUNC BOOL MOD21_02254854(u32 *param0, u32 param1, u32 param2, u32 param3) //param0 is likely actually a struct +{ + void * alloced = AllocFromHeap(8, 0x2c); + if (alloced != NULL) + { + if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44(MOD21_02254930, alloced, (void *)1)) + { + *param0 = (u32)alloced; + return TRUE; + } + FreeToHeap(alloced); + } + return FALSE; +} \ No newline at end of file diff --git a/arm9/modules/21/src/module_21_sinit.c b/arm9/modules/21/src/module_21_sinit.c index 2af569ec..c4b2ac5a 100644 --- a/arm9/modules/21/src/module_21_sinit.c +++ b/arm9/modules/21/src/module_21_sinit.c @@ -1,7 +1,7 @@ #include "global.h" +#include "mod21_02254854.h" extern void Poketch_InitApp(void *func1, void *func2); -extern void MOD21_02254854(); extern void MOD21_0225496C(); THUMB_FUNC static void MOD21_02254840(void) diff --git a/arm9/src/unk_0200CA44.c b/arm9/src/unk_0200CA44.c index fc4656b2..1a572a89 100644 --- a/arm9/src/unk_0200CA44.c +++ b/arm9/src/unk_0200CA44.c @@ -2,30 +2,30 @@ #include "main.h" #include "unk_0200CA44.h" -extern void FUN_0201B60C(void *, void (*)(void *, void *), void *, void *); +extern BOOL FUN_0201B60C(void *, void (*)(void *, void *), void *, void *); extern void FUN_0201B6A0(s32); -THUMB_FUNC void FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2) { - FUN_0201B60C(gMain.unk18, r0, r1, r2); + return FUN_0201B60C(gMain.unk18, r0, r1, r2); } -THUMB_FUNC void FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2) { - FUN_0201B60C(gMain.unk1C, r0, r1, r2); + return FUN_0201B60C(gMain.unk1C, r0, r1, r2); } -THUMB_FUNC void FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2) { - FUN_0201B60C(gMain.unk24, r0, r1, r2); + return FUN_0201B60C(gMain.unk24, r0, r1, r2); } -THUMB_FUNC void FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2) { - FUN_0201B60C(gMain.unk20, r0, r1, r2); + return FUN_0201B60C(gMain.unk20, r0, r1, r2); } -THUMB_FUNC void FUN_0200CAB4(s32 unk1) +THUMB_FUNC void FUN_0200CAB4(s32 unk1) //bool? { FUN_0201B6A0(unk1); } diff --git a/include/unk_0200CA44.h b/include/unk_0200CA44.h index 27d58c5c..3a3be022 100644 --- a/include/unk_0200CA44.h +++ b/include/unk_0200CA44.h @@ -1,10 +1,10 @@ #ifndef POKEDIAMOND_UNK_0200CA44_H #define POKEDIAMOND_UNK_0200CA44_H -void FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2); -void FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2); -void FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2); -void FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2); +BOOL FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2); +BOOL FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2); +BOOL FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2); +BOOL FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2); void FUN_0200CAB4(s32 unk1); #endif //POKEDIAMOND_UNK_0200CA44_H -- cgit v1.2.3 From b65d56bc44308503f4da143fd9a014926020450c Mon Sep 17 00:00:00 2001 From: red031000 Date: Tue, 10 Nov 2020 15:52:15 +0000 Subject: fix a few small issues --- arm9/modules/21/src/mod21_02254854_src.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c index 8a0c4146..fcb34247 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -1,6 +1,7 @@ #include "global.h" #include "heap.h" #include "unk_0200CA44.h" +#include "mod21_02254854.h" extern BOOL MOD21_0225489C(void *param0, u32 param1, u32 param2, u32 param3); extern void MOD21_02254930(void *, void *); @@ -18,4 +19,4 @@ THUMB_FUNC BOOL MOD21_02254854(u32 *param0, u32 param1, u32 param2, u32 param3) FreeToHeap(alloced); } return FALSE; -} \ No newline at end of file +} -- cgit v1.2.3 From ebbcd4c9d985bd3c66e45fee6cf201525d501633 Mon Sep 17 00:00:00 2001 From: red031000 Date: Tue, 10 Nov 2020 16:38:39 +0000 Subject: mod21_0225489C --- arm9/modules/21/asm/mod21_02254854_asm.s | 63 -------------------------------- arm9/modules/21/include/mod21_02254854.h | 15 +++++++- arm9/modules/21/src/mod21_02254854_src.c | 46 +++++++++++++++++++++-- 3 files changed, 56 insertions(+), 68 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s index 5e5dd958..c879c819 100644 --- a/arm9/modules/21/asm/mod21_02254854_asm.s +++ b/arm9/modules/21/asm/mod21_02254854_asm.s @@ -3,69 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_0225489C -MOD21_0225489C: ; 0x0225489C - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - add r1, r5, #0 - add r0, #0x24 - add r1, #0x14 - bl MOD21_02254A6C - cmp r0, #0 - beq _0225490A - mov r1, #0 - strb r1, [r5] - strb r1, [r5, #1] - strb r1, [r5, #2] - mov r0, #1 - strb r0, [r5, #3] - strb r1, [r5, #6] - add r0, r5, #0 - str r1, [r5, #0x20] - add r0, #0x14 - bl GF_RTC_CopyTime - ldr r0, [r5, #0x14] - cmp r0, #0x18 - blo _022548D6 - mov r1, #0x18 - bl _u32_div_f - str r1, [r5, #0x14] -_022548D6: - ldr r0, [r5, #0x18] - cmp r0, #0x3c - blo _022548E6 - ldr r0, [r5, #0x14] - mov r1, #0x3c - bl _u32_div_f - str r1, [r5, #0x14] -_022548E6: - ldr r0, [r5, #0x18] - ldr r2, _02254910 ; =MOD21_02254974 - strb r0, [r5, #5] - mov r0, #8 - str r0, [sp] - ldr r0, _02254914 ; =MOD21_02254D80 - mov r1, #1 - add r3, r5, #0 - bl MOD20_02254130 - str r0, [r5, #0x10] - cmp r0, #0 - bne _02254904 - mov r0, #0 - pop {r3, r4, r5, pc} -_02254904: - str r4, [r5, #0x28] - mov r0, #1 - pop {r3, r4, r5, pc} -_0225490A: - mov r0, #0 - pop {r3, r4, r5, pc} - nop -_02254910: .word MOD21_02254974 -_02254914: .word MOD21_02254D80 - thumb_func_end MOD21_0225489C - thumb_func_start MOD21_02254918 MOD21_02254918: ; 0x02254918 push {r4, lr} diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index 061e7e4b..dc68ebeb 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -3,6 +3,19 @@ #include "nitro/types.h" -BOOL MOD21_02254854(u32 *param0, u32 param1, u32 param2, u32 param3); +typedef struct UnkStruct02254854 +{ + u8 bytearray[8]; + u8 padding0[8]; + BOOL Unk10; + u32 Unk14[2]; + u8 padding1[4]; + u32 Unk20; + u32 Unk24; + u32 Unk28; +} UnkStruct02254854; + +BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3); +BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3); #endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c index fcb34247..5e808856 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -3,20 +3,58 @@ #include "unk_0200CA44.h" #include "mod21_02254854.h" -extern BOOL MOD21_0225489C(void *param0, u32 param1, u32 param2, u32 param3); extern void MOD21_02254930(void *, void *); -THUMB_FUNC BOOL MOD21_02254854(u32 *param0, u32 param1, u32 param2, u32 param3) //param0 is likely actually a struct +extern void GF_RTC_CopyTime(u32 *param0); + +extern void MOD21_02254D80(); +extern void MOD21_02254974(); +extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); +extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); + +THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3) { - void * alloced = AllocFromHeap(8, 0x2c); + UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854)); if (alloced != NULL) { if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44(MOD21_02254930, alloced, (void *)1)) { - *param0 = (u32)alloced; + *param0 = alloced; return TRUE; } FreeToHeap(alloced); } return FALSE; } + +THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3) +{ +#pragma unused (param2, param3) //not sure, please check + if (MOD21_02254A6C(¶m0->Unk24, param0->Unk14)) + { + param0->bytearray[0] = 0; + param0->bytearray[1] = 0; + param0->bytearray[2] = 0; + param0->bytearray[3] = 1; + param0->bytearray[6] = 0; + param0->Unk20 = 0; + GF_RTC_CopyTime(param0->Unk14); + if (param0->Unk14[0] >= 0x18) + { + param0->Unk14[0] = param0->Unk14[0] % 0x18; + } + if (param0->Unk14[1] >= 0x3c) + { + param0->Unk14[0] = param0->Unk14[0] % 0x3c; + } + param0->bytearray[5] = (u8)param0->Unk14[1]; + param0->Unk10 = MOD20_02254130(MOD21_02254D80, TRUE, MOD21_02254974, param0, 8); + if (param0->Unk10 == FALSE) + { + return FALSE; + } + param0->Unk28 = param1; + return TRUE; + } + return FALSE; +} -- cgit v1.2.3 From 32fbb72519542c49ac8c33cdc8f4ebf7d808871c Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 12 Nov 2020 18:15:46 +0000 Subject: mod21_02254918 --- arm9/modules/21/asm/mod21_02254854_asm.s | 13 +------------ arm9/modules/21/include/mod21_02254854.h | 1 + arm9/modules/21/src/mod21_02254854_src.c | 10 ++++++++++ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s index c879c819..2081400a 100644 --- a/arm9/modules/21/asm/mod21_02254854_asm.s +++ b/arm9/modules/21/asm/mod21_02254854_asm.s @@ -3,18 +3,7 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254918 -MOD21_02254918: ; 0x02254918 - push {r4, lr} - add r4, r0, #0 - ldr r0, [r4, #0x24] - bl MOD21_02254B04 - ldr r0, [r4, #0x10] - bl MOD20_02254198 - add r0, r4, #0 - bl FreeToHeap - pop {r4, pc} - thumb_func_end MOD21_02254918 + .extern MOD21_02254918 thumb_func_start MOD21_02254930 MOD21_02254930: ; 0x02254930 diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index dc68ebeb..c04959b3 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -17,5 +17,6 @@ typedef struct UnkStruct02254854 BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3); BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3); +void MOD21_02254918(UnkStruct02254854 *param0); #endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c index 5e808856..870efa17 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -12,6 +12,9 @@ extern void MOD21_02254974(); extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); +extern void MOD21_02254B04(u32 param0); +extern void MOD20_02254198(BOOL param0); + THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3) { UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854)); @@ -58,3 +61,10 @@ THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2 } return FALSE; } + +THUMB_FUNC void MOD21_02254918(UnkStruct02254854 *param0) +{ + MOD21_02254B04(param0->Unk24); + MOD20_02254198(param0->Unk10); + FreeToHeap((void *)param0); +} -- cgit v1.2.3 From bc3be40047d1b9ec45e7b355dff2280e7c5faa0a Mon Sep 17 00:00:00 2001 From: red031000 Date: Sat, 14 Nov 2020 00:07:14 +0000 Subject: more mod 21 --- arm9/arm9.lsf | 1 - arm9/modules/21/asm/mod21_02254854_asm.s | 71 -------------------------------- arm9/modules/21/include/mod21_02254854.h | 3 ++ arm9/modules/21/src/mod21_02254854_src.c | 66 ++++++++++++++++++++++++++--- arm9/modules/21/src/module_21_sinit.c | 13 ------ arm9/src/unk_0200CA44.c | 10 ++--- include/unk_0200CA44.h | 8 ++-- 7 files changed, 72 insertions(+), 100 deletions(-) delete mode 100644 arm9/modules/21/src/module_21_sinit.c diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 20c1b64c..e0073d87 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -663,7 +663,6 @@ Overlay MODULE_21 { ##Pokétch Clock## After MODULE_20 - Object module_21_sinit.o Object mod21_02254854_src.o Object mod21_02254854_asm.o Object mod21_02254A6C.o diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s index 2081400a..8da8777f 100644 --- a/arm9/modules/21/asm/mod21_02254854_asm.s +++ b/arm9/modules/21/asm/mod21_02254854_asm.s @@ -3,67 +3,6 @@ .section .text .balign 4, 0 - .extern MOD21_02254918 - - thumb_func_start MOD21_02254930 -MOD21_02254930: ; 0x02254930 - push {r3, r4, r5, lr} - add r4, r1, #0 - add r5, r0, #0 - ldrb r0, [r4] - cmp r0, #3 - bhs _02254966 - ldr r0, [r4, #0x28] - ldr r1, [r4, #0x10] - bl MOD20_02252C14 - ldrb r1, [r4] - add r0, r4, #0 - lsl r2, r1, #2 - ldr r1, _02254968 ; =MOD21_02254D84 - ldr r1, [r1, r2] - blx r1 - cmp r0, #0 - beq _02254966 - add r0, r4, #0 - bl MOD21_02254918 - add r0, r5, #0 - bl FUN_0200CAB4 - ldr r0, [r4, #0x28] - bl MOD20_022529A0 -_02254966: - pop {r3, r4, r5, pc} - .align 2, 0 -_02254968: .word MOD21_02254D84 - thumb_func_end MOD21_02254930 - - thumb_func_start MOD21_0225496C -MOD21_0225496C: ; 0x0225496C - mov r1, #1 - strb r1, [r0, #2] - bx lr - .align 2, 0 - thumb_func_end MOD21_0225496C - - thumb_func_start MOD21_02254974 -MOD21_02254974: ; 0x02254974 - cmp r2, #0 - beq _02254984 - cmp r2, #1 - bne _0225498C - mov r0, #1 - str r0, [r3, #0x20] - strb r0, [r3, #6] - bx lr -_02254984: - mov r0, #0 - str r0, [r3, #0x20] - mov r0, #1 - strb r0, [r3, #6] -_0225498C: - bx lr - .align 2, 0 - thumb_func_end MOD21_02254974 - thumb_func_start MOD21_02254990 MOD21_02254990: ; 0x02254990 ldrb r2, [r0, #2] @@ -189,13 +128,3 @@ _02254A66: pop {r4, pc} .align 2, 0 thumb_func_end MOD21_02254A38 - - .section .rodata - - .global MOD21_02254D80 -MOD21_02254D80: ; 0x02254D80 - .byte 0x10, 0xAF, 0x10, 0xCF - - .global MOD21_02254D84 -MOD21_02254D84: ; 0x02254D84 - .word MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index c04959b3..dabacf1c 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -18,5 +18,8 @@ typedef struct UnkStruct02254854 BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3); BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3); void MOD21_02254918(UnkStruct02254854 *param0); +void MOD21_02254930(u32 param0, UnkStruct02254854 *param1); +void MOD21_0225496C(UnkStruct02254854 *param0); +void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3); #endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c index 870efa17..f7fbe221 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -3,24 +3,37 @@ #include "unk_0200CA44.h" #include "mod21_02254854.h" -extern void MOD21_02254930(void *, void *); - extern void GF_RTC_CopyTime(u32 *param0); -extern void MOD21_02254D80(); -extern void MOD21_02254974(); +u8 const MOD21_02254D80[] = { 0x10, 0xAF, 0x10, 0xCF }; extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); +extern void MOD20_02252C14(u32 param0, BOOL param1); + +extern u32 MOD21_022549A4(UnkStruct02254854 *); +extern u32 MOD21_022549E4(UnkStruct02254854 *); +extern u32 MOD21_02254A38(UnkStruct02254854 *); extern void MOD21_02254B04(u32 param0); extern void MOD20_02254198(BOOL param0); +extern void MOD20_022529A0(u32 param0); + +extern void Poketch_InitApp(void *func1, void *func2); + +THUMB_FUNC static void MOD21_02254840(void) +{ + Poketch_InitApp(MOD21_02254854, MOD21_0225496C); +} + +#define NitroStaticInit MOD21_02254840 +#include "sinit.h" THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3) { UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854)); if (alloced != NULL) { - if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44(MOD21_02254930, alloced, (void *)1)) + if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44((void (*)(u32, void *))MOD21_02254930, alloced, (void *)1)) { *param0 = alloced; return TRUE; @@ -51,7 +64,7 @@ THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2 param0->Unk14[0] = param0->Unk14[0] % 0x3c; } param0->bytearray[5] = (u8)param0->Unk14[1]; - param0->Unk10 = MOD20_02254130(MOD21_02254D80, TRUE, MOD21_02254974, param0, 8); + param0->Unk10 = MOD20_02254130((void *)MOD21_02254D80, TRUE, MOD21_02254974, param0, 8); if (param0->Unk10 == FALSE) { return FALSE; @@ -62,9 +75,50 @@ THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2 return FALSE; } +u32 (* const MOD21_02254D84[])(UnkStruct02254854 *) = { MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 }; + THUMB_FUNC void MOD21_02254918(UnkStruct02254854 *param0) { MOD21_02254B04(param0->Unk24); MOD20_02254198(param0->Unk10); FreeToHeap((void *)param0); } + +THUMB_FUNC void MOD21_02254930(u32 param0, UnkStruct02254854 *param1) +{ + if (param1->bytearray[0] >= 3) + { + return; + } + MOD20_02252C14(param1->Unk28, param1->Unk10); + if (!MOD21_02254D84[param1->bytearray[0]](param1)) + { + return; + } + MOD21_02254918(param1); + FUN_0200CAB4((s32)param0); + MOD20_022529A0(param1->Unk28); +} + +THUMB_FUNC void MOD21_0225496C(UnkStruct02254854 *param0) +{ + param0->bytearray[2] = 1; +} + +THUMB_FUNC void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3) +{ +#pragma unused (param0, param1) + switch (param2) + { + case 1: + param3->Unk20 = 1; + param3->bytearray[6] = 1; + return; + case 0: + param3->Unk20 = 0; + param3->bytearray[6] = 1; + return; + default: + return; + } +} diff --git a/arm9/modules/21/src/module_21_sinit.c b/arm9/modules/21/src/module_21_sinit.c deleted file mode 100644 index c4b2ac5a..00000000 --- a/arm9/modules/21/src/module_21_sinit.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "global.h" -#include "mod21_02254854.h" - -extern void Poketch_InitApp(void *func1, void *func2); -extern void MOD21_0225496C(); - -THUMB_FUNC static void MOD21_02254840(void) -{ - Poketch_InitApp(MOD21_02254854, MOD21_0225496C); -} - -#define NitroStaticInit MOD21_02254840 -#include "sinit.h" diff --git a/arm9/src/unk_0200CA44.c b/arm9/src/unk_0200CA44.c index 1a572a89..fd703cd3 100644 --- a/arm9/src/unk_0200CA44.c +++ b/arm9/src/unk_0200CA44.c @@ -2,25 +2,25 @@ #include "main.h" #include "unk_0200CA44.h" -extern BOOL FUN_0201B60C(void *, void (*)(void *, void *), void *, void *); +extern BOOL FUN_0201B60C(void *, void (*)(u32, void *), void *, void *); extern void FUN_0201B6A0(s32); -THUMB_FUNC BOOL FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA44(void (*r0)(u32, void *), void * r1, void * r2) { return FUN_0201B60C(gMain.unk18, r0, r1, r2); } -THUMB_FUNC BOOL FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA60(void (*r0)(u32, void *), void * r1, void * r2) { return FUN_0201B60C(gMain.unk1C, r0, r1, r2); } -THUMB_FUNC BOOL FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA7C(void (*r0)(u32, void *), void * r1, void * r2) { return FUN_0201B60C(gMain.unk24, r0, r1, r2); } -THUMB_FUNC BOOL FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2) +THUMB_FUNC BOOL FUN_0200CA98(void (*r0)(u32, void *), void * r1, void * r2) { return FUN_0201B60C(gMain.unk20, r0, r1, r2); } diff --git a/include/unk_0200CA44.h b/include/unk_0200CA44.h index 3a3be022..2e479ab8 100644 --- a/include/unk_0200CA44.h +++ b/include/unk_0200CA44.h @@ -1,10 +1,10 @@ #ifndef POKEDIAMOND_UNK_0200CA44_H #define POKEDIAMOND_UNK_0200CA44_H -BOOL FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2); -BOOL FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2); -BOOL FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2); -BOOL FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2); +BOOL FUN_0200CA44(void (*r0)(u32, void *), void * r1, void * r2); +BOOL FUN_0200CA60(void (*r0)(u32, void *), void * r1, void * r2); +BOOL FUN_0200CA7C(void (*r0)(u32, void *), void * r1, void * r2); +BOOL FUN_0200CA98(void (*r0)(u32, void *), void * r1, void * r2); void FUN_0200CAB4(s32 unk1); #endif //POKEDIAMOND_UNK_0200CA44_H -- cgit v1.2.3 From 89476f60f8b7bdef718c566252421922c1ace7a2 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 18 Nov 2020 14:22:17 +0000 Subject: mod21_02254990 --- arm9/modules/21/asm/mod21_02254854_asm.s | 16 +--------------- arm9/modules/21/include/mod21_02254854.h | 1 + arm9/modules/21/src/mod21_02254854_src.c | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s index 8da8777f..ee8a1d56 100644 --- a/arm9/modules/21/asm/mod21_02254854_asm.s +++ b/arm9/modules/21/asm/mod21_02254854_asm.s @@ -3,21 +3,7 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254990 -MOD21_02254990: ; 0x02254990 - ldrb r2, [r0, #2] - cmp r2, #0 - bne _02254998 - b _0225499A -_02254998: - mov r1, #2 -_0225499A: - strb r1, [r0] - mov r1, #0 - strb r1, [r0, #1] - bx lr - .align 2, 0 - thumb_func_end MOD21_02254990 + .extern MOD21_02254990 thumb_func_start MOD21_022549A4 MOD21_022549A4: ; 0x022549A4 diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index dabacf1c..26ef3e87 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -21,5 +21,6 @@ void MOD21_02254918(UnkStruct02254854 *param0); void MOD21_02254930(u32 param0, UnkStruct02254854 *param1); void MOD21_0225496C(UnkStruct02254854 *param0); void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3); +void MOD21_02254990(UnkStruct02254854 * param0, u8 param1); #endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c index f7fbe221..eaa8d7ad 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -122,3 +122,17 @@ THUMB_FUNC void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct0225 return; } } + +THUMB_FUNC void MOD21_02254990(UnkStruct02254854 * param0, u8 param1) +{ + if (param0->bytearray[2] == 0) + { + param0->bytearray[0] = param1; + } + else + { + param0->bytearray[0] = 2; + } + param0->bytearray[1] = 0; +} + -- cgit v1.2.3 From 18795a69f067096ce79e9aa3ca8bfa41ca0e400c Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 18 Nov 2020 14:39:57 +0000 Subject: mod21_022549A4 --- arm9/modules/21/asm/mod21_02254854_asm.s | 35 -------------------------------- arm9/modules/21/include/mod21_02254854.h | 1 + arm9/modules/21/src/mod21_02254854_src.c | 32 +++++++++++++++++++++++++---- 3 files changed, 29 insertions(+), 39 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s index ee8a1d56..344d0d64 100644 --- a/arm9/modules/21/asm/mod21_02254854_asm.s +++ b/arm9/modules/21/asm/mod21_02254854_asm.s @@ -5,41 +5,6 @@ .extern MOD21_02254990 - thumb_func_start MOD21_022549A4 -MOD21_022549A4: ; 0x022549A4 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _022549B4 - cmp r0, #1 - beq _022549C4 - b _022549DE -_022549B4: - ldr r0, [r4, #0x24] - mov r1, #0 - bl MOD21_02254B10 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _022549DE -_022549C4: - ldr r0, [r4, #0x24] - mov r1, #0 - bl MOD21_02254B34 - cmp r0, #0 - beq _022549DE - ldr r0, [r4, #0x28] - bl MOD20_0225298C - add r0, r4, #0 - mov r1, #1 - bl MOD21_02254990 -_022549DE: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_022549A4 - thumb_func_start MOD21_022549E4 MOD21_022549E4: ; 0x022549E4 push {r4, lr} diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index 26ef3e87..e6b6c3cf 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -22,5 +22,6 @@ void MOD21_02254930(u32 param0, UnkStruct02254854 *param1); void MOD21_0225496C(UnkStruct02254854 *param0); void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3); void MOD21_02254990(UnkStruct02254854 * param0, u8 param1); +BOOL MOD21_022549A4(UnkStruct02254854 * param0); #endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c index eaa8d7ad..db8769af 100644 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ b/arm9/modules/21/src/mod21_02254854_src.c @@ -10,14 +10,17 @@ extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); extern void MOD20_02252C14(u32 param0, BOOL param1); -extern u32 MOD21_022549A4(UnkStruct02254854 *); -extern u32 MOD21_022549E4(UnkStruct02254854 *); -extern u32 MOD21_02254A38(UnkStruct02254854 *); +extern BOOL MOD21_022549E4(UnkStruct02254854 *); +extern BOOL MOD21_02254A38(UnkStruct02254854 *); extern void MOD21_02254B04(u32 param0); extern void MOD20_02254198(BOOL param0); extern void MOD20_022529A0(u32 param0); +extern void MOD21_02254B10(u32 param0, u32 param1); +extern BOOL MOD21_02254B34(u32 param0, u32 param1); +extern void MOD20_0225298C(u32 param0); + extern void Poketch_InitApp(void *func1, void *func2); THUMB_FUNC static void MOD21_02254840(void) @@ -75,7 +78,7 @@ THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2 return FALSE; } -u32 (* const MOD21_02254D84[])(UnkStruct02254854 *) = { MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 }; +BOOL (* const MOD21_02254D84[])(UnkStruct02254854 *) = { MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 }; THUMB_FUNC void MOD21_02254918(UnkStruct02254854 *param0) { @@ -136,3 +139,24 @@ THUMB_FUNC void MOD21_02254990(UnkStruct02254854 * param0, u8 param1) param0->bytearray[1] = 0; } +THUMB_FUNC BOOL MOD21_022549A4(UnkStruct02254854 * param0) +{ + switch (param0->bytearray[1]) + { + case 0: + MOD21_02254B10(param0->Unk24, 0); + param0->bytearray[1]++; + break; + case 1: + if (MOD21_02254B34(param0->Unk24, 0) == FALSE) + { + break; + } + MOD20_0225298C(param0->Unk28); + MOD21_02254990(param0, 1); + break; + default: + break; + } + return FALSE; +} -- cgit v1.2.3 From c3419a42429718f57f3de5d19e2cd44a18e53033 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 18 Nov 2020 18:19:26 +0000 Subject: fully decomp mod21_02254854.o --- arm9/arm9.lsf | 3 +- arm9/modules/21/asm/mod21_02254854_asm.s | 81 ------------ arm9/modules/21/include/mod21_02254854.h | 2 + arm9/modules/21/src/mod21_02254854.c | 204 +++++++++++++++++++++++++++++++ arm9/modules/21/src/mod21_02254854_src.c | 162 ------------------------ 5 files changed, 207 insertions(+), 245 deletions(-) delete mode 100644 arm9/modules/21/asm/mod21_02254854_asm.s create mode 100644 arm9/modules/21/src/mod21_02254854.c delete mode 100644 arm9/modules/21/src/mod21_02254854_src.c diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index e0073d87..d77a4c21 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -663,8 +663,7 @@ Overlay MODULE_21 { ##Pokétch Clock## After MODULE_20 - Object mod21_02254854_src.o - Object mod21_02254854_asm.o + Object mod21_02254854.o Object mod21_02254A6C.o } diff --git a/arm9/modules/21/asm/mod21_02254854_asm.s b/arm9/modules/21/asm/mod21_02254854_asm.s deleted file mode 100644 index 344d0d64..00000000 --- a/arm9/modules/21/asm/mod21_02254854_asm.s +++ /dev/null @@ -1,81 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - .extern MOD21_02254990 - - thumb_func_start MOD21_022549E4 -MOD21_022549E4: ; 0x022549E4 - push {r4, lr} - add r4, r0, #0 - ldrb r1, [r4, #2] - cmp r1, #0 - beq _022549F8 - mov r1, #2 - bl MOD21_02254990 - mov r0, #0 - pop {r4, pc} -_022549F8: - ldrb r0, [r4, #6] - cmp r0, #0 - beq _02254A0A - mov r0, #0 - strb r0, [r4, #6] - ldr r0, [r4, #0x24] - mov r1, #2 - bl MOD21_02254B10 -_02254A0A: - ldr r0, [r4, #0x24] - mov r1, #1 - bl MOD21_02254B34 - cmp r0, #0 - beq _02254A32 - ldr r0, [r4, #0x18] - strb r0, [r4, #5] - add r0, r4, #0 - add r0, #0x14 - bl GF_RTC_CopyTime - ldrb r1, [r4, #5] - ldr r0, [r4, #0x18] - cmp r1, r0 - beq _02254A32 - ldr r0, [r4, #0x24] - mov r1, #1 - bl MOD21_02254B10 -_02254A32: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_022549E4 - - thumb_func_start MOD21_02254A38 -MOD21_02254A38: ; 0x02254A38 - push {r4, lr} - add r4, r0, #0 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _02254A48 - cmp r0, #1 - beq _02254A58 - b _02254A66 -_02254A48: - ldr r0, [r4, #0x24] - mov r1, #3 - bl MOD21_02254B10 - ldrb r0, [r4, #1] - add r0, r0, #1 - strb r0, [r4, #1] - b _02254A66 -_02254A58: - ldr r0, [r4, #0x24] - bl MOD21_02254B40 - cmp r0, #0 - beq _02254A66 - mov r0, #1 - pop {r4, pc} -_02254A66: - mov r0, #0 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_02254A38 diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index e6b6c3cf..b501962e 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -23,5 +23,7 @@ void MOD21_0225496C(UnkStruct02254854 *param0); void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3); void MOD21_02254990(UnkStruct02254854 * param0, u8 param1); BOOL MOD21_022549A4(UnkStruct02254854 * param0); +BOOL MOD21_022549E4(UnkStruct02254854 * param0); +BOOL MOD21_02254A38(UnkStruct02254854 * param0); #endif //POKEDIAMOND_MOD21_02254854_H diff --git a/arm9/modules/21/src/mod21_02254854.c b/arm9/modules/21/src/mod21_02254854.c new file mode 100644 index 00000000..44c97b8e --- /dev/null +++ b/arm9/modules/21/src/mod21_02254854.c @@ -0,0 +1,204 @@ +#include "global.h" +#include "heap.h" +#include "unk_0200CA44.h" +#include "mod21_02254854.h" + +extern void GF_RTC_CopyTime(u32 *param0); + +u8 const MOD21_02254D80[] = { 0x10, 0xAF, 0x10, 0xCF }; +extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); +extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); +extern void MOD20_02252C14(u32 param0, BOOL param1); + +extern void MOD21_02254B04(u32 param0); +extern void MOD20_02254198(BOOL param0); +extern void MOD20_022529A0(u32 param0); + +extern void MOD21_02254B10(u32 param0, u32 param1); +extern BOOL MOD21_02254B34(u32 param0, u32 param1); +extern BOOL MOD21_02254B40(u32 param0); +extern void MOD20_0225298C(u32 param0); + +extern void Poketch_InitApp(void *func1, void *func2); + +THUMB_FUNC static void MOD21_02254840(void) +{ + Poketch_InitApp(MOD21_02254854, MOD21_0225496C); +} + +#define NitroStaticInit MOD21_02254840 +#include "sinit.h" + +THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3) +{ + UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854)); + if (alloced != NULL) + { + if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44((void (*)(u32, void *))MOD21_02254930, alloced, (void *)1)) + { + *param0 = alloced; + return TRUE; + } + FreeToHeap(alloced); + } + return FALSE; +} + +THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3) +{ +#pragma unused (param2, param3) //not sure, please check + if (MOD21_02254A6C(¶m0->Unk24, param0->Unk14)) + { + param0->bytearray[0] = 0; + param0->bytearray[1] = 0; + param0->bytearray[2] = 0; + param0->bytearray[3] = 1; + param0->bytearray[6] = 0; + param0->Unk20 = 0; + GF_RTC_CopyTime(param0->Unk14); + if (param0->Unk14[0] >= 0x18) + { + param0->Unk14[0] = param0->Unk14[0] % 0x18; + } + if (param0->Unk14[1] >= 0x3c) + { + param0->Unk14[0] = param0->Unk14[0] % 0x3c; + } + param0->bytearray[5] = (u8)param0->Unk14[1]; + param0->Unk10 = MOD20_02254130((void *)MOD21_02254D80, TRUE, MOD21_02254974, param0, 8); + if (param0->Unk10 == FALSE) + { + return FALSE; + } + param0->Unk28 = param1; + return TRUE; + } + return FALSE; +} + +BOOL (* const MOD21_02254D84[])(UnkStruct02254854 *) = { MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 }; + +THUMB_FUNC void MOD21_02254918(UnkStruct02254854 *param0) +{ + MOD21_02254B04(param0->Unk24); + MOD20_02254198(param0->Unk10); + FreeToHeap((void *)param0); +} + +THUMB_FUNC void MOD21_02254930(u32 param0, UnkStruct02254854 *param1) +{ + if (param1->bytearray[0] >= 3) + { + return; + } + MOD20_02252C14(param1->Unk28, param1->Unk10); + if (!MOD21_02254D84[param1->bytearray[0]](param1)) + { + return; + } + MOD21_02254918(param1); + FUN_0200CAB4((s32)param0); + MOD20_022529A0(param1->Unk28); +} + +THUMB_FUNC void MOD21_0225496C(UnkStruct02254854 *param0) +{ + param0->bytearray[2] = 1; +} + +THUMB_FUNC void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3) +{ +#pragma unused (param0, param1) + switch (param2) + { + case 1: + param3->Unk20 = 1; + param3->bytearray[6] = 1; + return; + case 0: + param3->Unk20 = 0; + param3->bytearray[6] = 1; + return; + default: + return; + } +} + +THUMB_FUNC void MOD21_02254990(UnkStruct02254854 * param0, u8 param1) +{ + if (param0->bytearray[2] == 0) + { + param0->bytearray[0] = param1; + } + else + { + param0->bytearray[0] = 2; + } + param0->bytearray[1] = 0; +} + +THUMB_FUNC BOOL MOD21_022549A4(UnkStruct02254854 * param0) +{ + switch (param0->bytearray[1]) + { + case 0: + MOD21_02254B10(param0->Unk24, 0); + param0->bytearray[1]++; + break; + case 1: + if (MOD21_02254B34(param0->Unk24, 0) == FALSE) + { + break; + } + MOD20_0225298C(param0->Unk28); + MOD21_02254990(param0, 1); + break; + default: + break; + } + return FALSE; +} + +THUMB_FUNC BOOL MOD21_022549E4(UnkStruct02254854 * param0) +{ + if (param0->bytearray[2]) + { + MOD21_02254990(param0, 2); + return FALSE; + } + if (param0->bytearray[6]) + { + param0->bytearray[6] = 0; + MOD21_02254B10(param0->Unk24, 2); + } + if (MOD21_02254B34(param0->Unk24, 1)) + { + param0->bytearray[5] = (u8)param0->Unk14[1]; + GF_RTC_CopyTime(param0->Unk14); + if (param0->bytearray[5] != param0->Unk14[1]) + { + MOD21_02254B10(param0->Unk24, 1); + } + } + return FALSE; +} + +THUMB_FUNC BOOL MOD21_02254A38(UnkStruct02254854 * param0) +{ + switch (param0->bytearray[1]) + { + case 0: + MOD21_02254B10(param0->Unk24, 3); + param0->bytearray[1]++; + break; + case 1: + if (MOD21_02254B40(param0->Unk24)) + { + return TRUE; + } + break; + default: + break; + } + return FALSE; +} diff --git a/arm9/modules/21/src/mod21_02254854_src.c b/arm9/modules/21/src/mod21_02254854_src.c deleted file mode 100644 index db8769af..00000000 --- a/arm9/modules/21/src/mod21_02254854_src.c +++ /dev/null @@ -1,162 +0,0 @@ -#include "global.h" -#include "heap.h" -#include "unk_0200CA44.h" -#include "mod21_02254854.h" - -extern void GF_RTC_CopyTime(u32 *param0); - -u8 const MOD21_02254D80[] = { 0x10, 0xAF, 0x10, 0xCF }; -extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); -extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); -extern void MOD20_02252C14(u32 param0, BOOL param1); - -extern BOOL MOD21_022549E4(UnkStruct02254854 *); -extern BOOL MOD21_02254A38(UnkStruct02254854 *); - -extern void MOD21_02254B04(u32 param0); -extern void MOD20_02254198(BOOL param0); -extern void MOD20_022529A0(u32 param0); - -extern void MOD21_02254B10(u32 param0, u32 param1); -extern BOOL MOD21_02254B34(u32 param0, u32 param1); -extern void MOD20_0225298C(u32 param0); - -extern void Poketch_InitApp(void *func1, void *func2); - -THUMB_FUNC static void MOD21_02254840(void) -{ - Poketch_InitApp(MOD21_02254854, MOD21_0225496C); -} - -#define NitroStaticInit MOD21_02254840 -#include "sinit.h" - -THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3) -{ - UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854)); - if (alloced != NULL) - { - if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44((void (*)(u32, void *))MOD21_02254930, alloced, (void *)1)) - { - *param0 = alloced; - return TRUE; - } - FreeToHeap(alloced); - } - return FALSE; -} - -THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3) -{ -#pragma unused (param2, param3) //not sure, please check - if (MOD21_02254A6C(¶m0->Unk24, param0->Unk14)) - { - param0->bytearray[0] = 0; - param0->bytearray[1] = 0; - param0->bytearray[2] = 0; - param0->bytearray[3] = 1; - param0->bytearray[6] = 0; - param0->Unk20 = 0; - GF_RTC_CopyTime(param0->Unk14); - if (param0->Unk14[0] >= 0x18) - { - param0->Unk14[0] = param0->Unk14[0] % 0x18; - } - if (param0->Unk14[1] >= 0x3c) - { - param0->Unk14[0] = param0->Unk14[0] % 0x3c; - } - param0->bytearray[5] = (u8)param0->Unk14[1]; - param0->Unk10 = MOD20_02254130((void *)MOD21_02254D80, TRUE, MOD21_02254974, param0, 8); - if (param0->Unk10 == FALSE) - { - return FALSE; - } - param0->Unk28 = param1; - return TRUE; - } - return FALSE; -} - -BOOL (* const MOD21_02254D84[])(UnkStruct02254854 *) = { MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 }; - -THUMB_FUNC void MOD21_02254918(UnkStruct02254854 *param0) -{ - MOD21_02254B04(param0->Unk24); - MOD20_02254198(param0->Unk10); - FreeToHeap((void *)param0); -} - -THUMB_FUNC void MOD21_02254930(u32 param0, UnkStruct02254854 *param1) -{ - if (param1->bytearray[0] >= 3) - { - return; - } - MOD20_02252C14(param1->Unk28, param1->Unk10); - if (!MOD21_02254D84[param1->bytearray[0]](param1)) - { - return; - } - MOD21_02254918(param1); - FUN_0200CAB4((s32)param0); - MOD20_022529A0(param1->Unk28); -} - -THUMB_FUNC void MOD21_0225496C(UnkStruct02254854 *param0) -{ - param0->bytearray[2] = 1; -} - -THUMB_FUNC void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3) -{ -#pragma unused (param0, param1) - switch (param2) - { - case 1: - param3->Unk20 = 1; - param3->bytearray[6] = 1; - return; - case 0: - param3->Unk20 = 0; - param3->bytearray[6] = 1; - return; - default: - return; - } -} - -THUMB_FUNC void MOD21_02254990(UnkStruct02254854 * param0, u8 param1) -{ - if (param0->bytearray[2] == 0) - { - param0->bytearray[0] = param1; - } - else - { - param0->bytearray[0] = 2; - } - param0->bytearray[1] = 0; -} - -THUMB_FUNC BOOL MOD21_022549A4(UnkStruct02254854 * param0) -{ - switch (param0->bytearray[1]) - { - case 0: - MOD21_02254B10(param0->Unk24, 0); - param0->bytearray[1]++; - break; - case 1: - if (MOD21_02254B34(param0->Unk24, 0) == FALSE) - { - break; - } - MOD20_0225298C(param0->Unk28); - MOD21_02254990(param0, 1); - break; - default: - break; - } - return FALSE; -} -- cgit v1.2.3 From b929414450ac7ee42268815a4a6c913a955476e4 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 19 Nov 2020 18:57:14 +0000 Subject: start decompiling mod21_02254A6C --- arm9/arm9.lsf | 3 +- arm9/modules/21/asm/mod21_02254A6C.s | 427 ------------------------------- arm9/modules/21/asm/mod21_02254A6C_asm.s | 376 +++++++++++++++++++++++++++ arm9/modules/21/include/mod21_02254A6C.h | 17 ++ arm9/modules/21/src/mod21_02254A6C_src.c | 31 +++ 5 files changed, 426 insertions(+), 428 deletions(-) delete mode 100644 arm9/modules/21/asm/mod21_02254A6C.s create mode 100644 arm9/modules/21/asm/mod21_02254A6C_asm.s create mode 100644 arm9/modules/21/include/mod21_02254A6C.h create mode 100644 arm9/modules/21/src/mod21_02254A6C_src.c diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index d77a4c21..2085fcbe 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -664,7 +664,8 @@ Overlay MODULE_21 ##Pokétch Clock## After MODULE_20 Object mod21_02254854.o - Object mod21_02254A6C.o + Object mod21_02254A6C_src.o + Object mod21_02254A6C_asm.o } Overlay MODULE_22 diff --git a/arm9/modules/21/asm/mod21_02254A6C.s b/arm9/modules/21/asm/mod21_02254A6C.s deleted file mode 100644 index 88dcb27c..00000000 --- a/arm9/modules/21/asm/mod21_02254A6C.s +++ /dev/null @@ -1,427 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - thumb_func_start MOD21_02254A6C -MOD21_02254A6C: ; 0x02254A6C - push {r4, r5, r6, lr} - sub sp, #8 - add r6, r1, #0 - mov r1, #3 - add r5, r0, #0 - mov r0, #8 - lsl r1, r1, #8 - bl AllocFromHeap - add r4, r0, #0 - beq _02254ACC - add r0, #8 - mov r1, #8 - bl MOD20_022536F4 - str r6, [r4] - bl MOD20_02252D34 - str r0, [r4, #4] - mov r0, #8 - str r0, [sp] - mov r0, #0xc - mov r1, #0x19 - mov r2, #1 - add r3, sp, #4 - bl FUN_02006BDC - add r6, r0, #0 - bne _02254AB2 - add r0, r4, #0 - bl FreeToHeap - add sp, #8 - mov r0, #0 - pop {r4, r5, r6, pc} -_02254AB2: - ldr r0, [sp, #4] - add r1, r4, #0 - add r0, #0xc - add r1, #0x30 - bl MOD21_02254AD4 - add r0, r6, #0 - bl FreeToHeap - add sp, #8 - str r4, [r5] - mov r0, #1 - pop {r4, r5, r6, pc} -_02254ACC: - mov r0, #0 - add sp, #8 - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end MOD21_02254A6C - - thumb_func_start MOD21_02254AD4 -MOD21_02254AD4: ; 0x02254AD4 - push {r3, r4, r5, r6, r7, lr} - mov r6, #9 - add r5, r0, #0 - add r4, r1, #0 - mov r7, #0 - lsl r6, r6, #6 -_02254AE0: - add r0, r5, #0 - add r1, r4, #0 - mov r2, #0x40 - bl MIi_CpuCopy16 - add r1, r4, #0 - add r0, r5, r6 - add r1, #0x40 - mov r2, #0x10 - bl MIi_CpuCopy16 - add r7, r7, #1 - add r5, #0x40 - add r4, #0x50 - sub r6, #0x30 - cmp r7, #9 - blt _02254AE0 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD21_02254AD4 - - thumb_func_start MOD21_02254B04 -MOD21_02254B04: ; 0x02254B04 - push {r3, lr} - cmp r0, #0 - beq _02254B0E - bl FreeToHeap -_02254B0E: - pop {r3, pc} - thumb_func_end MOD21_02254B04 - - thumb_func_start MOD21_02254B10 -MOD21_02254B10: ; 0x02254B10 - push {lr} - sub sp, #0xc - add r2, r0, #0 - add r0, #8 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - ldr r0, _02254B30 ; =MOD21_02254DAC - ldr r3, [r2] - bl MOD20_022537E0 - add sp, #0xc - pop {pc} - nop -_02254B30: .word MOD21_02254DAC - thumb_func_end MOD21_02254B10 - - thumb_func_start MOD21_02254B34 -MOD21_02254B34: ; 0x02254B34 - ldr r3, _02254B3C ; =MOD20_02253794 - add r0, #8 - bx r3 - nop -_02254B3C: .word MOD20_02253794 - thumb_func_end MOD21_02254B34 - - thumb_func_start MOD21_02254B40 -MOD21_02254B40: ; 0x02254B40 - ldr r3, _02254B48 ; =MOD20_022537B8 - add r0, #8 - bx r3 - nop -_02254B48: .word MOD20_022537B8 - thumb_func_end MOD21_02254B40 - - thumb_func_start MOD21_02254B4C -MOD21_02254B4C: ; 0x02254B4C - push {r4, lr} - add r4, r0, #0 - bl MOD20_022538A0 - add r0, #8 - add r1, r4, #0 - bl MOD20_02253888 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_02254B4C - - thumb_func_start MOD21_02254B60 -MOD21_02254B60: ; 0x02254B60 - push {r4, r5, lr} - sub sp, #0x14 - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - add r5, r0, #0 - ldr r0, [r5, #4] - ldr r2, _02254BE8 ; =MOD21_02254D90 - mov r1, #6 - mov r3, #0 - bl FUN_02016C18 - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #8 - str r0, [sp, #0xc] - ldr r2, [r5, #4] - mov r0, #0xc - mov r1, #0x17 - mov r3, #6 - bl FUN_0200687C - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #8 - str r0, [sp, #0xc] - ldr r2, [r5, #4] - mov r0, #0xc - mov r1, #0x18 - mov r3, #6 - bl FUN_020068C8 - mov r0, #0 - add r1, r0, #0 - bl MOD20_02252D7C - add r0, r5, #0 - bl MOD21_02254C5C - ldr r0, [r5, #4] - mov r1, #6 - bl FUN_02017CD0 - ldr r1, _02254BEC ; =0x04001000 - ldr r0, _02254BF0 ; =0xFFFFE0FF - ldr r3, [r1] - ldr r2, [r1] - str r3, [sp, #0x10] - and r0, r2 - lsl r2, r3, #0x13 - lsr r3, r2, #0x1b - mov r2, #4 - orr r2, r3 - lsl r2, r2, #8 - orr r0, r2 - str r0, [r1] - add r0, r4, #0 - bl MOD21_02254B4C - add sp, #0x14 - pop {r4, r5, pc} - .align 2, 0 -_02254BE8: .word MOD21_02254D90 -_02254BEC: .word 0x04001000 -_02254BF0: .word 0xFFFFE0FF - thumb_func_end MOD21_02254B60 - - thumb_func_start MOD21_02254BF4 -MOD21_02254BF4: ; 0x02254BF4 - push {r3, r4, r5, lr} - add r5, r1, #0 - add r0, r5, #0 - bl MOD20_022538A0 - add r4, r0, #0 - bl MOD21_02254C5C - ldr r0, [r4, #4] - mov r1, #6 - bl FUN_02017CD0 - add r0, r5, #0 - bl MOD21_02254B4C - pop {r3, r4, r5, pc} - thumb_func_end MOD21_02254BF4 - - thumb_func_start MOD21_02254C14 -MOD21_02254C14: ; 0x02254C14 - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - ldr r0, [r0] - ldr r0, [r0, #0xc] - cmp r0, #0 - beq _02254C30 - mov r0, #0 - add r1, r0, #0 - bl MOD11_02252DB4 - b _02254C38 -_02254C30: - mov r0, #0 - add r1, r0, #0 - bl MOD20_02252D7C -_02254C38: - add r0, r4, #0 - bl MOD21_02254B4C - pop {r4, pc} - thumb_func_end MOD21_02254C14 - - thumb_func_start MOD21_02254C40 -MOD21_02254C40: ; 0x02254C40 - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - ldr r0, [r0, #4] - mov r1, #6 - bl FUN_020178A0 - add r0, r4, #0 - bl MOD21_02254B4C - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_02254C40 - - thumb_func_start MOD21_02254C5C -MOD21_02254C5C: ; 0x02254C5C - push {r4, r5, lr} - sub sp, #0x1c - add r4, r0, #0 - ldr r0, [r4] - ldr r2, _02254D74 ; =0x04000280 - ldr r0, [r0] - mov r3, #0 - strh r3, [r2] - str r0, [r2, #0x10] - add r0, r2, #0 - mov r1, #0xa - add r0, #0x18 - str r1, [r0] - str r3, [r0, #4] - lsr r0, r2, #0xb -_02254C7A: - ldrh r1, [r2] - tst r1, r0 - bne _02254C7A - ldr r0, _02254D78 ; =0x040002A0 - add r3, r0, #0 - ldr r1, [r0] - sub r3, #0x20 - lsr r0, r0, #0xb -_02254C8A: - ldrh r2, [r3] - tst r2, r0 - bne _02254C8A - ldr r0, _02254D7C ; =0x040002A8 - add r2, r4, #0 - ldr r5, [r0] - mov r0, #4 - str r0, [sp] - mov r0, #9 - lsl r1, r1, #0x1a - str r0, [sp, #4] - add r2, #0x30 - str r2, [sp, #8] - lsr r1, r1, #0x18 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov r1, #0x28 - str r1, [sp, #0x14] - str r0, [sp, #0x18] - ldr r0, [r4, #4] - mov r1, #6 - mov r2, #3 - mov r3, #7 - bl FUN_02018170 - mov r0, #4 - str r0, [sp] - mov r0, #9 - add r1, r4, #0 - str r0, [sp, #4] - add r1, #0x30 - str r1, [sp, #8] - lsl r1, r5, #0x1a - lsr r1, r1, #0x18 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov r1, #0x28 - str r1, [sp, #0x14] - str r0, [sp, #0x18] - ldr r0, [r4, #4] - mov r1, #6 - mov r2, #8 - mov r3, #7 - bl FUN_02018170 - ldr r0, [r4] - ldr r2, _02254D74 ; =0x04000280 - ldr r0, [r0, #4] - mov r3, #0 - strh r3, [r2] - str r0, [r2, #0x10] - add r0, r2, #0 - mov r1, #0xa - add r0, #0x18 - str r1, [r0] - str r3, [r0, #4] - lsr r0, r2, #0xb -_02254D00: - ldrh r1, [r2] - tst r1, r0 - bne _02254D00 - ldr r0, _02254D78 ; =0x040002A0 - add r3, r0, #0 - ldr r1, [r0] - sub r3, #0x20 - lsr r0, r0, #0xb -_02254D10: - ldrh r2, [r3] - tst r2, r0 - bne _02254D10 - ldr r0, _02254D7C ; =0x040002A8 - add r2, r4, #0 - ldr r5, [r0] - mov r0, #4 - str r0, [sp] - mov r0, #9 - lsl r1, r1, #0x1a - str r0, [sp, #4] - add r2, #0x30 - str r2, [sp, #8] - lsr r1, r1, #0x18 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov r1, #0x28 - str r1, [sp, #0x14] - str r0, [sp, #0x18] - ldr r0, [r4, #4] - mov r1, #6 - mov r2, #0xf - mov r3, #7 - bl FUN_02018170 - mov r0, #4 - str r0, [sp] - mov r0, #9 - add r1, r4, #0 - str r0, [sp, #4] - add r1, #0x30 - str r1, [sp, #8] - lsl r1, r5, #0x1a - lsr r1, r1, #0x18 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov r1, #0x28 - str r1, [sp, #0x14] - str r0, [sp, #0x18] - ldr r0, [r4, #4] - mov r1, #6 - mov r2, #0x14 - mov r3, #7 - bl FUN_02018170 - add sp, #0x1c - pop {r4, r5, pc} - nop -_02254D74: .word 0x04000280 -_02254D78: .word 0x040002A0 -_02254D7C: .word 0x040002A8 - thumb_func_end MOD21_02254C5C - - .section .rodata - - .global MOD21_02254D90 -MOD21_02254D90: ; 0x02254D90 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD21_02254DAC -MOD21_02254DAC: ; 0x02254DAC - .word 0x00, MOD21_02254B60, 0x00 - .word 0x01, MOD21_02254BF4, 0x00 - .word 0x02, MOD21_02254C14, 0x00 - .word 0x03, MOD21_02254C40, 0x00 - .word 0x00, 0x00000000, 0x00 diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s new file mode 100644 index 00000000..a5a2d7ae --- /dev/null +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -0,0 +1,376 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD21_02254AD4 +MOD21_02254AD4: ; 0x02254AD4 + push {r3, r4, r5, r6, r7, lr} + mov r6, #9 + add r5, r0, #0 + add r4, r1, #0 + mov r7, #0 + lsl r6, r6, #6 +_02254AE0: + add r0, r5, #0 + add r1, r4, #0 + mov r2, #0x40 + bl MIi_CpuCopy16 + add r1, r4, #0 + add r0, r5, r6 + add r1, #0x40 + mov r2, #0x10 + bl MIi_CpuCopy16 + add r7, r7, #1 + add r5, #0x40 + add r4, #0x50 + sub r6, #0x30 + cmp r7, #9 + blt _02254AE0 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD21_02254AD4 + + thumb_func_start MOD21_02254B04 +MOD21_02254B04: ; 0x02254B04 + push {r3, lr} + cmp r0, #0 + beq _02254B0E + bl FreeToHeap +_02254B0E: + pop {r3, pc} + thumb_func_end MOD21_02254B04 + + thumb_func_start MOD21_02254B10 +MOD21_02254B10: ; 0x02254B10 + push {lr} + sub sp, #0xc + add r2, r0, #0 + add r0, #8 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + ldr r0, _02254B30 ; =MOD21_02254DAC + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254B30: .word MOD21_02254DAC + thumb_func_end MOD21_02254B10 + + thumb_func_start MOD21_02254B34 +MOD21_02254B34: ; 0x02254B34 + ldr r3, _02254B3C ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254B3C: .word MOD20_02253794 + thumb_func_end MOD21_02254B34 + + thumb_func_start MOD21_02254B40 +MOD21_02254B40: ; 0x02254B40 + ldr r3, _02254B48 ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254B48: .word MOD20_022537B8 + thumb_func_end MOD21_02254B40 + + thumb_func_start MOD21_02254B4C +MOD21_02254B4C: ; 0x02254B4C + push {r4, lr} + add r4, r0, #0 + bl MOD20_022538A0 + add r0, #8 + add r1, r4, #0 + bl MOD20_02253888 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD21_02254B4C + + thumb_func_start MOD21_02254B60 +MOD21_02254B60: ; 0x02254B60 + push {r4, r5, lr} + sub sp, #0x14 + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + add r5, r0, #0 + ldr r0, [r5, #4] + ldr r2, _02254BE8 ; =MOD21_02254D90 + mov r1, #6 + mov r3, #0 + bl FUN_02016C18 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #8 + str r0, [sp, #0xc] + ldr r2, [r5, #4] + mov r0, #0xc + mov r1, #0x17 + mov r3, #6 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #8 + str r0, [sp, #0xc] + ldr r2, [r5, #4] + mov r0, #0xc + mov r1, #0x18 + mov r3, #6 + bl FUN_020068C8 + mov r0, #0 + add r1, r0, #0 + bl MOD20_02252D7C + add r0, r5, #0 + bl MOD21_02254C5C + ldr r0, [r5, #4] + mov r1, #6 + bl FUN_02017CD0 + ldr r1, _02254BEC ; =0x04001000 + ldr r0, _02254BF0 ; =0xFFFFE0FF + ldr r3, [r1] + ldr r2, [r1] + str r3, [sp, #0x10] + and r0, r2 + lsl r2, r3, #0x13 + lsr r3, r2, #0x1b + mov r2, #4 + orr r2, r3 + lsl r2, r2, #8 + orr r0, r2 + str r0, [r1] + add r0, r4, #0 + bl MOD21_02254B4C + add sp, #0x14 + pop {r4, r5, pc} + .align 2, 0 +_02254BE8: .word MOD21_02254D90 +_02254BEC: .word 0x04001000 +_02254BF0: .word 0xFFFFE0FF + thumb_func_end MOD21_02254B60 + + thumb_func_start MOD21_02254BF4 +MOD21_02254BF4: ; 0x02254BF4 + push {r3, r4, r5, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + bl MOD21_02254C5C + ldr r0, [r4, #4] + mov r1, #6 + bl FUN_02017CD0 + add r0, r5, #0 + bl MOD21_02254B4C + pop {r3, r4, r5, pc} + thumb_func_end MOD21_02254BF4 + + thumb_func_start MOD21_02254C14 +MOD21_02254C14: ; 0x02254C14 + push {r4, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + ldr r0, [r0] + ldr r0, [r0, #0xc] + cmp r0, #0 + beq _02254C30 + mov r0, #0 + add r1, r0, #0 + bl MOD11_02252DB4 + b _02254C38 +_02254C30: + mov r0, #0 + add r1, r0, #0 + bl MOD20_02252D7C +_02254C38: + add r0, r4, #0 + bl MOD21_02254B4C + pop {r4, pc} + thumb_func_end MOD21_02254C14 + + thumb_func_start MOD21_02254C40 +MOD21_02254C40: ; 0x02254C40 + push {r4, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + ldr r0, [r0, #4] + mov r1, #6 + bl FUN_020178A0 + add r0, r4, #0 + bl MOD21_02254B4C + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD21_02254C40 + + thumb_func_start MOD21_02254C5C +MOD21_02254C5C: ; 0x02254C5C + push {r4, r5, lr} + sub sp, #0x1c + add r4, r0, #0 + ldr r0, [r4] + ldr r2, _02254D74 ; =0x04000280 + ldr r0, [r0] + mov r3, #0 + strh r3, [r2] + str r0, [r2, #0x10] + add r0, r2, #0 + mov r1, #0xa + add r0, #0x18 + str r1, [r0] + str r3, [r0, #4] + lsr r0, r2, #0xb +_02254C7A: + ldrh r1, [r2] + tst r1, r0 + bne _02254C7A + ldr r0, _02254D78 ; =0x040002A0 + add r3, r0, #0 + ldr r1, [r0] + sub r3, #0x20 + lsr r0, r0, #0xb +_02254C8A: + ldrh r2, [r3] + tst r2, r0 + bne _02254C8A + ldr r0, _02254D7C ; =0x040002A8 + add r2, r4, #0 + ldr r5, [r0] + mov r0, #4 + str r0, [sp] + mov r0, #9 + lsl r1, r1, #0x1a + str r0, [sp, #4] + add r2, #0x30 + str r2, [sp, #8] + lsr r1, r1, #0x18 + str r1, [sp, #0xc] + mov r1, #0 + str r1, [sp, #0x10] + mov r1, #0x28 + str r1, [sp, #0x14] + str r0, [sp, #0x18] + ldr r0, [r4, #4] + mov r1, #6 + mov r2, #3 + mov r3, #7 + bl FUN_02018170 + mov r0, #4 + str r0, [sp] + mov r0, #9 + add r1, r4, #0 + str r0, [sp, #4] + add r1, #0x30 + str r1, [sp, #8] + lsl r1, r5, #0x1a + lsr r1, r1, #0x18 + str r1, [sp, #0xc] + mov r1, #0 + str r1, [sp, #0x10] + mov r1, #0x28 + str r1, [sp, #0x14] + str r0, [sp, #0x18] + ldr r0, [r4, #4] + mov r1, #6 + mov r2, #8 + mov r3, #7 + bl FUN_02018170 + ldr r0, [r4] + ldr r2, _02254D74 ; =0x04000280 + ldr r0, [r0, #4] + mov r3, #0 + strh r3, [r2] + str r0, [r2, #0x10] + add r0, r2, #0 + mov r1, #0xa + add r0, #0x18 + str r1, [r0] + str r3, [r0, #4] + lsr r0, r2, #0xb +_02254D00: + ldrh r1, [r2] + tst r1, r0 + bne _02254D00 + ldr r0, _02254D78 ; =0x040002A0 + add r3, r0, #0 + ldr r1, [r0] + sub r3, #0x20 + lsr r0, r0, #0xb +_02254D10: + ldrh r2, [r3] + tst r2, r0 + bne _02254D10 + ldr r0, _02254D7C ; =0x040002A8 + add r2, r4, #0 + ldr r5, [r0] + mov r0, #4 + str r0, [sp] + mov r0, #9 + lsl r1, r1, #0x1a + str r0, [sp, #4] + add r2, #0x30 + str r2, [sp, #8] + lsr r1, r1, #0x18 + str r1, [sp, #0xc] + mov r1, #0 + str r1, [sp, #0x10] + mov r1, #0x28 + str r1, [sp, #0x14] + str r0, [sp, #0x18] + ldr r0, [r4, #4] + mov r1, #6 + mov r2, #0xf + mov r3, #7 + bl FUN_02018170 + mov r0, #4 + str r0, [sp] + mov r0, #9 + add r1, r4, #0 + str r0, [sp, #4] + add r1, #0x30 + str r1, [sp, #8] + lsl r1, r5, #0x1a + lsr r1, r1, #0x18 + str r1, [sp, #0xc] + mov r1, #0 + str r1, [sp, #0x10] + mov r1, #0x28 + str r1, [sp, #0x14] + str r0, [sp, #0x18] + ldr r0, [r4, #4] + mov r1, #6 + mov r2, #0x14 + mov r3, #7 + bl FUN_02018170 + add sp, #0x1c + pop {r4, r5, pc} + nop +_02254D74: .word 0x04000280 +_02254D78: .word 0x040002A0 +_02254D7C: .word 0x040002A8 + thumb_func_end MOD21_02254C5C + + .section .rodata + + .global MOD21_02254D90 +MOD21_02254D90: ; 0x02254D90 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global MOD21_02254DAC +MOD21_02254DAC: ; 0x02254DAC + .word 0x00, MOD21_02254B60, 0x00 + .word 0x01, MOD21_02254BF4, 0x00 + .word 0x02, MOD21_02254C14, 0x00 + .word 0x03, MOD21_02254C40, 0x00 + .word 0x00, 0x00000000, 0x00 diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h new file mode 100644 index 00000000..9c37ecc5 --- /dev/null +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -0,0 +1,17 @@ +#ifndef POKEDIAMOND_MOD21_02254A6C_H +#define POKEDIAMOND_MOD21_02254A6C_H + +#include "nitro/types.h" + +typedef struct UnkStruct02254A6C +{ + void *Unk00; + u32 Unk04; + u32 Unk08[1]; + u8 padding0[0x24]; + u32 Unk30[1]; +} UnkStruct02254A6C; + +BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); + +#endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c new file mode 100644 index 00000000..ee664f13 --- /dev/null +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "heap.h" +#include "mod21_02254A6C.h" + +extern void MOD20_022536F4(u32 *param0, u32 param1); +extern u32 MOD20_02252D34(void); +extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4); +extern void MOD21_02254AD4(u32 param0, u32 *param1); + +THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) +{ + UnkStruct02254A6C *strct = (UnkStruct02254A6C *)AllocFromHeap(8, 3 << 8); + u32 sp4; + if (strct != NULL) + { + MOD20_022536F4(strct->Unk08, 8); + strct->Unk00 = param1; + strct->Unk04 = MOD20_02252D34(); + void *res = FUN_02006BDC(12, 0x19, 1, &sp4, 8); + if (res == 0) + { + FreeToHeap(strct); + return FALSE; + } + MOD21_02254AD4(sp4 + 0xc, strct->Unk30); + FreeToHeap(res); + param0->Unk00 = strct; + return TRUE; + } + return FALSE; +} \ No newline at end of file -- cgit v1.2.3 From 0a7108543bb346f86b6688b11e45cd478df3d890 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 19 Nov 2020 21:10:49 +0000 Subject: mod21_02254AD4 --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 27 --------------------------- arm9/modules/21/include/mod21_02254A6C.h | 1 + arm9/modules/21/src/mod21_02254A6C_src.c | 19 ++++++++++++++++--- 3 files changed, 17 insertions(+), 30 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index a5a2d7ae..45ff2a27 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,33 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254AD4 -MOD21_02254AD4: ; 0x02254AD4 - push {r3, r4, r5, r6, r7, lr} - mov r6, #9 - add r5, r0, #0 - add r4, r1, #0 - mov r7, #0 - lsl r6, r6, #6 -_02254AE0: - add r0, r5, #0 - add r1, r4, #0 - mov r2, #0x40 - bl MIi_CpuCopy16 - add r1, r4, #0 - add r0, r5, r6 - add r1, #0x40 - mov r2, #0x10 - bl MIi_CpuCopy16 - add r7, r7, #1 - add r5, #0x40 - add r4, #0x50 - sub r6, #0x30 - cmp r7, #9 - blt _02254AE0 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end MOD21_02254AD4 - thumb_func_start MOD21_02254B04 MOD21_02254B04: ; 0x02254B04 push {r3, lr} diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index 9c37ecc5..71bc78e7 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -13,5 +13,6 @@ typedef struct UnkStruct02254A6C } UnkStruct02254A6C; BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); +void MOD21_02254AD4(void *param0, void *param1); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index ee664f13..4bd810d4 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -1,11 +1,11 @@ #include "global.h" #include "heap.h" #include "mod21_02254A6C.h" +#include "MI_memory.h" extern void MOD20_022536F4(u32 *param0, u32 param1); extern u32 MOD20_02252D34(void); extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4); -extern void MOD21_02254AD4(u32 param0, u32 *param1); THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) { @@ -22,10 +22,23 @@ THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) FreeToHeap(strct); return FALSE; } - MOD21_02254AD4(sp4 + 0xc, strct->Unk30); + MOD21_02254AD4((void *)(sp4 + 0xc), strct->Unk30); FreeToHeap(res); param0->Unk00 = strct; return TRUE; } return FALSE; -} \ No newline at end of file +} + +THUMB_FUNC void MOD21_02254AD4(void *param0, void *param1) +{ + s32 i = 0; + for (u32 r6 = 9 << 6; i < 9; r6 -= 0x30) + { + MI_CpuCopy16(param0, param1, 0x40); + MI_CpuCopy16((void *)((u32)param0 + r6), (void *)((u32)param1 + 0x40), 0x10); + i++; + param0 = (void *)((u32)param0 + 0x40); + param1 = (void *)((u32)param1 + 0x50); + } +} -- cgit v1.2.3 From 2e10bebe00a1c459c13854230a3014881d02e312 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 19 Nov 2020 22:16:42 +0000 Subject: a bit of cleanup --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 10 ---------- arm9/modules/21/include/mod21_02254854.h | 1 + arm9/modules/21/include/mod21_02254A6C.h | 1 + arm9/modules/21/src/mod21_02254854.c | 10 ++++------ arm9/modules/21/src/mod21_02254A6C_src.c | 8 ++++++++ 5 files changed, 14 insertions(+), 16 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index 45ff2a27..f1cc2984 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,16 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254B04 -MOD21_02254B04: ; 0x02254B04 - push {r3, lr} - cmp r0, #0 - beq _02254B0E - bl FreeToHeap -_02254B0E: - pop {r3, pc} - thumb_func_end MOD21_02254B04 - thumb_func_start MOD21_02254B10 MOD21_02254B10: ; 0x02254B10 push {lr} diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index b501962e..cc716a1d 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -2,6 +2,7 @@ #define POKEDIAMOND_MOD21_02254854_H #include "nitro/types.h" +#include "mod21_02254A6C.h" typedef struct UnkStruct02254854 { diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index 71bc78e7..493c2746 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -14,5 +14,6 @@ typedef struct UnkStruct02254A6C BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); void MOD21_02254AD4(void *param0, void *param1); +void MOD21_02254B04(void *param0); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254854.c b/arm9/modules/21/src/mod21_02254854.c index 44c97b8e..0cdb0c32 100644 --- a/arm9/modules/21/src/mod21_02254854.c +++ b/arm9/modules/21/src/mod21_02254854.c @@ -6,17 +6,15 @@ extern void GF_RTC_CopyTime(u32 *param0); u8 const MOD21_02254D80[] = { 0x10, 0xAF, 0x10, 0xCF }; -extern BOOL MOD21_02254A6C(u32 *param0, u32 *param1); extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4); extern void MOD20_02252C14(u32 param0, BOOL param1); -extern void MOD21_02254B04(u32 param0); extern void MOD20_02254198(BOOL param0); extern void MOD20_022529A0(u32 param0); -extern void MOD21_02254B10(u32 param0, u32 param1); -extern BOOL MOD21_02254B34(u32 param0, u32 param1); -extern BOOL MOD21_02254B40(u32 param0); +extern void MOD21_02254B10(void *param0, u32 param1); +extern BOOL MOD21_02254B34(void *param0, u32 param1); +extern BOOL MOD21_02254B40(void *param0); extern void MOD20_0225298C(u32 param0); extern void Poketch_InitApp(void *func1, void *func2); @@ -47,7 +45,7 @@ THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3) { #pragma unused (param2, param3) //not sure, please check - if (MOD21_02254A6C(¶m0->Unk24, param0->Unk14)) + if (MOD21_02254A6C((UnkStruct02254A6C *)¶m0->Unk24, param0->Unk14)) //todo fix { param0->bytearray[0] = 0; param0->bytearray[1] = 0; diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index 4bd810d4..a37b5728 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -42,3 +42,11 @@ THUMB_FUNC void MOD21_02254AD4(void *param0, void *param1) param1 = (void *)((u32)param1 + 0x50); } } + +THUMB_FUNC void MOD21_02254B04(void *param0) +{ + if (param0 != NULL) + { + FreeToHeap(param0); + } +} -- cgit v1.2.3 From 408f6b2f49ab9bfd4523c373f2342af7d2fe63cf Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 2 Dec 2020 21:30:04 +0000 Subject: MOD21_02254B10 --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 20 -------------------- arm9/modules/21/include/mod21_02254854.h | 2 +- arm9/modules/21/include/mod21_02254A6C.h | 1 + arm9/modules/21/src/mod21_02254854.c | 1 - arm9/modules/21/src/mod21_02254A6C_src.c | 7 +++++++ 5 files changed, 9 insertions(+), 22 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index f1cc2984..3848695a 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,26 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254B10 -MOD21_02254B10: ; 0x02254B10 - push {lr} - sub sp, #0xc - add r2, r0, #0 - add r0, #8 - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - ldr r0, _02254B30 ; =MOD21_02254DAC - ldr r3, [r2] - bl MOD20_022537E0 - add sp, #0xc - pop {pc} - nop -_02254B30: .word MOD21_02254DAC - thumb_func_end MOD21_02254B10 - thumb_func_start MOD21_02254B34 MOD21_02254B34: ; 0x02254B34 ldr r3, _02254B3C ; =MOD20_02253794 diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h index cc716a1d..26501f35 100644 --- a/arm9/modules/21/include/mod21_02254854.h +++ b/arm9/modules/21/include/mod21_02254854.h @@ -12,7 +12,7 @@ typedef struct UnkStruct02254854 u32 Unk14[2]; u8 padding1[4]; u32 Unk20; - u32 Unk24; + void *Unk24; u32 Unk28; } UnkStruct02254854; diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index 493c2746..64857190 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -15,5 +15,6 @@ typedef struct UnkStruct02254A6C BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); void MOD21_02254AD4(void *param0, void *param1); void MOD21_02254B04(void *param0); +void MOD21_02254B10(u32 *param0, u32 param1); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254854.c b/arm9/modules/21/src/mod21_02254854.c index 0cdb0c32..0f706f4d 100644 --- a/arm9/modules/21/src/mod21_02254854.c +++ b/arm9/modules/21/src/mod21_02254854.c @@ -12,7 +12,6 @@ extern void MOD20_02252C14(u32 param0, BOOL param1); extern void MOD20_02254198(BOOL param0); extern void MOD20_022529A0(u32 param0); -extern void MOD21_02254B10(void *param0, u32 param1); extern BOOL MOD21_02254B34(void *param0, u32 param1); extern BOOL MOD21_02254B40(void *param0); extern void MOD20_0225298C(u32 param0); diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index a37b5728..7a792c50 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -6,6 +6,8 @@ extern void MOD20_022536F4(u32 *param0, u32 param1); extern u32 MOD20_02252D34(void); extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4); +extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, void *param4, u32 param5, u32 param6); +extern void MOD21_02254DAC(void); THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) { @@ -50,3 +52,8 @@ THUMB_FUNC void MOD21_02254B04(void *param0) FreeToHeap(param0); } } + +THUMB_FUNC void MOD21_02254B10(u32 *param0, u32 param1) +{ + MOD20_022537E0(MOD21_02254DAC, param1, param0, *param0, (void *)(param0 + 2), 2, 8); +} -- cgit v1.2.3 From 21ff3852f8fd49e9f491a2a12fb81d43e5147727 Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 2 Dec 2020 22:14:27 +0000 Subject: 2 more funcs --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 18 ------------------ arm9/modules/21/include/mod21_02254A6C.h | 2 ++ arm9/modules/21/src/mod21_02254854.c | 2 -- arm9/modules/21/src/mod21_02254A6C_src.c | 12 ++++++++++++ 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index 3848695a..ff26bc88 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,24 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254B34 -MOD21_02254B34: ; 0x02254B34 - ldr r3, _02254B3C ; =MOD20_02253794 - add r0, #8 - bx r3 - nop -_02254B3C: .word MOD20_02253794 - thumb_func_end MOD21_02254B34 - - thumb_func_start MOD21_02254B40 -MOD21_02254B40: ; 0x02254B40 - ldr r3, _02254B48 ; =MOD20_022537B8 - add r0, #8 - bx r3 - nop -_02254B48: .word MOD20_022537B8 - thumb_func_end MOD21_02254B40 - thumb_func_start MOD21_02254B4C MOD21_02254B4C: ; 0x02254B4C push {r4, lr} diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index 64857190..c2eba5b7 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -16,5 +16,7 @@ BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); void MOD21_02254AD4(void *param0, void *param1); void MOD21_02254B04(void *param0); void MOD21_02254B10(u32 *param0, u32 param1); +BOOL MOD21_02254B34(void *param0, u32 param1); +BOOL MOD21_02254B40(void *param0); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254854.c b/arm9/modules/21/src/mod21_02254854.c index 0f706f4d..fe285936 100644 --- a/arm9/modules/21/src/mod21_02254854.c +++ b/arm9/modules/21/src/mod21_02254854.c @@ -12,8 +12,6 @@ extern void MOD20_02252C14(u32 param0, BOOL param1); extern void MOD20_02254198(BOOL param0); extern void MOD20_022529A0(u32 param0); -extern BOOL MOD21_02254B34(void *param0, u32 param1); -extern BOOL MOD21_02254B40(void *param0); extern void MOD20_0225298C(u32 param0); extern void Poketch_InitApp(void *func1, void *func2); diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index 7a792c50..b36baa2a 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -8,6 +8,8 @@ extern u32 MOD20_02252D34(void); extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4); extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, void *param4, u32 param5, u32 param6); extern void MOD21_02254DAC(void); +extern BOOL MOD20_02253794(void *param0, u32 param1); +extern BOOL MOD20_022537B8(void *param0); THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) { @@ -57,3 +59,13 @@ THUMB_FUNC void MOD21_02254B10(u32 *param0, u32 param1) { MOD20_022537E0(MOD21_02254DAC, param1, param0, *param0, (void *)(param0 + 2), 2, 8); } + +THUMB_FUNC BOOL MOD21_02254B34(void *param0, u32 param1) +{ + return MOD20_02253794((void *)((u32)param0 + 8), param1); +} + +THUMB_FUNC BOOL MOD21_02254B40(void *param0) +{ + return MOD20_022537B8((void *)((u32)param0 + 8)); +} -- cgit v1.2.3 From 8c4c85d47a2457e524eb63f91ef32f2c8cd8c38d Mon Sep 17 00:00:00 2001 From: red031000 Date: Sat, 5 Dec 2020 21:19:20 +0000 Subject: two mod 21 funcs --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 81 +------------------------------- arm9/modules/21/include/mod21_02254A6C.h | 8 ++++ arm9/modules/21/src/mod21_02254A6C_src.c | 39 +++++++++++++++ 3 files changed, 49 insertions(+), 79 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index ff26bc88..f364df84 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,85 +3,8 @@ .section .text .balign 4, 0 - thumb_func_start MOD21_02254B4C -MOD21_02254B4C: ; 0x02254B4C - push {r4, lr} - add r4, r0, #0 - bl MOD20_022538A0 - add r0, #8 - add r1, r4, #0 - bl MOD20_02253888 - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_02254B4C - - thumb_func_start MOD21_02254B60 -MOD21_02254B60: ; 0x02254B60 - push {r4, r5, lr} - sub sp, #0x14 - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - add r5, r0, #0 - ldr r0, [r5, #4] - ldr r2, _02254BE8 ; =MOD21_02254D90 - mov r1, #6 - mov r3, #0 - bl FUN_02016C18 - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #8 - str r0, [sp, #0xc] - ldr r2, [r5, #4] - mov r0, #0xc - mov r1, #0x17 - mov r3, #6 - bl FUN_0200687C - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #8 - str r0, [sp, #0xc] - ldr r2, [r5, #4] - mov r0, #0xc - mov r1, #0x18 - mov r3, #6 - bl FUN_020068C8 - mov r0, #0 - add r1, r0, #0 - bl MOD20_02252D7C - add r0, r5, #0 - bl MOD21_02254C5C - ldr r0, [r5, #4] - mov r1, #6 - bl FUN_02017CD0 - ldr r1, _02254BEC ; =0x04001000 - ldr r0, _02254BF0 ; =0xFFFFE0FF - ldr r3, [r1] - ldr r2, [r1] - str r3, [sp, #0x10] - and r0, r2 - lsl r2, r3, #0x13 - lsr r3, r2, #0x1b - mov r2, #4 - orr r2, r3 - lsl r2, r2, #8 - orr r0, r2 - str r0, [r1] - add r0, r4, #0 - bl MOD21_02254B4C - add sp, #0x14 - pop {r4, r5, pc} - .align 2, 0 -_02254BE8: .word MOD21_02254D90 -_02254BEC: .word 0x04001000 -_02254BF0: .word 0xFFFFE0FF - thumb_func_end MOD21_02254B60 + .extern MOD21_02254B4C + .extern MOD21_02254B60 thumb_func_start MOD21_02254BF4 MOD21_02254BF4: ; 0x02254BF4 diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index c2eba5b7..d0fc3284 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -12,11 +12,19 @@ typedef struct UnkStruct02254A6C u32 Unk30[1]; } UnkStruct02254A6C; +typedef struct UnkStruct02254B60 +{ + u32 Unk00; + u32 Unk04; +} UnkStruct02254B60; + BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); void MOD21_02254AD4(void *param0, void *param1); void MOD21_02254B04(void *param0); void MOD21_02254B10(u32 *param0, u32 param1); BOOL MOD21_02254B34(void *param0, u32 param1); BOOL MOD21_02254B40(void *param0); +BOOL MOD21_02254B4C(void *param0); +BOOL MOD21_02254B60(u32 param0, void *param1); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index b36baa2a..44c2515a 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -10,6 +10,17 @@ extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, v extern void MOD21_02254DAC(void); extern BOOL MOD20_02253794(void *param0, u32 param1); extern BOOL MOD20_022537B8(void *param0); +extern UnkStruct02254B60 *MOD20_022538A0(void *param0); +extern BOOL MOD20_02253888(void *param0, void *param1); + +extern void MOD21_02254D90(void); + +extern void FUN_02016C18(u32 param0, u32 param1, void *param2, u32 param3); +extern void FUN_0200687C(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); +extern void FUN_020068C8(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); +extern void MOD20_02252D7C(u32 param0, u32 param1); +extern void MOD21_02254C5C(UnkStruct02254B60 *param0); +extern void FUN_02017CD0(u32 param0, u32 param1); THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) { @@ -69,3 +80,31 @@ THUMB_FUNC BOOL MOD21_02254B40(void *param0) { return MOD20_022537B8((void *)((u32)param0 + 8)); } + +THUMB_FUNC BOOL MOD21_02254B4C(void *param0) +{ + return MOD20_02253888((void *)((u32)MOD20_022538A0(param0) + 8), param0); +} + +THUMB_FUNC BOOL MOD21_02254B60(u32 param0, void *param1) +{ +#pragma unused (param0) + UnkStruct02254B60 *strct = MOD20_022538A0(param1); + FUN_02016C18(strct->Unk04, 6, MOD21_02254D90, 0); + FUN_0200687C(12, 23, strct->Unk04, 6, 0, 0, 1, 8); + FUN_020068C8(12, 24, strct->Unk04, 6, 0, 0, 1, 8); + MOD20_02252D7C(0, 0); + MOD21_02254C5C(strct); + FUN_02017CD0(strct->Unk04, 6); + u32 r3 = reg_GXS_DB_DISPCNT; + u32 r2 = reg_GXS_DB_DISPCNT; + vu32 tmp = r3; //unused? wtf + u32 r0 = ~0x1F00 & r2; + r2 = r3 << 0x13; + r3 = r2 >> 0x1b; + r2 = 4 | r3; + r2 <<= 8; + r0 |= r2; + reg_GXS_DB_DISPCNT = r0; + return MOD21_02254B4C(param1); +} -- cgit v1.2.3 From 87be48c985eeb0c1c8faf2817898f4cef3d4830f Mon Sep 17 00:00:00 2001 From: red031000 Date: Sat, 5 Dec 2020 22:31:04 +0000 Subject: small cleanup + another func --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 17 +---------------- arm9/modules/21/include/mod21_02254A6C.h | 1 + arm9/modules/21/src/mod21_02254A6C_src.c | 13 +++++++++++-- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index f364df84..b70b3d9a 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -5,22 +5,7 @@ .extern MOD21_02254B4C .extern MOD21_02254B60 - - thumb_func_start MOD21_02254BF4 -MOD21_02254BF4: ; 0x02254BF4 - push {r3, r4, r5, lr} - add r5, r1, #0 - add r0, r5, #0 - bl MOD20_022538A0 - add r4, r0, #0 - bl MOD21_02254C5C - ldr r0, [r4, #4] - mov r1, #6 - bl FUN_02017CD0 - add r0, r5, #0 - bl MOD21_02254B4C - pop {r3, r4, r5, pc} - thumb_func_end MOD21_02254BF4 + .extern MOD21_02254BF4 thumb_func_start MOD21_02254C14 MOD21_02254C14: ; 0x02254C14 diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index d0fc3284..5376e325 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -26,5 +26,6 @@ BOOL MOD21_02254B34(void *param0, u32 param1); BOOL MOD21_02254B40(void *param0); BOOL MOD21_02254B4C(void *param0); BOOL MOD21_02254B60(u32 param0, void *param1); +BOOL MOD21_02254BF4(u32 param0, void *param1); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index 44c2515a..25a8548b 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -100,11 +100,20 @@ THUMB_FUNC BOOL MOD21_02254B60(u32 param0, void *param1) u32 r2 = reg_GXS_DB_DISPCNT; vu32 tmp = r3; //unused? wtf u32 r0 = ~0x1F00 & r2; - r2 = r3 << 0x13; - r3 = r2 >> 0x1b; + r2 = r3 << 19; //cast with shift? can't replicate both though + r3 = r2 >> 27; r2 = 4 | r3; r2 <<= 8; r0 |= r2; reg_GXS_DB_DISPCNT = r0; return MOD21_02254B4C(param1); } + +THUMB_FUNC BOOL MOD21_02254BF4(u32 param0, void *param1) +{ +#pragma unused (param0) + UnkStruct02254B60 *strct = MOD20_022538A0(param1); + MOD21_02254C5C(strct); + FUN_02017CD0(strct->Unk04, 6); + return MOD21_02254B4C(param1); +} -- cgit v1.2.3 From a3060d816a528bdef9f5b6da7246c423a46fce61 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 6 Dec 2020 19:50:02 +0000 Subject: almost finished --- arm9/modules/21/asm/mod21_02254A6C_asm.s | 42 ++------------------------------ arm9/modules/21/include/mod21_02254A6C.h | 19 +++++++-------- arm9/modules/21/src/mod21_02254A6C_src.c | 34 +++++++++++++++++++++++--- 3 files changed, 41 insertions(+), 54 deletions(-) diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s index b70b3d9a..05679d5c 100644 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ b/arm9/modules/21/asm/mod21_02254A6C_asm.s @@ -3,48 +3,10 @@ .section .text .balign 4, 0 - .extern MOD21_02254B4C .extern MOD21_02254B60 .extern MOD21_02254BF4 - - thumb_func_start MOD21_02254C14 -MOD21_02254C14: ; 0x02254C14 - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - ldr r0, [r0] - ldr r0, [r0, #0xc] - cmp r0, #0 - beq _02254C30 - mov r0, #0 - add r1, r0, #0 - bl MOD11_02252DB4 - b _02254C38 -_02254C30: - mov r0, #0 - add r1, r0, #0 - bl MOD20_02252D7C -_02254C38: - add r0, r4, #0 - bl MOD21_02254B4C - pop {r4, pc} - thumb_func_end MOD21_02254C14 - - thumb_func_start MOD21_02254C40 -MOD21_02254C40: ; 0x02254C40 - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl MOD20_022538A0 - ldr r0, [r0, #4] - mov r1, #6 - bl FUN_020178A0 - add r0, r4, #0 - bl MOD21_02254B4C - pop {r4, pc} - .align 2, 0 - thumb_func_end MOD21_02254C40 + .extern MOD21_02254C14 + .extern MOD21_02254C40 thumb_func_start MOD21_02254C5C MOD21_02254C5C: ; 0x02254C5C diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index 5376e325..568ec26f 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -3,20 +3,17 @@ #include "nitro/types.h" -typedef struct UnkStruct02254A6C +typedef struct UnkStruct02254A6C UnkStruct02254A6C; + +struct UnkStruct02254A6C { - void *Unk00; + UnkStruct02254A6C *Unk00; u32 Unk04; u32 Unk08[1]; - u8 padding0[0x24]; + u32 Unk0C; + u8 padding0[0x20]; u32 Unk30[1]; -} UnkStruct02254A6C; - -typedef struct UnkStruct02254B60 -{ - u32 Unk00; - u32 Unk04; -} UnkStruct02254B60; +}; BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); void MOD21_02254AD4(void *param0, void *param1); @@ -27,5 +24,7 @@ BOOL MOD21_02254B40(void *param0); BOOL MOD21_02254B4C(void *param0); BOOL MOD21_02254B60(u32 param0, void *param1); BOOL MOD21_02254BF4(u32 param0, void *param1); +BOOL MOD21_02254C14(u32 param0, void *param1); +BOOL MOD21_02254C40(u32 param0, void *param1); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c index 25a8548b..ef422905 100644 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ b/arm9/modules/21/src/mod21_02254A6C_src.c @@ -10,7 +10,7 @@ extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, v extern void MOD21_02254DAC(void); extern BOOL MOD20_02253794(void *param0, u32 param1); extern BOOL MOD20_022537B8(void *param0); -extern UnkStruct02254B60 *MOD20_022538A0(void *param0); +extern UnkStruct02254A6C *MOD20_022538A0(void *param0); extern BOOL MOD20_02253888(void *param0, void *param1); extern void MOD21_02254D90(void); @@ -19,8 +19,11 @@ extern void FUN_02016C18(u32 param0, u32 param1, void *param2, u32 param3); extern void FUN_0200687C(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); extern void FUN_020068C8(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); extern void MOD20_02252D7C(u32 param0, u32 param1); -extern void MOD21_02254C5C(UnkStruct02254B60 *param0); +extern void MOD21_02254C5C(UnkStruct02254A6C *param0); extern void FUN_02017CD0(u32 param0, u32 param1); +extern void FUN_020178A0(u32 param0, u32 param1); + +extern void MOD11_02252DB4(u32 param0, u32 param1); THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) { @@ -89,7 +92,7 @@ THUMB_FUNC BOOL MOD21_02254B4C(void *param0) THUMB_FUNC BOOL MOD21_02254B60(u32 param0, void *param1) { #pragma unused (param0) - UnkStruct02254B60 *strct = MOD20_022538A0(param1); + UnkStruct02254A6C *strct = MOD20_022538A0(param1); FUN_02016C18(strct->Unk04, 6, MOD21_02254D90, 0); FUN_0200687C(12, 23, strct->Unk04, 6, 0, 0, 1, 8); FUN_020068C8(12, 24, strct->Unk04, 6, 0, 0, 1, 8); @@ -112,8 +115,31 @@ THUMB_FUNC BOOL MOD21_02254B60(u32 param0, void *param1) THUMB_FUNC BOOL MOD21_02254BF4(u32 param0, void *param1) { #pragma unused (param0) - UnkStruct02254B60 *strct = MOD20_022538A0(param1); + UnkStruct02254A6C *strct = MOD20_022538A0(param1); MOD21_02254C5C(strct); FUN_02017CD0(strct->Unk04, 6); return MOD21_02254B4C(param1); } + +THUMB_FUNC BOOL MOD21_02254C14(u32 param0, void *param1) +{ +#pragma unused (param0) + UnkStruct02254A6C *strct = MOD20_022538A0(param1); + if (strct->Unk00->Unk0C) + { + MOD11_02252DB4(0, 0); + } + else + { + MOD20_02252D7C(0, 0); + } + return MOD21_02254B4C(param1); +} + +THUMB_FUNC BOOL MOD21_02254C40(u32 param0, void *param1) +{ +#pragma unused (param0) + UnkStruct02254A6C *strct = MOD20_022538A0(param1); + FUN_020178A0(strct->Unk04, 6); + return MOD21_02254B4C(param1); +} -- cgit v1.2.3 From 12c64ee79eabced2a1cc1fc83209be37142bc44c Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 11 Dec 2020 21:07:34 +0000 Subject: match all of module 21 --- arm9/arm9.lsf | 3 +- arm9/modules/21/asm/mod21_02254A6C_asm.s | 171 ---------------------------- arm9/modules/21/include/mod21_02254A6C.h | 8 ++ arm9/modules/21/src/mod21_02254A6C.c | 187 +++++++++++++++++++++++++++++++ arm9/modules/21/src/mod21_02254A6C_src.c | 145 ------------------------ 5 files changed, 196 insertions(+), 318 deletions(-) delete mode 100644 arm9/modules/21/asm/mod21_02254A6C_asm.s create mode 100644 arm9/modules/21/src/mod21_02254A6C.c delete mode 100644 arm9/modules/21/src/mod21_02254A6C_src.c diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 2085fcbe..d77a4c21 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -664,8 +664,7 @@ Overlay MODULE_21 ##Pokétch Clock## After MODULE_20 Object mod21_02254854.o - Object mod21_02254A6C_src.o - Object mod21_02254A6C_asm.o + Object mod21_02254A6C.o } Overlay MODULE_22 diff --git a/arm9/modules/21/asm/mod21_02254A6C_asm.s b/arm9/modules/21/asm/mod21_02254A6C_asm.s deleted file mode 100644 index 05679d5c..00000000 --- a/arm9/modules/21/asm/mod21_02254A6C_asm.s +++ /dev/null @@ -1,171 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - .extern MOD21_02254B60 - .extern MOD21_02254BF4 - .extern MOD21_02254C14 - .extern MOD21_02254C40 - - thumb_func_start MOD21_02254C5C -MOD21_02254C5C: ; 0x02254C5C - push {r4, r5, lr} - sub sp, #0x1c - add r4, r0, #0 - ldr r0, [r4] - ldr r2, _02254D74 ; =0x04000280 - ldr r0, [r0] - mov r3, #0 - strh r3, [r2] - str r0, [r2, #0x10] - add r0, r2, #0 - mov r1, #0xa - add r0, #0x18 - str r1, [r0] - str r3, [r0, #4] - lsr r0, r2, #0xb -_02254C7A: - ldrh r1, [r2] - tst r1, r0 - bne _02254C7A - ldr r0, _02254D78 ; =0x040002A0 - add r3, r0, #0 - ldr r1, [r0] - sub r3, #0x20 - lsr r0, r0, #0xb -_02254C8A: - ldrh r2, [r3] - tst r2, r0 - bne _02254C8A - ldr r0, _02254D7C ; =0x040002A8 - add r2, r4, #0 - ldr r5, [r0] - mov r0, #4 - str r0, [sp] - mov r0, #9 - lsl r1, r1, #0x1a - str r0, [sp, #4] - add r2, #0x30 - str r2, [sp, #8] - lsr r1, r1, #0x18 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov r1, #0x28 - str r1, [sp, #0x14] - str r0, [sp, #0x18] - ldr r0, [r4, #4] - mov r1, #6 - mov r2, #3 - mov r3, #7 - bl FUN_02018170 - mov r0, #4 - str r0, [sp] - mov r0, #9 - add r1, r4, #0 - str r0, [sp, #4] - add r1, #0x30 - str r1, [sp, #8] - lsl r1, r5, #0x1a - lsr r1, r1, #0x18 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov r1, #0x28 - str r1, [sp, #0x14] - str r0, [sp, #0x18] - ldr r0, [r4, #4] - mov r1, #6 - mov r2, #8 - mov r3, #7 - bl FUN_02018170 - ldr r0, [r4] - ldr r2, _02254D74 ; =0x04000280 - ldr r0, [r0, #4] - mov r3, #0 - strh r3, [r2] - str r0, [r2, #0x10] - add r0, r2, #0 - mov r1, #0xa - add r0, #0x18 - str r1, [r0] - str r3, [r0, #4] - lsr r0, r2, #0xb -_02254D00: - ldrh r1, [r2] - tst r1, r0 - bne _02254D00 - ldr r0, _02254D78 ; =0x040002A0 - add r3, r0, #0 - ldr r1, [r0] - sub r3, #0x20 - lsr r0, r0, #0xb -_02254D10: - ldrh r2, [r3] - tst r2, r0 - bne _02254D10 - ldr r0, _02254D7C ; =0x040002A8 - add r2, r4, #0 - ldr r5, [r0] - mov r0, #4 - str r0, [sp] - mov r0, #9 - lsl r1, r1, #0x1a - str r0, [sp, #4] - add r2, #0x30 - str r2, [sp, #8] - lsr r1, r1, #0x18 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov r1, #0x28 - str r1, [sp, #0x14] - str r0, [sp, #0x18] - ldr r0, [r4, #4] - mov r1, #6 - mov r2, #0xf - mov r3, #7 - bl FUN_02018170 - mov r0, #4 - str r0, [sp] - mov r0, #9 - add r1, r4, #0 - str r0, [sp, #4] - add r1, #0x30 - str r1, [sp, #8] - lsl r1, r5, #0x1a - lsr r1, r1, #0x18 - str r1, [sp, #0xc] - mov r1, #0 - str r1, [sp, #0x10] - mov r1, #0x28 - str r1, [sp, #0x14] - str r0, [sp, #0x18] - ldr r0, [r4, #4] - mov r1, #6 - mov r2, #0x14 - mov r3, #7 - bl FUN_02018170 - add sp, #0x1c - pop {r4, r5, pc} - nop -_02254D74: .word 0x04000280 -_02254D78: .word 0x040002A0 -_02254D7C: .word 0x040002A8 - thumb_func_end MOD21_02254C5C - - .section .rodata - - .global MOD21_02254D90 -MOD21_02254D90: ; 0x02254D90 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global MOD21_02254DAC -MOD21_02254DAC: ; 0x02254DAC - .word 0x00, MOD21_02254B60, 0x00 - .word 0x01, MOD21_02254BF4, 0x00 - .word 0x02, MOD21_02254C14, 0x00 - .word 0x03, MOD21_02254C40, 0x00 - .word 0x00, 0x00000000, 0x00 diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h index 568ec26f..bae9cab6 100644 --- a/arm9/modules/21/include/mod21_02254A6C.h +++ b/arm9/modules/21/include/mod21_02254A6C.h @@ -15,6 +15,13 @@ struct UnkStruct02254A6C u32 Unk30[1]; }; +typedef struct UnkOverlayStruct1 +{ + u32 number; + BOOL (*func)(u32 param0, void *param1); + u32 Unk08; +} UnkOverlayStruct1; //todo should probably be in mod 20 header + BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1); void MOD21_02254AD4(void *param0, void *param1); void MOD21_02254B04(void *param0); @@ -26,5 +33,6 @@ BOOL MOD21_02254B60(u32 param0, void *param1); BOOL MOD21_02254BF4(u32 param0, void *param1); BOOL MOD21_02254C14(u32 param0, void *param1); BOOL MOD21_02254C40(u32 param0, void *param1); +void MOD21_02254C5C(UnkStruct02254A6C *param0); #endif //POKEDIAMOND_MOD21_02254A6C_H diff --git a/arm9/modules/21/src/mod21_02254A6C.c b/arm9/modules/21/src/mod21_02254A6C.c new file mode 100644 index 00000000..1dcbe4b8 --- /dev/null +++ b/arm9/modules/21/src/mod21_02254A6C.c @@ -0,0 +1,187 @@ +#include "global.h" +#include "heap.h" +#include "mod21_02254A6C.h" +#include "MI_memory.h" + +extern void MOD20_022536F4(u32 *param0, u32 param1); +extern u32 MOD20_02252D34(void); +extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4); +extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, void *param4, u32 param5, u32 param6); + +UnkOverlayStruct1 const MOD21_02254DAC[] = { + { 0, MOD21_02254B60, 0 }, + { 1, MOD21_02254BF4, 0 }, + { 2, MOD21_02254C14, 0 }, + { 3, MOD21_02254C40, 0 }, + { 0, NULL, 0 } +}; + +extern BOOL MOD20_02253794(void *param0, u32 param1); +extern BOOL MOD20_022537B8(void *param0); +extern UnkStruct02254A6C *MOD20_022538A0(void *param0); +extern BOOL MOD20_02253888(void *param0, void *param1); + +//todo datatype +u8 const MOD21_02254D90[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +extern void FUN_02016C18(u32 param0, u32 param1, void *param2, u32 param3); +extern void FUN_0200687C(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); +extern void FUN_020068C8(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); +extern void MOD20_02252D7C(u32 param0, u32 param1); +extern void FUN_02017CD0(u32 param0, u32 param1); +extern void FUN_020178A0(u32 param0, u32 param1); + +extern void FUN_02018170(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 *param6, u8 param7, u32 param8, u32 param9, u32 param10); + +extern void MOD11_02252DB4(u32 param0, u32 param1); + +THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) +{ + UnkStruct02254A6C *strct = (UnkStruct02254A6C *)AllocFromHeap(8, 3 << 8); + u32 sp4; + if (strct != NULL) + { + MOD20_022536F4(strct->Unk08, 8); + strct->Unk00 = param1; + strct->Unk04 = MOD20_02252D34(); + void *res = FUN_02006BDC(12, 0x19, 1, &sp4, 8); + if (res == 0) + { + FreeToHeap(strct); + return FALSE; + } + MOD21_02254AD4((void *)(sp4 + 0xc), strct->Unk30); + FreeToHeap(res); + param0->Unk00 = strct; + return TRUE; + } + return FALSE; +} + +THUMB_FUNC void MOD21_02254AD4(void *param0, void *param1) +{ + s32 i = 0; + for (u32 r6 = 9 << 6; i < 9; r6 -= 0x30) + { + MI_CpuCopy16(param0, param1, 0x40); + MI_CpuCopy16((void *)((u32)param0 + r6), (void *)((u32)param1 + 0x40), 0x10); + i++; + param0 = (void *)((u32)param0 + 0x40); + param1 = (void *)((u32)param1 + 0x50); + } +} + +THUMB_FUNC void MOD21_02254B04(void *param0) +{ + if (param0 != NULL) + { + FreeToHeap(param0); + } +} + +THUMB_FUNC void MOD21_02254B10(u32 *param0, u32 param1) +{ + MOD20_022537E0(MOD21_02254DAC, param1, param0, *param0, (void *)(param0 + 2), 2, 8); +} + +THUMB_FUNC BOOL MOD21_02254B34(void *param0, u32 param1) +{ + return MOD20_02253794((void *)((u32)param0 + 8), param1); +} + +THUMB_FUNC BOOL MOD21_02254B40(void *param0) +{ + return MOD20_022537B8((void *)((u32)param0 + 8)); +} + +THUMB_FUNC BOOL MOD21_02254B4C(void *param0) +{ + return MOD20_02253888((void *)((u32)MOD20_022538A0(param0) + 8), param0); +} + +THUMB_FUNC BOOL MOD21_02254B60(u32 param0, void *param1) +{ +#pragma unused (param0) + UnkStruct02254A6C *strct = MOD20_022538A0(param1); + FUN_02016C18(strct->Unk04, 6, MOD21_02254D90, 0); + FUN_0200687C(12, 23, strct->Unk04, 6, 0, 0, 1, 8); + FUN_020068C8(12, 24, strct->Unk04, 6, 0, 0, 1, 8); + MOD20_02252D7C(0, 0); + MOD21_02254C5C(strct); + FUN_02017CD0(strct->Unk04, 6); + u32 r3 = reg_GXS_DB_DISPCNT; + u32 r2 = reg_GXS_DB_DISPCNT; + vu32 tmp = r3; //unused? wtf + u32 r0 = ~0x1F00 & r2; + r2 = r3 << 19; //cast with shift? can't replicate both though + r3 = r2 >> 27; + r2 = 4 | r3; + r2 <<= 8; + r0 |= r2; + reg_GXS_DB_DISPCNT = r0; + return MOD21_02254B4C(param1); +} + +THUMB_FUNC BOOL MOD21_02254BF4(u32 param0, void *param1) +{ +#pragma unused (param0) + UnkStruct02254A6C *strct = MOD20_022538A0(param1); + MOD21_02254C5C(strct); + FUN_02017CD0(strct->Unk04, 6); + return MOD21_02254B4C(param1); +} + +THUMB_FUNC BOOL MOD21_02254C14(u32 param0, void *param1) +{ +#pragma unused (param0) + UnkStruct02254A6C *strct = MOD20_022538A0(param1); + if (strct->Unk00->Unk0C) + { + MOD11_02252DB4(0, 0); + } + else + { + MOD20_02252D7C(0, 0); + } + return MOD21_02254B4C(param1); +} + +THUMB_FUNC BOOL MOD21_02254C40(u32 param0, void *param1) +{ +#pragma unused (param0) + UnkStruct02254A6C *strct = MOD20_022538A0(param1); + FUN_020178A0(strct->Unk04, 6); + return MOD21_02254B4C(param1); +} + +THUMB_FUNC void MOD21_02254C5C(UnkStruct02254A6C *param0) +{ + u32 tmp = (u32)param0->Unk00->Unk00; + reg_CP_DIVCNT = 0; + (*(vu32 *)REG_DIV_NUMER_ADDR) = tmp; + reg_CP_DIV_DENOM = 10; + while (reg_CP_DIVCNT & ((u32)®_CP_DIVCNT >> 0xb)) { } + + u32 regaddr = (u32)®_CP_DIV_RESULT_L; + u32 divResult = *(u32 *)regaddr; + while (reg_CP_DIVCNT & (regaddr >> 0xb)) { } + + u32 divRemRes = reg_CP_DIVREM_RESULT_L; + FUN_02018170(param0->Unk04, 6, 3, 7, 4, 9, param0->Unk30, (u8)(divResult << 2), 0, 40, 9); + FUN_02018170(param0->Unk04, 6, 8, 7, 4, 9, param0->Unk30, (u8)(divRemRes << 2), 0, 40, 9); + + tmp = param0->Unk00->Unk04; + reg_CP_DIVCNT = 0; + (*(vu32 *)REG_DIV_NUMER_ADDR) = tmp; + reg_CP_DIV_DENOM = 10; + + while (reg_CP_DIVCNT & ((u32)®_CP_DIVCNT >> 0xb)) { } + + divResult = *(u32 *)regaddr; + while (reg_CP_DIVCNT & (regaddr >> 0xb)) { } + + divRemRes = reg_CP_DIVREM_RESULT_L; + FUN_02018170(param0->Unk04, 6, 15, 7, 4, 9, param0->Unk30, (u8)(divResult << 2), 0, 40, 9); + FUN_02018170(param0->Unk04, 6, 20, 7, 4, 9, param0->Unk30, (u8)(divRemRes << 2), 0, 40, 9); +} diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C_src.c deleted file mode 100644 index ef422905..00000000 --- a/arm9/modules/21/src/mod21_02254A6C_src.c +++ /dev/null @@ -1,145 +0,0 @@ -#include "global.h" -#include "heap.h" -#include "mod21_02254A6C.h" -#include "MI_memory.h" - -extern void MOD20_022536F4(u32 *param0, u32 param1); -extern u32 MOD20_02252D34(void); -extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4); -extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, void *param4, u32 param5, u32 param6); -extern void MOD21_02254DAC(void); -extern BOOL MOD20_02253794(void *param0, u32 param1); -extern BOOL MOD20_022537B8(void *param0); -extern UnkStruct02254A6C *MOD20_022538A0(void *param0); -extern BOOL MOD20_02253888(void *param0, void *param1); - -extern void MOD21_02254D90(void); - -extern void FUN_02016C18(u32 param0, u32 param1, void *param2, u32 param3); -extern void FUN_0200687C(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); -extern void FUN_020068C8(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7); -extern void MOD20_02252D7C(u32 param0, u32 param1); -extern void MOD21_02254C5C(UnkStruct02254A6C *param0); -extern void FUN_02017CD0(u32 param0, u32 param1); -extern void FUN_020178A0(u32 param0, u32 param1); - -extern void MOD11_02252DB4(u32 param0, u32 param1); - -THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1) -{ - UnkStruct02254A6C *strct = (UnkStruct02254A6C *)AllocFromHeap(8, 3 << 8); - u32 sp4; - if (strct != NULL) - { - MOD20_022536F4(strct->Unk08, 8); - strct->Unk00 = param1; - strct->Unk04 = MOD20_02252D34(); - void *res = FUN_02006BDC(12, 0x19, 1, &sp4, 8); - if (res == 0) - { - FreeToHeap(strct); - return FALSE; - } - MOD21_02254AD4((void *)(sp4 + 0xc), strct->Unk30); - FreeToHeap(res); - param0->Unk00 = strct; - return TRUE; - } - return FALSE; -} - -THUMB_FUNC void MOD21_02254AD4(void *param0, void *param1) -{ - s32 i = 0; - for (u32 r6 = 9 << 6; i < 9; r6 -= 0x30) - { - MI_CpuCopy16(param0, param1, 0x40); - MI_CpuCopy16((void *)((u32)param0 + r6), (void *)((u32)param1 + 0x40), 0x10); - i++; - param0 = (void *)((u32)param0 + 0x40); - param1 = (void *)((u32)param1 + 0x50); - } -} - -THUMB_FUNC void MOD21_02254B04(void *param0) -{ - if (param0 != NULL) - { - FreeToHeap(param0); - } -} - -THUMB_FUNC void MOD21_02254B10(u32 *param0, u32 param1) -{ - MOD20_022537E0(MOD21_02254DAC, param1, param0, *param0, (void *)(param0 + 2), 2, 8); -} - -THUMB_FUNC BOOL MOD21_02254B34(void *param0, u32 param1) -{ - return MOD20_02253794((void *)((u32)param0 + 8), param1); -} - -THUMB_FUNC BOOL MOD21_02254B40(void *param0) -{ - return MOD20_022537B8((void *)((u32)param0 + 8)); -} - -THUMB_FUNC BOOL MOD21_02254B4C(void *param0) -{ - return MOD20_02253888((void *)((u32)MOD20_022538A0(param0) + 8), param0); -} - -THUMB_FUNC BOOL MOD21_02254B60(u32 param0, void *param1) -{ -#pragma unused (param0) - UnkStruct02254A6C *strct = MOD20_022538A0(param1); - FUN_02016C18(strct->Unk04, 6, MOD21_02254D90, 0); - FUN_0200687C(12, 23, strct->Unk04, 6, 0, 0, 1, 8); - FUN_020068C8(12, 24, strct->Unk04, 6, 0, 0, 1, 8); - MOD20_02252D7C(0, 0); - MOD21_02254C5C(strct); - FUN_02017CD0(strct->Unk04, 6); - u32 r3 = reg_GXS_DB_DISPCNT; - u32 r2 = reg_GXS_DB_DISPCNT; - vu32 tmp = r3; //unused? wtf - u32 r0 = ~0x1F00 & r2; - r2 = r3 << 19; //cast with shift? can't replicate both though - r3 = r2 >> 27; - r2 = 4 | r3; - r2 <<= 8; - r0 |= r2; - reg_GXS_DB_DISPCNT = r0; - return MOD21_02254B4C(param1); -} - -THUMB_FUNC BOOL MOD21_02254BF4(u32 param0, void *param1) -{ -#pragma unused (param0) - UnkStruct02254A6C *strct = MOD20_022538A0(param1); - MOD21_02254C5C(strct); - FUN_02017CD0(strct->Unk04, 6); - return MOD21_02254B4C(param1); -} - -THUMB_FUNC BOOL MOD21_02254C14(u32 param0, void *param1) -{ -#pragma unused (param0) - UnkStruct02254A6C *strct = MOD20_022538A0(param1); - if (strct->Unk00->Unk0C) - { - MOD11_02252DB4(0, 0); - } - else - { - MOD20_02252D7C(0, 0); - } - return MOD21_02254B4C(param1); -} - -THUMB_FUNC BOOL MOD21_02254C40(u32 param0, void *param1) -{ -#pragma unused (param0) - UnkStruct02254A6C *strct = MOD20_022538A0(param1); - FUN_020178A0(strct->Unk04, 6); - return MOD21_02254B4C(param1); -} -- cgit v1.2.3