diff options
-rw-r--r-- | arm9/arm9.lcf | 16 | ||||
-rw-r--r-- | arm9/global.inc | 1 | ||||
-rw-r--r-- | arm9/modules/31/asm/module_31.s | 724 |
3 files changed, 739 insertions, 2 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 89b80e61..1c04c470 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -41,7 +41,7 @@ MEMORY { MODULE_28 (RWX) : ORIGIN=0x02254840, LENGTH=0 MODULE_29 (RWX) : ORIGIN=0x02254840, LENGTH=0 MODULE_30 (RWX) : ORIGIN=0x02254840, LENGTH=0 - MODULE_31 (RWX) : ORIGIN=0, LENGTH=0 + MODULE_31 (RWX) : ORIGIN=0x02254840, LENGTH=0 MODULE_32 (RWX) : ORIGIN=0, LENGTH=0 MODULE_33 (RWX) : ORIGIN=0, LENGTH=0 MODULE_34 (RWX) : ORIGIN=0, LENGTH=0 @@ -759,7 +759,19 @@ SECTIONS { module_30.o (.bss) } >> MODULE_30 - OVERLAY_FILE(31, 0x289200, FILE_28D200.o) + .MODULE.31 : AT (0x289200) + { + module_31.o (.text) + module_31.o (.sdata) + module_31.o (.data) + } > MODULE_31 + + .MODULE.31.bss : + { + module_31.o (.sbss) + module_31.o (.bss) + } >> MODULE_31 + OVERLAY_FILE(32, 0x289800, FILE_28D800.o) OVERLAY_FILE(33, 0x289E00, FILE_28DE00.o) OVERLAY_FILE(34, 0x28A200, FILE_28E200.o) diff --git a/arm9/global.inc b/arm9/global.inc index 61b1d5d4..371e60e9 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5446,6 +5446,7 @@ .extern MOD20_02252DEC
.extern MOD20_022538B8
.extern MOD20_02253F44
+.extern MOD20_02252C34
.extern FUN_0204C0CC
.extern FUN_0204C0D4
.extern FUN_0204C0E8
diff --git a/arm9/modules/31/asm/module_31.s b/arm9/modules/31/asm/module_31.s new file mode 100644 index 00000000..cdf3282a --- /dev/null +++ b/arm9/modules/31/asm/module_31.s @@ -0,0 +1,724 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD31_02254840 +MOD31_02254840: ; 0x02254840 + ldr r3, _02254848 ; =MOD20_02252978 + ldr r0, _0225484C ; =MOD31_02254854 + ldr r1, _02254850 ; =MOD31_02254954 + bx r3 + .align 2, 0 +_02254848: .word MOD20_02252978 +_0225484C: .word MOD31_02254854 +_02254850: .word MOD31_02254954 + thumb_func_end MOD31_02254840 + + thumb_func_start MOD31_02254854 +MOD31_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x20 + 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 MOD31_0225489C + cmp r0, #0 + beq _0225488C + ldr r0, _02254898 ; =MOD31_02254918 + 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 MOD31_02254918 + thumb_func_end MOD31_02254854 + + thumb_func_start MOD31_0225489C +MOD31_0225489C: ; 0x0225489C + push {r3, r4, r5, lr} + add r5, r0, #0 + str r1, [r5, #0x10] + add r0, r1, #0 + add r4, r2, #0 + bl MOD20_02252C3C + str r0, [r5, #0x1c] + mov r0, #1 + str r0, [r5, #8] + ldr r0, [r5, #0x1c] + bl FUN_0204BF84 + str r0, [r5, #4] + add r0, r5, #0 + add r0, #0xc + add r1, r5, #4 + add r2, r4, #0 + bl MOD31_02254A84 + cmp r0, #0 + beq _022548EA + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + mov r0, #8 + str r0, [sp] + ldr r0, _022548F0 ; =0x02254D98 + ldr r2, _022548F4 ; =MOD31_022548F8 + mov r1, #1 + add r3, r5, #0 + bl MOD20_02254130 + str r0, [r5, #0x14] + mov r0, #0 + str r0, [r5, #0x18] + mov r0, #1 + pop {r3, r4, r5, pc} +_022548EA: + mov r0, #0 + pop {r3, r4, r5, pc} + nop +_022548F0: .word 0x02254D98 +_022548F4: .word MOD31_022548F8 + thumb_func_end MOD31_0225489C + + thumb_func_start MOD31_022548F8 +MOD31_022548F8: ; 0x022548F8 + cmp r0, #0 + bne _022548FE + str r1, [r3, #0x18] +_022548FE: + bx lr + thumb_func_end MOD31_022548F8 + + thumb_func_start MOD31_02254900 +MOD31_02254900: ; 0x02254900 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x14] + bl MOD20_02254198 + ldr r0, [r4, #0xc] + bl MOD31_02254AC0 + add r0, r4, #0 + bl FUN_02016A18 + pop {r4, pc} + thumb_func_end MOD31_02254900 + + thumb_func_start MOD31_02254918 +MOD31_02254918: ; 0x02254918 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldrb r0, [r4] + cmp r0, #3 + bhs _0225494E + ldr r0, [r4, #0x10] + ldr r1, [r4, #0x14] + bl MOD20_02252C14 + ldrb r1, [r4] + add r0, r4, #0 + lsl r2, r1, #2 + ldr r1, _02254950 ; =0x02254D9C + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _0225494E + add r0, r4, #0 + bl MOD31_02254900 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0x10] + bl MOD20_022529A0 +_0225494E: + pop {r3, r4, r5, pc} + .align 2, 0 +_02254950: .word 0x02254D9C + thumb_func_end MOD31_02254918 + + thumb_func_start MOD31_02254954 +MOD31_02254954: ; 0x02254954 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD31_02254954 + + thumb_func_start MOD31_0225495C +MOD31_0225495C: ; 0x0225495C + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254964 + b _02254966 +_02254964: + mov r1, #2 +_02254966: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD31_0225495C + + thumb_func_start MOD31_02254970 +MOD31_02254970: ; 0x02254970 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254980 + cmp r0, #1 + beq _02254990 + b _022549AA +_02254980: + ldr r0, [r4, #0xc] + mov r1, #0 + bl MOD31_02254BBC + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _022549AA +_02254990: + ldr r0, [r4, #0xc] + mov r1, #0 + bl MOD31_02254BE0 + cmp r0, #0 + beq _022549AA + ldr r0, [r4, #0x10] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD31_0225495C +_022549AA: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD31_02254970 + + thumb_func_start MOD31_022549B0 +MOD31_022549B0: ; 0x022549B0 + push {r4, lr} + add r4, r0, #0 + ldrb r1, [r4, #2] + cmp r1, #0 + beq _022549C4 + mov r1, #2 + bl MOD31_0225495C + mov r0, #0 + pop {r4, pc} +_022549C4: + ldrb r0, [r4, #1] + cmp r0, #0 + beq _022549D0 + cmp r0, #1 + beq _02254A0A + b _02254A4C +_022549D0: + ldr r0, [r4, #0x18] + cmp r0, #1 + bne _022549EE + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r4, #0xc] + mov r1, #2 + bl MOD31_02254BBC + mov r0, #0 + str r0, [r4, #0x18] + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254A4C +_022549EE: + ldr r0, [r4, #0x10] + bl MOD20_02252C34 + cmp r0, #0 + beq _02254A4C + ldr r0, [r4, #0x1c] + bl FUN_0204BF84 + str r0, [r4, #4] + ldr r0, [r4, #0xc] + mov r1, #3 + bl MOD31_02254BBC + b _02254A4C +_02254A0A: + ldr r0, [r4, #0x18] + cmp r0, #2 + bne _02254A24 + mov r0, #1 + str r0, [r4, #8] + ldr r0, [r4, #0xc] + mov r1, #2 + bl MOD31_02254BBC + mov r0, #0 + str r0, [r4, #0x18] + strb r0, [r4, #1] + b _02254A4C +_02254A24: + cmp r0, #3 + bne _02254A4C + mov r0, #1 + str r0, [r4, #8] + mov r1, #0 + str r1, [r4, #4] + ldr r0, [r4, #0x1c] + bl FUN_0204BF88 + ldr r0, [r4, #0xc] + mov r1, #2 + bl MOD31_02254BBC + ldr r0, [r4, #0xc] + mov r1, #3 + bl MOD31_02254BBC + mov r0, #0 + str r0, [r4, #0x18] + strb r0, [r4, #1] +_02254A4C: + mov r0, #0 + pop {r4, pc} + thumb_func_end MOD31_022549B0 + + thumb_func_start MOD31_02254A50 +MOD31_02254A50: ; 0x02254A50 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254A60 + cmp r0, #1 + beq _02254A70 + b _02254A7E +_02254A60: + ldr r0, [r4, #0xc] + mov r1, #1 + bl MOD31_02254BBC + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254A7E +_02254A70: + ldr r0, [r4, #0xc] + bl MOD31_02254BEC + cmp r0, #0 + beq _02254A7E + mov r0, #1 + pop {r4, pc} +_02254A7E: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD31_02254A50 + + thumb_func_start MOD31_02254A84 +MOD31_02254A84: ; 0x02254A84 + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + mov r0, #8 + mov r1, #0x64 + bl FUN_02016998 + add r4, r0, #0 + beq _02254ABA + 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 MOD31_02254AD4 + str r4, [r6] + mov r0, #1 + pop {r4, r5, r6, pc} +_02254ABA: + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD31_02254A84 + + thumb_func_start MOD31_02254AC0 +MOD31_02254AC0: ; 0x02254AC0 + push {r4, lr} + add r4, r0, #0 + beq _02254AD0 + bl MOD31_02254B88 + add r0, r4, #0 + bl FUN_02016A18 +_02254AD0: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD31_02254AC0 + + thumb_func_start MOD31_02254AD4 +MOD31_02254AD4: ; 0x02254AD4 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + mov r3, #0 + str r3, [sp] + mov r2, #1 + add r7, r0, #0 + str r1, [sp, #0xc] + str r2, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r0, #0xc + mov r1, #2 + bl FUN_02006A34 + mov r0, #0 + str r0, [sp] + mov r2, #1 + mov r3, #0xa + str r2, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r0, #0xc + mov r1, #0x34 + lsl r3, r3, #8 + bl FUN_02006A34 + mov r0, #8 + str r0, [sp] + add r0, r7, #0 + add r0, #0x3c + mov r1, #0xc + mov r2, #0x32 + mov r3, #0x33 + bl MOD20_02253FBC + mov r0, #8 + str r0, [sp] + add r0, r7, #0 + add r0, #0x50 + mov r1, #0xc + mov r2, #3 + mov r3, #4 + bl MOD20_02253FBC + add r2, r7, #0 + ldr r0, [r7, #0x20] + ldr r1, _02254B80 ; =0x02254DA8 + add r2, #0x3c + bl MOD20_02253E74 + mov r1, #0x50 + str r0, [r7, #0x24] + bl MOD20_02253FA4 + add r0, r7, #0 + mov r5, #5 + str r0, [sp, #0x10] + add r0, #0x50 + mov r6, #0 + add r4, r7, #0 + lsl r5, r5, #0x10 + str r0, [sp, #0x10] +_02254B50: + ldr r0, [r7, #0x20] + ldr r1, _02254B84 ; =0x02254DB8 + ldr r2, [sp, #0x10] + bl MOD20_02253E74 + mov r2, #1 + add r1, r5, #0 + lsl r2, r2, #0x12 + str r0, [r4, #0x28] + bl MOD20_02253F64 + mov r0, #1 + lsl r0, r0, #0x10 + add r6, r6, #1 + add r4, r4, #4 + add r5, r5, r0 + cmp r6, #5 + blt _02254B50 + ldr r1, [sp, #0xc] + add r0, r7, #0 + bl MOD31_02254D1C + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_02254B80: .word 0x02254DA8 +_02254B84: .word 0x02254DB8 + thumb_func_end MOD31_02254AD4 + + thumb_func_start MOD31_02254B88 +MOD31_02254B88: ; 0x02254B88 + push {r4, r5, r6, lr} + add r6, r0, #0 + ldr r0, [r6, #0x20] + ldr r1, [r6, #0x24] + bl MOD20_02253F14 + mov r4, #0 + add r5, r6, #0 +_02254B98: + ldr r0, [r6, #0x20] + ldr r1, [r5, #0x28] + bl MOD20_02253F14 + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #5 + blt _02254B98 + add r0, r6, #0 + add r0, #0x3c + bl MOD20_02254014 + add r6, #0x50 + add r0, r6, #0 + bl MOD20_02254014 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD31_02254B88 + + thumb_func_start MOD31_02254BBC +MOD31_02254BBC: ; 0x02254BBC + 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, _02254BDC ; =0x02254DE4 + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254BDC: .word 0x02254DE4 + thumb_func_end MOD31_02254BBC + + thumb_func_start MOD31_02254BE0 +MOD31_02254BE0: ; 0x02254BE0 + ldr r3, _02254BE8 ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254BE8: .word MOD20_02253794 + thumb_func_end MOD31_02254BE0 + + thumb_func_start MOD31_02254BEC +MOD31_02254BEC: ; 0x02254BEC + ldr r3, _02254BF4 ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254BF4: .word MOD20_022537B8 + thumb_func_end MOD31_02254BEC + + thumb_func_start MOD31_02254BF8 +MOD31_02254BF8: ; 0x02254BF8 + 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 MOD31_02254BF8 + + thumb_func_start MOD31_02254C0C +MOD31_02254C0C: ; 0x02254C0C + 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, _02254C90 ; =0x02254DC8 + 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, #0x31 + 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, #0x30 + 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, _02254C94 ; =0x04001000 + ldr r0, _02254C98 ; =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 MOD31_02254BF8 + add sp, #0x14 + pop {r4, r5, pc} + nop +_02254C90: .word 0x02254DC8 +_02254C94: .word 0x04001000 +_02254C98: .word 0xFFFFE0FF + thumb_func_end MOD31_02254C0C + + thumb_func_start MOD31_02254C9C +MOD31_02254C9C: ; 0x02254C9C + 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 MOD31_02254BF8 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD31_02254C9C + + thumb_func_start MOD31_02254CB8 +MOD31_02254CB8: ; 0x02254CB8 + push {r3, r4, r5, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + ldr r0, [r4] + ldr r0, [r0, #4] + cmp r0, #0 + beq _02254CD2 + cmp r0, #1 + beq _02254CE2 + b _02254CEA +_02254CD2: + ldr r0, _02254CF4 ; =0x00000669 + bl MOD20_02252B28 + ldr r0, [r4, #0x24] + mov r1, #1 + bl MOD20_02253F28 + b _02254CEA +_02254CE2: + ldr r0, [r4, #0x24] + mov r1, #0 + bl MOD20_02253F28 +_02254CEA: + add r0, r5, #0 + bl MOD31_02254BF8 + pop {r3, r4, r5, pc} + nop +_02254CF4: .word 0x00000669 + thumb_func_end MOD31_02254CB8 + + thumb_func_start MOD31_02254CF8 +MOD31_02254CF8: ; 0x02254CF8 + 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 + add r1, r0, #0 + add r0, r4, #0 + bl MOD31_02254D1C + add r0, r5, #0 + bl MOD31_02254BF8 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD31_02254CF8 + + thumb_func_start MOD31_02254D1C +MOD31_02254D1C: ; 0x02254D1C + push {r4, r5, r6, r7, lr} + sub sp, #0xc + add r7, r0, #0 + ldr r0, [r1] + ldr r5, _02254D80 ; =0x04000280 + str r0, [sp, #4] + ldr r0, _02254D84 ; =0x00002710 + lsr r4, r5, #0xb + str r0, [sp] + mov r0, #0 + str r0, [sp, #8] + lsr r6, r5, #0xb +_02254D34: + mov r0, #0 + strh r0, [r5] + ldr r1, [sp, #4] + ldr r0, _02254D88 ; =0x04000290 + str r1, [r0] + ldr r1, [sp] + str r1, [r0, #8] + ldr r0, _02254D8C ; =0x04000298 + mov r1, #0 + str r1, [r0, #4] +_02254D48: + ldrh r0, [r5] + tst r0, r4 + bne _02254D48 + ldr r1, _02254D90 ; =0x040002A0 + ldr r0, [r7, #0x28] + ldr r1, [r1] + bl MOD20_02253F28 +_02254D58: + ldrh r0, [r5] + tst r0, r6 + bne _02254D58 + ldr r0, _02254D94 ; =0x040002A8 + mov r1, #0xa + ldr r0, [r0] + str r0, [sp, #4] + ldr r0, [sp] + bl _u32_div_f + str r0, [sp] + ldr r0, [sp, #8] + add r7, r7, #4 + add r0, r0, #1 + str r0, [sp, #8] + cmp r0, #5 + blt _02254D34 + add sp, #0xc + pop {r4, r5, r6, r7, pc} + nop +_02254D80: .word 0x04000280 +_02254D84: .word 0x00002710 +_02254D88: .word 0x04000290 +_02254D8C: .word 0x04000298 +_02254D90: .word 0x040002A0 +_02254D94: .word 0x040002A8 + thumb_func_end MOD31_02254D1C + + .section .data + ; 0x02254D98 + .incbin "baserom.nds", 0x28D758, 0xA8 |