/*---------------------------------------------------------------------------* Project: CtrBrom - OS File: os_boot.c Copyright 2009 Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Date:: $ $Rev$ $Author$ *---------------------------------------------------------------------------*/ #include #include void i_osBootCore( OSEntryPoint p ); /*---------------------------------------------------------------------------* Name: i_osFinalize Description: finalize Arguments: None Returns: None *---------------------------------------------------------------------------*/ void i_osFinalize(void) { (void)osDisableInterrupts(); osDisableDCache(); osFlushDCacheAll(); osWaitWriteBufferEmpty(); osDisableICache(); osInvalidateICacheAll(); #ifdef SDK_ARM11 { OSIntrMask mask = {HW_IDR_WORD_MASK, HW_IDR_WORD_MASK, HW_IDR_WORD_MASK, HW_IDR_WORD_MASK}; osDisableInterruptMask( mask ); osClearInterruptPendingMask( mask ); } osDisableBCache(); osInvalidateInstPrefetchBuffer(); osInvalidateBCacheAll(); osDisableMMU(); #else // SDK_ARM9 reg_OS_IE = 0; reg_OS_IF = 0xffffffff; i_osFinalizeProtectionUnit(); #endif // SDK_ARM9 } /*---------------------------------------------------------------------------* Name: i_osClearWorkArea Description: clear work area Arguments: None Returns: None *---------------------------------------------------------------------------*/ asm void i_osClearWorkArea( void ) { INASM_EXTERN( |Image$$RW$$Base| ) INASM_EXTERN( |Image$$ZI$$ZI$$Limit| ) CODE32 mov r11, lr // clear stack with r4-r9 mov r0, #0 ldr r1, =|Image$$RW$$Base| ldr r2, =|Image$$ZI$$ZI$$Limit| sub r2, r2, r1 bl i_miCpuClearFast bx r11 } // internal asm void i_osBootCore( OSEntryPoint p ) { INASM_EXTERN( i_miCpuClearFast ) CODE32 mov r11, r0 // clear stack with r4-r9 mov r0, #0 ldr r1, =HW_BROM_STACK ldr r2, =HW_BROM_STACK_SIZE bl i_miCpuClearFast mov lr, r11 // clear registers ldr sp, =HW_BROM_STACK ldmia sp, {r0-r12,sp} bx lr }