diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-04-24 22:01:43 -0400 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-04-24 22:01:43 -0400 |
commit | bf7eb80ebd3c9b61bc436aaab88296bab9e5836f (patch) | |
tree | 05dbca8cdd64a9a2a2b4b2d9f81aaa0caf62808d | |
parent | 534e5b6a9081df7981c505a59572c6af0e923911 (diff) |
Partial dism of OS_arm9 autoload sections
-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 | ||||
-rw-r--r-- | global.inc | 14 | ||||
-rw-r--r-- | pokediamond.lcf | 29 | ||||
-rw-r--r-- | undefined_syms.txt | 14 |
8 files changed, 366 insertions, 43 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: @@ -3302,3 +3302,17 @@ .extern SDK_STATIC_BSS_START
.extern SDK_STATIC_BSS_END
.extern OS_IrqHandler
+.extern OS_IRQTable
+.extern OSi_IrqThreadQueue
+.extern OSi_ThreadInfo
+.extern CP_SaveContext
+.extern CP_RestoreContext
+.extern OS_IrqDummy
+.extern OSi_IrqDma0
+.extern OSi_IrqDma1
+.extern OSi_IrqDma2
+.extern OSi_IrqDma3
+.extern OSi_IrqTimer0
+.extern OSi_IrqTimer1
+.extern OSi_IrqTimer2
+.extern OSi_IrqTimer3
diff --git a/pokediamond.lcf b/pokediamond.lcf index 19b80331..0f32038f 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -1,8 +1,11 @@ /* TEST */ MEMORY { header (RWX) : ORIGIN=0, LENGTH=0 - arm9 (RWX) : ORIGIN=0x2000000, LENGTH=0 - unk_10b724 (RWX) : ORIGIN=0, LENGTH=0 + arm9.text (RWX) : ORIGIN=0x02000000, LENGTH=0 + arm9.data (RWX) : ORIGIN=0x020EC710, LENGTH=0 + arm9.itcm (RWX) : ORIGIN=0x01FF8000, LENGTH=0 + arm9.dtcm (RWX) : ORIGIN=0x027E0000, LENGTH=0 + arm9.autoload (RWX) : ORIGIN=0x02107700, LENGTH=0 arm9overlay (RWX) : ORIGIN=0, LENGTH=0 arm7 (RWX) : ORIGIN=0x2380000, LENGTH=0 filenametable (RWX) : ORIGIN=0, LENGTH=0 @@ -388,6 +391,7 @@ SECTIONS { scrcmd.o (.text) unk_02046030.o (.text) rom1.5.o (.text) + OS_arm9.o (.text) unk_020C9C0C.o (.text) PM_arm9.o (.text) RTC_arm9.o (.text) @@ -396,14 +400,29 @@ SECTIONS { CTRDG_arm9.o (.text) MATH_arm9.o (.text) STD_arm9.o (.text) + } > arm9.text + .arm9.data : AT (0xF0710) { rom2.o (.data) string_util.o (.data) rom2_2.o (.data) - } > arm9 + } > arm9.data - .unk_10b724 : AT (0x10B724) { + SDK_AUTOLOAD_START = .; + SDK_STATIC_BSS_START = .; + + .arm9.itcm : AT (0x10AFA0) { + OS_arm9.o (.itcm) + } > arm9.itcm + + .arm9.dtcm : AT (0x10B6A0) { + SDK_AUTOLOAD_DTCM_START = .; + OS_arm9.o (.dtcm) + } > arm9.dtcm + + .arm9.autoload : AT (0x10B700) { + SDK_AUTOLOAD_LIST.o (.data) unk_10b724.o (.text) - } > unk_10b724 + } > arm9.autoload .arm9overlay : AT (0x10B800) { arm9overlay.o (.text) diff --git a/undefined_syms.txt b/undefined_syms.txt index 9282ff4a..f707c199 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1,6 +1,5 @@ CONST_34 = 0x00000034; CONST_3F = 0x0000003F; -OS_IrqHandler = 0x01FF8000; FUN_01FF84A4 = 0x01FF84A4; FUN_01FF84E4 = 0x01FF84E4; FUN_01FF8544 = 0x01FF8544; @@ -734,6 +733,19 @@ FUN_02252534 = 0x02252534; FUN_02252538 = 0x02252538; FUN_022567E0 = 0x022567E0; SDK_AUTOLOAD_DTCM_START = 0x027E0000; +OSi_IrqThreadQueue = 0x027E0060; +OSi_ThreadInfo = 0x021D3498; +CP_SaveContext = 0x020D3648; +CP_RestoreContext = 0x020D3688; SDK_STATIC_BSS_END = 0x021D74E0; gUnk027FFC20 = 0x027FFC20; FUN_02000B60 = 0x02000B60; +OS_IrqDummy = 0x020c9da8; +OSi_IrqDma0 = 0x020c9cfc; +OSi_IrqDma1 = 0x020c9cec; +OSi_IrqDma2 = 0x020c9cdc; +OSi_IrqDma3 = 0x020c9ccc; +OSi_IrqTimer0 = 0x020c9cbc; +OSi_IrqTimer1 = 0x020c9cac; +OSi_IrqTimer2 = 0x020c9c9c; +OSi_IrqTimer3 = 0x020c9c8c; |