ctr_firmware/trunk/bootrom/build/libraries/init/ARM9/crt0_app.c
nakasima f8c5b37b14 SVNファイル属性設定。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@53 b871894f-2f95-9b40-918c-086798483c85
2008-12-01 10:32:04 +00:00

110 lines
3.1 KiB
C

/*---------------------------------------------------------------------------*
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 <brom/code32.h>
#include <brom/os.h>
//#include <brom/mi.h>
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
//---- set IME = 0
// ( use that LSB of HW_REG_BASE equal to 0 )
mov r12, #HW_REG_BASE
str r12, [r12, #REG_IME_OFFSET]
// 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>