From 797b6c4db598da5108762c586fea2b5174152932 Mon Sep 17 00:00:00 2001 From: nakasima Date: Fri, 28 Nov 2008 11:29:55 +0000 Subject: [PATCH] =?UTF-8?q?=E3=82=B9=E3=82=BF=E3=83=BC=E3=83=88=E3=82=A2?= =?UTF-8?q?=E3=83=83=E3=83=97=E3=81=AE=E3=83=93=E3=83=AB=E3=83=89=E3=81=8C?= =?UTF-8?q?=E9=80=9A=E3=82=8B=E7=8A=B6=E6=85=8B=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@42 b871894f-2f95-9b40-918c-086798483c85 --- .../build/libraries/init/ARM9/Makefile | 4 +- .../build/libraries/init/ARM9/crt0_app.c | 6 +- .../build/libraries/init/ARM9/crt0_misc_sp.c | 47 +--- .../libraries/init/ARM9/crt0_secure_sp.c | 37 +--- .../libraries/init/common/crt0_excpHandler.c | 66 +----- .../bootrom/include/brom/hw/ARM9/mmap_brom.h | 29 ++- trunk/bootrom/include/brom/os.h | 3 +- trunk/bootrom/include/brom/types.h | 11 +- trunk/include/ctr/arm_reg.h | 21 ++ trunk/include/ctr/hw/ARM9/arm9_reg.h | 200 ++++++++++++++++++ trunk/include/ctr/hw/ARM9/mmap_global.h | 12 ++ trunk/include/ctr/misc.h | 1 - trunk/include/ctr/os/common/svc.h | 30 +++ trunk/include/ctr/os/common/svc_id.h | 50 +++++ 14 files changed, 363 insertions(+), 154 deletions(-) create mode 100644 trunk/include/ctr/arm_reg.h create mode 100644 trunk/include/ctr/hw/ARM9/arm9_reg.h create mode 100644 trunk/include/ctr/os/common/svc.h create mode 100644 trunk/include/ctr/os/common/svc_id.h diff --git a/trunk/bootrom/build/libraries/init/ARM9/Makefile b/trunk/bootrom/build/libraries/init/ARM9/Makefile index 5ca5b64..b7a042c 100644 --- a/trunk/bootrom/build/libraries/init/ARM9/Makefile +++ b/trunk/bootrom/build/libraries/init/ARM9/Makefile @@ -29,8 +29,8 @@ BROM_PROC = ARM9 SRCDIR = ../common . -SRCS = crt0.c crt0_secure_sp.c crt0_scat.c crt0_app.c -TARGET_OBJ = crt0.o crt0_secure_sp.o crt0_scat.o crt0_app.o +SRCS = crt0.c crt0_secure_sp.c crt0_scat.c # crt0_app.c +TARGET_OBJ = crt0.o crt0_secure_sp.o crt0_scat.o # crt0_app.o #---------------------------------------------------------------------------- diff --git a/trunk/bootrom/build/libraries/init/ARM9/crt0_app.c b/trunk/bootrom/build/libraries/init/ARM9/crt0_app.c index 0a10d57..6845bea 100644 --- a/trunk/bootrom/build/libraries/init/ARM9/crt0_app.c +++ b/trunk/bootrom/build/libraries/init/ARM9/crt0_app.c @@ -15,7 +15,7 @@ *---------------------------------------------------------------------------*/ #include #include -#include +//#include void _start(void); @@ -54,9 +54,9 @@ asm void STUPi_StartHandler( void ) #ifndef BROM_ENABLE_BOOTROM_WRITE - ldr r3, =REG_DEVROM_ADDR + ldr r3, =REG_ROM_ADDR ldrb r1, [r3] - bic r1, #REG_CFG_DEVROM_WE_MASK + bic r1, #REG_SCFG_ROM_WE_MASK strb r1, [r3] #endif // BROM_ENABLE_BOOTROM_WRITE diff --git a/trunk/bootrom/build/libraries/init/ARM9/crt0_misc_sp.c b/trunk/bootrom/build/libraries/init/ARM9/crt0_misc_sp.c index d9a4153..90f7461 100644 --- a/trunk/bootrom/build/libraries/init/ARM9/crt0_misc_sp.c +++ b/trunk/bootrom/build/libraries/init/ARM9/crt0_misc_sp.c @@ -15,38 +15,9 @@ *---------------------------------------------------------------------------*/ #include #include -#include +//#include -/*---------------------------------------------------------------------------* - Name: STUPi_MappingWram - - Description: mapping WRAM for ARM7 - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -ASM void STUPi_MappingWram( void ) -{ - // mapping WRAM-A - ldr r3, =REG_WRAM_A_MAP_ADDR - ldr r1, =REG_WRAM_A_MAP_PACK( MI_WRAM_MAP_NULL, MI_WRAM_MAP_NULL, __cpp(MI_WRAM_A_IMG_MAX) ) - str r1, [r3] - - // mapping WRAM-B - ldr r3, =REG_WRAM_B_MAP_ADDR - ldr r1, =REG_WRAM_A_MAP_PACK( MI_WRAM_MAP_NULL, MI_WRAM_MAP_NULL, __cpp(MI_WRAM_A_IMG_MAX) ) - str r1, [r3] - - // mapping WRAM-C - ldr r3, =REG_WRAM_C_MAP_ADDR - ldr r1, =REG_WRAM_C_MAP_PACK( MI_WRAM_MAP_NULL, MI_WRAM_MAP_NULL, __cpp(MI_WRAM_A_IMG_MAX) ) - str r1, [r3] - - bx lr -} - /*---------------------------------------------------------------------------* Name: __user_initial_stackheap @@ -178,7 +149,7 @@ LSYM(10) } /*---------------------------------------------------------------------------* - Name: STUPi_NotifyToARM9 + Name: STUPi_NotifyToARM11 Description: notify 4bit id to ARM9 @@ -186,30 +157,30 @@ LSYM(10) Returns: None *---------------------------------------------------------------------------*/ -ASM void STUPi_NotifyToARM9( u32 id ) +ASM void STUPi_NotifyToARM11( u32 id ) { ldr r3, =REG_MAINPINTF_ADDR - mov r0, r0, lsl #REG_PXI_MAINPINTF_A7STATUS_SHIFT - and r0, r0, #REG_PXI_MAINPINTF_A7STATUS_MASK + mov r0, r0, lsl #REG_PXI_MAINPINTF_A9STATUS_SHIFT + and r0, r0, #REG_PXI_MAINPINTF_A9STATUS_MASK str r0, [r3] bx lr } /*---------------------------------------------------------------------------* - Name: STUPi_WaitARM9 + Name: STUPi_WaitARM11 - Description: Wait 4bit id from ARM9 + Description: Wait 4bit id from ARM11 Arguments: id waiting id Returns: None *---------------------------------------------------------------------------*/ -ASM void STUPi_WaitARM9( u32 id ) +ASM void STUPi_WaitARM11( u32 id ) { ldr r3, =REG_MAINPINTF_ADDR LSYM(10) ldr r1, [r3] - and r1, r1, #REG_PXI_MAINPINTF_A9STATUS_MASK + and r1, r1, #REG_PXI_MAINPINTF_A11STATUS_MASK cmp r0, r1 bne BSYM(10) bx lr diff --git a/trunk/bootrom/build/libraries/init/ARM9/crt0_secure_sp.c b/trunk/bootrom/build/libraries/init/ARM9/crt0_secure_sp.c index d410aac..75fb35e 100644 --- a/trunk/bootrom/build/libraries/init/ARM9/crt0_secure_sp.c +++ b/trunk/bootrom/build/libraries/init/ARM9/crt0_secure_sp.c @@ -15,10 +15,9 @@ *---------------------------------------------------------------------------*/ #include #include -#include +//#include //#define BROM_ENABLE_BOOTROM_WRITE -//#define BROM_DISABLE_BOOTROM_PROT /*---------------------------------------------------------------------------* Name: STUPi_StartHandler @@ -39,57 +38,39 @@ asm void STUPi_StartHandler( void ) #ifndef BROM_ENABLE_BOOTROM_WRITE - ldr r3, =REG_DEVROM_ADDR + ldr r3, =REG_ROM_ADDR ldrb r1, [r3] - bic r1, #REG_CFG_DEVROM_WE_MASK + bic r1, #REG_SCFG_ROM_WE_MASK strb r1, [r3] #endif // BROM_ENABLE_BOOTROM_WRITE - //---- set IME = 0 - // ( use that LSB of HW_REG_BASE equal to 0 ) - mov r12, #HW_REG_BASE - str r12, [r12, #REG_IME_OFFSET] - -#ifndef BROM_DISABLE_BOOTROM_PROT - - // init BROM prot - ldr r3, =REG_PROT_ADDR - ldr r1, =4*8 // 0x1204 - strh r1, [r3] - -#endif // BROM_DISABLE_BOOTROM_PROT - //---- initialize stack pointer // SVC mode mov r0, #HW_PSR_SVC_MODE msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_SVC_STACK_END + ldr sp, =HW_BROM_SVC_STACK_END // IRQ mode mov r0, #HW_PSR_IRQ_MODE msr cpsr_c, r0 - ldr r0, =HW_PRV_WRAM_IRQ_STACK_END + ldr r0, =HW_BROM_IRQ_STACK_END mov sp, r0 // System mode - ldr r1, =HW_IRQ_STACK_SIZE - sub r1, r0, r1 mov r0, #HW_PSR_SYS_MODE msr cpsr_csfx, r0 - sub sp, r1, #4 // 4byte for stack check code + ldr r0, =HW_BROM_SYS_STACK_END + mov sp, r0 - //---- clear wram top + //---- clear wram // 1KB mov r0, #0 - ldr r1, =HW_WRAM_AREA_END + ldr r1, =HW_PRV_WRAM_END mov r2, #0x0400 sub r1, r1, r2 bl STUPi_CpuClear32 - //---- mapping WRAM for itself - bl STUPi_MappingWram - //---- lnitialize sections bl stupInitSections diff --git a/trunk/bootrom/build/libraries/init/common/crt0_excpHandler.c b/trunk/bootrom/build/libraries/init/common/crt0_excpHandler.c index 4b8e3b1..08f2cc7 100644 --- a/trunk/bootrom/build/libraries/init/common/crt0_excpHandler.c +++ b/trunk/bootrom/build/libraries/init/common/crt0_excpHandler.c @@ -27,58 +27,14 @@ Returns: None. *---------------------------------------------------------------------------*/ -#ifdef SDK_ARM9 -#define BROM_EXCP_STACK_SIZE 16 -#else // SDK_ARM7 -#define BROM_EXCP_STACK_SIZE 12 -#endif // SDK_ARM7 - asm void STUPi_DbgHandler( void ) { mrs sp, cpsr // IRQ/FIQ不許可 orr sp, sp, #HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE msr cpsr_cxsf, sp -#ifdef SDK_ARM9 - ldr sp, =HW_EXCP_VECTOR_MAIN -#else // SDK_ARM7 - ldr sp, =HW_BROM_SYSRV_END - HW_BROM_SYSRV_IOFS_EXCP_VECTOR -#endif // SDK_ARM7 - add sp, sp, #1 - -fiq_m - stmfd sp!, {r12, lr} // レジスタの退避(合計4ワード) - mrs lr, spsr -#ifdef SDK_ARM7 - stmfd sp!, {lr} -#else // SDK_ARM9 - mrc p15, 0, r12, c1, c0, 0 // コプロセッサ・マスタ退避 - stmfd sp!, {r12, lr} - - bic r12, r12, #HW_C1_PROTECT_UNIT_ENABLE - mcr p15, 0, r12, c1, c0, 0 -#endif // SDK_ARM9 - - bic r12, sp, #1 // デバッガ処理へジャンプ - ldr r12, [r12, #BROM_EXCP_STACK_SIZE] - cmp r12, #0 -#ifdef SDK_ARM9 - blxne r12 -#else // SDK_ARM7 - adr lr, fiq_return - bxne r12 -#endif // SDK_ARM7 - -fiq_return -#ifdef SDK_ARM9 - ldmfd sp!, {r12, lr} - mcr p15, 0, r12, c1, c0, 0 -#else // SDK_ARM7 - ldmfd sp!, {lr} -#endif // SDK_ARM7 - msr spsr_sxcf, lr - ldmfd sp!, {r12, lr} - subs pc, lr, #4 +dbg_m + b dbg_m LTORG } @@ -94,27 +50,15 @@ fiq_return *---------------------------------------------------------------------------*/ asm void STUPi_IrqHandler( void ) { - stmfd sp!, {r0-r3,r12,lr} // レジスタの退避(6ワード) #ifdef SDK_ARM9 mrc p15, 0, r0, c9, c1, 0 // DTCMアドレス獲得 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 -#else // SDK_ARM7 -#ifdef BROM_SYSRV_LOWVEC - ldr r0, =HW_BROM_SYSRV_END -#else // BROM_SYSRV_HIGHVEC - mov r0, #HW_BROM_SYSRV_END -#endif // BROM_SYSRV_HIGHVEC - -#endif // SDK_ARM7 - adr lr, irq_return - ldr pc, [r0, #-HW_BROM_SYSRV_IOFS_INTR_VECTOR] - -irq_return - ldmfd sp!, {r0-r3,r12,lr} - subs pc, lr, #4 +irq_m + b irq_m LTORG } diff --git a/trunk/bootrom/include/brom/hw/ARM9/mmap_brom.h b/trunk/bootrom/include/brom/hw/ARM9/mmap_brom.h index 5fbaed3..4a36c72 100644 --- a/trunk/bootrom/include/brom/hw/ARM9/mmap_brom.h +++ b/trunk/bootrom/include/brom/hw/ARM9/mmap_brom.h @@ -57,23 +57,30 @@ extern "C" { #define HW_BROM_TO_FIRM_BUF_SIZE HW_FIRM_FROM_BROM_BUF_SIZE // 12KB //------------------------------------- HW_BROM_STACK -#define HW_BROM_STACK (HW_WRAM_AREA_END - 0x1000) -#define HW_BROM_STACK_END HW_BROM_SYSRV -#define HW_BROM_STACK_SIZE (HW_BROM_STACK_END - HW_BROM_STACK) // ≒4KB +#define HW_BROM_STACK (HW_BROM_STACK_END - HW_BROM_STACK_SIZE) +#define HW_BROM_STACK_END HW_DTCM_END +#define HW_BROM_STACK_SIZE HW_DTCM_SIZE // 16KB + +#define HW_BROM_SVC_STACK (HW_BROM_SVC_STACK_END - HW_BROM_SVC_STACK_SIZE) +#define HW_BROM_SVC_STACK_END HW_BROM_STACK_END +#define HW_BROM_SVC_STACK_SIZE 0x100 // 256B + +#define HW_BROM_IRQ_STACK (HW_BROM_SVC_STACK_END - HW_BROM_SVC_STACK_SIZE) +#define HW_BROM_IRQ_STACK_END HW_BROM_SVC_STACK +#define HW_BROM_IRQ_STACK_SIZE (0x1000 - HW_BROM_SVC_STACK_SIZE) // 4KB - 256B + +#define HW_BROM_SYS_STACK (HW_BROM_SYS_STACK_END - HW_BROM_SYS_STACK_SIZE) +#define HW_BROM_SYS_STACK_END HW_BROM_IRQ_STACK +#define HW_BROM_SYS_STACK_SIZE (HW_BROM_STACK_SIZE - HW_BROM_IRQ_STACK_SIZE - HW_BROM_SVC_STACK_SIZE) // 12KB + //------------------------------------- BROM_SYSRV -#ifdef BROM_SYSRV_LOWVEC -#define HW_BROM_SYSRV HW_PRV_WRAM_SYSRV +#define HW_BROM_SYSRV HW_PRV_WRAM #define HW_BROM_SYSRV_END (HW_BROM_SYSRV + HW_BROM_SYSRV_SIZE) -#else // BROM_SYSRV_HIGHVEC -#define HW_BROM_SYSRV (HW_BROM_SYSRV_END - HW_BROM_SYSRV_SIZE) -#define HW_BROM_SYSRV_END HW_WRAM_AREA_END -#endif -#define HW_BROM_SYSRV_SIZE HW_PRV_WRAM_SYSRV_SIZE +#define HW_BROM_SYSRV_SIZE 0x1000 // 4KB #define HW_BROM_SYSRV_IOFS_EXCP_VECTOR (HW_PRV_WRAM_SYSRV_SIZE - HW_PRV_WRAM_SYSRV_OFS_EXCP_VECTOR) #define HW_BROM_SYSRV_IOFS_INTR_CHECK (HW_PRV_WRAM_SYSRV_SIZE - HW_PRV_WRAM_SYSRV_OFS_INTR_CHECK) -#define HW_BROM_SYSRV_IOFS_INTR_CHECK2 (HW_PRV_WRAM_SYSRV_SIZE - HW_PRV_WRAM_SYSRV_OFS_INTR_CHECK2) #define HW_BROM_SYSRV_IOFS_INTR_VECTOR (HW_PRV_WRAM_SYSRV_SIZE - HW_PRV_WRAM_SYSRV_OFS_INTR_VECTOR) //------------------------------------- BIOS_ENTRY diff --git a/trunk/bootrom/include/brom/os.h b/trunk/bootrom/include/brom/os.h index 9c74787..40d344e 100644 --- a/trunk/bootrom/include/brom/os.h +++ b/trunk/bootrom/include/brom/os.h @@ -24,7 +24,8 @@ extern "C" { #include #include -#include +#include +#include #include #if 0 diff --git a/trunk/bootrom/include/brom/types.h b/trunk/bootrom/include/brom/types.h index 6f159ee..77d9ce0 100644 --- a/trunk/bootrom/include/brom/types.h +++ b/trunk/bootrom/include/brom/types.h @@ -17,16 +17,9 @@ #ifndef BROM_TYPES_H_ #define BROM_TYPES_H_ -#ifdef __cplusplus -extern "C" { -#endif - +#include +#include #include - -#ifdef __cplusplus -} /* extern "C" */ -#endif - /* BROM_TYPES_H_ */ #endif diff --git a/trunk/include/ctr/arm_reg.h b/trunk/include/ctr/arm_reg.h new file mode 100644 index 0000000..14bcb41 --- /dev/null +++ b/trunk/include/ctr/arm_reg.h @@ -0,0 +1,21 @@ +/*---------------------------------------------------------------------------* + Project: CtrFirm - include - + File: ctr/arm_reg.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:: 2008-11-28#$ + $Rev: 41 $ + $Author: nakasima $ + *---------------------------------------------------------------------------*/ +#ifdef SDK_ARM11 +#include +#else //SDK_ARM9 +#include +#endif diff --git a/trunk/include/ctr/hw/ARM9/arm9_reg.h b/trunk/include/ctr/hw/ARM9/arm9_reg.h new file mode 100644 index 0000000..991f264 --- /dev/null +++ b/trunk/include/ctr/hw/ARM9/arm9_reg.h @@ -0,0 +1,200 @@ +/*---------------------------------------------------------------------------* + Project: CtrFirm - HW - include + File: armArch.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:: 2008-11-28#$ + $Rev: 42 $ + $Author: nakasima $ + *---------------------------------------------------------------------------*/ +#ifndef CTR_HW_ARM9_REG_H_ +#define CTR_HW_ARM9_REG_H_ + +#ifndef SDK_ASM +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define HW_ICACHE_SIZE 0x2000 // 命令キャッシュ +#define HW_DCACHE_SIZE 0x1000 // データキャッシュ +#define HW_CACHE_LINE_SIZE 32 + +#define HW_SYSTEM_CLOCK 33514000 // 正確には33513982? + +#define HW_CPU_CLOCK_ARM9 67027964 +#define HW_CPU_CLOCK HW_CPU_CLOCK_ARM9 + + +//---------------------------------------------------------------------- +// システムコントロールコプロセッサ +//---------------------------------------------------------------------- + +// レジスタ1(マスタコントロール) + +#define HW_C1_SB1_BITSET 0x00000078 // レジスタ1用1固定ビット列 + +#define HW_C1_ITCM_LOAD_MODE 0x00080000 // 命令TCM ロードモード +#define HW_C1_DTCM_LOAD_MODE 0x00020000 // データTCM ロードモード +#define HW_C1_ITCM_ENABLE 0x00040000 // 命令TCM イネーブル +#define HW_C1_DTCM_ENABLE 0x00010000 // データTCM イネーブル +#define HW_C1_LD_INTERWORK_DISABLE 0x00008000 // ロード命令によるインターワーキング ディセーブル +#define HW_C1_CACHE_ROUND_ROBIN 0x00004000 // キャッシュ置換アルゴリズム ラウンドロビン(最悪時のヒット率が安定) +#define HW_C1_CACHE_PSEUDO_RANDOM 0x00000000 // 擬似ランダム +#define HW_C1_EXCEPT_VEC_UPPER 0x00002000 // 例外ベクタ 上位アドレス(こちらに設定して下さい) +#define HW_C1_EXCEPT_VEC_LOWER 0x00000000 // 下位アドレス +#define HW_C1_ICACHE_ENABLE 0x00001000 // 命令キャッシュ イネーブル +#define HW_C1_DCACHE_ENABLE 0x00000004 // データキャッシュ イネーブル +#define HW_C1_LITTLE_ENDIAN 0x00000000 // リトルエンディアン +#define HW_C1_BIG_ENDIAN 0x00000080 // ビッグエンディアン +#define HW_C1_PROTECT_UNIT_ENABLE 0x00000001 // プロテクションユニット イネーブル + +#define HW_C1_ICACHE_ENABLE_SHIFT 12 +#define HW_C1_DCACHE_ENABLE_SHIFT 2 + + +// レジスタ2(プロテクションリージョン・キャッシュ設定) + +#define HW_C2_PR0_SFT 0 // プロテクションリージョン0 +#define HW_C2_PR1_SFT 1 // 1 +#define HW_C2_PR2_SFT 2 // 2 +#define HW_C2_PR3_SFT 3 // 3 +#define HW_C2_PR4_SFT 4 // 4 +#define HW_C2_PR5_SFT 5 // 5 +#define HW_C2_PR6_SFT 6 // 6 +#define HW_C2_PR7_SFT 7 // 7 + + +// レジスタ3(プロテクションリージョン・ライトバッファ設定) + +#define HW_C3_PR0_SFT 0 // プロテクションリージョン0 +#define HW_C3_PR1_SFT 1 // 1 +#define HW_C3_PR2_SFT 2 // 2 +#define HW_C3_PR3_SFT 3 // 3 +#define HW_C3_PR4_SFT 4 // 4 +#define HW_C3_PR5_SFT 5 // 5 +#define HW_C3_PR6_SFT 6 // 6 +#define HW_C3_PR7_SFT 7 // 7 + + +// レジスタ5(プロテクションリージョン・アクセス許可) + +#define HW_C5_PERMIT_MASK 0xf // プロテクションリージョンアクセス許可マスク + +#define HW_C5_PERMIT_NA 0 // アクセス不許可 +#define HW_C5_PERMIT_RW 1 // リードライト許可 +#define HW_C5_PERMIT_RO 5 // リードオンリー許可 + +#define HW_C5_PR0_SFT 0 // プロテクションリージョン0 +#define HW_C5_PR1_SFT 4 // 1 +#define HW_C5_PR2_SFT 8 // 2 +#define HW_C5_PR3_SFT 12 // 3 +#define HW_C5_PR4_SFT 16 // 4 +#define HW_C5_PR5_SFT 20 // 5 +#define HW_C5_PR6_SFT 24 // 6 +#define HW_C5_PR7_SFT 28 // 7 + + +// レジスタ6(プロテクションリージョン・ベースアドレス/サイズ) + +#define HW_C6_PR_SIZE_MASK 0x0000003e // プロテクションリージョン サイズ +#define HW_C6_PR_BASE_MASK 0xfffff000 // ベースアドレス + +#define HW_C6_PR_SIZE_SHIFT 1 +#define HW_C6_PR_BASE_SHIFT 12 + +#define HW_C6_PR_ENABLE 1 // プロテクションリージョン イネーブル +#define HW_C6_PR_DISABLE 0 // ディセーブル + +#define HW_C6_PR_4KB 0x16 // リージョンサイズ 4KByte +#define HW_C6_PR_8KB 0x18 // 8KByte +#define HW_C6_PR_16KB 0x1a // 16KByte +#define HW_C6_PR_32KB 0x1c // 32KByte +#define HW_C6_PR_64KB 0x1e // 64KByte +#define HW_C6_PR_128KB 0x20 // 128KByte +#define HW_C6_PR_256KB 0x22 // 256KByte +#define HW_C6_PR_512KB 0x24 // 512KByte +#define HW_C6_PR_1MB 0x26 // 1MByte +#define HW_C6_PR_2MB 0x28 // 2MByte +#define HW_C6_PR_4MB 0x2a // 4MByte +#define HW_C6_PR_8MB 0x2c // 8MByte +#define HW_C6_PR_16MB 0x2e // 16MByte +#define HW_C6_PR_32MB 0x30 // 32MByte +#define HW_C6_PR_64MB 0x32 // 64MByte +#define HW_C6_PR_128MB 0x34 // 128MByte +#define HW_C6_PR_256MB 0x36 // 256MByte +#define HW_C6_PR_512MB 0x38 // 512MByte +#define HW_C6_PR_1GB 0x3a // 1GByte +#define HW_C6_PR_2GB 0x3c // 2GByte +#define HW_C6_PR_4GB 0x3e // 4GByte + + +// レジスタ7.13(命令キャッシュ・プリフェッチ) + +#define HW_C7_ICACHE_PREFCHP_MASK 0xffffffe0 // 命令キャッシュ プリフェッチアドレス + + +// レジスタ7.10、7.14(キャッシュインデックス操作) + +#define HW_C7_ICACHE_INDEX_MASK 0x00000fe0 // 命令キャッシュ インデックス +#define HW_C7_DCACHE_INDEX_MASK 0x000003e0 // データキャッシュ インデックス +#define HW_C7_CACHE_SET_NO_MASK 0xc0000000 // キャッシュ セットNo + +#define HW_C7_CACHE_INDEX_SHIFT 5 +#define HW_C7_CACHE_SET_NO_SHIFT 30 + + +// レジスタ9.0(キャッシュロックダウン) + +#define HW_C9_LOCKDOWN_SET_NO_MASK 0x00000003 // キャッシュロックダウン セットNo + +#define HW_C9_LOCKDOWN_SET_NO_SHIFT 0 + +#define HW_C9_LOCKDOWN_LOAD_MODE 0x80000000 // キャッシュロックダウン ロードモード + + +// レジスタ9.1(TCMベースアドレス/サイズ) + +#define HW_C9_TCMR_SIZE_MASK 0x0000003e // TCMリージョン サイズ +#define HW_C9_TCMR_BASE_MASK 0xfffff000 // ベースアドレス + +#define HW_C9_TCMR_SIZE_SHIFT 1 +#define HW_C9_TCMR_BASE_SHIFT 12 + +#define HW_C9_TCMR_4KB 0x06 // リージョンサイズ 4KByte +#define HW_C9_TCMR_8KB 0x08 // 8KByte +#define HW_C9_TCMR_16KB 0x0a // 16KByte +#define HW_C9_TCMR_32KB 0x0c // 32KByte +#define HW_C9_TCMR_64KB 0x0e // 64KByte +#define HW_C9_TCMR_128KB 0x10 // 128KByte +#define HW_C9_TCMR_256KB 0x12 // 256KByte +#define HW_C9_TCMR_512KB 0x14 // 512KByte +#define HW_C9_TCMR_1MB 0x16 // 1MByte +#define HW_C9_TCMR_2MB 0x18 // 2MByte +#define HW_C9_TCMR_4MB 0x1a // 4MByte +#define HW_C9_TCMR_8MB 0x1c // 8MByte +#define HW_C9_TCMR_16MB 0x1e // 16MByte +#define HW_C9_TCMR_32MB 0x20 // 32MByte +#define HW_C9_TCMR_64MB 0x22 // 64MByte +#define HW_C9_TCMR_128MB 0x24 // 128MByte +#define HW_C9_TCMR_256MB 0x26 // 256MByte +#define HW_C9_TCMR_512MB 0x28 // 512MByte +#define HW_C9_TCMR_1GB 0x2a // 1GByte +#define HW_C9_TCMR_2GB 0x2c // 2GByte +#define HW_C9_TCMR_4GB 0x2e // 4GByte + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/* CTR_HW_ARM9_REG_H_ */ +#endif diff --git a/trunk/include/ctr/hw/ARM9/mmap_global.h b/trunk/include/ctr/hw/ARM9/mmap_global.h index c4e4d4a..e804440 100644 --- a/trunk/include/ctr/hw/ARM9/mmap_global.h +++ b/trunk/include/ctr/hw/ARM9/mmap_global.h @@ -16,6 +16,7 @@ *---------------------------------------------------------------------------*/ #ifndef CTR_HW_ARM9_MMAP_GLOBAL_H_ #define CTR_HW_ARM9_MMAP_GLOBAL_H_ + #ifdef __cplusplus extern "C" { #endif @@ -25,6 +26,17 @@ extern "C" { GLOBAL MEMORY MAP *---------------------------------------------------------------------------*/ +//----------------------------- ITCM +#define HW_ITCM_IMAGE 0x01000000 +#define HW_ITCM 0x01ff8000 +#define HW_ITCM_SIZE 0x8000 +#define HW_ITCM_END (HW_ITCM + HW_ITCM_SIZE) + +//----------------------------- DTCM +#define HW_DTCM (HW_BIOS - HW_DTCM_SIZE*2) +#define HW_DTCM_END (HW_DTCM + HW_DTCM_SIZE) +#define HW_DTCM_SIZE 0x4000 + //----------------------------- MAIN #define HW_MAIN_MEM 0x20000000 #define HW_MAIN_MEM_SIZE 0x04000000 diff --git a/trunk/include/ctr/misc.h b/trunk/include/ctr/misc.h index 93363e7..6a68f3d 100644 --- a/trunk/include/ctr/misc.h +++ b/trunk/include/ctr/misc.h @@ -14,7 +14,6 @@ $Rev: 41 $ $Author: nakasima $ *---------------------------------------------------------------------------*/ - #ifndef CTR_MISC_H_ #define CTR_MISC_H_ diff --git a/trunk/include/ctr/os/common/svc.h b/trunk/include/ctr/os/common/svc.h new file mode 100644 index 0000000..731e006 --- /dev/null +++ b/trunk/include/ctr/os/common/svc.h @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------* + Project: CtrFirm - OS - include + File: svc.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. + + $Log: $ + $NoKeywords: $ + *---------------------------------------------------------------------------*/ +#ifndef FIRM_OS_SVC_H_ +#define FIRM_OS_SVC_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/* FIRM_OS_SVC_H_ */ +#endif diff --git a/trunk/include/ctr/os/common/svc_id.h b/trunk/include/ctr/os/common/svc_id.h new file mode 100644 index 0000000..45da7ab --- /dev/null +++ b/trunk/include/ctr/os/common/svc_id.h @@ -0,0 +1,50 @@ +/*---------------------------------------------------------------------------* + Project: CtrFirm - OS - include + File: svc_id.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:: 2008-11-28#$ + $Rev: 42 $ + $Author: nakasima $ + *---------------------------------------------------------------------------*/ +#ifndef FIRM_OS_SVC_ID_H_ +#define FIRM_OS_SVC_ID_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define SVC_ID_PREMASK 0x3f +#define SVC_ID_SHIFT 1 + +#define SVC_ID_SEMIHOST_ARM 0x12 +#define SVC_ID_SEMIHOST_THUMB 0xab + + +typedef enum +{ + SVC_ID_DEC_SIGN = 34, + SVC_ID_WAIT_BY_LOOP = 3, + + // reserve 0x2b for semihosting (0xab & 0x3f == 0x2b) + // overlap semihosting ((0x123456>>16) & 0x3f == 0x12) +} +OSSvcID; + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/* FIRM_OS_SVC_ID_H_ */ +#endif