summaryrefslogtreecommitdiff
path: root/arm9/lib/src
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2020-05-29 14:45:08 +0100
committerred031000 <rubenru09@aol.com>2020-05-29 14:46:26 +0100
commit77463372468870d20c6751fff4d7708f93fae571 (patch)
tree2a9dd929bae96d370cb766a6a0800b116ad78b86 /arm9/lib/src
parent03100d9a6c0da43f02e3b1f3d3e062ecf884d8b4 (diff)
more itcm, asm funcs in OS_reset.c
Diffstat (limited to 'arm9/lib/src')
-rw-r--r--arm9/lib/src/OS_reset.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/arm9/lib/src/OS_reset.c b/arm9/lib/src/OS_reset.c
index b3aff389..6389fe45 100644
--- a/arm9/lib/src/OS_reset.c
+++ b/arm9/lib/src/OS_reset.c
@@ -7,6 +7,7 @@
#include "MB_mb.h"
#include "OS_terminate_proc.h"
#include "OS_interrupt.h"
+#include "sections.h"
static u16 OSi_IsInitReset = 0;
vu16 OSi_IsResetOccurred = 0;
@@ -60,3 +61,64 @@ ARM_FUNC void OS_ResetSystem(u32 parameter) {
OSi_SendToPxi(OS_PXI_COMMAND_RESET);
OSi_DoResetSystem(); //oh boy this is in itcm, that's gonna be fun to deal with Kappa
}
+
+#pragma section ITCM begin
+ARM_FUNC asm void OSi_DoBoot(void)
+{
+ mov ip, #0x04000000
+ str ip, [ip, #0x208]
+ ldr r1, =SDK_AUTOLOAD_DTCM_START
+ add r1, r1, #0x3fc0
+ add r1, r1, #0x3c
+ mov r0, #0x0
+ str r0, [r1]
+ ldr r1, =REG_SUBPINTF_ADDR
+_01FF81D4:
+ ldrh r0, [r1]
+ and r0, r0, #0xf
+ cmp r0, #0x1
+ bne _01FF81D4
+ mov r0, #0x100
+ strh r0, [r1]
+ mov r0, #0x0
+ ldr r3, =HW_EXCP_VECTOR_MAIN
+ ldr r4, [r3]
+ ldr r1, =HW_BIOS_EXCP_STACK_MAIN
+ mov r2, #0x80
+ bl OSi_CpuClear32
+ str r4, [r3]
+ ldr r1, =HW_PXI_SIGNAL_PARAM_ARM9
+ mov r2, #0x18
+ bl OSi_CpuClear32
+ ldr r1, =HW_WM_RSSI_POOL
+ strh r0, [r1]
+ ldr r1, =HW_COMPONENT_PARAM
+ mov r2, #0x64
+ bl OSi_CpuClear32
+ ldr r1, =REG_SUBPINTF_ADDR
+_01FF822C:
+ ldrh r0, [r1]
+ and r0, r0, #0xf
+ cmp r0, #0x1
+ beq _01FF822C
+ mov r0, #0x0
+ strh r0, [r1]
+ ldr r3, =HW_ROM_HEADER_BUF
+ ldr ip, [r3, #0x24]
+ mov lr, ip
+ ldr r11, =HW_PXI_SIGNAL_PARAM_ARM9
+ ldmia r11, {r0-r10}
+ mov r11, #0x0
+ bx ip
+}
+
+ARM_FUNC static asm void OSi_CpuClear32(register u32 data, register void *destp, register u32 size)
+{
+ add ip, r1, r2
+_01FF8284:
+ cmp r1, ip
+ stmltia r1!, {r0}
+ blt _01FF8284
+ bx lr
+}
+#pragma section ITCM end