diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-11 17:22:54 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-11 17:22:54 -0400 |
commit | bf8f421169262a7f634de5a1b291a8ac407be2d9 (patch) | |
tree | bc085b92b087047060371305ea21a2e48e5d2c3b | |
parent | 72753a7b4b6bea9b35314dff70995fb7d415413a (diff) |
Disassemble module 39
-rw-r--r-- | arm9/arm9.lcf | 28 | ||||
-rw-r--r-- | arm9/global.inc | 1 | ||||
-rw-r--r-- | arm9/modules/01/src/module_01.cpp | 2 | ||||
-rw-r--r-- | arm9/modules/39/asm/module_39.s | 1457 |
4 files changed, 1483 insertions, 5 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 201fbfe5..9eb19eb3 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -1642,10 +1642,21 @@ SECTIONS { SDK_OVERLAY.MODULE_38.BSS_SIZE = SDK_OVERLAY.MODULE_38.BSS_END - SDK_OVERLAY.MODULE_38.BSS_START; } >> MODULE_38 - .MODULE.39: { + .MODULE.39 : + { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_39.START = .; - FILE_291200.o (.text) /* 0x28D200 */ + module_39.o (.text) + module_39.o (.rodata) + module_39.o (.init) + // SDK_OVERLAY.MODULE_39.SINIT_START = .; + module_39.o (.ctor) + module_39.o (.sinit) + // WRITEW 0; + // SDK_OVERLAY.MODULE_39.SINIT_END = .; + . = ALIGN(32); + module_39.o (.sdata) + module_39.o (.data) . = ALIGN(32); SDK_OVERLAY.MODULE_39.END = .; SDK_OVERLAY.MODULE_39.SIZE = SDK_OVERLAY.MODULE_39.END - SDK_OVERLAY.MODULE_39.START; @@ -1655,7 +1666,8 @@ SECTIONS { { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_39.BSS_START = .; - FILE_291200.o (.bss) + module_39.o (.sbss) + module_39.o (.bss) . = ALIGN(32); SDK_OVERLAY.MODULE_39.BSS_END = .; SDK_OVERLAY.MODULE_39.BSS_SIZE = SDK_OVERLAY.MODULE_39.BSS_END - SDK_OVERLAY.MODULE_39.BSS_START; @@ -3028,7 +3040,15 @@ SECTIONS { WRITEW SDK_OVERLAY_MODULE_38_ID; WRITEW 0; - OVERLAY_TABLE(MODULE_39, 39) + WRITEW SDK_OVERLAY_MODULE_39_ID; + WRITEW SDK_OVERLAY.MODULE_39.START; + WRITEW SDK_OVERLAY.MODULE_39.SIZE; + WRITEW SDK_OVERLAY.MODULE_39.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_39.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_39.SINIT_END; + WRITEW SDK_OVERLAY_MODULE_39_ID; + WRITEW 0; + OVERLAY_TABLE(MODULE_40, 40) OVERLAY_TABLE(MODULE_41, 41) OVERLAY_TABLE(MODULE_42, 42) diff --git a/arm9/global.inc b/arm9/global.inc index a3c1c70e..c79de602 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2658,6 +2658,7 @@ .extern FUN_020C6034
.extern FUN_020C605C
.extern MOD05_021EC464
+.extern MOD05_021ED9B4
.extern MOD05_021EC7B4
.extern MOD20_02253A04
.extern MOD20_02253FAC
diff --git a/arm9/modules/01/src/module_01.cpp b/arm9/modules/01/src/module_01.cpp index 21b371e0..9da5f8d5 100644 --- a/arm9/modules/01/src/module_01.cpp +++ b/arm9/modules/01/src/module_01.cpp @@ -8,4 +8,4 @@ public: THUMB_FUNC Unk021D7500() { unk4++; } }; -static class Unk021D7500 UNK_021D7500; +static Unk021D7500 UNK_021D7500; diff --git a/arm9/modules/39/asm/module_39.s b/arm9/modules/39/asm/module_39.s new file mode 100644 index 00000000..92d51179 --- /dev/null +++ b/arm9/modules/39/asm/module_39.s @@ -0,0 +1,1457 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD39_02254840 +MOD39_02254840: ; 0x02254840 + ldr r3, _02254848 ; =MOD20_02252978 + ldr r0, _0225484C ; =MOD39_02254854 + ldr r1, _02254850 ; =MOD39_022549D4 + bx r3 + .align 2, 0 +_02254848: .word MOD20_02252978 +_0225484C: .word MOD39_02254854 +_02254850: .word MOD39_022549D4 + thumb_func_end MOD39_02254840 + + thumb_func_start MOD39_02254854 +MOD39_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x68 + 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 MOD39_0225489C + cmp r0, #0 + beq _0225488C + ldr r0, _02254898 ; =MOD39_02254998 + 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 MOD39_02254998 + thumb_func_end MOD39_02254854 + + thumb_func_start MOD39_0225489C +MOD39_0225489C: ; 0x0225489C + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + str r0, [sp, #4] + add r0, r1, #0 + str r1, [sp, #8] + str r2, [sp, #0xc] + bl MOD20_02252C40 + bl FUN_0206BB1C + str r0, [sp, #0x10] + bl FUN_0206B9AC + ldr r1, [sp, #4] + mov r6, #0 + add r1, #0x34 + strb r0, [r1] + ldr r0, [sp, #4] + add r0, #0x34 + ldrb r0, [r0] + cmp r0, #0 + ble _02254906 + ldr r4, [sp, #4] + add r5, r4, #0 +_022548CC: + ldr r0, [sp, #0x10] + add r1, r6, #0 + bl FUN_0206B9B0 + add r7, r0, #0 + bl FUN_0206B688 + str r0, [r4, #4] + add r0, r7, #0 + mov r1, #5 + mov r2, #0 + bl FUN_020671BC + strh r0, [r5, #0x1c] + add r0, r7, #0 + mov r1, #0x70 + mov r2, #0 + bl FUN_020671BC + strh r0, [r5, #0x28] + ldr r0, [sp, #4] + str r7, [r4, #0x48] + add r0, #0x34 + ldrb r0, [r0] + add r6, r6, #1 + add r4, r4, #4 + add r5, r5, #2 + cmp r6, r0 + blt _022548CC +_02254906: + ldr r0, [sp, #4] + mov r1, #0 + add r0, #0x36 + strb r1, [r0] + ldr r0, [sp, #4] + add r0, #0x34 + ldrb r0, [r0] + cmp r0, #1 + bls _0225491A + mov r1, #1 +_0225491A: + ldr r0, [sp, #4] + ldr r2, [sp, #0xc] + add r0, #0x37 + strb r1, [r0] + ldr r0, [sp, #4] + ldr r1, [sp, #4] + add r0, #0x38 + add r1, r1, #4 + bl MOD39_02254C1C + cmp r0, #0 + beq _02254964 + ldr r0, [sp, #4] + mov r1, #0 + strb r1, [r0] + strb r1, [r0, #1] + strb r1, [r0, #2] + mov r0, #8 + str r0, [sp] + ldr r0, _0225496C ; =0x02255300 + ldr r2, _02254970 ; =MOD39_0225498C + ldr r3, [sp, #4] + mov r1, #3 + bl MOD20_02254130 + ldr r1, [sp, #4] + str r0, [r1, #0x40] + ldr r0, [sp, #4] + mov r1, #0 + add r0, #0x46 + strh r1, [r0] + ldr r1, [sp, #8] + ldr r0, [sp, #4] + add sp, #0x14 + str r1, [r0, #0x3c] + mov r0, #1 + pop {r4, r5, r6, r7, pc} +_02254964: + mov r0, #0 + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + nop +_0225496C: .word 0x02255300 +_02254970: .word MOD39_0225498C + thumb_func_end MOD39_0225489C + + thumb_func_start MOD39_02254974 +MOD39_02254974: ; 0x02254974 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x40] + bl MOD20_02254198 + ldr r0, [r4, #0x38] + bl MOD39_02254C58 + add r0, r4, #0 + bl FUN_02016A18 + pop {r4, pc} + thumb_func_end MOD39_02254974 + + thumb_func_start MOD39_0225498C +MOD39_0225498C: ; 0x0225498C + add r2, r3, #0 + add r2, #0x44 + strh r0, [r2] + add r3, #0x46 + strh r1, [r3] + bx lr + thumb_func_end MOD39_0225498C + + thumb_func_start MOD39_02254998 +MOD39_02254998: ; 0x02254998 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldrb r0, [r4] + cmp r0, #3 + bhs _022549CE + ldr r0, [r4, #0x3c] + ldr r1, [r4, #0x40] + bl MOD20_02252C14 + ldrb r1, [r4] + add r0, r4, #0 + lsl r2, r1, #2 + ldr r1, _022549D0 ; =0x0225530C + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _022549CE + add r0, r4, #0 + bl MOD39_02254974 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0x3c] + bl MOD20_022529A0 +_022549CE: + pop {r3, r4, r5, pc} + .align 2, 0 +_022549D0: .word 0x0225530C + thumb_func_end MOD39_02254998 + + thumb_func_start MOD39_022549D4 +MOD39_022549D4: ; 0x022549D4 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD39_022549D4 + + thumb_func_start MOD39_022549DC +MOD39_022549DC: ; 0x022549DC + ldrb r2, [r0, #2] + cmp r2, #0 + bne _022549E4 + b _022549E6 +_022549E4: + mov r1, #2 +_022549E6: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD39_022549DC + + thumb_func_start MOD39_022549F0 +MOD39_022549F0: ; 0x022549F0 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254A00 + cmp r0, #1 + beq _02254A10 + b _02254A2A +_02254A00: + ldr r0, [r4, #0x38] + mov r1, #0 + bl MOD39_02254DA4 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254A2A +_02254A10: + ldr r0, [r4, #0x38] + mov r1, #0 + bl MOD39_02254DC8 + cmp r0, #0 + beq _02254A2A + ldr r0, [r4, #0x3c] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD39_022549DC +_02254A2A: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD39_022549F0 + + thumb_func_start MOD39_02254A30 +MOD39_02254A30: ; 0x02254A30 + push {r4, lr} + add r4, r0, #0 + ldrb r1, [r4, #2] + cmp r1, #0 + beq _02254A44 + mov r1, #2 + bl MOD39_022549DC + mov r0, #0 + pop {r4, pc} +_02254A44: + ldrb r1, [r4, #1] + cmp r1, #3 + bhi _02254B48 + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_02254A56: ; jump table + .short _02254A5E - _02254A56 - 2 ; case 0 + .short _02254ACC - _02254A56 - 2 ; case 1 + .short _02254ADC - _02254A56 - 2 ; case 2 + .short _02254B38 - _02254A56 - 2 ; case 3 +_02254A5E: + add r1, r4, #0 + add r1, #0x46 + ldrh r1, [r1] + cmp r1, #1 + bne _02254B48 + add r1, r4, #0 + add r1, #0x44 + ldrh r1, [r1] + cmp r1, #0 + beq _02254AA8 + cmp r1, #1 + beq _02254A7C + cmp r1, #2 + beq _02254A92 + b _02254AC4 +_02254A7C: + bl MOD39_02254B50 + cmp r0, #0 + beq _02254AC4 + ldr r0, [r4, #0x38] + mov r1, #4 + bl MOD39_02254DA4 + mov r0, #1 + strb r0, [r4, #1] + b _02254AC4 +_02254A92: + bl MOD39_02254B9C + cmp r0, #0 + beq _02254AC4 + ldr r0, [r4, #0x38] + mov r1, #5 + bl MOD39_02254DA4 + mov r0, #1 + strb r0, [r4, #1] + b _02254AC4 +_02254AA8: + add r0, #0x34 + ldrb r0, [r0] + cmp r0, #1 + bls _02254ABE + ldr r0, [r4, #0x38] + mov r1, #2 + bl MOD39_02254DA4 + mov r0, #2 + strb r0, [r4, #1] + b _02254AC4 +_02254ABE: + ldr r0, _02254B4C ; =0x0000066E + bl MOD20_02252B28 +_02254AC4: + mov r0, #0 + add r4, #0x46 + strh r0, [r4] + b _02254B48 +_02254ACC: + ldr r0, [r4, #0x38] + bl MOD39_02254DD4 + cmp r0, #0 + beq _02254B48 + mov r0, #0 + strb r0, [r4, #1] + b _02254B48 +_02254ADC: + add r0, #0x46 + ldrh r0, [r0] + cmp r0, #2 + bne _02254AF2 + ldr r0, [r4, #0x38] + mov r1, #3 + bl MOD39_02254DA4 + mov r0, #0 + strb r0, [r4, #1] + b _02254B48 +_02254AF2: + cmp r0, #3 + bne _02254B48 + add r0, r4, #0 + add r0, #0x36 + ldrb r0, [r0] + lsl r0, r0, #2 + add r0, r4, r0 + ldr r0, [r0, #0x48] + str r0, [r4, #0x60] + add r0, r4, #0 + add r0, #0x37 + ldrb r0, [r0] + lsl r0, r0, #2 + add r0, r4, r0 + ldr r0, [r0, #0x48] + str r0, [r4, #0x64] + add r0, r4, #0 + add r0, #0x60 + bl MOD05_021ED9B4 + add r1, r4, #0 + add r1, #0x35 + strb r0, [r1] + ldr r0, [r4, #0x38] + mov r1, #3 + bl MOD39_02254DA4 + ldr r0, [r4, #0x38] + mov r1, #6 + bl MOD39_02254DA4 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254B48 +_02254B38: + ldr r0, [r4, #0x38] + mov r1, #6 + bl MOD39_02254DC8 + cmp r0, #0 + beq _02254B48 + mov r0, #0 + strb r0, [r4, #1] +_02254B48: + mov r0, #0 + pop {r4, pc} + .align 2, 0 +_02254B4C: .word 0x0000066E + thumb_func_end MOD39_02254A30 + + thumb_func_start MOD39_02254B50 +MOD39_02254B50: ; 0x02254B50 + push {r3, r4} + add r1, r0, #0 + add r1, #0x34 + ldrb r1, [r1] + cmp r1, #2 + bls _02254B94 + add r2, r0, #0 + mov r1, #0 + add r2, #0x36 +_02254B62: + ldrb r3, [r2] + add r3, r3, #1 + strb r3, [r2] + add r3, r0, #0 + add r3, #0x36 + ldrb r4, [r3] + add r3, r0, #0 + add r3, #0x34 + ldrb r3, [r3] + cmp r4, r3 + blo _02254B7E + add r3, r0, #0 + add r3, #0x36 + strb r1, [r3] +_02254B7E: + add r3, r0, #0 + add r3, #0x36 + ldrb r4, [r3] + add r3, r0, #0 + add r3, #0x37 + ldrb r3, [r3] + cmp r4, r3 + beq _02254B62 + mov r0, #1 + pop {r3, r4} + bx lr +_02254B94: + mov r0, #0 + pop {r3, r4} + bx lr + .align 2, 0 + thumb_func_end MOD39_02254B50 + + thumb_func_start MOD39_02254B9C +MOD39_02254B9C: ; 0x02254B9C + push {r3, r4} + add r1, r0, #0 + add r1, #0x34 + ldrb r1, [r1] + cmp r1, #2 + bls _02254BE0 + add r2, r0, #0 + mov r1, #0 + add r2, #0x37 +_02254BAE: + ldrb r3, [r2] + add r3, r3, #1 + strb r3, [r2] + add r3, r0, #0 + add r3, #0x37 + ldrb r4, [r3] + add r3, r0, #0 + add r3, #0x34 + ldrb r3, [r3] + cmp r4, r3 + blo _02254BCA + add r3, r0, #0 + add r3, #0x37 + strb r1, [r3] +_02254BCA: + add r3, r0, #0 + add r3, #0x37 + ldrb r4, [r3] + add r3, r0, #0 + add r3, #0x36 + ldrb r3, [r3] + cmp r4, r3 + beq _02254BAE + mov r0, #1 + pop {r3, r4} + bx lr +_02254BE0: + mov r0, #0 + pop {r3, r4} + bx lr + .align 2, 0 + thumb_func_end MOD39_02254B9C + + thumb_func_start MOD39_02254BE8 +MOD39_02254BE8: ; 0x02254BE8 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254BF8 + cmp r0, #1 + beq _02254C08 + b _02254C16 +_02254BF8: + ldr r0, [r4, #0x38] + mov r1, #1 + bl MOD39_02254DA4 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254C16 +_02254C08: + ldr r0, [r4, #0x38] + bl MOD39_02254DD4 + cmp r0, #0 + beq _02254C16 + mov r0, #1 + pop {r4, pc} +_02254C16: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD39_02254BE8 + + thumb_func_start MOD39_02254C1C +MOD39_02254C1C: ; 0x02254C1C + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + mov r0, #8 + mov r1, #0x88 + bl FUN_02016998 + add r4, r0, #0 + beq _02254C52 + add r0, #8 + mov r1, #4 + bl MOD20_022536F4 + str r5, [r4] + bl MOD20_02252D34 + str r0, [r4, #4] + bl MOD20_02252D24 + str r0, [r4, #0x20] + add r0, r4, #0 + add r1, r5, #0 + bl MOD39_02254C6C + str r4, [r6] + mov r0, #1 + pop {r4, r5, r6, pc} +_02254C52: + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD39_02254C1C + + thumb_func_start MOD39_02254C58 +MOD39_02254C58: ; 0x02254C58 + push {r4, lr} + add r4, r0, #0 + beq _02254C68 + bl MOD39_02254D78 + add r0, r4, #0 + bl FUN_02016A18 +_02254C68: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD39_02254C58 + + thumb_func_start MOD39_02254C6C +MOD39_02254C6C: ; 0x02254C6C + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + add r5, r0, #0 + mov r0, #1 + str r1, [sp, #0xc] + bl MOD20_022539C4 + mov r3, #0 + str r3, [sp] + mov r2, #1 + str r2, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r0, #0xc + mov r1, #0x4a + bl FUN_02006A34 + mov r1, #0x14 + blx _u32_div_f + ldr r1, [sp, #0xc] + str r0, [r5, #0x64] + add r2, r1, #0 + add r2, #0x30 + ldrb r2, [r2] + mov r3, #0 + bl MOD20_02253A04 + mov r0, #8 + str r0, [sp] + add r0, r5, #0 + add r0, #0x3c + mov r1, #0xc + mov r2, #0x48 + mov r3, #0x49 + bl MOD20_02253FBC + mov r0, #8 + str r0, [sp] + add r0, r5, #0 + add r0, #0x50 + mov r1, #0xc + mov r2, #5 + mov r3, #6 + bl MOD20_02253FBC + add r0, r5, #0 + str r0, [sp, #0x10] + add r0, #0x3c + ldr r7, _02254D74 ; =0x02255408 + mov r4, #0 + add r6, r5, #0 + str r0, [sp, #0x10] +_02254CD6: + ldr r0, [r5, #0x20] + ldr r2, [sp, #0x10] + add r1, r7, #0 + bl MOD20_02253E74 + str r0, [r6, #0x24] + add r4, r4, #1 + add r7, #0x10 + add r6, r6, #4 + cmp r4, #4 + blt _02254CD6 + cmp r4, #6 + bge _02254D18 + ldr r1, _02254D74 ; =0x02255408 + lsl r0, r4, #4 + add r7, r1, r0 + lsl r0, r4, #2 + add r6, r5, r0 + add r0, r5, #0 + str r0, [sp, #0x14] + add r0, #0x50 + str r0, [sp, #0x14] +_02254D02: + ldr r0, [r5, #0x20] + ldr r2, [sp, #0x14] + add r1, r7, #0 + bl MOD20_02253E74 + str r0, [r6, #0x24] + add r4, r4, #1 + add r7, #0x10 + add r6, r6, #4 + cmp r4, #6 + blt _02254D02 +_02254D18: + ldr r0, [sp, #0xc] + add r0, #0x32 + ldrb r2, [r0] + ldr r0, [sp, #0xc] + lsl r1, r2, #1 + add r3, r0, r1 + ldrh r0, [r3, #0x24] + mov r1, #4 + str r0, [sp] + ldrh r3, [r3, #0x18] + add r0, r5, #0 + bl MOD39_02254FA4 + ldr r0, [sp, #0xc] + add r0, #0x33 + ldrb r2, [r0] + ldr r0, [sp, #0xc] + lsl r1, r2, #1 + add r3, r0, r1 + ldrh r0, [r3, #0x24] + mov r1, #5 + str r0, [sp] + ldrh r3, [r3, #0x18] + add r0, r5, #0 + bl MOD39_02254FA4 + ldr r0, [sp, #0xc] + add r0, #0x30 + str r0, [sp, #0xc] + ldrb r0, [r0] + cmp r0, #1 + bhi _02254D70 + ldr r0, [r5, #0x38] + mov r1, #1 + bl MOD20_02253F78 + ldr r0, [r5, #0x30] + mov r1, #1 + bl MOD20_02253F78 + ldr r0, [r5, #0x24] + mov r1, #0xa + bl MOD20_02253F28 +_02254D70: + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02254D74: .word 0x02255408 + thumb_func_end MOD39_02254C6C + + thumb_func_start MOD39_02254D78 +MOD39_02254D78: ; 0x02254D78 + push {r4, r5, r6, lr} + add r6, r0, #0 + add r0, #0x50 + bl MOD20_02254014 + add r0, r6, #0 + add r0, #0x3c + bl MOD20_02254014 + mov r4, #0 + add r5, r6, #0 +_02254D8E: + ldr r1, [r5, #0x24] + cmp r1, #0 + beq _02254D9A + ldr r0, [r6, #0x20] + bl MOD20_02253F14 +_02254D9A: + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #6 + blt _02254D8E + pop {r4, r5, r6, pc} + thumb_func_end MOD39_02254D78 + + thumb_func_start MOD39_02254DA4 +MOD39_02254DA4: ; 0x02254DA4 + 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, _02254DC4 ; =0x022553A8 + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254DC4: .word 0x022553A8 + thumb_func_end MOD39_02254DA4 + + thumb_func_start MOD39_02254DC8 +MOD39_02254DC8: ; 0x02254DC8 + ldr r3, _02254DD0 ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254DD0: .word MOD20_02253794 + thumb_func_end MOD39_02254DC8 + + thumb_func_start MOD39_02254DD4 +MOD39_02254DD4: ; 0x02254DD4 + ldr r3, _02254DDC ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254DDC: .word MOD20_022537B8 + thumb_func_end MOD39_02254DD4 + + thumb_func_start MOD39_02254DE0 +MOD39_02254DE0: ; 0x02254DE0 + 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 MOD39_02254DE0 + + thumb_func_start MOD39_02254DF4 +MOD39_02254DF4: ; 0x02254DF4 + push {r4, r5, lr} + sub sp, #0x14 + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + add r5, r0, #0 + add r0, r4, #0 + bl MOD20_022538A4 + ldr r0, [r5, #4] + ldr r2, _02254E7C ; =0x02255330 + 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, #0x47 + 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, #0x46 + 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, _02254E80 ; =0x04001000 + ldr r0, _02254E84 ; =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 MOD39_02254DE0 + add sp, #0x14 + pop {r4, r5, pc} + .align 2, 0 +_02254E7C: .word 0x02255330 +_02254E80: .word 0x04001000 +_02254E84: .word 0xFFFFE0FF + thumb_func_end MOD39_02254DF4 + + thumb_func_start MOD39_02254E88 +MOD39_02254E88: ; 0x02254E88 + 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 _02254EA4 + cmp r0, #1 + beq _02254EB0 + pop {r3, r4, r5, pc} +_02254EA4: + mov r0, #1 + str r0, [r4, #0x68] + add r0, r5, #0 + bl MOD20_022538B0 + pop {r3, r4, r5, pc} +_02254EB0: + add r0, r4, #0 + mov r1, #6 + bl MOD39_02254DC8 + cmp r0, #0 + beq _02254ECA + ldr r0, [r4, #4] + mov r1, #6 + bl FUN_020178A0 + add r0, r5, #0 + bl MOD39_02254DE0 +_02254ECA: + pop {r3, r4, r5, pc} + thumb_func_end MOD39_02254E88 + + thumb_func_start MOD39_02254ECC +MOD39_02254ECC: ; 0x02254ECC + 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_022538A4 + ldr r0, _02254EF4 ; =0x00000669 + bl MOD20_02252B28 + ldr r0, [r4, #0x24] + mov r1, #0xa + bl MOD20_02253F28 + add r0, r5, #0 + bl MOD39_02254DE0 + pop {r3, r4, r5, pc} + .align 2, 0 +_02254EF4: .word 0x00000669 + thumb_func_end MOD39_02254ECC + + thumb_func_start MOD39_02254EF8 +MOD39_02254EF8: ; 0x02254EF8 + 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_022538A4 + ldr r0, [r4, #0x24] + mov r1, #9 + bl MOD20_02253F28 + add r0, r5, #0 + bl MOD39_02254DE0 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD39_02254EF8 + + thumb_func_start MOD39_02254F1C +MOD39_02254F1C: ; 0x02254F1C + push {r3, r4, r5, r6, r7, lr} + add r6, r1, #0 + add r0, r6, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r6, #0 + bl MOD20_022538A4 + add r7, r0, #0 + add r0, #0x32 + ldrb r5, [r0] + ldr r0, _02254F5C ; =0x00000663 + bl MOD20_02252B28 + lsl r0, r5, #1 + add r3, r7, r0 + ldrh r0, [r3, #0x24] + mov r1, #4 + add r2, r5, #0 + str r0, [sp] + ldrh r3, [r3, #0x18] + add r0, r4, #0 + bl MOD39_02254FA4 + add r0, r4, #0 + bl MOD39_02254FF8 + add r0, r6, #0 + bl MOD39_02254DE0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02254F5C: .word 0x00000663 + thumb_func_end MOD39_02254F1C + + thumb_func_start MOD39_02254F60 +MOD39_02254F60: ; 0x02254F60 + push {r3, r4, r5, r6, r7, lr} + add r6, r1, #0 + add r0, r6, #0 + bl MOD20_022538A0 + add r4, r0, #0 + add r0, r6, #0 + bl MOD20_022538A4 + add r7, r0, #0 + add r0, #0x33 + ldrb r5, [r0] + ldr r0, _02254FA0 ; =0x00000663 + bl MOD20_02252B28 + lsl r0, r5, #1 + add r3, r7, r0 + ldrh r0, [r3, #0x24] + mov r1, #5 + add r2, r5, #0 + str r0, [sp] + ldrh r3, [r3, #0x18] + add r0, r4, #0 + bl MOD39_02254FA4 + add r0, r4, #0 + bl MOD39_02254FF8 + add r0, r6, #0 + bl MOD39_02254DE0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02254FA0: .word 0x00000663 + thumb_func_end MOD39_02254F60 + + thumb_func_start MOD39_02254FA4 +MOD39_02254FA4: ; 0x02254FA4 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + lsl r0, r1, #2 + add r0, r5, r0 + add r6, r2, #0 + add r7, r3, #0 + ldr r4, [r0, #0x24] + cmp r1, #5 + bne _02254FBA + mov r1, #4 + b _02254FCC +_02254FBA: + add r0, r7, #0 + mov r1, #0x1c + bl FUN_02068678 + cmp r0, #0 + beq _02254FCA + mov r1, #4 + b _02254FCC +_02254FCA: + mov r1, #5 +_02254FCC: + add r0, r4, #0 + bl MOD20_02253F28 + ldr r2, [r5, #0x64] + lsl r1, r6, #4 + add r0, r4, #0 + add r1, r2, r1 + bl MOD20_02253FA4 + add r1, sp, #8 + ldrh r1, [r1, #0x10] + add r0, r7, #0 + mov r2, #0 + bl FUN_0206B7BC + add r1, r0, #0 + add r0, r4, #0 + add r1, r1, #1 + bl MOD20_02253F9C + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD39_02254FA4 + + thumb_func_start MOD39_02254FF8 +MOD39_02254FF8: ; 0x02254FF8 + push {r4, lr} + add r4, r0, #0 + mov r1, #3 + mov r2, #0x16 + ldr r0, [r4, #0x2c] + lsl r1, r1, #0x10 + lsl r2, r2, #0xe + bl MOD20_02253F64 + mov r1, #0xb + lsl r1, r1, #0x10 + ldr r0, [r4, #0x30] + lsr r2, r1, #1 + bl MOD20_02253F64 + ldr r0, [r4, #0x2c] + mov r1, #5 + bl MOD20_02253F28 + ldr r0, [r4, #0x30] + mov r1, #6 + bl MOD20_02253F28 + ldr r0, [r4, #0x28] + mov r1, #0 + bl MOD20_02253F28 + pop {r4, pc} + thumb_func_end MOD39_02254FF8 + + thumb_func_start MOD39_02255030 +MOD39_02255030: ; 0x02255030 + 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 _0225505C + ldr r0, [r4, #0x68] + cmp r0, #0 + beq _0225505C + add r0, r5, #0 + bl MOD39_02254DE0 + pop {r4, r5, r6, pc} +_0225505C: + add r0, r5, #0 + bl MOD20_022538AC + cmp r0, #0 + beq _0225506C + cmp r0, #1 + beq _02255086 + pop {r4, r5, r6, pc} +_0225506C: + mov r0, #0 + str r0, [r4, #0x68] + add r0, r4, #0 + bl MOD39_02254FF8 + add r0, r4, #0 + add r1, r6, #0 + bl MOD39_0225509C + add r0, r5, #0 + bl MOD20_022538B0 + pop {r4, r5, r6, pc} +_02255086: + add r0, r4, #0 + add r1, r6, #0 + bl MOD39_02255114 + cmp r0, #0 + beq _02255098 + add r0, r5, #0 + bl MOD39_02254DE0 +_02255098: + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD39_02255030 + + thumb_func_start MOD39_0225509C +MOD39_0225509C: ; 0x0225509C + push {r3, r4, r5, lr} + add r4, r0, #0 + add r5, r1, #0 + mov r1, #0 + str r1, [r4, #0x70] + str r1, [r4, #0x74] + str r1, [r4, #0x78] + add r0, #0x84 + str r1, [r0] + add r0, r5, #0 + add r0, #0x31 + ldrb r0, [r0] + cmp r0, #3 + bhi _022550FA + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_022550C4: ; jump table + .short _022550EE - _022550C4 - 2 ; case 0 + .short _022550E0 - _022550C4 - 2 ; case 1 + .short _022550D2 - _022550C4 - 2 ; case 2 + .short _022550CC - _022550C4 - 2 ; case 3 +_022550CC: + ldr r0, _02255104 ; =0x02255378 + str r0, [r4, #0x6c] + b _022550FA +_022550D2: + ldr r0, _02255108 ; =0x02255318 + mov r1, #1 + str r0, [r4, #0x6c] + ldr r0, [r4, #0x28] + bl MOD20_02253F28 + b _022550FA +_022550E0: + ldr r0, _0225510C ; =0x0225534C + mov r1, #2 + str r0, [r4, #0x6c] + ldr r0, [r4, #0x28] + bl MOD20_02253F28 + b _022550FA +_022550EE: + ldr r0, _02255110 ; =0x02255468 + mov r1, #3 + str r0, [r4, #0x6c] + ldr r0, [r4, #0x28] + bl MOD20_02253F28 +_022550FA: + add r0, r4, #0 + add r1, r5, #0 + bl MOD39_02255114 + pop {r3, r4, r5, pc} + .align 2, 0 +_02255104: .word 0x02255378 +_02255108: .word 0x02255318 +_0225510C: .word 0x0225534C +_02255110: .word 0x02255468 + thumb_func_end MOD39_0225509C + + thumb_func_start MOD39_02255114 +MOD39_02255114: ; 0x02255114 + push {r3, r4, r5, r6, r7, lr} + add r4, r0, #0 + add r5, r4, #0 + add r6, r4, #0 + mov r7, #0x16 + add r5, #0x84 + add r6, #0x78 + lsl r7, r7, #0xe +_02255124: + ldr r0, [r4, #0x70] + cmp r0, #0 + beq _02255138 + cmp r0, #1 + bne _02255130 + b _02255280 +_02255130: + cmp r0, #2 + bne _02255136 + b _022552DC +_02255136: + b _022552FA +_02255138: + beq _0225513C + b _022552FA +_0225513C: + add r6, r4, #0 + add r5, r4, #0 + add r6, #0x7c + mov r7, #1 + add r5, #0x74 +_02255146: + ldr r0, [r5] + ldr r1, [r4, #0x74] + add r0, r0, #1 + str r0, [r5] + ldr r0, [r4, #0x6c] + lsl r1, r1, #2 + ldr r0, [r0, r1] + add r0, r0, #7 + cmp r0, #6 + bls _0225515C + b _02255276 +_0225515C: + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_02255168: ; jump table + .short _02255252 - _02255168 - 2 ; case 0 + .short _02255240 - _02255168 - 2 ; case 1 + .short _0225522C - _02255168 - 2 ; case 2 + .short _02255212 - _02255168 - 2 ; case 3 + .short _022551C2 - _02255168 - 2 ; case 4 + .short _0225517A - _02255168 - 2 ; case 5 + .short _02255176 - _02255168 - 2 ; case 6 +_02255176: + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_0225517A: + ldr r0, [r5] + ldr r1, [r4, #0x74] + add r0, r0, #1 + str r0, [r5] + ldr r0, [r4, #0x6c] + lsl r1, r1, #2 + ldr r1, [r0, r1] + add r0, r4, #0 + add r0, #0x84 + str r1, [r0] + ldr r0, [r5] + ldr r1, [r4, #0x74] + add r0, r0, #1 + str r0, [r5] + ldr r0, [r4, #0x6c] + lsl r1, r1, #2 + ldr r0, [r0, r1] + str r0, [r4, #0x7c] + ldr r0, [r6] + lsl r0, r0, #0xc + str r0, [r6] + ldr r1, [r4, #0x78] + ldr r0, [r4, #0x7c] + add r1, r1, r0 + add r0, r4, #0 + add r0, #0x80 + str r1, [r0] + add r1, r4, #0 + add r1, #0x84 + ldr r0, [r6] + ldr r1, [r1] + blx _u32_div_f + str r0, [r6] + str r7, [r4, #0x70] + b _02255276 +_022551C2: + ldr r0, [r5] + ldr r1, [r4, #0x74] + add r0, r0, #1 + str r0, [r5] + ldr r0, [r4, #0x6c] + lsl r1, r1, #2 + ldr r1, [r0, r1] + add r0, r4, #0 + add r0, #0x84 + str r1, [r0] + ldr r0, [r5] + ldr r1, [r4, #0x74] + add r0, r0, #1 + str r0, [r5] + ldr r0, [r4, #0x6c] + lsl r1, r1, #2 + ldr r0, [r0, r1] + mov r1, #0 + str r0, [r4, #0x7c] + ldr r0, [r6] + mvn r1, r1 + lsl r0, r0, #0xc + mul r1, r0 + str r1, [r6] + ldr r1, [r4, #0x78] + ldr r0, [r4, #0x7c] + add r1, r1, r0 + add r0, r4, #0 + add r0, #0x80 + str r1, [r0] + add r1, r4, #0 + add r1, #0x84 + ldr r0, [r6] + ldr r1, [r1] + blx _u32_div_f + str r0, [r6] + mov r0, #1 + str r0, [r4, #0x70] + b _02255276 +_02255212: + ldr r0, [r5] + ldr r1, [r4, #0x74] + add r0, r0, #1 + str r0, [r5] + ldr r0, [r4, #0x6c] + lsl r1, r1, #2 + ldr r1, [r0, r1] + add r0, r4, #0 + add r0, #0x84 + str r1, [r0] + mov r0, #2 + str r0, [r4, #0x70] + b _02255276 +_0225522C: + ldr r0, [r5] + ldr r1, [r4, #0x74] + add r0, r0, #1 + str r0, [r5] + ldr r0, [r4, #0x6c] + lsl r1, r1, #2 + ldr r0, [r0, r1] + bl MOD20_02252B28 + b _02255276 +_02255240: + ldr r0, [r4, #0x2c] + mov r1, #6 + bl MOD20_02253F28 + ldr r0, [r4, #0x30] + mov r1, #5 + bl MOD20_02253F28 + b _02255276 +_02255252: + ldr r1, [r5] + ldr r0, [r4, #0x74] + add r1, r1, #1 + str r1, [r5] + ldr r2, [r4, #0x6c] + lsl r0, r0, #2 + ldr r0, [r2, r0] + ldr r2, [r4, #0x74] + add r1, r1, #1 + str r1, [r5] + lsl r0, r0, #2 + add r0, r4, r0 + ldr r1, [r4, #0x6c] + lsl r2, r2, #2 + ldr r0, [r0, #0x24] + ldr r1, [r1, r2] + bl MOD20_02253F28 +_02255276: + ldr r0, [r4, #0x70] + cmp r0, #0 + bne _0225527E + b _02255146 +_0225527E: + b _022552FA +_02255280: + add r0, r4, #0 + add r0, #0x84 + ldr r0, [r0] + cmp r0, #0 + beq _022552CC + ldr r0, [r5] + sub r0, r0, #1 + str r0, [r5] + add r0, r4, #0 + add r0, #0x84 + ldr r0, [r0] + cmp r0, #0 + beq _022552A4 + ldr r1, [r6] + ldr r0, [r4, #0x7c] + add r0, r1, r0 + str r0, [r6] + b _022552AC +_022552A4: + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + str r0, [r4, #0x78] +_022552AC: + mov r1, #3 + ldr r2, [r4, #0x78] + lsl r1, r1, #0x10 + add r1, r2, r1 + ldr r0, [r4, #0x2c] + add r2, r7, #0 + bl MOD20_02253F64 + mov r1, #0xb + ldr r2, [r4, #0x78] + lsl r1, r1, #0x10 + sub r1, r1, r2 + ldr r0, [r4, #0x30] + add r2, r7, #0 + bl MOD20_02253F64 +_022552CC: + add r0, r4, #0 + add r0, #0x84 + ldr r0, [r0] + cmp r0, #0 + bne _022552FA + mov r0, #0 + str r0, [r4, #0x70] + b _02255124 +_022552DC: + add r0, r4, #0 + add r0, #0x84 + ldr r0, [r0] + cmp r0, #0 + beq _022552F4 + add r0, r4, #0 + add r0, #0x84 + ldr r0, [r0] + add r4, #0x84 + sub r0, r0, #1 + str r0, [r4] + b _022552FA +_022552F4: + mov r0, #0 + str r0, [r4, #0x70] + b _02255124 +_022552FA: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD39_02255114 + + .section .rodata + ; 0x02255300 + .incbin "baserom.nds", 0x291cc0, 0x1E4 + + ; .section .sinit + .global SDK_OVERLAY.MODULE_39.SINIT_START + .global SDK_OVERLAY.MODULE_39.SINIT_END +SDK_OVERLAY.MODULE_39.SINIT_START: + .word MOD39_02254840 + .word 0 +SDK_OVERLAY.MODULE_39.SINIT_END: |