ctr_firmware/trunk/bootrom/build/libraries/init/common/crt0_excpHandler.c
nakasima 797b6c4db5 スタートアップのビルドが通る状態。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@42 b871894f-2f95-9b40-918c-086798483c85
2008-11-28 11:29:55 +00:00

132 lines
4.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*---------------------------------------------------------------------------*
Project: CtrBrom - library - init
File: crt0_excpHandler.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:: 2008-11-28#$
$Rev: 41 $
$Author: nakasima $
*---------------------------------------------------------------------------*/
#include <brom/code32.h>
#include <brom/os.h>
#include <brom/swi.h>
/*---------------------------------------------------------------------------*
Name: STUPi_DbgHandler
Description: Debug (FIQ, etc) handler
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
asm void STUPi_DbgHandler( void )
{
mrs sp, cpsr // IRQ/FIQ•s‰Â
orr sp, sp, #HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE
msr cpsr_cxsf, sp
dbg_m
b dbg_m
LTORG
}
/*---------------------------------------------------------------------------*
Name: STUPi_IrqHandler
Description: IRQ handler
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
asm void STUPi_IrqHandler( void )
{
#ifdef SDK_ARM9
mrc p15, 0, r0, c9, c1, 0 // DTCMƒAƒhƒŒƒXŠl“¾
mov r0, r0, lsr #HW_C9_TCMR_BASE_SHIFT
mov r0, r0, lsl #HW_C9_TCMR_BASE_SHIFT
add r0, r0, #HW_DTCM_SIZE
#endif // SDK_ARM9
irq_m
b irq_m
LTORG
}
/*---------------------------------------------------------------------------*
Name: STUPi_SwiHandler
Description: SWI handler
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
asm void STUPi_SwiSemihosting( void )
{
ldmfd sp!, {r11, r12, lr}
semi_vector
movs pc, lr
}
asm void STUPi_SwiHandler( void )
{
stmfd sp!, {r11, r12, lr} // SVCƒ<C692>[ƒh ƒŒƒWƒXƒ^‘Þ”ð
ldrh r12, [lr, #-2] // ƒVƒXƒeƒ€ƒR<C692>NoŽæ“¾<E2809C>iƒn<C692>[ƒtƒ<74><C692>[ƒhƒAƒNƒZƒXΉž<E280B0>j
mov r12, r12, lsl #1
and r12, r12, #SVC_ID_PREMASK<<SVC_ID_SHIFT
cmp r12, #(SVC_ID_SEMIHOST_ARM & SVC_ID_PREMASK)<<SVC_ID_SHIFT // SVC_ID_SEMIHOST_ARM = 0x12
cmpne r12, #(SVC_ID_SEMIHOST_THUMB & SVC_ID_PREMASK)<<SVC_ID_SHIFT // SVC_ID_SEMIHOST_THUMB = 0xab
beq STUPi_SwiSemihosting
adr r11, SWI_Table // ƒVƒXƒeƒ€ƒR<C692>ƒAƒhƒŒƒX Žæ“¾
ldrh r12, [r11, r12]
#ifdef SDK_ARM9
adr r11, _start // = HW_BIOS
orr r12, r12, r11
#endif // SDK_ARM9
mrs r11, spsr // SVCƒ<C692>[ƒh SPSRÞ”ð<E2809D>i<EFBFBD>‡Œv4ƒ<34><C692>[ƒh<C692>j
stmfd sp!, {r11}
and r11, r11, #HW_PSR_IRQ_DISABLE // IRQ‰Â<E280B0>óÔ ƒRƒs<C692>[
orr r11, r11, #HW_PSR_SYS_MODE // ƒVƒXƒeƒ€ƒ<C692>[ƒhÖ<E2809A>ØèŠ·¦ & FIQ‰Â
msr cpsr_cxsf,r11
stmfd sp!, {r2, lr} // ƒVƒXƒeƒ€ƒ<C692>[ƒh ƒŒƒWƒXƒ^Þ”ð<E2809D>i2ƒ<32><C692>[ƒh<C692>j
#ifdef SDK_ARM9
blx r12
#else // SDK_ARM7
adr lr, swi_return
bx r12
#endif // SDK_ARM7
swi_return
ldmfd sp!, {r2, lr} // ƒVƒXƒeƒ€ƒ<C692>[ƒh Ú¼Þ½À•œA
mov r12, #0xc0 | HW_PSR_SVC_MODE // SVCƒ<C692>[ƒhÖ<E2809A>ØèŠ·¦
msr cpsr_cxsf, r12 // & IRQ/FIQ•s‰Â
ldmfd sp!, {r11} // SVCƒ<C692>[ƒh ƒŒƒWƒXƒ^•œA
msr spsr_cxsf, r11
semi_return
ldmfd sp!, {r11, r12, lr}
movs pc, lr
LTORG
#include <../build/libraries/swi/common/swi_table.c>
}