diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-13 13:38:40 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-13 13:38:40 -0400 |
commit | 582797dfe7c01831fa527fa0545843da094bb0b8 (patch) | |
tree | fac5c39e0a26cddd23b982bae2014177b46d82d1 | |
parent | 629a2330b5f01c666a299eb13f5da65e91cfdb65 (diff) |
Disassemble module 78
-rw-r--r-- | arm9/arm9.lcf | 25 | ||||
-rw-r--r-- | arm9/modules/77/asm/module_77.s | 16 | ||||
-rw-r--r-- | arm9/modules/78/asm/module_78.s | 444 |
3 files changed, 474 insertions, 11 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index cd289d09..f4ba6edf 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -3004,7 +3004,17 @@ SECTIONS { SDK_OVERLAY_MODULE_78_ID = 78; SDK_OVERLAY.MODULE_78.ID = 78; SDK_OVERLAY.MODULE_78.START = .; - FILE_2D9800.o (.text) /* 0x2D5800 */ + module_78.o (.text) + module_78.o (.rodata) + module_78.o (.init) + SDK_OVERLAY.MODULE_78.SINIT_START = .; + module_78.o (.ctor) + module_78.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_78.SINIT_END = .; + . = ALIGN(32); + module_78.o (.sdata) + module_78.o (.data) . = ALIGN(32); SDK_OVERLAY.MODULE_78.END = .; SDK_OVERLAY.MODULE_78.SIZE = SDK_OVERLAY.MODULE_78.END - SDK_OVERLAY.MODULE_78.START; @@ -3014,7 +3024,8 @@ SECTIONS { { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_78.BSS_START = .; - FILE_2D9800.o (.bss) + module_78.o (.bss) + module_78.o (.sbss) . = ALIGN(32); SDK_OVERLAY.MODULE_78.BSS_END = .; SDK_OVERLAY.MODULE_78.BSS_SIZE = SDK_OVERLAY.MODULE_78.BSS_END - SDK_OVERLAY.MODULE_78.BSS_START; @@ -4015,7 +4026,15 @@ SECTIONS { WRITEW 77; WRITEW 0; - OVERLAY_TABLE(MODULE_78, 78) + WRITEW 78; + WRITEW ADDR(.MODULE_78); + WRITEW SDK_OVERLAY.MODULE_78.SIZE; + WRITEW SDK_OVERLAY.MODULE_78.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_78.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_78.SINIT_END; + WRITEW 78; + WRITEW 0; + OVERLAY_TABLE(MODULE_79, 79) OVERLAY_TABLE(MODULE_80, 80) OVERLAY_TABLE(MODULE_81, 81) diff --git a/arm9/modules/77/asm/module_77.s b/arm9/modules/77/asm/module_77.s index 7771341b..fdbd40cd 100644 --- a/arm9/modules/77/asm/module_77.s +++ b/arm9/modules/77/asm/module_77.s @@ -36,7 +36,7 @@ MOD77_021D74E0: ; 0x021D74E0 ldr r2, _021D75DC ; =0x0000C32C mov r1, #0 add r5, r0, #0 - blx Call_FillMemWithValue + bl Call_FillMemWithValue mov r0, #0x32 str r0, [r5] ldr r0, _021D75E0 ; =0x020ECAC4 @@ -901,7 +901,7 @@ MOD77_021D7C64: ; 0x021D7C64 str r0, [sp, #0x18] ldr r0, [sp, #0x20] mov r1, #6 - blx _u32_div_f + bl _u32_div_f add r7, r0, #0 ldr r0, [sp, #0x18] mov r5, #1 @@ -2554,7 +2554,7 @@ MOD77_021D89F4: ; 0x021D89F4 asr r1, r1, #0x10 asr r2, r2, #0x10 asr r3, r3, #0x10 - blx FUN_020B8418 + bl FUN_020B8418 pop {r4, pc} nop _021D8A28: .word 0x0000C2DC @@ -2595,7 +2595,7 @@ MOD77_021D8A30: ; 0x021D8A30 add r0, r5, #0 add r1, sp, #0 add r2, r5, #0 - blx MTX_Concat33 + bl MTX_Concat33 ldr r0, [r4, #8] ldr r3, _021D8AA4 ; =0x020FFA38 lsl r0, r0, #0x10 @@ -2612,7 +2612,7 @@ MOD77_021D8A30: ; 0x021D8A30 add r0, r5, #0 add r1, sp, #0 add r2, r5, #0 - blx MTX_Concat33 + bl MTX_Concat33 add sp, #0x24 pop {r4, r5, pc} nop @@ -2654,7 +2654,7 @@ MOD77_021D8AA8: ; 0x021D8AA8 add r0, r5, #0 add r1, sp, #0 add r2, r5, #0 - blx MTX_Concat33 + bl MTX_Concat33 ldr r0, [r4, #8] ldr r3, _021D8B1C ; =0x020FFA38 lsl r0, r0, #0x10 @@ -2671,7 +2671,7 @@ MOD77_021D8AA8: ; 0x021D8AA8 add r0, r5, #0 add r1, sp, #0 add r2, r5, #0 - blx MTX_Concat33 + bl MTX_Concat33 add sp, #0x24 pop {r4, r5, pc} .align 2, 0 @@ -3103,7 +3103,7 @@ _021D8E32: add r0, r6, #0 add r1, sp, #0x4c add r2, sp, #4 - blx MTX_Concat33 + bl MTX_Concat33 ldrh r2, [r4, #0x38] cmp r2, #0 beq _021D8E5A diff --git a/arm9/modules/78/asm/module_78.s b/arm9/modules/78/asm/module_78.s new file mode 100644 index 00000000..03fb6972 --- /dev/null +++ b/arm9/modules/78/asm/module_78.s @@ -0,0 +1,444 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD78_021D74E0 +MOD78_021D74E0: ; 0x021D74E0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + mov r2, #2 + add r5, r0, #0 + mov r0, #3 + mov r1, #0x48 + lsl r2, r2, #0x10 + bl FUN_0201681C + add r0, r5, #0 + mov r1, #0xa0 + mov r2, #0x48 + bl FUN_02006268 + mov r1, #0 + mov r2, #0xa0 + add r4, r0, #0 + bl Call_FillMemWithValue + add r0, r5, #0 + bl FUN_0200628C + add r5, r0, #0 + add r0, r4, #0 + ldrb r1, [r5] + add r0, #0x9c + strb r1, [r0] + add r0, r4, #0 + mov r1, #0 + add r0, #0x9d + strb r1, [r0] + mov r0, #0x48 + bl FUN_0201EB64 + str r0, [r4] + bl MOD78_021D7708 + add r0, r4, #0 + bl MOD78_021D778C + add r0, sp, #0xc + mov r1, #0 + str r1, [r0] + str r1, [r0, #4] + str r1, [r0, #8] + str r1, [sp] + str r1, [sp, #4] + ldr r1, [r4] + ldr r2, _021D75C4 ; =0x021D789C + str r1, [sp, #8] + ldr r1, _021D75C8 ; =0x0029AEC1 + ldr r3, _021D75CC ; =0x000005C1 + bl FUN_0201ECA8 + ldr r0, [r4] + bl FUN_0201EB8C + mov r4, #0 + mov r7, #2 + mov r6, #4 +_021D7558: + ldr r2, [r5, #4] + mov r0, #6 + add r1, r4, #0 + mul r1, r0 + add r3, r2, r1 + ldrsh r1, [r2, r1] + ldrsh r2, [r3, r7] + ldrsh r3, [r3, r6] + add r0, r4, #0 + bl FUN_020B8418 + ldr r2, [r5, #4] + lsl r1, r4, #1 + add r1, r2, r1 + ldrh r1, [r1, #0x18] + add r0, r4, #0 + bl FUN_020B8404 + add r0, r4, #1 + lsl r0, r0, #0x18 + lsr r4, r0, #0x18 + cmp r4, #4 + blo _021D7558 + ldr r2, [r5, #4] + ldrh r0, [r2, #0x20] + ldrh r1, [r2, #0x22] + ldr r2, [r2, #0x28] + bl FUN_020B83E0 + ldr r2, [r5, #4] + ldrh r0, [r2, #0x24] + ldrh r1, [r2, #0x26] + ldr r2, [r2, #0x2c] + bl FUN_020B83BC + ldr r3, [r5, #4] + ldr r0, [r3, #0x40] + str r0, [sp] + ldr r0, [r3, #0x44] + str r0, [sp, #4] + ldr r0, [r3, #0x30] + ldr r1, [r3, #0x34] + ldr r2, [r3, #0x38] + ldr r3, [r3, #0x3c] + bl FUN_020B8390 + mov r0, #0 + mov r1, #0x48 + bl FUN_02079A70 + mov r0, #1 + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + nop +_021D75C4: .word 0x021D789C +_021D75C8: .word 0x0029AEC1 +_021D75CC: .word 0x000005C1 + thumb_func_end MOD78_021D74E0 + + thumb_func_start MOD78_021D75D0 +MOD78_021D75D0: ; 0x021D75D0 + push {r3, r4, r5, r6, lr} + sub sp, #0x3c + ldr r6, _021D76AC ; =0x021D78AC + add r2, r0, #0 + add r5, r1, #0 + add r4, sp, #0x18 + mov r3, #4 +_021D75DE: + ldmia r6!, {r0, r1} + stmia r4!, {r0, r1} + sub r3, r3, #1 + bne _021D75DE + ldr r0, [r6] + add r3, sp, #0xc + str r0, [r4] + ldr r4, _021D76B0 ; =0x021D787C + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r4] + add r1, sp, #0 + str r0, [r3] + mov r0, #0 + str r0, [r1] + str r0, [r1, #4] + str r0, [r1, #8] + add r0, r2, #0 + bl FUN_02006278 + add r4, r0, #0 + ldr r0, [r5] + cmp r0, #0 + beq _021D7614 + cmp r0, #1 + beq _021D7622 + b _021D7662 +_021D7614: + ldr r0, _021D76B4 ; =0x000006DC + bl FUN_020054C8 + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _021D7662 +_021D7622: + add r0, r4, #0 + add r0, #0x9d + ldrb r0, [r0] + cmp r0, #0 + bne _021D7654 + add r0, r4, #0 + add r0, #0x80 + ldr r2, [r0] + mov r0, #1 + ldr r1, [r2] + lsl r0, r0, #0xc + add r1, r1, r0 + ldr r0, [r2, #8] + ldrh r0, [r0, #4] + lsl r0, r0, #0xc + cmp r1, r0 + bne _021D7662 + add r1, r4, #0 + mov r0, #1 + add r1, #0x9d + strb r0, [r1] + mov r1, #0x48 + bl FUN_02079A70 + b _021D7662 +_021D7654: + bl FUN_0200E308 + cmp r0, #0 + beq _021D7662 + add sp, #0x3c + mov r0, #1 + pop {r3, r4, r5, r6, pc} +_021D7662: + mov r3, #1 + mov r2, #0 + lsl r3, r3, #0xc +_021D7668: + lsl r0, r2, #2 + add r0, r4, r0 + add r0, #0x80 + ldr r1, [r0] + ldr r5, [r1, #8] + ldr r0, [r1] + ldrh r5, [r5, #4] + add r0, r0, r3 + lsl r5, r5, #0xc + cmp r0, r5 + bge _021D7680 + str r0, [r1] +_021D7680: + add r0, r2, #1 + lsl r0, r0, #0x18 + lsr r2, r0, #0x18 + cmp r2, #4 + blo _021D7668 + bl FUN_020222AC + bl FUN_0201EBA4 + add r0, r4, #4 + add r1, sp, #0 + add r2, sp, #0x18 + add r3, sp, #0xc + bl FUN_0201B26C + mov r0, #1 + add r1, r0, #0 + bl FUN_020222B4 + mov r0, #0 + add sp, #0x3c + pop {r3, r4, r5, r6, pc} + .align 2, 0 +_021D76AC: .word 0x021D78AC +_021D76B0: .word 0x021D787C +_021D76B4: .word 0x000006DC + thumb_func_end MOD78_021D75D0 + + thumb_func_start MOD78_021D76B8 +MOD78_021D76B8: ; 0x021D76B8 + push {r3, r4, r5, r6, r7, lr} + str r0, [sp] + bl FUN_02006278 + add r6, r0, #0 + add r7, r6, #0 + mov r4, #0 + add r7, #0x70 +_021D76C8: + lsl r0, r4, #2 + add r5, r6, r0 + add r1, r5, #0 + add r1, #0x80 + ldr r1, [r1] + add r0, r7, #0 + bl thunk_FUN_020ae84c + ldr r0, [r5, #0x60] + bl FUN_02016A18 + add r0, r4, #1 + lsl r0, r0, #0x18 + lsr r4, r0, #0x18 + cmp r4, #4 + blo _021D76C8 + ldr r0, [r6, #0x5c] + bl FUN_02016A18 + ldr r0, [r6] + bl FUN_0201EB70 + ldr r0, [sp] + bl FUN_0200627C + bl FUN_0201B398 + mov r0, #0x48 + bl FUN_020168D0 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD78_021D76B8 + + thumb_func_start MOD78_021D7708 +MOD78_021D7708: ; 0x021D7708 + push {r3, lr} + mov r0, #0 + add r1, r0, #0 + bl FUN_02015F10 + bl FUN_02015F1C + bl FUN_0201E6D8 + bl FUN_0201E740 + mov r2, #1 + lsl r2, r2, #0x1a + ldr r1, [r2] + ldr r0, _021D7758 ; =0xFFFFE0FF + and r1, r0 + str r1, [r2] + ldr r2, _021D775C ; =0x04001000 + ldr r1, [r2] + and r0, r1 + str r0, [r2] + bl MOD78_021D776C + mov r0, #0x48 + bl FUN_0201B2EC + ldr r2, _021D7760 ; =0x04000060 + ldr r0, _021D7764 ; =0xFFFFCFFF + ldrh r1, [r2] + and r1, r0 + mov r0, #0x20 + orr r0, r1 + strh r0, [r2] + ldr r0, _021D7768 ; =0x021D7888 + bl G3X_SetEdgeColorTable + bl FUN_0201E7A0 + pop {r3, pc} + nop +_021D7758: .word 0xFFFFE0FF +_021D775C: .word 0x04001000 +_021D7760: .word 0x04000060 +_021D7764: .word 0xFFFFCFFF +_021D7768: .word 0x021D7888 + thumb_func_end MOD78_021D7708 + + thumb_func_start MOD78_021D776C +MOD78_021D776C: ; 0x021D776C + push {r4, lr} + sub sp, #0x28 + ldr r4, _021D7788 ; =0x021D78D0 + add r3, sp, #0 + mov r2, #5 +_021D7776: + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _021D7776 + add r0, sp, #0 + bl FUN_0201E66C + add sp, #0x28 + pop {r4, pc} + .align 2, 0 +_021D7788: .word 0x021D78D0 + thumb_func_end MOD78_021D776C + + thumb_func_start MOD78_021D778C +MOD78_021D778C: ; 0x021D778C + push {r4, r5, r6, r7, lr} + sub sp, #0xc + add r5, r0, #0 + mov r0, #0x78 + mov r1, #0x48 + bl FUN_02006670 + str r0, [sp] + add r0, r5, #0 + add r0, #0x70 + mov r1, #0x48 + mov r2, #4 + bl FUN_02016B20 + add r1, r5, #0 + add r1, #0x9c + ldrb r2, [r1] + mov r1, #0xa + ldr r0, [sp] + add r3, r2, #0 + mul r3, r1 + ldr r1, _021D7878 ; =0x021D7900 + mov r2, #0x48 + ldrh r1, [r1, r3] + bl FUN_02006704 + add r1, r5, #0 + add r2, r5, #0 + str r0, [r5, #0x5c] + add r0, r5, #4 + add r1, #0x58 + add r2, #0x5c + bl FUN_0201B234 + ldr r0, [r5, #0x5c] + bl FUN_020BC0FC + str r0, [sp, #4] + ldr r0, [r5, #0x58] + mov r1, #0 + mov r2, #0x40 + bl FUN_020BC094 + ldr r0, [r5, #0x58] + mov r1, #0 + mov r2, #0x80 + bl FUN_020BC094 + mov r2, #2 + ldr r0, [r5, #0x58] + mov r1, #0 + lsl r2, r2, #8 + bl FUN_020BC094 + mov r2, #1 + ldr r0, [r5, #0x58] + mov r1, #0 + lsl r2, r2, #0xa + bl FUN_020BC094 + add r0, r5, #0 + str r0, [sp, #8] + add r0, #0x70 + mov r6, #0 + str r0, [sp, #8] +_021D780E: + add r1, r5, #0 + add r1, #0x9c + ldrb r3, [r1] + lsl r0, r6, #2 + add r4, r5, r0 + add r2, r3, #0 + mov r1, #0xa + mul r2, r1 + ldr r3, _021D7878 ; =0x021D7900 + lsl r1, r6, #1 + add r2, r3, r2 + add r1, r1, r2 + ldrh r1, [r1, #2] + ldr r0, [sp] + mov r2, #0x48 + bl FUN_02006704 + str r0, [r4, #0x60] + mov r1, #0 + bl FUN_020BC4C8 + add r7, r0, #0 + ldr r0, [sp, #8] + ldr r2, [r5, #0x58] + add r1, r7, #0 + bl FUN_020BB8D0 + add r1, r4, #0 + add r1, #0x80 + str r0, [r1] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + ldr r2, [r5, #0x58] + ldr r3, [sp, #4] + add r1, r7, #0 + bl FUN_020B8110 + add r4, #0x80 + ldr r1, [r4] + add r0, r5, #4 + bl FUN_020B7EFC + add r0, r6, #1 + lsl r0, r0, #0x18 + lsr r6, r0, #0x18 + cmp r6, #4 + blo _021D780E + ldr r0, [sp] + bl FUN_020066F4 + add sp, #0xc + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_021D7878: .word 0x021D7900 + thumb_func_end MOD78_021D778C + + .section .rodata + ; 0x021D787C + .incbin "baserom.nds", 0x2D9B9C, 0x7C + + .section .data + ; 0x021D7900 + .incbin "baserom.nds", 0x2D9C20, 0x40 |