summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt2
-rw-r--r--arm9/arm9.lsf1
-rw-r--r--arm9/modules/21/asm/mod21_02254854.s312
-rw-r--r--arm9/modules/21/asm/mod21_02254A6C.s427
-rw-r--r--arm9/modules/21/include/mod21_02254854.h30
-rw-r--r--arm9/modules/21/include/mod21_02254A6C.h38
-rw-r--r--arm9/modules/21/src/mod21_02254854.c199
-rw-r--r--arm9/modules/21/src/mod21_02254A6C.c187
-rw-r--r--arm9/modules/21/src/module_21_sinit.c13
-rw-r--r--arm9/src/unk_0200CA44.c20
-rw-r--r--include/unk_0200CA44.h8
11 files changed, 469 insertions, 768 deletions
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..d77a4c21 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.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_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/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h
new file mode 100644
index 00000000..26501f35
--- /dev/null
+++ b/arm9/modules/21/include/mod21_02254854.h
@@ -0,0 +1,30 @@
+#ifndef POKEDIAMOND_MOD21_02254854_H
+#define POKEDIAMOND_MOD21_02254854_H
+
+#include "nitro/types.h"
+#include "mod21_02254A6C.h"
+
+typedef struct UnkStruct02254854
+{
+ u8 bytearray[8];
+ u8 padding0[8];
+ BOOL Unk10;
+ u32 Unk14[2];
+ u8 padding1[4];
+ u32 Unk20;
+ void *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);
+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);
+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/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h
new file mode 100644
index 00000000..bae9cab6
--- /dev/null
+++ b/arm9/modules/21/include/mod21_02254A6C.h
@@ -0,0 +1,38 @@
+#ifndef POKEDIAMOND_MOD21_02254A6C_H
+#define POKEDIAMOND_MOD21_02254A6C_H
+
+#include "nitro/types.h"
+
+typedef struct UnkStruct02254A6C UnkStruct02254A6C;
+
+struct UnkStruct02254A6C
+{
+ UnkStruct02254A6C *Unk00;
+ u32 Unk04;
+ u32 Unk08[1];
+ u32 Unk0C;
+ u8 padding0[0x20];
+ 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);
+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);
+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_02254854.c b/arm9/modules/21/src/mod21_02254854.c
new file mode 100644
index 00000000..fe285936
--- /dev/null
+++ b/arm9/modules/21/src/mod21_02254854.c
@@ -0,0 +1,199 @@
+#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 MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4);
+extern void MOD20_02252C14(u32 param0, BOOL param1);
+
+extern void MOD20_02254198(BOOL param0);
+extern void MOD20_022529A0(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((UnkStruct02254A6C *)&param0->Unk24, param0->Unk14)) //todo fix
+ {
+ 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_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)&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);
+}
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 2af569ec..00000000
--- a/arm9/modules/21/src/module_21_sinit.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "global.h"
-
-extern void Poketch_InitApp(void *func1, void *func2);
-extern void MOD21_02254854();
-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 fc4656b2..fd703cd3 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 (*)(u32, 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)(u32, 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)(u32, 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)(u32, 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)(u32, 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..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
-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)(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