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@79 b871894f-2f95-9b40-918c-086798483c85
102 lines
2.8 KiB
C
102 lines
2.8 KiB
C
/*---------------------------------------------------------------------------*
|
|
Project: CtrBrom - library - init
|
|
File: crt0.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>
|
|
|
|
void _start(void);
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: _start
|
|
|
|
Description: Start up
|
|
|
|
Arguments: None
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
asm void _start( void )
|
|
{
|
|
PRESERVE8
|
|
|
|
CODE32 // for _start reference
|
|
|
|
INASM_EXTERN( STUPi_IrqVeneer )
|
|
INASM_EXTERN( STUPi_FiqVeneer )
|
|
INASM_EXTERN( STUPi_SwiVeneer )
|
|
INASM_EXTERN( STUPi_UndefInstVeneer )
|
|
INASM_EXTERN( STUPi_PrefetchAbortVeneer )
|
|
INASM_EXTERN( STUPi_DataAbortVeneer )
|
|
|
|
b stupStartHandlerVeneer // don't change for NULL access compatibility
|
|
undef b STUPi_UndefInstVeneer
|
|
swi b STUPi_SwiVeneer
|
|
iabt b STUPi_PrefetchAbortVeneer
|
|
dabt b STUPi_DataAbortVeneer
|
|
reserve b reserve
|
|
irq b STUPi_IrqVeneer
|
|
fiq b STUPi_FiqVeneer
|
|
|
|
INASM_EXTERN( STUPi_SwiHandler )
|
|
|
|
DCD STUPi_SwiHandler
|
|
|
|
stupStartHandlerVeneer
|
|
|
|
// NULLジャンプ時のデータアボート有効時はここで発生
|
|
mov r12, #0
|
|
ldr r12, [r12]
|
|
|
|
//---- check CPU ID
|
|
mrc p15,0, r0, c0, c0, 5
|
|
tst r0, #HW_C0_AP_CPU_ID_MASK
|
|
beq core0_start
|
|
|
|
//---- Wait for IPI
|
|
#ifdef BROM_USE_MPCORE_EXTEND_OP
|
|
cpsid i
|
|
#else
|
|
mrs r0, cpsr
|
|
orr r1, r0, #HW_PSR_IRQ_DISABLE
|
|
msr cpsr_c, r1
|
|
#endif
|
|
ldr r3, =REG_IDR_CNT_ADDR
|
|
mov r0, #REG_OS_IDR_CNT_E_MASK
|
|
str r0, [r3]
|
|
ldr r3, =REG_IDR_CLR_PND0_ADDR
|
|
ldr r1, =REG_OS_IDR_CLR_PND0_IPI_ALL_MASK
|
|
mov r0, #~0
|
|
str r0, [r3]
|
|
LSYM(10)
|
|
ldr r0, [r3]
|
|
tst r0, r1
|
|
wfieq
|
|
nop
|
|
beq BSYM(10)
|
|
ldr lr, =HW_START_VECTOR1_BUF
|
|
ldr lr, [lr]
|
|
bx lr
|
|
|
|
core0_start
|
|
|
|
INASM_EXTERN( STUPi_StartHandler )
|
|
|
|
b STUPi_StartHandler
|
|
|
|
LTORG
|
|
}
|
|
|