diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-04-26 16:09:45 -0400 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-04-26 16:09:45 -0400 |
commit | 03e537113245d91ea32ee899cbbddc083a2c3023 (patch) | |
tree | 10b5e9c901126493e271ba96bab0e04caf3f0cde | |
parent | b6ba429e8c355db4c79044e9b07a652019cade95 (diff) |
arm7 sbss section
-rw-r--r-- | arm7/arm7.lcf | 9 | ||||
-rw-r--r-- | arm7/asm/arm7_rom.s | 143 | ||||
-rw-r--r-- | arm7/asm/crt0.s | 139 |
3 files changed, 147 insertions, 144 deletions
diff --git a/arm7/arm7.lcf b/arm7/arm7.lcf index 5552835b..fdffb4d0 100644 --- a/arm7/arm7.lcf +++ b/arm7/arm7.lcf @@ -1,5 +1,6 @@ MEMORY { .text (RX) : ORIGIN=0x02380000, LENGTH=0 + .sbss (RWX) : ORIGIN=AFTER(.text), LENGTH=0 .itcm (RWX) : ORIGIN=0x027E0000, LENGTH=0 .dtcm (RWX) : ORIGIN=0x037F8000, LENGTH=0 .ewram (RW) : ORIGIN=0x06000000, LENGTH=0 @@ -9,9 +10,15 @@ MEMORY { SECTIONS { #include "undefined_syms.txt" .text : AT (0x0) { - arm7_rom.o (.text) + crt0.o (.text) } > .text + .sbss : { + SDK_STATIC_BSS_START = .; + SDK_STATIC_BSS_END = .; + } > .sbss + + SDK_AUTOLOAD_START = .; .itcm : AT (0x1b0) { arm7_rom.o (.itcm) } > .itcm diff --git a/arm7/asm/arm7_rom.s b/arm7/asm/arm7_rom.s index 6691475b..d22e0d18 100644 --- a/arm7/asm/arm7_rom.s +++ b/arm7/asm/arm7_rom.s @@ -1,150 +1,7 @@ /* arm7_rom.s TODO: Disassemble */ .include "asm/macros.inc" .include "global.inc" - .global ARM7AutoLoad - .section .text - arm_func_start _start - -_start: - 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 SDK_STATIC_BSS_START -_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 _start - - 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 SDK_AUTOLOAD_LIST - .word SDK_AUTOLOAD_LIST_END - .word SDK_AUTOLOAD_START - .word SDK_STATIC_BSS_START - .word SDK_STATIC_BSS_END - arm_func_end FUN_238015C - - .balign 16, 0 - - .global SDK_STATIC_BSS_START - .global SDK_STATIC_BSS_END -SDK_STATIC_BSS_START: -SDK_STATIC_BSS_END: - - .global SDK_AUTOLOAD_START -SDK_AUTOLOAD_START: .section .itcm .incbin "baserom.nds", 0x30D1B0, 0xDC diff --git a/arm7/asm/crt0.s b/arm7/asm/crt0.s new file mode 100644 index 00000000..d25a70dd --- /dev/null +++ b/arm7/asm/crt0.s @@ -0,0 +1,139 @@ + .include "asm/macros.inc" + .include "global.inc" + .global ARM7AutoLoad + + .section .text + arm_func_start _start + +_start: + 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 SDK_STATIC_BSS_START +_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 _start + + 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 + arm_func_end FUN_238015C + +_2380198: + .word SDK_AUTOLOAD_LIST + .word SDK_AUTOLOAD_LIST_END + .word SDK_AUTOLOAD_START + .word SDK_STATIC_BSS_START + .word SDK_STATIC_BSS_END + + .balign 16, 0 |