diff options
-rw-r--r-- | arm9/modules/21/asm/mod21_02254854_asm.s | 63 | ||||
-rw-r--r-- | arm9/modules/21/include/mod21_02254854.h | 15 | ||||
-rw-r--r-- | 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; +} |