例外ハンドラの暫定登録。

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@137 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
nakasima 2008-12-24 05:37:14 +00:00
parent 80f6d66ef9
commit 12dcde5fdf
6 changed files with 54 additions and 15 deletions

View File

@ -36,7 +36,6 @@ asm void i_stupStartHandler( void )
{ {
PRESERVE8 PRESERVE8
INASM_EXTERN( STUPi_HW_DTCM )
INASM_EXTERN( stupInitExceptions ) INASM_EXTERN( stupInitExceptions )
INASM_EXTERN( BromMain ) INASM_EXTERN( BromMain )
INASM_EXTERN( main ) INASM_EXTERN( main )
@ -63,13 +62,13 @@ asm void i_stupStartHandler( void )
bl stupInitExceptions bl stupInitExceptions
//---- disable cp15 //---- disable cp15
bl stupDisableCP15 bl stupDisableCP15
//---- initialize MMU //---- initialize MMU
bl stupInitMMU bl stupInitMMU
//---- enable cp15 //---- enable cp15
bl stupEnableCP15 bl stupEnableCP15
//---- clear wram //---- clear wram
// 1KB // 1KB

View File

@ -35,6 +35,7 @@ asm void i_stupStartHandler( void )
PRESERVE8 PRESERVE8
INASM_EXTERN( STUPi_HW_DTCM ) INASM_EXTERN( STUPi_HW_DTCM )
INASM_EXTERN( stupInitExceptions )
INASM_EXTERN( BromSpMain ) INASM_EXTERN( BromSpMain )
INASM_EXTERN( main ) INASM_EXTERN( main )
@ -47,9 +48,6 @@ asm void i_stupStartHandler( void )
#endif // BROM_ENABLE_BOOTROM_WRITE #endif // BROM_ENABLE_BOOTROM_WRITE
//---- initialize cp15
bl i_stupInitCP15
//---- initialize stack pointer //---- initialize stack pointer
// SVC mode // SVC mode
mov r0, #HW_PSR_SVC_MODE mov r0, #HW_PSR_SVC_MODE
@ -68,6 +66,12 @@ asm void i_stupStartHandler( void )
ldr r0, =HW_BROM_SYS_STACK_END ldr r0, =HW_BROM_SYS_STACK_END
mov sp, r0 mov sp, r0
//---- initialize exceptions
bl stupInitExceptions
//---- initialize cp15
bl i_stupInitCP15
//---- clear wram //---- clear wram
// DTCM (16KB) // DTCM (16KB)
mov r0, #0 mov r0, #0

View File

@ -30,19 +30,48 @@
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM void stupInitExceptions( void ) ASM void stupInitExceptions( void )
{ {
ldr r3, =HW_SWI_VENEER_BUF adr r2, i_stupExcpVennerCode
ldr r2, =i_stupSwiVeneerCode ldr r3, =HW_EXCP_VENEER_BUF
ldm r2, {r0-r1} add r12, r3, #HW_EXCP_VENEER_BUF_SIZE
stm r3, {r0-r1} LSYM(0)
ldr r0, [r2], #4
ldm r0, {r0-r1}
stm r3!,{r0-r1}
cmp r3, r12
blt BSYM(0)
bx lr bx lr
i_stupExcpVennerCode
DCD i_stupSwiVeneerCode
DCD i_stupExcpTerminateCode
DCD i_stupSwiVeneerCode
DCD i_stupExcpTerminateCode
DCD i_stupExcpTerminateCode
DCD i_stupExcpTerminateCode
LTORG LTORG
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: i_osIrqVeneer Name: i_stupExcpTerminateCode
Description: Interrupt Vevver Description: exception Veneer
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
ASM void i_stupExcpTerminateCode( void )
{
LSYM(0)
b BSYM(0)
LTORG
}
/*---------------------------------------------------------------------------*
Name: i_stupSwiVeneerCode
Description: SWI Veneer
Arguments: None Arguments: None

View File

@ -53,6 +53,7 @@ OSFiqMode;
//---- interrupt handler type //---- interrupt handler type
//typedef IRQ void (*OSIntrHandler) (void); //typedef IRQ void (*OSIntrHandler) (void);
typedef void (*OSExcpHandler) (void);
typedef void (*OSIntrHandler) (void); typedef void (*OSIntrHandler) (void);
typedef void (*OSIntrFunction) (void); typedef void (*OSIntrFunction) (void);

View File

@ -41,12 +41,15 @@ extern "C" {
#define HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0 0x50 #define HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0 0x50
//---- system reserved area //---- system reserved area
#define HW_EXCP_VENEER_BUF (HW_INTR_VENEER_BUF)
#define HW_EXCP_VENEER_BUF_END (HW_EXCP_VENEER_BUF + HW_EXCP_VENEER_BUF_SIZE)
#define HW_EXCP_VENEER_BUF_SIZE (8 * 6)
#define HW_INTR_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_VENEER) #define HW_INTR_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_VENEER)
#define HW_FIQ_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_FIQ_VENEER) #define HW_FIQ_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_FIQ_VENEER)
#define HW_SWI_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_SWI_VENEER) #define HW_SWI_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_SWI_VENEER)
#define HW_UDEF_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_UDEF_VENEER)
#define HW_IABT_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_IABT_VENEER) #define HW_IABT_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_IABT_VENEER)
#define HW_DABT_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_DABT_VENEER) #define HW_DABT_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_DABT_VENEER)
#define HW_UDEF_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_UDEF_VENEER)
#define HW_START_VECTOR1_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_START_VECTOR1) #define HW_START_VECTOR1_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_START_VECTOR1)
#define HW_INTR_CHECK0_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0) #define HW_INTR_CHECK0_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0)
#define HW_INTR_CHECK1_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK1) #define HW_INTR_CHECK1_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK1)

View File

@ -38,12 +38,15 @@ extern "C" {
#define HW_PRV_WRAM_SYSRV_OFS_INTR_CHECK 0x3c #define HW_PRV_WRAM_SYSRV_OFS_INTR_CHECK 0x3c
//---- system reserved area //---- system reserved area
#define HW_EXCP_VENEER_BUF (HW_INTR_VENEER_BUF)
#define HW_EXCP_VENEER_BUF_END (HW_EXCP_VENEER_BUF + HW_EXCP_VENEER_BUF_SIZE)
#define HW_EXCP_VENEER_BUF_SIZE (8 * 6)
#define HW_INTR_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_INTR_VENEER) #define HW_INTR_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_INTR_VENEER)
#define HW_FIQ_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_FIQ_VENEER) #define HW_FIQ_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_FIQ_VENEER)
#define HW_SWI_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_SWI_VENEER) #define HW_SWI_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_SWI_VENEER)
#define HW_UDEF_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_UDEF_VENEER)
#define HW_IABT_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_IABT_VENEER) #define HW_IABT_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_IABT_VENEER)
#define HW_DABT_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_DABT_VENEER) #define HW_DABT_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_DABT_VENEER)
#define HW_UDEF_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_UDEF_VENEER)
#define HW_INTR_CHECK_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_INTR_CHECK) #define HW_INTR_CHECK_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_INTR_CHECK)