diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-11 08:15:46 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-11 08:18:56 -0400 |
commit | 0db97c387490270d29d1a09f3dc24270fb619da7 (patch) | |
tree | 28a5e7d6da158202086e5bbe62a41fdd14870ca3 | |
parent | 49e14283e13c146018f2a2785dfc77e0e1ff5368 (diff) |
Disassemble module 37
-rw-r--r-- | arm9/arm9.lcf | 28 | ||||
-rw-r--r-- | arm9/global.inc | 1 | ||||
-rw-r--r-- | arm9/modules/37/asm/module_37.s | 681 | ||||
-rw-r--r-- | arm9/src/main.c | 4 |
4 files changed, 708 insertions, 6 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 9af9503f..6c87f90a 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -1580,10 +1580,21 @@ SECTIONS { SDK_OVERLAY.MODULE_36.BSS_SIZE = SDK_OVERLAY.MODULE_36.BSS_END - SDK_OVERLAY.MODULE_36.BSS_START; } >> MODULE_36 - .MODULE.37: { + .MODULE.37 : + { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_37.START = .; - FILE_290000.o (.text) /* 0x28C000 */ + module_37.o (.text) + module_37.o (.rodata) + module_37.o (.init) + SDK_OVERLAY.MODULE_37.SINIT_START = .; + module_37.o (.ctor) + module_37.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_37.SINIT_END = .; + . = ALIGN(32); + module_37.o (.sdata) + module_37.o (.data) . = ALIGN(32); SDK_OVERLAY.MODULE_37.END = .; SDK_OVERLAY.MODULE_37.SIZE = SDK_OVERLAY.MODULE_37.END - SDK_OVERLAY.MODULE_37.START; @@ -1593,7 +1604,8 @@ SECTIONS { { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_37.BSS_START = .; - FILE_290000.o (.bss) + module_37.o (.sbss) + module_37.o (.bss) . = ALIGN(32); SDK_OVERLAY.MODULE_37.BSS_END = .; SDK_OVERLAY.MODULE_37.BSS_SIZE = SDK_OVERLAY.MODULE_37.BSS_END - SDK_OVERLAY.MODULE_37.BSS_START; @@ -2986,7 +2998,15 @@ SECTIONS { WRITEW SDK_OVERLAY_MODULE_36_ID; WRITEW 0; - OVERLAY_TABLE(MODULE_37, 37) + WRITEW SDK_OVERLAY_MODULE_37_ID; + WRITEW SDK_OVERLAY.MODULE_37.START; + WRITEW SDK_OVERLAY.MODULE_37.SIZE; + WRITEW SDK_OVERLAY.MODULE_37.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_37.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_37.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_37_ID; + WRITEW 0; + OVERLAY_TABLE(MODULE_38, 38) OVERLAY_TABLE(MODULE_39, 39) OVERLAY_TABLE(MODULE_40, 40) diff --git a/arm9/global.inc b/arm9/global.inc index aa4d2a1b..a3c1c70e 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2662,6 +2662,7 @@ .extern MOD20_02253A04
.extern MOD20_02253FAC
.extern MOD20_02253FB4
+.extern MOD20_02252BB8
.extern MOD05_021D74E0
.extern FUN_021D7660
.extern FUN_021D76AC
diff --git a/arm9/modules/37/asm/module_37.s b/arm9/modules/37/asm/module_37.s new file mode 100644 index 00000000..3cbe599b --- /dev/null +++ b/arm9/modules/37/asm/module_37.s @@ -0,0 +1,681 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD37_02254840 +MOD37_02254840: ; 0x02254840 + ldr r3, _02254848 ; =MOD20_02252978 + ldr r0, _0225484C ; =MOD37_02254854 + ldr r1, _02254850 ; =MOD37_02254934 + bx r3 + .align 2, 0 +_02254848: .word MOD20_02252978 +_0225484C: .word MOD37_02254854 +_02254850: .word MOD37_02254934 + thumb_func_end MOD37_02254840 + + thumb_func_start MOD37_02254854 +MOD37_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x14 + add r7, r2, #0 + str r3, [sp] + bl FUN_02016998 + add r4, r0, #0 + beq _02254892 + ldr r3, [sp] + add r1, r6, #0 + add r2, r7, #0 + bl MOD37_0225489C + cmp r0, #0 + beq _0225488C + ldr r0, _02254898 ; =MOD37_02254900 + 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 FUN_02016A18 +_02254892: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + nop +_02254898: .word MOD37_02254900 + thumb_func_end MOD37_02254854 + + thumb_func_start MOD37_0225489C +MOD37_0225489C: ; 0x0225489C + push {r4, r5, r6, lr} + add r5, r0, #0 + add r4, r1, #0 + add r1, r5, #0 + add r6, r2, #0 + add r0, r3, #0 + add r1, #8 + mov r2, #4 + str r3, [r5, #4] + bl FUN_02089418 + cmp r0, #0 + bne _022548BA + mov r0, #1 + str r0, [r5, #8] +_022548BA: + add r0, r5, #0 + add r1, r5, #0 + add r0, #0xc + add r1, #8 + add r2, r6, #0 + bl MOD37_02254A54 + cmp r0, #0 + beq _022548DA + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + str r4, [r5, #0x10] + mov r0, #1 + pop {r4, r5, r6, pc} +_022548DA: + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD37_0225489C + + thumb_func_start MOD37_022548E0 +MOD37_022548E0: ; 0x022548E0 + push {r4, lr} + add r4, r0, #0 + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #8 + mov r2, #4 + bl FUN_020893F0 + ldr r0, [r4, #0xc] + bl MOD37_02254B0C + add r0, r4, #0 + bl FUN_02016A18 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD37_022548E0 + + thumb_func_start MOD37_02254900 +MOD37_02254900: ; 0x02254900 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldrb r1, [r4] + add r5, r0, #0 + cmp r1, #3 + bhs _0225492C + lsl r2, r1, #2 + ldr r1, _02254930 ; =0x02254D28 + add r0, r4, #0 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _0225492C + add r0, r4, #0 + bl MOD37_022548E0 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0x10] + bl MOD20_022529A0 +_0225492C: + pop {r3, r4, r5, pc} + nop +_02254930: .word 0x02254D28 + thumb_func_end MOD37_02254900 + + thumb_func_start MOD37_02254934 +MOD37_02254934: ; 0x02254934 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD37_02254934 + + thumb_func_start MOD37_0225493C +MOD37_0225493C: ; 0x0225493C + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254944 + b _02254946 +_02254944: + mov r1, #2 +_02254946: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD37_0225493C + + thumb_func_start MOD37_02254950 +MOD37_02254950: ; 0x02254950 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254960 + cmp r0, #1 + beq _02254970 + b _0225498A +_02254960: + ldr r0, [r4, #0xc] + mov r1, #0 + bl MOD37_02254B20 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _0225498A +_02254970: + ldr r0, [r4, #0xc] + mov r1, #0 + bl MOD37_02254B44 + cmp r0, #0 + beq _0225498A + ldr r0, [r4, #0x10] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD37_0225493C +_0225498A: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD37_02254950 + + thumb_func_start MOD37_02254990 +MOD37_02254990: ; 0x02254990 + push {r4, lr} + add r4, r0, #0 + ldrb r1, [r4, #2] + cmp r1, #0 + beq _022549A0 + mov r1, #2 + bl MOD37_0225493C +_022549A0: + ldrb r0, [r4, #1] + cmp r0, #0 + beq _022549AC + cmp r0, #1 + beq _022549CE + b _022549DE +_022549AC: + bl MOD37_02254A18 + cmp r0, #0 + beq _022549DE + bl FUN_0201BA60 + mov r1, #1 + and r0, r1 + str r0, [r4, #8] + ldr r0, [r4, #0xc] + mov r1, #2 + bl MOD37_02254B20 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _022549DE +_022549CE: + ldr r0, [r4, #0xc] + mov r1, #2 + bl MOD37_02254B44 + cmp r0, #0 + beq _022549DE + mov r0, #0 + strb r0, [r4, #1] +_022549DE: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD37_02254990 + + thumb_func_start MOD37_022549E4 +MOD37_022549E4: ; 0x022549E4 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _022549F4 + cmp r0, #1 + beq _02254A04 + b _02254A12 +_022549F4: + ldr r0, [r4, #0xc] + mov r1, #1 + bl MOD37_02254B20 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254A12 +_02254A04: + ldr r0, [r4, #0xc] + bl MOD37_02254B50 + cmp r0, #0 + beq _02254A12 + mov r0, #1 + pop {r4, pc} +_02254A12: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD37_022549E4 + + thumb_func_start MOD37_02254A18 +MOD37_02254A18: ; 0x02254A18 + push {r3, lr} + sub sp, #8 + add r0, sp, #4 + add r1, sp, #0 + bl MOD20_02252BB8 + cmp r0, #0 + beq _02254A4E + ldr r1, [sp, #4] + mov r0, #0x70 + sub r0, r0, r1 + add r3, r0, #0 + mul r3, r0 + ldr r1, [sp] + mov r0, #0x90 + sub r2, r0, r1 + add r1, r2, #0 + mul r1, r2 + str r1, [sp] + add r1, r3, r1 + lsl r0, r0, #2 + str r3, [sp, #4] + cmp r1, r0 + bhs _02254A4E + add sp, #8 + mov r0, #1 + pop {r3, pc} +_02254A4E: + mov r0, #0 + add sp, #8 + pop {r3, pc} + thumb_func_end MOD37_02254A18 + + thumb_func_start MOD37_02254A54 +MOD37_02254A54: ; 0x02254A54 + push {r4, r5, r6, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x48 + bl FUN_02016998 + add r4, r0, #0 + beq _02254A94 + add r0, #8 + mov r1, #4 + bl MOD20_022536F4 + str r6, [r4] + bl MOD20_02252D34 + str r0, [r4, #4] + bl MOD20_02252D24 + str r0, [r4, #0x20] + add r0, r4, #0 + bl MOD37_02254AA0 + ldr r1, _02254A98 ; =0xFFFF5800 + ldr r0, _02254A9C ; =0x02254DA0 + str r1, [r0] + mov r1, #0xb + lsl r1, r1, #8 + str r1, [r0, #4] + str r4, [r5] + mov r0, #1 + pop {r4, r5, r6, pc} +_02254A94: + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 +_02254A98: .word 0xFFFF5800 +_02254A9C: .word 0x02254DA0 + thumb_func_end MOD37_02254A54 + + thumb_func_start MOD37_02254AA0 +MOD37_02254AA0: ; 0x02254AA0 + push {r3, r4, lr} + sub sp, #0xc + mov r3, #0 + str r3, [sp] + mov r2, #1 + add r4, r0, #0 + str r2, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r0, #0xc + mov r1, #0x39 + bl FUN_02006A34 + mov r0, #8 + str r0, [sp] + add r0, r4, #0 + add r0, #0x28 + mov r1, #0xc + mov r2, #0x37 + mov r3, #0x38 + bl MOD20_02253FBC + add r2, r4, #0 + ldr r0, [r4, #0x20] + ldr r1, _02254AF0 ; =0x02254D34 + add r2, #0x28 + bl MOD20_02253E74 + str r0, [r4, #0x24] + ldr r0, [r4] + ldr r0, [r0] + cmp r0, #0 + bne _02254AEA + ldr r0, [r4, #0x24] + mov r1, #2 + bl MOD20_02253F28 +_02254AEA: + add sp, #0xc + pop {r3, r4, pc} + nop +_02254AF0: .word 0x02254D34 + thumb_func_end MOD37_02254AA0 + + thumb_func_start MOD37_02254AF4 +MOD37_02254AF4: ; 0x02254AF4 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x20] + ldr r1, [r4, #0x24] + bl MOD20_02253F14 + add r4, #0x28 + add r0, r4, #0 + bl MOD20_02254014 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD37_02254AF4 + + thumb_func_start MOD37_02254B0C +MOD37_02254B0C: ; 0x02254B0C + push {r4, lr} + add r4, r0, #0 + beq _02254B1C + bl MOD37_02254AF4 + add r0, r4, #0 + bl FUN_02016A18 +_02254B1C: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD37_02254B0C + + thumb_func_start MOD37_02254B20 +MOD37_02254B20: ; 0x02254B20 + 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, _02254B40 ; =0x02254D60 + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254B40: .word 0x02254D60 + thumb_func_end MOD37_02254B20 + + thumb_func_start MOD37_02254B44 +MOD37_02254B44: ; 0x02254B44 + ldr r3, _02254B4C ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254B4C: .word MOD20_02253794 + thumb_func_end MOD37_02254B44 + + thumb_func_start MOD37_02254B50 +MOD37_02254B50: ; 0x02254B50 + ldr r3, _02254B58 ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254B58: .word MOD20_022537B8 + thumb_func_end MOD37_02254B50 + + thumb_func_start MOD37_02254B5C +MOD37_02254B5C: ; 0x02254B5C + 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 MOD37_02254B5C + + thumb_func_start MOD37_02254B70 +MOD37_02254B70: ; 0x02254B70 + 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, _02254BF4 ; =0x02254D44 + 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, #0x36 + 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, #0x35 + mov r3, #6 + bl FUN_020068C8 + mov r0, #0 + add r1, r0, #0 + bl MOD20_02252D7C + ldr r0, [r5, #4] + mov r1, #6 + bl FUN_02017CD0 + ldr r1, _02254BF8 ; =0x04001000 + ldr r0, _02254BFC ; =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 MOD37_02254B5C + add sp, #0x14 + pop {r4, r5, pc} + nop +_02254BF4: .word 0x02254D44 +_02254BF8: .word 0x04001000 +_02254BFC: .word 0xFFFFE0FF + thumb_func_end MOD37_02254B70 + + thumb_func_start MOD37_02254C00 +MOD37_02254C00: ; 0x02254C00 + push {r3, r4, r5, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r5, #0 + bl MOD20_022538AC + cmp r0, #0 + beq _02254C1C + cmp r0, #1 + beq _02254C26 + pop {r3, r4, r5, pc} +_02254C1C: + mov r0, #1 + str r0, [r4, #0x44] + add r0, r5, #0 + bl MOD20_022538B0 +_02254C26: + add r0, r4, #0 + mov r1, #2 + bl MOD37_02254B44 + cmp r0, #0 + beq _02254C40 + ldr r0, [r4, #4] + mov r1, #6 + bl FUN_020178A0 + add r0, r5, #0 + bl MOD37_02254B5C +_02254C40: + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD37_02254C00 + + thumb_func_start MOD37_02254C44 +MOD37_02254C44: ; 0x02254C44 + push {r4, r5, r6, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r5, #0 + bl MOD20_022538A4 + add r6, r0, #0 + add r0, r5, #0 + bl MOD20_022538AC + cmp r0, #0 + beq _02254C6C + cmp r0, #1 + beq _02254C90 + cmp r0, #2 + beq _02254D10 + pop {r4, r5, r6, pc} +_02254C6C: + ldr r0, _02254D18 ; =0x00000675 + bl MOD20_02252B28 + ldr r0, [r4, #0x24] + mov r1, #0 + bl MOD20_02253F28 + mov r0, #9 + lsl r0, r0, #0x10 + str r0, [r4, #0x3c] + ldr r0, _02254D1C ; =0x02254DA0 + ldr r0, [r0] + str r0, [r4, #0x40] + mov r0, #0 + str r0, [r4, #0x44] + add r0, r5, #0 + bl MOD20_022538B0 +_02254C90: + ldr r0, [r4, #0x44] + cmp r0, #0 + beq _02254C9E + add r0, r5, #0 + bl MOD37_02254B5C + pop {r4, r5, r6, pc} +_02254C9E: + ldr r1, [r4, #0x3c] + ldr r0, [r4, #0x40] + add r0, r1, r0 + str r0, [r4, #0x3c] + ldr r0, _02254D1C ; =0x02254DA0 + ldr r1, [r4, #0x40] + ldr r0, [r0, #4] + add r1, r1, r0 + str r1, [r4, #0x40] + cmp r1, #0 + ble _02254D02 + mov r0, #9 + ldr r2, [r4, #0x3c] + lsl r0, r0, #0x10 + cmp r2, r0 + blt _02254D02 + mov r0, #0x38 + mul r0, r1 + mov r1, #0x64 + bl _s32_div_f + neg r1, r0 + ldr r0, _02254D20 ; =0xFFFFE000 + str r1, [r4, #0x40] + cmp r1, r0 + ldr r0, _02254D24 ; =0x00000676 + bge _02254CE0 + bl MOD20_02252B28 + mov r0, #9 + lsl r0, r0, #0x10 + str r0, [r4, #0x3c] + b _02254D02 +_02254CE0: + bl MOD20_02252B28 + ldr r0, [r6] + cmp r0, #0 + beq _02254CEE + mov r1, #1 + b _02254CF0 +_02254CEE: + mov r1, #2 +_02254CF0: + ldr r0, [r4, #0x24] + bl MOD20_02253F28 + mov r0, #9 + lsl r0, r0, #0x10 + str r0, [r4, #0x3c] + add r0, r5, #0 + bl MOD20_022538B0 +_02254D02: + mov r1, #7 + ldr r0, [r4, #0x24] + ldr r2, [r4, #0x3c] + lsl r1, r1, #0x10 + bl MOD20_02253F64 + pop {r4, r5, r6, pc} +_02254D10: + add r0, r5, #0 + bl MOD37_02254B5C + pop {r4, r5, r6, pc} + .align 2, 0 +_02254D18: .word 0x00000675 +_02254D1C: .word 0x02254DA0 +_02254D20: .word 0xFFFFE000 +_02254D24: .word 0x00000676 + thumb_func_end MOD37_02254C44 + + .section .rodata + ; 0x02254D28 + .incbin "baserom.nds", 0x2904E8, 0x68 + + .section .sinit + .word MOD37_02254840 + + .section .bss + ; 0x02254DA0 + .space 8 diff --git a/arm9/src/main.c b/arm9/src/main.c index f16b16ff..b7059e4d 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -63,8 +63,8 @@ void FUN_02000F4C(int arg0, int arg1); extern BOOL FUN_02006234(struct Unk21DBE18 *, s32 *, int); extern BOOL FUN_02006290(int); extern void FUN_02006260(int); -int FUN_02033678(void); -BOOL FUN_020335B8(void); +extern BOOL FUN_02033678(void); +extern int FUN_020335B8(void); extern struct Unk21DBE18 gUnk021DBE18; extern struct Unk21DBE18 gUnk021D76C8; |