summaryrefslogtreecommitdiff
path: root/arm9/modules/21/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/modules/21/src')
-rw-r--r--arm9/modules/21/src/mod21_02254A6C.c (renamed from arm9/modules/21/src/mod21_02254A6C_src.c)48
1 files changed, 45 insertions, 3 deletions
diff --git a/arm9/modules/21/src/mod21_02254A6C_src.c b/arm9/modules/21/src/mod21_02254A6C.c
index ef422905..1dcbe4b8 100644
--- a/arm9/modules/21/src/mod21_02254A6C_src.c
+++ b/arm9/modules/21/src/mod21_02254A6C.c
@@ -7,22 +7,33 @@ 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);
+
+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);
-extern void MOD21_02254D90(void);
+//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 MOD21_02254C5C(UnkStruct02254A6C *param0);
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)
@@ -143,3 +154,34 @@ THUMB_FUNC BOOL MOD21_02254C40(u32 param0, void *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)&reg_CP_DIVCNT >> 0xb)) { }
+
+ u32 regaddr = (u32)&reg_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)&reg_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);
+}