From bad2d57a2fb55481e22b72e2e18af2632563c4ce Mon Sep 17 00:00:00 2001 From: nakasima Date: Wed, 28 Jan 2009 06:38:08 +0000 Subject: [PATCH] =?UTF-8?q?Thumb-SWI=E5=91=BD=E4=BB=A4=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@223 b871894f-2f95-9b40-918c-086798483c85 --- .../build/libraries/init/common/crt0_excp.c | 18 ++++++++++-------- .../build/libraries/os/common/os_exception.c | 2 +- .../build/libraries/os/common/os_irqHandler.c | 2 +- trunk/include/ctr/hw/ARM11/mmap_axi_wram.h | 6 +++--- trunk/include/ctr/hw/ARM9/mmap_prv_wram.h | 6 +++--- trunk/include/ctr/hw/common/arm_reg_common.h | 2 +- 6 files changed, 19 insertions(+), 17 deletions(-) diff --git a/trunk/bootrom/build/libraries/init/common/crt0_excp.c b/trunk/bootrom/build/libraries/init/common/crt0_excp.c index 7303dea..66285ec 100644 --- a/trunk/bootrom/build/libraries/init/common/crt0_excp.c +++ b/trunk/bootrom/build/libraries/init/common/crt0_excp.c @@ -42,11 +42,11 @@ LSYM(0) #ifdef SDK_ARM11 // disable VFP -#ifndef SDK_NE1EMU +#ifdef SDK_MG20EMU fmrx r12, fpexc bic r12, r12, #HW_FPEXC_VFP_ENABLE fmxr fpexc, r12 -#endif // SDK_NE1EMU +#endif // SDK_MG20EMU #endif // SDK_ARM11 bx lr @@ -171,7 +171,7 @@ asm void i_stupSwiVeneer( void ) *---------------------------------------------------------------------------*/ asm void i_stupUndefVeneer( void ) { - ldr pc, =HW_UDEF_VENEER_BUF + ldr pc, =HW_UNDEF_VENEER_BUF LTORG } @@ -239,15 +239,16 @@ asm void i_stupSwiHandler( void ) { INASM_EXTERN( _start ) - // 不正確データアボート有効化(clear HW_PSR_IMPRECISE_ABORT) + // 不正確データアボート有効化(clear HW_PSR_IMPR_ABORT_DISABLE) // FIQハンドラでのSWI使用時のSP_svc上書き防止のため最初にFIQを禁止(IRQはHWが禁止する) msr cpsr_cxsf, #(HW_PSR_SVC_MODE | HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE) // SVCモード - mrs sp, spsr + mrs sp, spsr // ※SP_svc + and sp, #HW_PSR_CPU_MODE_MASK // ユーザモードならシステムモードへ - tst sp, #HW_PSR_SYS_MODE ^ HW_PSR_USR_MODE - orreq sp, sp, #HW_PSR_SYS_MODE + cmp sp, #HW_PSR_USR_MODE + moveq sp, #HW_PSR_SYS_MODE // 割り込み禁止 orr sp, sp, #(HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE) msr cpsr_cxsf, sp @@ -263,10 +264,11 @@ asm void i_stupSwiHandler( void ) mov r12, lr mrs r11, spsr stmfd sp!, {r11, lr} // SPSR_svc、LR_svcを退避 + // 割り込み状態継承 + and r11, r11, #(HW_PSR_CPU_MODE_MASK | HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE) // ユーザモードならシステムモードへ tst r11, #HW_PSR_SYS_MODE ^ HW_PSR_USR_MODE orreq r11, r11, #HW_PSR_SYS_MODE - // 割り込み状態継承 msr cpsr_cxsf, r11 // 呼び出し元のモード diff --git a/trunk/bootrom/build/libraries/os/common/os_exception.c b/trunk/bootrom/build/libraries/os/common/os_exception.c index 8cc4e15..88190e9 100644 --- a/trunk/bootrom/build/libraries/os/common/os_exception.c +++ b/trunk/bootrom/build/libraries/os/common/os_exception.c @@ -38,7 +38,7 @@ void osInitException( void ) { isInit = TRUE; - *(OSExcpHandler*)HW_UDEF_VECTOR_BUF = i_osUndefInstHandler; + *(OSExcpHandler*)HW_UNDEF_VECTOR_BUF = i_osUndefInstHandler; } #endif // SDK_ARM11 } diff --git a/trunk/bootrom/build/libraries/os/common/os_irqHandler.c b/trunk/bootrom/build/libraries/os/common/os_irqHandler.c index a316579..8e2cc68 100644 --- a/trunk/bootrom/build/libraries/os/common/os_irqHandler.c +++ b/trunk/bootrom/build/libraries/os/common/os_irqHandler.c @@ -49,7 +49,7 @@ asm void osIrqHandler( void ) EXPORT i_osIrqHandlerReturn #ifdef SDK_ARM11 - // 不正確データアボート有効化(clear HW_PSR_IMPRECISE_ABORT) + // 不正確データアボート有効化(clear HW_PSR_IMPR_ABORT_DISABLE) msr cpsr_fsxc, #(HW_PSR_IRQ_MODE | HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE) #endif // SDK_ARM11 diff --git a/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h b/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h index 18d0841..42106ee 100644 --- a/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h +++ b/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h @@ -34,7 +34,7 @@ extern "C" { #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_UNDEF_VENEER 0x18 #define HW_AXI_WRAM_SYSRV_OFS_IABT_VENEER 0x20 #define HW_AXI_WRAM_SYSRV_OFS_DABT_VENEER 0x28 #endif // SDK_ARM11 @@ -57,8 +57,8 @@ extern "C" { #define HW_FIQ_VECTOR_BUF (HW_FIQ_VENEER_BUF + 4) #define HW_SWI_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_SWI_VENEER) #define HW_SWI_VECTOR_BUF (HW_SWI_VENEER_BUF + 4) -#define HW_UDEF_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_UDEF_VENEER) -#define HW_UDEF_VECTOR_BUF (HW_UDEF_VENEER_BUF + 4) +#define HW_UNDEF_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_UNDEF_VENEER) +#define HW_UNDEF_VECTOR_BUF (HW_UNDEF_VENEER_BUF + 4) #define HW_IABT_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_IABT_VENEER) #define HW_IABT_VECTOR_BUF (HW_IABT_VENEER_BUF + 4) #define HW_DABT_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_DABT_VENEER) diff --git a/trunk/include/ctr/hw/ARM9/mmap_prv_wram.h b/trunk/include/ctr/hw/ARM9/mmap_prv_wram.h index 0956703..a64e33e 100644 --- a/trunk/include/ctr/hw/ARM9/mmap_prv_wram.h +++ b/trunk/include/ctr/hw/ARM9/mmap_prv_wram.h @@ -32,7 +32,7 @@ extern "C" { #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_UNDEF_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 @@ -47,8 +47,8 @@ extern "C" { #define HW_FIQ_VECTOR_BUF (HW_FIQ_VENEER_BUF + 4) #define HW_SWI_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_SWI_VENEER) #define HW_SWI_VECTOR_BUF (HW_SWI_VENEER_BUF + 4) -#define HW_UDEF_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_UDEF_VENEER) -#define HW_UDEF_VECTOR_BUF (HW_UDEF_VENEER_BUF + 4) +#define HW_UNDEF_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_UNDEF_VENEER) +#define HW_UNDEF_VECTOR_BUF (HW_UNDEF_VENEER_BUF + 4) #define HW_IABT_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_IABT_VENEER) #define HW_IABT_VECTOR_BUF (HW_IABT_VENEER_BUF + 4) #define HW_DABT_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_DABT_VENEER) diff --git a/trunk/include/ctr/hw/common/arm_reg_common.h b/trunk/include/ctr/hw/common/arm_reg_common.h index 34ebe3d..67a0e35 100644 --- a/trunk/include/ctr/hw/common/arm_reg_common.h +++ b/trunk/include/ctr/hw/common/arm_reg_common.h @@ -45,7 +45,7 @@ extern "C" { #ifdef SDK_ARM11 -#define HW_PSR_IMPRECISE_ABORT 0x00000100 // Imprecise Abort +#define HW_PSR_IMPR_ABORT_DISABLE 0x00000100 // Imprecise Abort Disable #define HW_PSR_DATA_LITTLE_ENDIAN 0x00000000 // Data Little Endian #define HW_PSR_DATA_BIG_ENDIAN 0x00000200 // Data Big Endian