/*---------------------------------------------------------------------------* 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:: $ $Rev$ $Author$ *---------------------------------------------------------------------------*/ #include #include #include /*---------------------------------------------------------------------------* Name: STUPi_DbgHandler Description: Debug (FIQ, etc) handler Arguments: None Returns: None. *---------------------------------------------------------------------------*/ asm void STUPi_DbgHandler( void ) { mrs sp, cpsr // IRQ/FIQ不許可 orr sp, sp, #HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE msr cpsr_cxsf, sp dbg_m b dbg_m LTORG } /*---------------------------------------------------------------------------* Name: STUPi_IrqVeneer Description: IRQ veneer Arguments: None Returns: None. *---------------------------------------------------------------------------*/ asm void STUPi_IrqVeneer( void ) { ldr pc, =HW_INTR_VENEER_BUF LTORG } /*---------------------------------------------------------------------------* Name: STUPi_FiqVeneer Description: FIQ veneer Arguments: None Returns: None. *---------------------------------------------------------------------------*/ asm void STUPi_FiqVeneer( void ) { ldr pc, =HW_FIQ_VENEER_BUF LTORG } /*---------------------------------------------------------------------------* Name: STUPi_PrefetchAbortVeneer Description: Prefetch Abort veneer Arguments: None Returns: None. *---------------------------------------------------------------------------*/ asm void STUPi_PrefetchAbortVeneer( void ) { ldr pc, =HW_IABT_VENEER_BUF LTORG } /*---------------------------------------------------------------------------* Name: STUPi_DataAbortVeneer Description: Data Abort veneer Arguments: None Returns: None. *---------------------------------------------------------------------------*/ asm void STUPi_DataAbortVeneer( void ) { ldr pc, =HW_DABT_VENEER_BUF LTORG } /*---------------------------------------------------------------------------* Name: STUPi_UndefInstVeneer Description: Undefine Instruction veneer Arguments: None Returns: None. *---------------------------------------------------------------------------*/ asm void STUPi_UndefInstVeneer( void ) { ldr pc, =HW_UDEF_VENEER_BUF LTORG } /*---------------------------------------------------------------------------* Name: STUPi_SwiVeneer Description: SWI veneer Arguments: None Returns: None. *---------------------------------------------------------------------------*/ asm void STUPi_SwiVeneer( void ) { ldr pc, =HW_SWI_VENEER_BUF 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 ) { INASM_EXTERN( _start ) stmfd sp!, {r11, r12, lr} // SVCモード レジスタ退避 ldrh r12, [lr, #-2] // システムコールNo取得(ハーフワードアクセス対応) mov r12, r12, lsl #1 and r12, r12, #SVC_ID_PREMASK< }