例外ハンドラをベニアへ変更。

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@77 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
nakasima 2008-12-04 09:39:17 +00:00
parent f1d11046a4
commit 71553dd061
11 changed files with 348 additions and 70 deletions

View File

@ -34,19 +34,21 @@ asm void _start( void )
CODE32 // for _start reference
INASM_EXTERN( STUPi_StartHandler )
INASM_EXTERN( STUPi_SwiHandler )
INASM_EXTERN( STUPi_IrqHandler )
INASM_EXTERN( STUPi_DbgHandler )
INASM_EXTERN( STUPi_IrqVeneer )
INASM_EXTERN( STUPi_FiqVeneer )
INASM_EXTERN( STUPi_SwiVeneer )
INASM_EXTERN( STUPi_UndefInstVeneer )
INASM_EXTERN( STUPi_PrefetchAbortVeneer )
INASM_EXTERN( STUPi_DataAbortVeneer )
b stupStartHandlerVeneer // don't change for NULL access compatibility
undef b STUPi_DbgHandler
swi b STUPi_SwiHandler
iabt b STUPi_DbgHandler
dabt b STUPi_DbgHandler
undef b STUPi_UndefInstVeneer
swi b STUPi_SwiVeneer
iabt b STUPi_PrefetchAbortVeneer
dabt b STUPi_DataAbortVeneer
reserve b reserve
irq b STUPi_IrqHandler
fiq b STUPi_DbgHandler
irq b STUPi_IrqVeneer
fiq b STUPi_FiqVeneer
stupStartHandlerVeneer
@ -72,6 +74,9 @@ LSYM(10)
b BSYM(10)
core0_start
INASM_EXTERN( STUPi_StartHandler )
b STUPi_StartHandler
}

View File

@ -34,21 +34,26 @@ asm void _start( void )
CODE32 // for _start reference
INASM_EXTERN( STUPi_StartHandler )
INASM_EXTERN( STUPi_SwiHandler )
INASM_EXTERN( STUPi_IrqHandler )
INASM_EXTERN( STUPi_DbgHandler )
INASM_EXTERN( STUPi_IrqVeneer )
INASM_EXTERN( STUPi_FiqVeneer )
INASM_EXTERN( STUPi_SwiVeneer )
INASM_EXTERN( STUPi_UndefInstVeneer )
INASM_EXTERN( STUPi_PrefetchAbortVeneer )
INASM_EXTERN( STUPi_DataAbortVeneer )
b stupStartHandlerVeneer // don't change for NULL access compatibility
undef b STUPi_DbgHandler
swi b STUPi_SwiHandler
iabt b STUPi_DbgHandler
dabt b STUPi_DbgHandler
undef b STUPi_UndefInstVeneer
swi b STUPi_SwiVeneer
iabt b STUPi_PrefetchAbortVeneer
dabt b STUPi_DataAbortVeneer
reserve b reserve
irq b STUPi_IrqHandler
fiq b STUPi_DbgHandler
irq b STUPi_IrqVeneer
fiq b STUPi_FiqVeneer
stupStartHandlerVeneer
INASM_EXTERN( STUPi_StartHandler )
b STUPi_StartHandler
DCD 0

View File

@ -40,25 +40,97 @@ dbg_m
}
/*---------------------------------------------------------------------------*
Name: STUPi_IrqHandler
Name: STUPi_IrqVeneer
Description: IRQ handler
Description: IRQ veneer
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
asm void STUPi_IrqHandler( void )
asm void STUPi_IrqVeneer( 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
ldr pc, =HW_INTR_VENEER_BUF
irq_m
b irq_m
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
}
@ -94,10 +166,9 @@ asm void STUPi_SwiHandler( void )
adr r11, SWI_Table // システムコールアドレス 取得
ldrh r12, [r11, r12]
#ifdef SDK_ARM9
ldr r11, =HW_BIOS
ldr r11, =HW_BROM
orr r12, r12, r11
#endif // SDK_ARM9
mrs r11, spsr // SVCモード SPSR退避合計4ワード
stmfd sp!, {r11}
@ -107,12 +178,7 @@ asm void STUPi_SwiHandler( void )
msr cpsr_cxsf,r11
stmfd sp!, {r2, lr} // システムモード レジスタ退避2ワード
#ifdef SDK_ARM9
blx r12
#else // SDK_ARM7
adr lr, swi_return
bx r12
#endif // SDK_ARM7
swi_return
ldmfd sp!, {r2, lr} // システムモード レジスタ復帰

View File

@ -17,6 +17,7 @@
#ifndef BROM_HW_ARM11_AXI_WRAM_H_
#define BROM_HW_ARM11_AXI_WRAM_H_
#include <ctr/hw/arm11/mmap_axi_wram.h>
#ifdef __cplusplus
extern "C" {

View File

@ -17,29 +17,7 @@
#ifndef BROM_HW_COMMON_MMAP_SHARED_H_
#define BROM_HW_COMMON_MMAP_SHARED_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <ctr/hw/common/mmap_shared.h>
//----------------------------------------------------------------------
// MEMORY MAP of SYSTEM SHARED AREA
//----------------------------------------------------------------------
#define HW_AXI_WRAM_SHARED (HW_AXI_WRAM_SHARED_END - HW_AXI_WRAM_SHARED_SIZE)
#define HW_AXI_WRAM_SHARED_END (HW_MAIN_MEM)
#define HW_AXI_WRAM_SHARED_SIZE (HW_AXI_WRAM_SHARED_SYS_SIZE + HW_AXI_WRAM_SHARED_USR_SIZE) // 8KB
#define HW_AXI_WRAM_SHARED_USR (HW_AXI_WRAM_SHARED_USR_END - HW_AXI_WRAM_SHARED_USR_SIZE)
#define HW_AXI_WRAM_SHARED_USR_END HW_AXI_WRAM_SHARED_END
#define HW_AXI_WRAM_SHARED_USR_SIZE 0x1000 // 4KB
#define HW_AXI_WRAM_SHARED_SYS (HW_AXI_WRAM_SHARED_SYS_END - HW_AXI_WRAM_SHARED_SIZE)
#define HW_AXI_WRAM_SHARED_SYS_END HW_AXI_WRAM_SHARED_USR
#define HW_AXI_WRAM_SHARED_SYS_SIZE 0x1000 // 4KB
#ifdef __cplusplus
} /* extern "C" */
#endif
/* BROM_HW_COMMON_MMAP_SHARED_H_ */
#endif

View File

@ -21,20 +21,20 @@
extern "C" {
#endif
#ifdef SDK_ARM9
#include <ctr/memorymap.h>
#ifdef SDK_ARM11
#include <brom/hw/ARM11/mmap_brom.h>
#include <firm/hw/ARM11/mmap_firm.h>
#include <brom/hw/common/mmap_shared.h>
#else //SDK_ARM9
#include <brom/hw/ARM9/mmap_brom.h>
#include <firm/hw/ARM9/mmap_firm.h>
#include <brom/hw/common/mmap_shared.h>
#else //SDK_ARM11
#include <brom/hw/ARM11/mmap_brom.h>
#include <firm/hw/ARM11/mmap_firm.h>
#include <ctr/hw/ARM11/mmu_table.h>
#include <brom/hw/common/mmap_shared.h>
#endif
#include <ctr/ioreg.h>
#ifdef __cplusplus
} /* extern "C" */
#endif

View File

@ -0,0 +1,57 @@
/*---------------------------------------------------------------------------*
Project: CtrFirm - HW - include
File: mmap_axi_wram.h
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$
*---------------------------------------------------------------------------*/
#ifndef CTR_HW_ARM11_AXI_WRAM_H_
#define CTR_HW_ARM11_AXI_WRAM_H_
#include <ctr/hw/common/mmap_shared.h>
#ifdef __cplusplus
extern "C" {
#endif
//---- system reserved area
#define HW_AXI_WRAM_SYSRV HW_AXI_WRAM_SHARED_SYS_A11
#define HW_AXI_WRAM_SYSRV_END HW_AXI_WRAM_SHARED_SYS_A11_END
#define HW_AXI_WRAM_SYSRV_SIZE HW_AXI_WRAM_SHARED_SYS_A11_SIZE
//---- offset in system reserved area
// FCRAMまで命令プリフェッチしないように注意MPCoreは8段パイプライン
#define HW_AXI_WRAM_SYSRV_OFS_INTR_VENEER 0x00
#define HW_AXI_WRAM_SYSRV_OFS_FIQ_VENEER 0x08
#define HW_AXI_WRAM_SYSRV_OFS_SWI_VENEER 0x10
#define HW_AXI_WRAM_SYSRV_OFS_UDEF_VENEER 0x18
#define HW_AXI_WRAM_SYSRV_OFS_IABT_VENEER 0x20
#define HW_AXI_WRAM_SYSRV_OFS_DABT_VENEER 0x28
#define HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0 0x58
#define HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK1 0x5c
//---- system reserved area
#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_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_INTR_CHECK0_PTR (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0)
#define HW_INTR_CHECK1_PTR (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK1)
#ifdef __cplusplus
} /* extern "C" */
#endif
/* CTR_HW_ARM11_AXI_WRAM_H_ */
#endif

View File

@ -0,0 +1,54 @@
/*---------------------------------------------------------------------------*
Project: CtrFirm - HW - include
File: mmap_axi_wram.h
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$
*---------------------------------------------------------------------------*/
#ifndef CTR_HW_ARM9_PRV_WRAM_H_
#define CTR_HW_ARM9_PRV_WRAM_H_
#include <ctr/hw/common/mmap_shared.h>
#ifdef __cplusplus
extern "C" {
#endif
//---- system reserved area
#define HW_PRV_WRAM_SYSRV HW_PRV_WRAM
#define HW_PRV_WRAM_SYSRV_END (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_SIZE)
#define HW_PRV_WRAM_SYSRV_SIZE 0x40 // 64B
//---- offset in system reserved area
#define HW_PRV_WRAM_SYSRV_OFS_INTR_VENEER 0x00
#define HW_PRV_WRAM_SYSRV_OFS_FIQ_VENEER 0x08
#define HW_PRV_WRAM_SYSRV_OFS_SWI_VENEER 0x10
#define HW_PRV_WRAM_SYSRV_OFS_UDEF_VENEER 0x18
#define HW_PRV_WRAM_SYSRV_OFS_IABT_VENEER 0x20
#define HW_PRV_WRAM_SYSRV_OFS_DABT_VENEER 0x28
#define HW_PRV_WRAM_SYSRV_OFS_INTR_CHECK 0x3c
//---- system reserved area
#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_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)
#ifdef __cplusplus
} /* extern "C" */
#endif
/* CTR_HW_ARM9_PRV_WRAM_H_ */
#endif

View File

@ -0,0 +1,49 @@
/*---------------------------------------------------------------------------*
Project: CtrFirm - HW - include
File: mmap_shared.h
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$
*---------------------------------------------------------------------------*/
#ifndef CTR_HW_COMMON_MMAP_SHARED_H_
#define CTR_HW_COMMON_MMAP_SHARED_H_
#ifdef __cplusplus
extern "C" {
#endif
//----------------------------------------------------------------------
// MEMORY MAP of SYSTEM SHARED AREA
//----------------------------------------------------------------------
#define HW_AXI_WRAM_SHARED (HW_AXI_WRAM_SHARED_END - HW_AXI_WRAM_SHARED_SIZE)
#define HW_AXI_WRAM_SHARED_END (HW_AXI_WRAM_END)
#define HW_AXI_WRAM_SHARED_SIZE (HW_AXI_WRAM_SHARED_SYS_SIZE + HW_AXI_WRAM_SHARED_USR_SIZE) // 8KB
#define HW_AXI_WRAM_SHARED_SYS (HW_AXI_WRAM_SHARED_SYS_END - HW_AXI_WRAM_SHARED_SIZE)
#define HW_AXI_WRAM_SHARED_SYS_END HW_AXI_WRAM_SHARED_END
#define HW_AXI_WRAM_SHARED_SYS_SIZE 0x1000 // 4KB
#define HW_AXI_WRAM_SHARED_SYS_A11 (HW_AXI_WRAM_SHARED_SYS_A11_END - HW_AXI_WRAM_SHARED_SYS_A11_SIZE)
#define HW_AXI_WRAM_SHARED_SYS_A11_END HW_AXI_WRAM_SHARED_SYS_END
#define HW_AXI_WRAM_SHARED_SYS_A11_SIZE 0x60 // 96B
#define HW_AXI_WRAM_SHARED_USR (HW_AXI_WRAM_SHARED_USR_END - HW_AXI_WRAM_SHARED_USR_SIZE)
#define HW_AXI_WRAM_SHARED_USR_END HW_AXI_WRAM_SHARED_SYS
#define HW_AXI_WRAM_SHARED_USR_SIZE 0x1000 // 4KB
#ifdef __cplusplus
} /* extern "C" */
#endif
/* CTR_HW_COMMON_MMAP_SHARED_H_ */
#endif

View File

@ -0,0 +1,40 @@
/*---------------------------------------------------------------------------*
Project: CtrBrom - include - HW
File: memorymap.h
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$
*---------------------------------------------------------------------------*/
#ifndef FIRM_MEMORYMAP_H_
#define FIRM_MEMORYMAP_H_
#ifdef __cplusplus
extern "C" {
#endif
#ifdef SDK_ARM11
#include <ctr/hw/ARM11/mmu_table.h>
#include <ctr/hw/ARM11/mmap_axi_wram.h>
#else //SDK_ARM9
#include <ctr/hw/ARM9/mmap_prv_wram.h>
#endif
#include <ctr/hw/common/mmap_shared.h>
#include <ctr/ioreg.h>
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_MEMORYMAP_H_ */
#endif

View File

@ -0,0 +1,23 @@
/*---------------------------------------------------------------------------*
Project: CtrFirm - include - HW
File: memorymap_sp.h
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$
*---------------------------------------------------------------------------*/
#ifndef SDK_ARM9
#define SDK_ARM9
#endif
#ifdef SDK_ARM11
#undef SDK_ARM11
#endif
#include <ctr/memorymap.h>