diff --git a/include/nitro/hw/common/armArch.h b/include/nitro/hw/common/armArch.h new file mode 100644 index 0000000..a1ecbe7 --- /dev/null +++ b/include/nitro/hw/common/armArch.h @@ -0,0 +1,279 @@ +/*---------------------------------------------------------------------------* + Project: NitroSDK - HW - include + File: armArch.h + + Copyright 2003-2005 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: armArch.h,v $ + Revision 1.12 2005/03/01 01:57:00 yosizaki + copyright の年を修正. + + Revision 1.11 2005/02/28 05:26:01 yosizaki + do-indent. + + Revision 1.10 2004/05/03 04:50:46 yada + add HW_CPU_CLOCK* + + Revision 1.9 2004/04/07 02:03:17 yada + fix header comment + + Revision 1.8 2004/03/16 11:53:06 yasu + move HW_READ32/WRITE32 -> MI_ReadWord/WriteWord + + Revision 1.7 2004/02/25 11:28:59 yada + HW_SYSTEM_CLOCK 追加 + + Revision 1.6 2004/02/14 06:32:31 yasu + add HW_READ43/WRITE32 macros + + Revision 1.5 2004/02/05 07:09:03 yasu + change SDK prefix iris -> nitro + + Revision 1.4 2003/12/18 01:52:47 yada + データキャッシュ、命令キャッシュイネーブルフラグのシフト量追加 + + Revision 1.3 2003/12/17 11:38:48 yada + キャッシュ定義追加 + + Revision 1.2 2003/12/12 01:29:00 yada + HW_PSR_ARM_STATE 追加 + + Revision 1.1 2003/12/12 01:24:46 yada + hw/systemControl.h → hw/armArch.h と名称変更 + + Revision 1.2 2003/11/28 01:55:16 yada + REDSDKの03-11-27反映 + + Revision 1.1 2003/11/04 09:11:24 yada + 初版(整合性がうまくとれていないかもしれません) + + + $NoKeywords: $ + + *---------------------------------------------------------------------------*/ + +#ifndef NITRO_HW_SYSTEMCONTROL_H_ +#define NITRO_HW_SYSTEMCONTROL_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define HW_ICACHE_SIZE 0x2000 // 命令キャッシュ +#define HW_DCACHE_SIZE 0x1000 // データキャッシュ +#define HW_ICACHE_TAG_SIZE 0x0400 // 命令キャッシュ・タグRAM +#define HW_DCACHE_TAG_SIZE 0x0200 // データキャッシュ・タグRAM +#define HW_CACHE_LINE_SIZE 32 + +#define HW_SYSTEM_CLOCK 33514000 // 正確には33513982? + +#define HW_CPU_CLOCK_ARM7 33513982 +#define HW_CPU_CLOCK_ARM9 67027964 + +#ifdef SDK_ARM7 +#define HW_CPU_CLOCK HW_CPU_CLOCK_ARM7 +#else +#define HW_CPU_CLOCK HW_CPU_CLOCK_ARM9 +#endif + +//********************************************************************** +// IRISレジスタ・コントロールビット +//********************************************************************** + +//---------------------------------------------------------------------- +// プログラムステータスレジスタ +//---------------------------------------------------------------------- + +#define HW_PSR_CPU_MODE_MASK 0x1f // CPUモード + +#define HW_PSR_USER_MODE 0x10 // ユーザ +#define HW_PSR_FIQ_MODE 0x11 // FIQ +#define HW_PSR_IRQ_MODE 0x12 // IRQ +#define HW_PSR_SVC_MODE 0x13 // スーパバイザ +#define HW_PSR_ABORT_MODE 0x17 // アボート(プリフェッチ/データ) +#define HW_PSR_UNDEF_MODE 0x1b // 未定義命令 +#define HW_PSR_SYS_MODE 0x1f // システム + +#define HW_PSR_ARM_STATE 0x0 // ARMステート +#define HW_PSR_THUMB_STATE 0x20 // THUMBステート + +#define HW_PSR_FIQ_DISABLE 0x40 // FIQ不許可 +#define HW_PSR_IRQ_DISABLE 0x80 // IRQ不許可 +#define HW_PSR_IRQ_FIQ_DISABLE 0xc0 // IRQ&FIQ不許可 + +#define HW_PSR_Q_FLAG 0x08000000 // スティッキーオーバーフロー +#define HW_PSR_V_FLAG 0x10000000 // オーバーフロー +#define HW_PSR_C_FLAG 0x20000000 // キャリー/ボロー/拡張 +#define HW_PSR_Z_FLAG 0x40000000 // ゼロ +#define HW_PSR_N_FLAG 0x80000000 // 負/未満 + + +//---------------------------------------------------------------------- +// システムコントロールコプロセッサ +//---------------------------------------------------------------------- + +// レジスタ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 + +/* NITRO_HW_SYSTEMCONTROL_H_ */ +#endif