/*---------------------------------------------------------------------------* Project: CtrBrom - library - init File: crt0_app.c Copyright 2008 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 //#include void _start(void); /*---------------------------------------------------------------------------* Name: _start Description: Start up Arguments: None Returns: None. *---------------------------------------------------------------------------*/ asm void _start( void ) { PRESERVE8 b stupStartHandlerVeneer // don't change for NULL access compatibility stupStartHandlerVeneer b STUPi_StartHandler } /*---------------------------------------------------------------------------* Name: STUPi_StartHandler Description: start handler Arguments: None Returns: None. *---------------------------------------------------------------------------*/ asm void STUPi_StartHandler( void ) { INASM_EXTERN( BromSpMain ) INASM_EXTERN( main ) #ifndef BROM_ENABLE_BOOTROM_WRITE ldr r3, =REG_ROM_ADDR ldrb r1, [r3] bic r1, #REG_SCFG_ROM_WE_MASK strb r1, [r3] #endif // BROM_ENABLE_BOOTROM_WRITE // init BROM prot ldr r3, =REG_PROT_ADDR ldr r1, =4*8 // 0x1204 strh r1, [r3] //---- initialize stack pointer // SVC mode mov r0, #HW_PSR_SVC_MODE msr cpsr_c, r0 ldr sp, =HW_PRV_WRAM_SVC_STACK_END // IRQ mode mov r0, #HW_PSR_IRQ_MODE msr cpsr_c, r0 ldr r0, =HW_PRV_WRAM_IRQ_STACK_END mov sp, r0 // System mode ldr r1, =HW_IRQ_STACK_SIZE sub r1, r0, r1 mov r0, #HW_PSR_SYS_MODE msr cpsr_csfx, r0 sub sp, r1, #4 // 4byte for stack check code //---- lnitialize sections bl stupInitSections //---- start (to 16bit code) ldr r1, =BromSpMain adr lr, terminate bx r1 terminate b terminate } #undef BROM_TARGET_BROM #include <./crt0_misc_sp.c>