diff options
author | Revo <projectrevotpp@hotmail.com> | 2020-12-11 16:16:25 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-11 16:16:25 -0500 |
commit | d45ebc4547e7d8e253f848a010bf6c430a55ba75 (patch) | |
tree | ed5a090638ecf4e2f7e437af16cfc416a2af28df | |
parent | 80caebd738c642db675a37685a2d89338196dd35 (diff) | |
parent | 12c64ee79eabced2a1cc1fc83209be37142bc44c (diff) |
Merge pull request #304 from red031000/master
decompile mod21
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | arm9/arm9.lsf | 1 | ||||
-rw-r--r-- | arm9/modules/21/asm/mod21_02254854.s | 312 | ||||
-rw-r--r-- | arm9/modules/21/asm/mod21_02254A6C.s | 427 | ||||
-rw-r--r-- | arm9/modules/21/include/mod21_02254854.h | 30 | ||||
-rw-r--r-- | arm9/modules/21/include/mod21_02254A6C.h | 38 | ||||
-rw-r--r-- | arm9/modules/21/src/mod21_02254854.c | 199 | ||||
-rw-r--r-- | arm9/modules/21/src/mod21_02254A6C.c | 187 | ||||
-rw-r--r-- | arm9/modules/21/src/module_21_sinit.c | 13 | ||||
-rw-r--r-- | arm9/src/unk_0200CA44.c | 20 | ||||
-rw-r--r-- | include/unk_0200CA44.h | 8 |
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 *)¶m0->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)®_CP_DIVCNT >> 0xb)) { } + + u32 regaddr = (u32)®_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)®_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 |