diff options
Diffstat (limited to 'asm')
-rw-r--r-- | asm/OS_arm9.s | 216 | ||||
-rw-r--r-- | asm/SDK_AUTOLOAD_LIST.s | 20 | ||||
-rw-r--r-- | asm/arm7_rom.s | 83 | ||||
-rw-r--r-- | asm/crt0.s | 5 | ||||
-rw-r--r-- | asm/rom2_2.s | 28 |
5 files changed, 315 insertions, 37 deletions
diff --git a/asm/OS_arm9.s b/asm/OS_arm9.s new file mode 100644 index 00000000..f7cbb69f --- /dev/null +++ b/asm/OS_arm9.s @@ -0,0 +1,216 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + + .section .itcm + ; Used in autoload + arm_func_start OS_IrqHandler +OS_IrqHandler: + stmfd sp!, {lr} + mov ip, #0x04000000 + add ip, ip, #0x210 + ldr r1, [ip, #-8] + cmp r1, #0 + ldmeqfd sp!, {pc} + ldmia ip, {r1, r2} + ands r1, r1, r2 + ldmeqfd sp!, {pc} + mov r3, #0x80000000 +_02106FC8: + clz r0, r1 + bics r1, r1, r3, lsr r0 + bne _02106FC8 + mov r1, r3, lsr r0 + str r1, [ip, #0x4] + rsbs r0, r0, #0x1f + ldr r1, _02106FF0 ; =0x027E0000 + ldr r0, [r1, r0, lsl #2] + ldr lr, _02106FF4 ; =0x01FF8058 + bx r0 +_02106FF0: .word OS_IRQTable +_02106FF4: .word OS_IrqHandler_ThreadSwitch + + arm_func_start OS_IrqHandler_ThreadSwitch +OS_IrqHandler_ThreadSwitch: ; + ldr ip, _02107144 + mov r3, #0x0 + ldr ip, [ip] + mov r2, #0x1 + cmp ip, #0x0 + beq _02107048 +_02107010: + str r2, [ip, #0x64] + str r3, [ip, #0x78] + str r3, [ip, #0x7c] + ldr r0, [ip, #0x80] + str r3, [ip, #0x80] + mov ip, r0 + cmp ip, #0x0 + bne _02107010 + ldr ip, _02107144 + str r3, [ip] + str r3, [ip, #0x4] + ldr ip, _02107148 + mov r1, #0x1 + strh r1, [ip] +_02107048: + ldr ip, _02107148 + ldrh r1, [ip] + cmp r1, #0x0 + ldreq pc, [sp], #0x4 + mov r1, #0x0 + strh r1, [ip] + mov r3, #0xd2 + msr CPSR_c, r3 + add r2, ip, #0x8 + ldr r1, [r2] +_02107070: + cmp r1, #0x0 + ldrneh r0, [r1, #0x64] + cmpne r0, #0x1 + ldrne r1, [r1, #0x68] + bne _02107070 + cmp r1, #0x0 + bne _02107098 +_0210708C: + mov r3, #0x92 + msr CPSR_c, r3 + ldr pc, [sp], #0x4 +_02107098: + ldr r0, [ip, #0x4] + cmp r1, r0 + beq _0210708C + ldr r3, [ip, #0xC] + cmp r3, #0x0 + beq _021070C0 + stmdb sp!, {r0, r1, ip} + mov lr, pc + bx r3 + ldmia sp!, {r0, r1, ip} +_021070C0: + str r1, [ip, #0x4] + mrs r2, SPSR + str r2, [r0, #0x0]! + stmdb sp!, {r0, r1} + add r0, r0, #0x0 + add r0, r0, #0x48 + ldr r1, _0210714C + blx r1 + ldmia sp!, {r0, r1} + ldmib sp!, {r2, r3} + stmib r0!, {r2, r3} + ldmib sp!, {r2, r3, ip, lr} + stmib r0!, {r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^ + stmib r0!, {lr} + mov r3, #0xd3 + msr CPSR_c, r3 + stmib r0!, {sp} + stmfd sp!, {r1} + add r0, r1, #0x0 + add r0, r0, #0x48 + ldr r1, _02107150 + blx r1 + ldmfd sp!, {r1} + ldr sp, [r1, #0x44] + mov r3, #0xd2 + msr CPSR_c, r3 + ldr r2, [r1, #0x0]! + msr SPSR_fc, r2 + ldr lr, [r1, #0x40] + ldmib r1!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^ + nop + stmda sp!, {r0, r1, r2, r3, ip, lr} + ldmfd sp!, {pc} +_02107144: .word OSi_IrqThreadQueue +_02107148: .word OSi_ThreadInfo +_0210714C: .word CP_SaveContext +_02107150: .word CP_RestoreContext + + .section .itcm + arm_func_start OSi_DoBoot +OSi_DoBoot: ; 02107154 + mov ip, #0x04000000 + str ip, [ip, #0x208] + ldr r1, _02107200 + add r1, r1, #0x3fc0 + add r1, r1, #0x3c + mov r0, #0x0 + str r0, [r1] + ldr r1, _02107204 +_02107174: + ldrh r0, [r1] + and r0, r0, #0xf + cmp r0, #0x1 + bne _02107174 + mov r0, #0x100 + strh r0, [r1] + mov r0, #0x0 + ldr r3, _02107208 + ldr r4, [r3] + ldr r1, _0210720C + mov r2, #0x80 + bl OSi_CpuClear32 + str r4, [r3] + ldr r1, _02107210 + mov r2, #0x18 + bl OSi_CpuClear32 + ldr r1, _02107214 + strh r0, [r1] + ldr r1, _02107218 + mov r2, #0x64 + bl OSi_CpuClear32 + ldr r1, _02107204 +_021071CC: + ldrh r0, [r1] + and r0, r0, #0xf + cmp r0, #0x1 + beq _021071CC + mov r0, #0x0 + strh r0, [r1] + ldr r3, _0210721C + ldr ip, [r3, #0x24] + mov lr, ip + ldr fp, _02107210 + ldmia fp, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl} + mov fp, #0x0 + bx ip +_02107200: .word SDK_AUTOLOAD_DTCM_START +_02107204: .word 0x04000180 +_02107208: .word 0x027FFD9C +_0210720C: .word 0x027FFD80 +_02107210: .word 0x027FFF80 +_02107214: .word 0x027FFF98 +_02107218: .word 0x027FFF9C +_0210721C: .word 0x027FFE00 + + arm_func_start OSi_CpuClear32 +OSi_CpuClear32: + .incbin "baserom.nds", 0x10B220, 0x480 + + .section .dtcm + .global OS_IRQTable +OS_IRQTable: ; 10b6a0 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OSi_IrqTimer0 ; 020c9cbc + .word OSi_IrqTimer1 ; 020c9cac + .word OSi_IrqTimer2 ; 020c9c9c + .word OSi_IrqTimer3 ; 020c9c8c + .word OS_IrqDummy ; 020c9da8 + .word OSi_IrqDma0 ; 020c9cfc + .word OSi_IrqDma1 ; 020c9cec + .word OSi_IrqDma2 ; 020c9cdc + .word OSi_IrqDma3 ; 020c9ccc + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .word OS_IrqDummy ; 020c9da8 + .balign 16, 0 +OSi_IrqThreadQueue: diff --git a/asm/SDK_AUTOLOAD_LIST.s b/asm/SDK_AUTOLOAD_LIST.s new file mode 100644 index 00000000..8043d616 --- /dev/null +++ b/asm/SDK_AUTOLOAD_LIST.s @@ -0,0 +1,20 @@ + .include "asm/macros.inc" + .section .data + + .global SDK_AUTOLOAD_LIST +SDK_AUTOLOAD_LIST: ; 0x02107700 + .word 0x01FF8000 + .word 0x00000700 + .word 0x00000000 + + .word 0x027e0000 + .word 0x00000060 + .word 0x00000020 + + .word 0x02400000 + .word 0x00000000 + .word 0x00000000 + + .global SDK_AUTOLOAD_LIST_END +SDK_AUTOLOAD_LIST_END: + diff --git a/asm/arm7_rom.s b/asm/arm7_rom.s index a18e8565..9dcd3224 100644 --- a/asm/arm7_rom.s +++ b/asm/arm7_rom.s @@ -61,7 +61,7 @@ _023800a4: ldr r1, _23800f8 ldr lr, _23800fc bx r1 -_23800cc: .word UNK_23801B0 +_23800cc: .word FUN_023801B0 _23800d0: .word 0x0380ff00 _23800d4: .word 0x0380ffc0 _23800d8: .word 0x0380ff80 @@ -129,17 +129,84 @@ _0238018c: _2380194: .word 0x027ffffa _2380198: .word UNK_23A92F8 - .word UNK_23A92FC - .word UNK_23801B0 - .word UNK_23801B0 - .word UNK_23801B0 + .word UNK_23A931C + .word FUN_023801B0 + .word FUN_023801B0 + .word FUN_023801B0 .word 0x00000000 arm_func_end FUN_238015C -UNK_23801B0: - .incbin "baserom.nds", 0x30D1B0, 0x29148 + arm_func_start FUN_023801B0 +FUN_023801B0: + .incbin "baserom.nds", 0x30D1B0, 0x91B0 + + thumb_func_start SVC_SoftReset +SVC_SoftReset: ; 0x02389360 + swi 0 + bx lr + + thumb_func_start SVC_WaitByLoop +SVC_WaitByLoop: ; 0x02389364 + swi 3 + bx lr + + thumb_func_start SVC_WaitIntr +SVC_WaitIntr: ; 0x02389368 + ldr r2, =0x04000000 + mov ip, r2 + mov r2, #0x0 + swi 4 + bx lr + .pool + + thumb_func_start SVC_WaitVBlankIntr +SVC_WaitVBlankIntr: + mov r2, #0x0 + swi 5 + bx lr + + non_word_aligned_thumb_func_start SVC_Halt +SVC_Halt: + swi 6 + bx lr + + non_word_aligned_thumb_func_start SVC_Stop +SVC_Stop: + swi 7 + bx lr + + non_word_aligned_thumb_func_start SVC_SoundBias +SVC_SoundBias: + swi 8 + bx lr + + non_word_aligned_thumb_func_start SVC_SoundBiasSet +SVC_SoundBiasSet: + add r1, r0, #0x0 + mov r0, #0x1 + swi 8 + bx lr + + non_word_aligned_thumb_func_start SVC_SoundBiasReset +SVC_SoundBiasReset: + add r1, r0, #0x0 + mov r0, #0x0 + swi 8 + bx lr + + non_word_aligned_thumb_func_start SVC_Div +SVC_Div: + swi 9 + bx lr + + non_word_aligned_thumb_func_start SVC_DivRem +SVC_DivRem: + swi 9 + add r0, r1, #0x0 + bx lr + .incbin "baserom.nds", 0x3163a4, 0x1ff54 UNK_23A92F8: .incbin "baserom.nds", 0x3362F8, 0x24 -UNK_23A92FC: +UNK_23A931C: @@ -264,7 +264,10 @@ _start_ModuleParams: .word SDK_STATIC_BSS_END .word 0x00000000 - .byte 0x31, 0x75, 0x02, 0x03, 0x21, 0x06, 0xC0, 0xDE, 0xDE, 0xC0, 0x06, 0x21 + .ascii "1u" ; 31 75 + .byte 0x02, 0x03 + .word 0xdec00621 + .byte 0xde, 0xc0, 0x06, 0x21 # strings .balign 4 diff --git a/asm/rom2_2.s b/asm/rom2_2.s index 0682a6b0..d5055773 100644 --- a/asm/rom2_2.s +++ b/asm/rom2_2.s @@ -732,31 +732,3 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203AFA4 .incbin "baserom.nds", 0xF80A0, 0x12F00 - - ; Used in autoload - .global SDK_AUTOLOAD_START - .global SDK_STATIC_BSS_START -SDK_AUTOLOAD_START: -SDK_STATIC_BSS_START: ; 0x02106FA0 -.incbin "baserom.nds", 0x10AFA0, 0x700 - - .global UNK_021076A0 -UNK_021076A0: -.incbin "baserom.nds", 0x10B6A0, 0x60 - - .global SDK_AUTOLOAD_LIST -SDK_AUTOLOAD_LIST: ; 0x02107700 - .word 0x01FF8000 - .word 0x00000700 - .word 0x00000000 - - .word 0x027e0000 - .word 0x00000060 - .word 0x00000020 - - .word 0x02400000 - .word 0x00000000 - .word 0x00000000 - - .global SDK_AUTOLOAD_LIST_END -SDK_AUTOLOAD_LIST_END: |