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

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
INASM_EXTERN( STUPi_HW_DTCM )
INASM_EXTERN( stupInitExceptions )
INASM_EXTERN( BromMain )
INASM_EXTERN( main )
@ -63,13 +62,13 @@ asm void i_stupStartHandler( void )
bl stupInitExceptions
//---- disable cp15
bl stupDisableCP15
bl stupDisableCP15
//---- initialize MMU
bl stupInitMMU
bl stupInitMMU
//---- enable cp15
bl stupEnableCP15
bl stupEnableCP15
//---- clear wram
// 1KB

View File

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

View File

@ -30,19 +30,48 @@
*---------------------------------------------------------------------------*/
ASM void stupInitExceptions( void )
{
ldr r3, =HW_SWI_VENEER_BUF
ldr r2, =i_stupSwiVeneerCode
ldm r2, {r0-r1}
stm r3, {r0-r1}
adr r2, i_stupExcpVennerCode
ldr r3, =HW_EXCP_VENEER_BUF
add r12, r3, #HW_EXCP_VENEER_BUF_SIZE
LSYM(0)
ldr r0, [r2], #4
ldm r0, {r0-r1}
stm r3!,{r0-r1}
cmp r3, r12
blt BSYM(0)
bx lr
i_stupExcpVennerCode
DCD i_stupSwiVeneerCode
DCD i_stupExcpTerminateCode
DCD i_stupSwiVeneerCode
DCD i_stupExcpTerminateCode
DCD i_stupExcpTerminateCode
DCD i_stupExcpTerminateCode
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

View File

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

View File

@ -41,12 +41,15 @@ extern "C" {
#define HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0 0x50
//---- 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_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_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_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_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)

View File

@ -38,12 +38,15 @@ extern "C" {
#define HW_PRV_WRAM_SYSRV_OFS_INTR_CHECK 0x3c
//---- 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_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_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_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)