summaryrefslogtreecommitdiff
path: root/arm9
diff options
context:
space:
mode:
Diffstat (limited to 'arm9')
-rw-r--r--arm9/arm9.lsf3
-rw-r--r--arm9/modules/21/asm/mod21_02254A6C_asm.s171
-rw-r--r--arm9/modules/21/include/mod21_02254A6C.h8
-rw-r--r--arm9/modules/21/src/mod21_02254A6C.c (renamed from arm9/modules/21/src/mod21_02254A6C_src.c)48
4 files changed, 54 insertions, 176 deletions
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_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);
+}