mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@53 b871894f-2f95-9b40-918c-086798483c85
110 lines
3.1 KiB
C
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>
|
|
|