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 | |
parent | 03100d9a6c0da43f02e3b1f3d3e062ecf884d8b4 (diff) |
more itcm, asm funcs in OS_reset.c
-rw-r--r-- | arm9/arm9.lcf | 1 | ||||
-rw-r--r-- | arm9/asm/arm9_itcm.s | 71 | ||||
-rw-r--r-- | arm9/global.inc | 1 | ||||
-rw-r--r-- | arm9/lib/include/OS_reset.h | 2 | ||||
-rw-r--r-- | arm9/lib/include/mmap.h | 9 | ||||
-rw-r--r-- | arm9/lib/include/registers.h | 3 | ||||
-rw-r--r-- | arm9/lib/src/OS_reset.c | 62 |
7 files changed, 80 insertions, 69 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 1153d481..061ec8d5 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -964,6 +964,7 @@ SECTIONS { . = ALIGN(32); SDK_AUTOLOAD.ITCM.START = .; OS_irqHandler.o (.itcm) + OS_reset.o (.itcm) arm9_itcm.o (.text) . = ALIGN(32); SDK_AUTOLOAD.ITCM.END = .; diff --git a/arm9/asm/arm9_itcm.s b/arm9/asm/arm9_itcm.s index e53c9b74..33a26758 100644 --- a/arm9/asm/arm9_itcm.s +++ b/arm9/asm/arm9_itcm.s @@ -3,72 +3,7 @@ .section .text ; OS - arm_func_start OSi_DoBoot -OSi_DoBoot: ; 0x01FF81B4 - mov ip, #0x04000000 - str ip, [ip, #0x208] - ldr r1, _01FF8260 - add r1, r1, #0x3fc0 - add r1, r1, #0x3c - mov r0, #0x0 - str r0, [r1] - ldr r1, _01FF8264 -_01FF81D4: - ldrh r0, [r1] - and r0, r0, #0xf - cmp r0, #0x1 - bne _01FF81D4 - mov r0, #0x100 - strh r0, [r1] - mov r0, #0x0 - ldr r3, _01FF8268 - ldr r4, [r3] - ldr r1, _01FF826C - mov r2, #0x80 - bl OSi_CpuClear32 - str r4, [r3] - ldr r1, _01FF8270 - mov r2, #0x18 - bl OSi_CpuClear32 - ldr r1, _01FF8274 - strh r0, [r1] - ldr r1, _01FF8278 - mov r2, #0x64 - bl OSi_CpuClear32 - ldr r1, _01FF8264 -_01FF822C: - ldrh r0, [r1] - and r0, r0, #0xf - cmp r0, #0x1 - beq _01FF822C - mov r0, #0x0 - strh r0, [r1] - ldr r3, _01FF827C - ldr ip, [r3, #0x24] - mov lr, ip - ldr fp, _01FF8270 - ldmia fp, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl} - mov fp, #0x0 - bx ip -_01FF8260: .word SDK_AUTOLOAD_DTCM_START -_01FF8264: .word 0x04000180 -_01FF8268: .word 0x027FFD9C -_01FF826C: .word 0x027FFD80 -_01FF8270: .word 0x027FFF80 -_01FF8274: .word 0x027FFF98 -_01FF8278: .word 0x027FFF9C -_01FF827C: .word 0x027FFE00 - - arm_func_start OSi_CpuClear32 -OSi_CpuClear32: ; 01FF8280 - add ip, r1, r2 -_01FF8284: - cmp r1, ip - stmltia r1!, {r0} - blt _01FF8284 - bx lr - - arm_func_start OSi_ReadCardRom32 + arm_func_start OSi_ReadCardRom32 ;OS_reset.c OSi_ReadCardRom32: ; 01FF8294 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} sub sp, sp, #4 @@ -152,7 +87,7 @@ _01FF83B8: .word 0x040001AD _01FF83BC: .word 0x040001AE _01FF83C0: .word 0x040001AF - arm_func_start OSi_ReloadRomData + arm_func_start OSi_ReloadRomData ;OS_reset.c OSi_ReloadRomData: ; 0x01FF83C4 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} sub sp, sp, #4 @@ -212,7 +147,7 @@ _01FF8498: .word 0x027FFE30 _01FF849C: .word 0x027FFE38 _01FF84A0: .word 0x027FFE3C - arm_func_start OSi_DoResetSystem + arm_func_start OSi_DoResetSystem ;OS_reset.c OSi_DoResetSystem: ; 0x01FF84A4 stmfd sp!, {lr} sub sp, sp, #4 diff --git a/arm9/global.inc b/arm9/global.inc index 67ee8f6b..b68a9983 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -7256,6 +7256,7 @@ .extern OSi_AlarmQueue
.extern OSi_CurrentThreadPtr
.extern OSi_DebuggerHandler
+.extern OSi_DoBoot
.extern OSi_DoLockByWord
.extern OSi_DoResetSystem
.extern OSi_DoTryLockByWord
diff --git a/arm9/lib/include/OS_reset.h b/arm9/lib/include/OS_reset.h index c50106da..4f0b80a9 100644 --- a/arm9/lib/include/OS_reset.h +++ b/arm9/lib/include/OS_reset.h @@ -16,5 +16,7 @@ void OS_InitReset(void); static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err); static void OSi_SendToPxi(u16 data); void OS_ResetSystem(u32 parameter); +void OSi_DoBoot(void); +static void OSi_CpuClear32(register u32 data, register void *destp, register u32 size); #endif //POKEDIAMOND_OS_RESET_H diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h index 8eb3f623..386ee0e4 100644 --- a/arm9/lib/include/mmap.h +++ b/arm9/lib/include/mmap.h @@ -42,6 +42,15 @@ extern u32 SDK_AUTOLOAD_DTCM_START[]; #define HW_DTCM_SVC_STACK (HW_DTCM_SVC_STACK_END - HW_SVC_STACK_SIZE) #define HW_DTCM_IRQ_STACK_END (HW_DTCM_SVC_STACK) +#define HW_BIOS_EXCP_STACK_MAIN (HW_MAIN_MEM + 0x007ffd80) +#define HW_EXCP_VECTOR_MAIN (HW_MAIN_MEM + 0x007ffd9c) + +#define HW_PXI_SIGNAL_PARAM_ARM9 (HW_MAIN_MEM + 0x007fff80) + +#define HW_WM_RSSI_POOL (HW_MAIN_MEM + 0x007fff98) + +#define HW_COMPONENT_PARAM (HW_MAIN_MEM + 0x007fff9c) + #define HW_LOCK_ID_FLAG_MAIN (HW_MAIN_MEM + 0x007fffb0) #define HW_SHARED_LOCK_BUF (HW_MAIN_MEM + 0x007fffc0) #define HW_CARD_LOCK_BUF (HW_MAIN_MEM + 0x007fffe0) diff --git a/arm9/lib/include/registers.h b/arm9/lib/include/registers.h index 598ba3f9..366f4654 100644 --- a/arm9/lib/include/registers.h +++ b/arm9/lib/include/registers.h @@ -92,7 +92,8 @@ #define reg_PAD_KEYINPUT (*(REGType16v *)0x4000130) #define reg_PAD_KEYCNT (*(REGType16v *)0x4000132) -#define reg_PXI_SUBPINTF (*(REGType16v *)0x4000180) +#define REG_SUBPINTF_ADDR 0x4000180 +#define reg_PXI_SUBPINTF (*(REGType16v *)REG_SUBPINTF_ADDR) #define reg_PXI_SUBP_FIFO_CNT (*(REGType16v *)0x4000184) #define reg_PXI_SEND_FIFO (*(REGType32v *)0x4000188) 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 |