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@137 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
parent
80f6d66ef9
commit
12dcde5fdf
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user