summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-04-24 22:01:43 -0400
committerPikalaxALT <PikalaxALT@gmail.com>2020-04-24 22:01:43 -0400
commitbf7eb80ebd3c9b61bc436aaab88296bab9e5836f (patch)
tree05dbca8cdd64a9a2a2b4b2d9f81aaa0caf62808d
parent534e5b6a9081df7981c505a59572c6af0e923911 (diff)
Partial dism of OS_arm9 autoload sections
-rw-r--r--asm/OS_arm9.s216
-rw-r--r--asm/SDK_AUTOLOAD_LIST.s20
-rw-r--r--asm/arm7_rom.s83
-rw-r--r--asm/crt0.s5
-rw-r--r--asm/rom2_2.s28
-rw-r--r--global.inc14
-rw-r--r--pokediamond.lcf29
-rw-r--r--undefined_syms.txt14
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:
diff --git a/asm/crt0.s b/asm/crt0.s
index cfbab5f0..fe2ca894 100644
--- a/asm/crt0.s
+++ b/asm/crt0.s
@@ -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:
diff --git a/global.inc b/global.inc
index 622c7c7f..2e819946 100644
--- a/global.inc
+++ b/global.inc
@@ -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;