diff options
-rw-r--r-- | asm/arm7_rom.s | 147 |
1 files changed, 141 insertions, 6 deletions
diff --git a/asm/arm7_rom.s b/asm/arm7_rom.s index 9093c546..905dc7e0 100644 --- a/asm/arm7_rom.s +++ b/asm/arm7_rom.s @@ -1,10 +1,145 @@ /* arm7_rom.s TODO: Disassemble */ + .include "asm/macros.inc" + .global ARM7AutoLoad .section .text - .global Entry_ARM7 -Entry_ARM7: @ 0x02380000 - .incbin "baserom.nds", 0x30D000, 0x158 + arm_func_start Entry_ARM7 - .global ARM7AutoLoad -ARM7AutoLoad: @ 0x02380158 - .incbin "baserom.nds", 0x30D158, 0x291C4 +Entry_ARM7: + mov ip, #67108864 @ 0x4000000 + str ip, [ip, #520] @ 0x208 + ldr r1, _23800cc + mov r0, #58720256 @ 0x3800000 + cmp r0, r1 + movpl r1, r0 + ldr r2, _23800d0 + mov r0, #0 +_02380020: + cmp r1, r2 + stmltia r1!, {r0} + blt _02380020 + mov r0, #19 + msr CPSR_c, r0 + ldr sp, _23800d4 + mov r0, #18 + msr CPSR_c, r0 + ldr r0, _23800d8 + mov sp, r0 + ldr r1, _23800dc + sub r1, r0, r1 + mov r0, #31 + msr CPSR_fsxc, r0 + sub sp, r1, #4 + ldr r0, _23800e0 + ldr r1, _23800e4 + add r2, r1, #352 @ 0x160 +_02380068: + ldr r3, [r0], #4 + str r3, [r1], #4 + cmp r1, r2 + bmi _02380068 + ldr r0, _23800e8 + add r2, r1, #32 +_02380080: + ldr r3, [r0], #4 + str r3, [r1], #4 + cmp r1, r2 + bmi _02380080 + bl FUN_2380100 + ldr r0, _23800ec + ldr r1, [r0, #12] + ldr r2, [r0, #16] + mov r0, #0 +_023800a4: + cmp r1, r2 + strcc r0, [r1], #4 + bcc _023800a4 + bl FUN_238015C + ldr r1, _23800f0 + ldr r0, _23800f4 + str r0, [r1] + ldr r1, _23800f8 + ldr lr, _23800fc + bx r1 +_23800cc: .word UNK_23801B0 +_23800d0: .word 0x0380ff00 +_23800d4: .word 0x0380ffc0 +_23800d8: .word 0x0380ff80 +_23800dc: .word 0x00000400 +_23800e0: .word 0x023fe940 +_23800e4: .word 0x027ffa80 +_23800e8: .word 0x023fe904 +_23800ec: .word _2380198 +_23800f0: .word 0x0380fffc +_23800f4: .word 0x037f853c +_23800f8: .word 0x037f8468 +_23800fc: .word 0xffff0000 + arm_func_end Entry_ARM7 + + arm_func_start FUN_2380100 +FUN_2380100: + ldr r0, _2380154 + ldr r1, [r0] + ldr r2, [r0, #4] + ldr r3, [r0, #8] +_02380110: + cmp r1, r2 + beq _02380150 + ldr r4, [r1], #4 + ldr r5, [r1], #4 + add r6, r4, r5 +_02380124: + cmp r4, r6 + ldrmi r7, [r3], #4 + strmi r7, [r4], #4 + bmi _02380124 + ldr r5, [r1], #4 + add r6, r4, r5 + mov r7, #0 +_02380140: + cmp r4, r6 + strcc r7, [r4], #4 + bcc _02380140 + beq _02380110 +_02380150: + b ARM7AutoLoad +_2380154: .word _2380198 +ARM7AutoLoad: + bx lr + arm_func_end FUN_2380100 + + arm_func_start FUN_238015C +FUN_238015C: + mov r0, #1 + mov r1, #0 + ldr r2, _2380194 + sub r3, r2, #4194304 @ 0x400000 +_0238016c: + strh r1, [r2] + ldrh ip, [r3] + cmp r1, ip + movne r0, #2 + bne _0238018c + add r1, r1, #1 + cmp r1, #2 + bne _0238016c +_0238018c: + strh r0, [r2] + bx lr +_2380194: .word 0x027ffffa +_2380198: + .word UNK_23A92F8 + .word UNK_23A92FC + .word UNK_23801B0 + .word UNK_23801B0 + .word UNK_23801B0 + .word 0x00000000 + arm_func_end FUN_238015C + +UNK_23801B0: + .incbin "baserom.nds", 0x30D1B0, 0x29148 + +UNK_23A92F8: + .incbin "baserom.nds", 0x3362F8, 0x24 + +UNK_23A92FC: |