summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/modules/21/asm/mod21_02254854_asm.s63
-rw-r--r--arm9/modules/21/include/mod21_02254854.h15
-rw-r--r--arm9/modules/21/src/mod21_02254854_src.c46
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(&param0->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;
+}