diff options
author | red031000 <rubenru09@aol.com> | 2020-05-29 14:45:08 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2020-05-29 14:46:26 +0100 |
commit | 77463372468870d20c6751fff4d7708f93fae571 (patch) | |
tree | 2a9dd929bae96d370cb766a6a0800b116ad78b86 /arm9/lib/src | |
parent | 03100d9a6c0da43f02e3b1f3d3e062ecf884d8b4 (diff) |
more itcm, asm funcs in OS_reset.c
Diffstat (limited to 'arm9/lib/src')
-rw-r--r-- | arm9/lib/src/OS_reset.c | 62 |
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 |