mirror of
https://github.com/rvtr/ntr_bootrom.git
synced 2025-10-31 07:11:11 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-09%20-%20platinum.7z%20+%20generic.7z%20+%20from_nintendo.rar/platinum/ntr_bootrom@2 75ba2c1e-421a-9847-b97b-53b085e6d9b8
This commit is contained in:
parent
17563b362d
commit
b4d63fc9c4
221
trunk/AGBモニタ履歴.txt
Normal file
221
trunk/AGBモニタ履歴.txt
Normal file
@ -0,0 +1,221 @@
|
||||
AGB/AGB2モニタプログラム変更履歴
|
||||
|
||||
|
||||
NITRO-V0.01(V3.01データ調整バージョン / CRC16 0xcc3f)
|
||||
・MonCheckSum() の戻り値を変えるため、3f0ch番地 00000000h → 00000001h 変更
|
||||
(戻り値: baae187fh → baae1880h)
|
||||
|
||||
V5.11(シャープ評価用)
|
||||
・起動直後にカートリッジへジャンプ
|
||||
|
||||
V5.10(TS5.1バージョン)
|
||||
・V3.01へ戻す
|
||||
|
||||
V5.01
|
||||
・FIQスリープ機能の追加
|
||||
|
||||
V5.00(AGB2-TS1バージョン)
|
||||
・ガンマ補正機能の追加(<R + Bキー>デモ変更)
|
||||
・PAUSEレジスタ CHKフラグセットタイミングをカートリッジ開始直前へ移動
|
||||
・起動デモ専用コピールーチンの変更
|
||||
・パレット先頭データ削除に伴う各ルーチンの調整
|
||||
・ハイライトパレット・コピールーチンの縮小
|
||||
・GBロゴパレット作成ルーチンの追加
|
||||
|
||||
|
||||
V3.01(V2.12)
|
||||
・TS3バージョン
|
||||
V3.00(V2.11)
|
||||
・TS3バージョン(サウンドバグあり)
|
||||
|
||||
|
||||
V2.12
|
||||
・SoundVSync()を割り込み呼び出しへ変更
|
||||
V2.11
|
||||
・サウンド・タイ修正
|
||||
V2.10
|
||||
・デバッガ飛び先の変更
|
||||
1M-DACS→9fe2000h/8M-DACS→9ffc000h/DACS無し→9ffc000h
|
||||
|
||||
V2.05
|
||||
・サウンドドライバのエコー・バグ修正
|
||||
・キーアドレス指定フラグ(80000b4h:d7)反転
|
||||
V2.04
|
||||
・SIOブート時のロゴセットを3ルーチンに分割
|
||||
・SIOブート時のロゴセットと発音処理を別フレームに分散
|
||||
V2.03
|
||||
・カセット挿入識別 一時停止
|
||||
・8M-DACS用にデバッガ領域移動フラグ対応
|
||||
・IN35端子ラッチ処理の追加
|
||||
・サウンドドライバ更新
|
||||
・システムコールにてAGBモニタ起動時でも内部ROMコピーを禁止
|
||||
・LogoCopyCommon()で内部ROMイメージのコピーを禁止
|
||||
・Intr_Wait()とSoundBiasChange16()中のベースアドレスを毎ループ設定
|
||||
V2.02
|
||||
・IntrWait()バグ修正
|
||||
・カセット挿入識別
|
||||
・強制SIOブート機能 追加 <START + SELECTキー>
|
||||
・SIOブート・モード キー固定中止
|
||||
・内部ROMチェックサム システムコール追加
|
||||
・デモのZ座標小数部廃止
|
||||
V2.01
|
||||
・TS2.1バージョン
|
||||
・挿入カセット識別フラグの再反転(AGB=0/CGB=1)
|
||||
V2.00
|
||||
・TS2バージョン
|
||||
|
||||
|
||||
|
||||
V1.59
|
||||
・PlttLinerSet()のLinerParam有効範囲0~8→0~32
|
||||
V1.58
|
||||
・サウンドドライバ000303a
|
||||
・SIOスレーブ000304a
|
||||
・Nintendoロゴセット 修正
|
||||
V1.57
|
||||
・SPSR_fiq→0x3007FE0/CPSR_fiq→0x3007FE4
|
||||
V1.56
|
||||
・互換SIOスレーブ機能 追加
|
||||
V1.55
|
||||
・→SP_svc=3007FE0h/SP_fiq=3007FF0h
|
||||
・IRQ/FIQ時のジャンプをldr命令にて行ない、bx命令を削除して高速化
|
||||
32bitモード固定
|
||||
・カセット/CPU外部RAMジャンプ用レジスタr7→lr
|
||||
・ソフトリセット システムコール追加
|
||||
・システムコール デフォルト FIQ許可
|
||||
・セキュリティ解除チェック ON
|
||||
・サウンドドライバ データ精度向上
|
||||
・マルチプレイSIOスレーブ機能 追加
|
||||
V1.54
|
||||
・CGB互換モード振幅6bit設定
|
||||
・レジスタ&RAMリセット システムコール追加
|
||||
V1.53S
|
||||
・フラッシュ上での2WAIT実行
|
||||
V1.53
|
||||
・PROM_000221対応
|
||||
V1.52
|
||||
・システムコール→直接呼び出し
|
||||
・サウンドエリア内部RAM
|
||||
V1.51
|
||||
・セキュリティ解除チェック一旦中止
|
||||
・サウンドエリア外部RAM
|
||||
V1.50
|
||||
・PROM_991216対応
|
||||
・システムコールシフト中止
|
||||
・不用システムコール削除
|
||||
|
||||
V1.46
|
||||
・DACSルーチン・データ差し換え
|
||||
・DACSパッチ当て
|
||||
・ユーザが32bit命令で0番地に飛んで来た場合の対処
|
||||
・RAM上でのNON WAIT実行
|
||||
V1.45
|
||||
・PROM_000131対応
|
||||
・ROMアクセス 8-8(Nintendoロゴ化け防止)
|
||||
・フラッシュ上での2WAIT実行
|
||||
|
||||
V1.43
|
||||
・JOYルーチン26-5バージョン
|
||||
・DACSキーNo算出データ領域の変更
|
||||
・PauseRegReadシステムコールバグ修正
|
||||
V1.42
|
||||
・JOYルーチン26-3バージョン
|
||||
・ハイライトの初期値を小さくしアクセントを付ける
|
||||
V1.41
|
||||
・JOYルーチン26-2バージョン
|
||||
V1.40
|
||||
・JOYルーチン26バージョン
|
||||
V1.39
|
||||
・カセット起動時は汎用入出力SIOモード
|
||||
CPU外部RAM起動時はJOYバスSIOモード
|
||||
V1.38
|
||||
・起動時スタック領域クリア
|
||||
V1.37
|
||||
・JOYルーチン24バージョン
|
||||
V1.36
|
||||
・JOYルーチン23バージョン
|
||||
V1.35
|
||||
・無限ループ中サウンドDMA停止
|
||||
V1.34
|
||||
・モニタ用変数領域をCPU内部RAM(3000000h)へ移動
|
||||
・JOYルーチン22バージョン
|
||||
V1.33
|
||||
・JOYルーチン21バージョン
|
||||
V1.32
|
||||
・JOYルーチン14バージョン
|
||||
・サウンド波形データ圧縮
|
||||
V1.31
|
||||
・IF待ちシステムコール削除
|
||||
・JOYルーチン12バージョン
|
||||
・サウンドドライバ000105バージョン
|
||||
V1.30
|
||||
・挿入カセット識別フラグの反転(CGB=0/AGB=1)
|
||||
・ROM内登録データのコピー
|
||||
//・例外時分岐をROM内登録データのFIQフラグ改変時のみに限定
|
||||
// 通常時はそのままリターン
|
||||
・IF待ち/割り込み待ち/Sqrt/ArcTanシステムコール追加
|
||||
・Divシステムコール引数入れ換え
|
||||
|
||||
V1.22
|
||||
・全例外の分岐先を0x9fe2000に、その復帰命令を"subs pc, lr, #4"に固定
|
||||
V1.21
|
||||
・システムコールを使用したコピーへの対策
|
||||
・IMEレジスタをセットしない
|
||||
V1.20
|
||||
・セキュリティ・キー読み込み追加とキー解除ルーチンの修正
|
||||
・サウンドDMAの新仕様対応
|
||||
・モニタ用変数領域はCPU外部RAM(2000000h)のまま
|
||||
・スタック領域・システム領域をCPU内部RAM(3000000h)へ移動
|
||||
・→SP_usr=3007F00h/SP_irq=3007FA0h/SP_svc=3007FE8h/SP_fiq=3007FFCh
|
||||
・OBJ回転中心位置の移動設定
|
||||
・起動プログラム終了フラグのセット
|
||||
・IMEレジスタのセット
|
||||
・RAM上でのNON WAIT実行
|
||||
|
||||
V1.11
|
||||
・RAM上でのNON WAIT実行
|
||||
V1.10(TS1.1バージョン)
|
||||
・Halt一旦中止
|
||||
・ROM上での実行
|
||||
・BG/OBJアフィン変換システムコール・バグ修正
|
||||
|
||||
V1.02
|
||||
・ブレッドボードでの遅延DMAをCPUで代替
|
||||
V1.01
|
||||
・例外ベクタ・バグ修正
|
||||
・RAM上でのNON WAIT実行
|
||||
V1.00(TS1バージョン)
|
||||
・デモサウンド暫定版の追加
|
||||
・サウンドドライバ暫定版の追加
|
||||
・例外スタック処理変更
|
||||
・システムコールのアセンブラ化
|
||||
・システムコール引数をRAM渡しからレジスタ渡しへ変更
|
||||
・例外ベクタ・バグあり
|
||||
|
||||
V0.30
|
||||
・タイトルデモ暫定版の追加
|
||||
・サウンドBIASセットorリセットのシステムコールの追加
|
||||
・"bx lr"での例外からの復帰に対応
|
||||
|
||||
V0.23
|
||||
旧AGB-CPU仕様用レジュ-ム復帰システムコール郡の削除
|
||||
圧縮関係システムコール郡の追加(32bit命令)
|
||||
V0.22
|
||||
・FIQ/SVCモード時のFIQ許可
|
||||
V0.21
|
||||
・FIQ/SVCモード時のFIQ不許可
|
||||
・IRQモードのspの初期化
|
||||
・起動時はユーザモードにして外部プログラムへジャンプ
|
||||
・全例外発生時にはそのままのCPUモードにて外部プログラムへジャンプ
|
||||
・例外用スタック 6 Word を (200BFC0 ~ ) → (200BFD8 ~ ) へ
|
||||
システムコール引数領域 2 Word を (200BFD8 ~ ) → (200BFF0 ~ ) へ移動
|
||||
・AGBモニタ例外処理のデバッグ用に各モード時のcpsr,pcとユーザモードのspも退避
|
||||
V0.20
|
||||
・起動時&全例外時にIRQモードにて外部プログラムへジャンプ
|
||||
・IRQ専用スタックは廃止してユーザで管理
|
||||
|
||||
V0.11
|
||||
・タイマー停止処理
|
||||
V0.10
|
||||
・IMEのセット
|
||||
・モニタROM動作中のFIQ許可
|
||||
74
trunk/IrisMainp/IrisMon/Cp15InitArm.s
Normal file
74
trunk/IrisMainp/IrisMon/Cp15InitArm.s
Normal file
@ -0,0 +1,74 @@
|
||||
;=======================================================================
|
||||
; crt0_arm.s
|
||||
; スタートアップルーチン(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
|
||||
AREA Init, CODE, READONLY
|
||||
INCLUDE IrisDefineArm.s
|
||||
INCLUDE IrisMemoryMapArm.s
|
||||
INCLUDE IrisSystemCallArm.s
|
||||
INCLUDE IrisMacroArm.s
|
||||
|
||||
INCLUDE IrisMonDefineArm.s
|
||||
INCLUDE IrisMonMempryMapArm.s
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; システム制御コプロセッサ リセット(r0=パラメータ)
|
||||
;-----------------------------------------------------------------------
|
||||
GLOBAL reset_cp15
|
||||
ALIGN
|
||||
CODE32
|
||||
reset_cp15
|
||||
|
||||
; プロテクションユニット/キャッシュ/TCM セット
|
||||
|
||||
mcr p15, 0, r0, c1, c0, 0
|
||||
|
||||
; キャッシュ無効化
|
||||
|
||||
mov r0, #0
|
||||
mcr p15, 0, r0, c7, c5, 0 ; 命令キャッシュ
|
||||
mcr p15, 0, r0, c7, c6, 0 ; データキャッシュ
|
||||
|
||||
; ライトバッファ エンプティ待ち
|
||||
|
||||
mcr p15, 0, r0, c7, c10, 4
|
||||
|
||||
bx lr
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; システム制御コプロセッサ 初期化
|
||||
;-----------------------------------------------------------------------
|
||||
GLOBAL init_cp15
|
||||
ALIGN
|
||||
CODE32
|
||||
init_cp15
|
||||
mov r12, lr
|
||||
|
||||
; プロテクションユニット/キャッシュ/TCM ディセーブル
|
||||
|
||||
ldr r0, =C1_EXCEPT_VEC_UPPER | C1_SB1_BITSET
|
||||
|
||||
bl reset_cp15
|
||||
|
||||
|
||||
; データTCM 設定
|
||||
|
||||
ldr r0, =MON_DTCM :OR: C9_TCMR_16KB
|
||||
mcr p15, 0, r0, c9, c1, 0
|
||||
|
||||
; システム制御コプロセッサ マスター設定
|
||||
|
||||
mrc p15, 0, r0, c1, c0, 0
|
||||
|
||||
ldr r0, =C1_DTCM_ENABLE | C1_EXCEPT_VEC_UPPER | C1_SB1_BITSET
|
||||
mcr p15, 0, r0, c1, c0, 0
|
||||
|
||||
bx r12
|
||||
|
||||
|
||||
END
|
||||
|
||||
146
trunk/IrisMainp/IrisMon/IRISモニタ履歴.txt
Normal file
146
trunk/IrisMainp/IrisMon/IRISモニタ履歴.txt
Normal file
@ -0,0 +1,146 @@
|
||||
IRISモニタプログラム変更履歴
|
||||
|
||||
V0.76
|
||||
・IPL2カートリッジブート・バージョン
|
||||
V0.75
|
||||
・カードバス切り換え実験バージョン
|
||||
V0.74
|
||||
・デバッガ4MB動作バージョン
|
||||
V0.73
|
||||
・カートリッジブート仕様
|
||||
V0.72
|
||||
・3Dメモリ擬似対応版
|
||||
V0.71
|
||||
・IPL2ブート実験版
|
||||
V0.70(TS040304提出バージョン / CRC16 0x6cf8)
|
||||
・IPL2ブート対応版
|
||||
・初期化シーケンス最適化
|
||||
・圧縮システムコール・エラー時のTerminate処理 追加
|
||||
|
||||
V0.62
|
||||
・3Dメモリ擬似対応版
|
||||
V0.61
|
||||
・IPL2ブート実験版
|
||||
・検証のため JTAGイネーブル
|
||||
V0.60(TS提出バージョン / CRC16 0x0690)
|
||||
・IPL2ブート対応版
|
||||
・DTCM全クリア
|
||||
|
||||
V0.59
|
||||
・IPL2ブート対応版
|
||||
V0.58
|
||||
・IPL2ブート実験版
|
||||
・バージョン表示 削除
|
||||
V0.57
|
||||
・IPL2ブート対応版
|
||||
V0.56
|
||||
・IPL2ブート実験版
|
||||
・SVC_Div()/SVC_DivRem()/SVC_Sqrt()/UnDiffByte2Byte()/UnDiffShort2Short 追加
|
||||
・UC_*StreamFuncp() 引数変更
|
||||
V0.52
|
||||
・IPL2ブート対応版
|
||||
V0.51
|
||||
・IPL2ブート実験版
|
||||
・NINTENDOロゴデータを含める
|
||||
・システムコールの整理
|
||||
・JTAGイネーブルのみ有効
|
||||
V0.50
|
||||
・3Dメモリ擬似対応
|
||||
V0.45
|
||||
・NEC製擬似SRAMバーストモード修正
|
||||
V0.41
|
||||
・IPL2ブート対応版
|
||||
V0.40
|
||||
・IPL2ブート実験版
|
||||
V0.36
|
||||
・IPL2実験用にプロテクションユニットをディセーブル
|
||||
V0.32
|
||||
・UsrSwi() 削除
|
||||
V0.31
|
||||
・サウンドチーム提出バージョン
|
||||
V0.30
|
||||
・システム領域 4KB → 16KB 拡張対応
|
||||
・IPL2でブートさせる場合に無限ループに入っていたのを修正
|
||||
・DISP_READY_CARD_4_IPL2 定義追加
|
||||
V0.30
|
||||
・NEC製擬似SRAMの新仕様へ対応
|
||||
・カードバス・リセット処理をMAINP側へ移動
|
||||
V0.29
|
||||
・カード(カートリッジ)ヘッダチェック成功時にのみデバッガモニタ起動
|
||||
・AGBモード時の表示期間待ち処理をMAINP側へ移動
|
||||
・DISABLE_AGB_MODE → DISP_AGB_HEADER_ERROR 変更
|
||||
V0.28
|
||||
・デバッガスタックアドレス移動(DTCM_END-0x40 → 0x027F_FD80)
|
||||
・IsMmem8MB() 追加
|
||||
・MMEM_CHK_SIZE_[WRITE|READ]_BUF をSUBPと分離
|
||||
・例外発生時の FIQ 不許可バグの修正
|
||||
V0.27
|
||||
・デバッガモニタブート情報エリアの移動(0x170 → 0x160)
|
||||
V0.26
|
||||
・デバッガモニタブート情報エリアの移動(0x70 → 0x170)
|
||||
・AGBモード一時排除
|
||||
V0.25
|
||||
・例外発生時の FIQ 不許可対応
|
||||
・AGBモード暫定対応
|
||||
V0.24
|
||||
・SUBPとの通信部分の変更
|
||||
・カードのリセット準備コード追加
|
||||
V0.23
|
||||
・スレッド対応を元に戻す
|
||||
・キャッシュ無効化バグ修正
|
||||
・プロテクションユニットをディセーブルにしてアプリケーションを起動(DTCMのみ有効)
|
||||
V0.22a
|
||||
・システムコールにて呼び出し元のスタックを使用するように変更(スレッド対応)
|
||||
V0.22
|
||||
・デバッガインタフェース変更
|
||||
V0.21a
|
||||
・デバッガインタフェース復帰処理の修正
|
||||
V0.21
|
||||
・デバッガインタフェース実装
|
||||
|
||||
V0.20(TEGボード配布バージョン)
|
||||
・SVC_UsrSwi() システムコール追加
|
||||
|
||||
V0.17
|
||||
・システムコール群の整理
|
||||
V0.16
|
||||
・システムコールと割り込み処理呼び出しの高速化
|
||||
・スタックポインタの移動
|
||||
・*CpuSet*() の転送サイズ有効範囲の拡張
|
||||
V0.15
|
||||
・SVC_WaitByLoop() 追加
|
||||
・SVC_WaitIntr() 高速化
|
||||
・SVC_CpuSetFast() バグ修正
|
||||
V0.14
|
||||
・メインメモリのシステム領域初期化
|
||||
・SVC_AccessCard() TEGボード暫定版の追加
|
||||
・SVC_CpuSetFast() の32Byteサイズ制限の解除
|
||||
・SVC_WaitIntr() へホールトの追加
|
||||
V0.13
|
||||
・システムコールNo参照時のバイトアクセス修正
|
||||
V0.12
|
||||
・リストRAM の 0xffffffffクリア
|
||||
V0.11
|
||||
・TEG でのADバス・ダウンロードへ対応
|
||||
・TEG でサウンド出力を有効にするため LCDイネーブルフラグをセットする
|
||||
V0.10
|
||||
・TEG で動作するように対応
|
||||
|
||||
V0.06
|
||||
・システム領域をDTCM領域へ移動(TEG対応)
|
||||
・RegisterRamReset() 変更
|
||||
V0.05(AD16BUSバージョンV0.01)
|
||||
・IOP同期&ダウンロード実行
|
||||
V0.04
|
||||
・Halt()、Stop() 修正
|
||||
V0.03
|
||||
・ArcTan2() → ArcTan3()
|
||||
V0.02
|
||||
・IntrWait()内の Halt 中止
|
||||
V0.01
|
||||
・フラッシュ実行
|
||||
・AGBにあるサウンドと通信以外のシステムコールの実装
|
||||
・BB の仕様に合わせて内部ワークRAMイメージを未使用
|
||||
・プログラムコピー用に CpuFastSet() のソースチェック解除
|
||||
・最後に無限ループで停止(ユーザプログラムのロード時に
|
||||
デバッガが PC を変更してくれるため)
|
||||
158
trunk/IrisMainp/IrisMon/IrisMon.c
Normal file
158
trunk/IrisMainp/IrisMon/IrisMon.c
Normal file
@ -0,0 +1,158 @@
|
||||
//*******************************************************************
|
||||
// IRISモニタプログラム
|
||||
//*******************************************************************
|
||||
#include "IrisMon.h"
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メインルーチン
|
||||
//----------------------------------------------------------------------
|
||||
extern void intr_main(void);
|
||||
|
||||
extern void RegisterRamReset32(u32 resetFlags);
|
||||
extern void CpuSet32(const void *srcp, void *destp, u32 dmaCntData);
|
||||
extern void CpuFastSet32(const void *srcp, void *destp, u32 dmaCntData);
|
||||
|
||||
|
||||
void IrisMonMain()
|
||||
{
|
||||
NotifySubpIntf(0); // ブート・ハンドシェイク
|
||||
WaitSubpIntf(0);
|
||||
|
||||
#ifdef NDEBUG
|
||||
|
||||
NotifySubpIntf(1);
|
||||
WaitSubpIntf(1);
|
||||
|
||||
#endif // NDEBUG
|
||||
|
||||
InitReg(); // レジスタ初期化
|
||||
InitRam(); // メモリ初期化
|
||||
|
||||
#ifdef DISP_BIOS_VERSION
|
||||
if ((*(vu8 *)REG_KEYINPUT ^ 0xff) & (START_BUTTON|SELECT_BUTTON)) {
|
||||
DispTegCheck(" 070", ""); // TEG専用バージョンチェック表示
|
||||
while(1) ;
|
||||
}
|
||||
#endif
|
||||
|
||||
*(vu16 *)REG_EXMEMCNT = CARD_ACCESS_SUBP // 10-6アクセス
|
||||
| CTRDG_ACCESS_SUBP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC
|
||||
| MMEM_PRIORITY_SUBP | MMEM_INTF_SYNC | MMEM_CE2_OUT;
|
||||
*(vu32 *)REG_CARDCNT = CARD_RESET_HI; // ユーザがカードバスを切り換えた時の安全性のため
|
||||
|
||||
NotifySubpIntf(2); // 初期化完了の通知
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
||||
WaitSubpIntf(2); // ARM7 初期化完了待ち
|
||||
NotifySubpIntf(15); // デバッグ通信
|
||||
|
||||
#endif // NDEBUG
|
||||
|
||||
// ARM7によるROMヘッダと実行イメージのダウンロード
|
||||
|
||||
while (1) {
|
||||
u32 subpIntfData = RecvSubpIntf();
|
||||
|
||||
if (subpIntfData == 3) break;
|
||||
|
||||
#ifdef TEST_AGB_MODE
|
||||
|
||||
else if (subpIntfData == 7) Iris2Agb(); // AGBモード遷移
|
||||
|
||||
#endif // TEST_AGB_MODE
|
||||
|
||||
#ifdef DISP_AGB_HEADER_ERROR
|
||||
|
||||
else if (subpIntfData == 8) {
|
||||
DispTegCheck("CARTRIDGE ERROR", " PUSH A BUTTON"); // AGBヘッダエラー チェック表示
|
||||
while (!((*(vu8 *)REG_KEYINPUT ^ 0xff) & A_BUTTON)) ;
|
||||
NotifySubpIntf(8); // AGBヘッダエラーの応答
|
||||
reset_cp15(C1_DTCM_ENABLE | C1_EXCEPT_VEC_UPPER | C1_SB1_BITSET);
|
||||
Iris2Agb(); // AGBモード遷移
|
||||
}
|
||||
|
||||
#endif // DISP_AGB_HEADER_ERROR
|
||||
|
||||
#ifdef DISP_READY_CARD_4_IPL2
|
||||
|
||||
else if (subpIntfData == 9) {
|
||||
DispTegCheck(" READY", "");
|
||||
reset_cp15(C1_DTCM_ENABLE | C1_EXCEPT_VEC_UPPER | C1_SB1_BITSET);
|
||||
*(u8 *)REG_PAUSE = 2; // JTAGイネーブル
|
||||
WaitSubpIntf(3);
|
||||
break;
|
||||
}
|
||||
|
||||
#endif // DISP_READY_CARD_4_IPL2
|
||||
|
||||
}
|
||||
|
||||
*(vu32 *)REG_IME = 0; // IME クリア
|
||||
*(vu32 *)REG_IE = 0; // IE クリア
|
||||
*(vu32 *)REG_IF = -1; // IF クリア
|
||||
|
||||
WaitSubpIntf(3);
|
||||
NotifySubpIntf(3);
|
||||
|
||||
// 通常はここで終了
|
||||
|
||||
|
||||
#ifdef TEST_CARD_BY_MAINP
|
||||
// カードバス切り換え検証
|
||||
WaitSubpIntf(5);
|
||||
|
||||
*(vu16 *)REG_EXMEMCNT = CTRDG_ACCESS_MAINP // MAINPカードアクセス
|
||||
| CTRDG_ACCESS_SUBP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC
|
||||
| MMEM_PRIORITY_SUBP | MMEM_INTF_SYNC | MMEM_CE2_OUT;
|
||||
|
||||
ReadCard4Game((void *)MROM_GAME_AREA, (void *)0x027ff400,// GAMEモード読み込み
|
||||
MROM_PAGE_SIZE, 0xa1586000);
|
||||
|
||||
*(vu16 *)REG_EXMEMCNT = CARD_ACCESS_SUBP // SUBPカードアクセス
|
||||
| CTRDG_ACCESS_SUBP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC
|
||||
| MMEM_PRIORITY_SUBP | MMEM_INTF_SYNC | MMEM_CE2_OUT;
|
||||
|
||||
NotifySubpIntf(5);
|
||||
|
||||
WaitSubpIntf(6);
|
||||
|
||||
*(vu16 *)REG_EXMEMCNT = CTRDG_ACCESS_MAINP // MAINPカードアクセス
|
||||
| CTRDG_ACCESS_SUBP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC
|
||||
| MMEM_PRIORITY_SUBP | MMEM_INTF_SYNC | MMEM_CE2_OUT;
|
||||
|
||||
ReadCard4Game((void *)(MROM_GAME_AREA+0x200), (void *)0x027ff600,// GAMEモード読み込み
|
||||
MROM_PAGE_SIZE, 0xa1586000);
|
||||
ReadCardID4Game(); // ID読み込み
|
||||
|
||||
*(vu16 *)REG_EXMEMCNT = CARD_ACCESS_SUBP // SUBPカードアクセス
|
||||
| CTRDG_ACCESS_SUBP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC
|
||||
| MMEM_PRIORITY_SUBP | MMEM_INTF_SYNC | MMEM_CE2_OUT;
|
||||
|
||||
NotifySubpIntf(6);
|
||||
|
||||
#endif // TEST_CARD_BY_MAINP
|
||||
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// サブプロセッサ・インタフェース通知
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void NotifySubpIntf(u32 param)
|
||||
{
|
||||
*(vu16 *)REG_SUBPINTF = param <<SUBP_SEND_STATUS_SHIFT;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// サブプロセッサ・インタフェース受信待ち
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void WaitSubpIntf(u32 param)
|
||||
{
|
||||
while (RecvSubpIntf() != param) ;
|
||||
}
|
||||
|
||||
|
||||
18
trunk/IrisMainp/IrisMon/IrisMon.h
Normal file
18
trunk/IrisMainp/IrisMon/IrisMon.h
Normal file
@ -0,0 +1,18 @@
|
||||
/********************************************************************/
|
||||
/* IRISモニタプログラム ヘッダファイル郡 */
|
||||
/********************************************************************/
|
||||
#ifndef _IRIS_MON_H
|
||||
#define _IRIS_MON_H
|
||||
|
||||
|
||||
#include <Iris.h>
|
||||
#include <IrisCardDefine.h>
|
||||
#include <IrisMainMemeoryDefine.h>
|
||||
#include "IrisMonDefine.h"
|
||||
#include "IrisMonMemoryMap.h"
|
||||
#include "IrisMonMacro.h"
|
||||
#include "IrisMonSub.h"
|
||||
|
||||
|
||||
|
||||
#endif /* _IRIS_MON_H */
|
||||
BIN
trunk/IrisMainp/IrisMon/IrisMon.mcp
Normal file
BIN
trunk/IrisMainp/IrisMon/IrisMon.mcp
Normal file
Binary file not shown.
241
trunk/IrisMainp/IrisMon/IrisMon.ses
Normal file
241
trunk/IrisMainp/IrisMon/IrisMon.ses
Normal file
@ -0,0 +1,241 @@
|
||||
[CLI]
|
||||
dwParse=1
|
||||
dwEcho=1
|
||||
dwUpdate=1
|
||||
dwHistorySize=16
|
||||
dwInstructionSize=1
|
||||
dwMemBytes=32
|
||||
dwMemSize=0
|
||||
dwStepSize=0
|
||||
Format=hex
|
||||
FormatPar=-1
|
||||
dwLogFile=0
|
||||
dwRecordFile=0
|
||||
[Control]
|
||||
dwActiveTab=0
|
||||
[DebugEnvironment]
|
||||
biDebugEnvironment=EECEFEDDABAAAAAABAAAAAAADEKDMFAFCHPGHGCHBGNGACGEJGMGFGDHMFBECFNEMFNEFHMGEHJGNCJEDEFEMFNEFHMGEHJGNCJEDEFEOCEGMGMGAANEFHMGEHJGNCJEDEFEAADCGJBAAAAACEJFEFFEDFFEIFNDMEJGEHEHMGFGNAKANEFFMEEFJENCJEDEFEPFDEPEOEOEFEDEEFJEPEOEPFOEBENEFENDNAKANEFFMEEFJENCJEDEFEPFDFFECFGFFECFPFMEPEDEBEEFJEPEOENDMGPGDGBGMGIGPGDHEHNAKANEFFMEEFJENCJEDEFEPFEEMEMEPFDFFEEFEFJEOEHEDFNDADNAKAEFBECFHEFEEFPFEEJECFNDDEKDMFAFCHPGHGCHBGNGACGEJGMGFGDHMFBECFNEMFNEFHMGEHJGNCJEDEFENAKANEFFMEEFJENCJEDEFEPFIEBEOEEEMEFECFCEBEDFFEBEEEEECFNDGEGEADADADADADADNAKANEFFMEEFJENCJEDEFEPFDEMEFEBEOEDEPEEEFEBEEEEECFNDADADADADADADFDADNAKAEFCFBEDEFEEEMEMEPFEFCFBEDEFEDEPEOEEFCFPEMEMEJEDFEFJEEFFENEADNDNAKAEFCFBEDEFEEEMEMEPFEFCFBEDEFEDEPEOEEFCFPEMEOEBENEFENDNAKADEPEOEEFCFPEMEMEFECFPFCFEEJEGFFECFDFJEPEOENDBDFDBDNAKANEFFMEEFJENCJEDEFEPFIFDFIEPEEFAFMEFFHEHEJEOEHEFEOEBECEMEFEEENDEFCFFFFENAKANEFFMEEFJENCJEDEFEPFEECFJEGFFECFADPFOEBENEFENDBECFNEJDEDGDFENCDFNAKANEFFMEEFJENCJEDEFEPFEFBEAFADPFAFPEDFJEEFJEPEOENDADNAKADCDC
|
||||
[Docking]
|
||||
biBarID_0=AMAAAAAABJAAAAAAAMAAAAAAIEAAAAAAAMAAAAAAHOBAAAAAOPPPPPPPMBAAAAAAAAAAAAAAAAPBAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_4=AMAAAAAABJAAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAAOPPPPPPPJACAAAAAAAAAAAAAAAPIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_65539=LCCAAAAAKJBAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAAFGAAAAAAFECAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_1114115=AMAAAAAABJAAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAAOPPPPPPPJACAAAAAAAAAAAAAAAPIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_65538=LMAAAAAAIGBAAAAAAMAAAAAAIEAAAAAAAMAAAAAAICAAAAAAKODAAAAABMAAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_1=AMAAAAAABJAAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAAOPPPPPPPCHBAAAAAAAAAAAAAAAPIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_65540=JCBAAAAAEKBAAAAAAMAAAAAAIEAAAAAAAMAAAAAAMGAAAAAACEDAAAAAMACAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_7=MFBAAAAAIKAAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAADFDAAAAAEGCAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
[Docking\OpenStates]
|
||||
biBarID_0=BAAAAAAA
|
||||
biBarID_4=BAAAAAAA
|
||||
biBarID_7=BAAAAAAA
|
||||
biBarID_65538=BAAAAAAA
|
||||
biBarID_65539=BAAAAAAA
|
||||
biBarID_65540=BAAAAAAA
|
||||
[Images\Image_0]
|
||||
Filename=D:\Iris\IrisMon\IrisMon_Data\ThumbRelease\IrisMon.axf
|
||||
Processor=ARM946E_S_0
|
||||
dwProfileState=0
|
||||
[Interface\AutoRefresh]
|
||||
dwEnabled=0
|
||||
dwInterval=100
|
||||
dwTerminateOnSuspend=0
|
||||
[Interface\Formatting]
|
||||
dwDecIsUser=0
|
||||
DecFormat=%d
|
||||
dwHexIsUser=0
|
||||
HexFormat=%0X
|
||||
dwFloatIsUser=0
|
||||
FloatFormat=%.7g
|
||||
dwDbleIsUser=0
|
||||
DbleFormat=%.10g
|
||||
dwQ15IsUser=0
|
||||
Q15Format=%.6g
|
||||
dwQ31IsUser=0
|
||||
Q31Format=%.12g
|
||||
dwArrayThreshold=16
|
||||
[Interface\General]
|
||||
dwTarget Connection=1
|
||||
dwReport All Warnings=0
|
||||
dwReport Exceptions=1
|
||||
[Interface\SessionFiles]
|
||||
dwReselect Target=1
|
||||
dwReload Images=0
|
||||
dwRun Config Script=0
|
||||
Config Script Name=D:\Iris\geometry\geometry.ses
|
||||
[Interface\Toolbars]
|
||||
dwTBFile=1
|
||||
dwTBSearch=1
|
||||
dwTBExecute=1
|
||||
dwTBSystemView=1
|
||||
dwTBProcView=1
|
||||
dwTBHelp=1
|
||||
[Interface\Views]
|
||||
biDefault Fixed Font=EPPPPPPPAAAAAAAAAAAAAAAAAAAAAAAAAJBAAAAAAAAAAAAADACABABBCIMGCICHACGJOLCJJKAAHHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biDefault General Font=EPPPPPPPAAAAAAAAAAAAAAAAAAAAAAAAAJBAAAAAAAAAAAAADACABABBCIMGCICHACGJOLCJJKAACHJGGGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
dwTab Size=4
|
||||
dwInterleave=0
|
||||
dwShow Line Numbers=1
|
||||
dwShow Margin=1
|
||||
dwShow Tooltips=1
|
||||
dwInitViewState=0
|
||||
[MainWnd]
|
||||
biWndPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPBGAAAAAAIIAAAAAABCEAAAAABGDAAAAA
|
||||
[Memory]
|
||||
dwActiveTab=1
|
||||
dwApplyToAllTabs=0
|
||||
[Memory\Tab_0]
|
||||
dwStartAddress=33570560
|
||||
Format=hex_noprefix_32
|
||||
dwFormatID=-1
|
||||
dwListBigEndian=0
|
||||
dwDisplayOffset=0
|
||||
dwPageSize=1024
|
||||
dwListSize=4
|
||||
dwTargetAccessSize=0
|
||||
dwAutoRefresh=1
|
||||
[Memory\Tab_1]
|
||||
dwStartAddress=41940992
|
||||
Format=hex_noprefix_32
|
||||
dwFormatID=-1
|
||||
dwListBigEndian=0
|
||||
dwDisplayOffset=0
|
||||
dwPageSize=1024
|
||||
dwListSize=4
|
||||
dwTargetAccessSize=0
|
||||
dwAutoRefresh=1
|
||||
[Memory\Tab_2]
|
||||
dwStartAddress=41942016
|
||||
Format=hex_noprefix_32
|
||||
dwFormatID=-1
|
||||
dwListBigEndian=0
|
||||
dwDisplayOffset=0
|
||||
dwPageSize=1024
|
||||
dwListSize=4
|
||||
dwTargetAccessSize=0
|
||||
dwAutoRefresh=1
|
||||
[Memory\Tab_3]
|
||||
dwStartAddress=67108864
|
||||
Format=hex_noprefix_32
|
||||
dwFormatID=-1
|
||||
dwListBigEndian=0
|
||||
dwDisplayOffset=0
|
||||
dwPageSize=1024
|
||||
dwListSize=4
|
||||
dwTargetAccessSize=0
|
||||
dwAutoRefresh=1
|
||||
[Output]
|
||||
dwActiveTab=0
|
||||
[ProcessorRegisters\ARM946E_S_0]
|
||||
dwFormatID=-1
|
||||
dwRefresh=0
|
||||
[ProcessorRegisters\ARM9_0]
|
||||
dwFormatID=-1
|
||||
dwRefresh=1
|
||||
[RecentFileList]
|
||||
dwFileCount=4
|
||||
[RecentImageList]
|
||||
File_1=D:\Iris\IrisMon\IrisMon_Data\ThumbRelease\IrisMon.axf
|
||||
File_2=D:\Iris\ipl2_test\ipl2_test_Data\ThumbDebugRel\ipl2_test.axf
|
||||
File_3=D:\Iris\two_quads\two_quads_Data\ThumbDebugRel\two_quads.axf
|
||||
File_4=D:\Iris\geometry\geometry_Data\ThumbRelease\geometry.axf
|
||||
dwFileCount=4
|
||||
[RecentSymbolsList]
|
||||
File_1=D:\IrisSubp\IrisSubpMon\IrisSubpMon_Data\ThumbRelease\IrisSubpMon.axf
|
||||
dwFileCount=4
|
||||
[Target\ARM946E_S_0]
|
||||
dwMode=0
|
||||
dwCommsChannel=0
|
||||
dwArmSWI=1193046
|
||||
dwThumbSWI=171
|
||||
dwSHVector=8
|
||||
dwDCCSHVector=458752
|
||||
dwECVector=27
|
||||
dwTopOfMemory=524288
|
||||
dwTopOfMemoryExists=1
|
||||
[ToolBars\ToolBarID-Bar0]
|
||||
dwBarID=59419
|
||||
dwBars=12
|
||||
dwBar#0=0
|
||||
dwBar#1=171
|
||||
dwBar#2=173
|
||||
dwBar#3=175
|
||||
dwBar#4=179
|
||||
dwBar#5=177
|
||||
dwBar#6=128
|
||||
dwBar#7=65543
|
||||
dwBar#8=65538
|
||||
dwBar#9=65539
|
||||
dwBar#10=65540
|
||||
dwBar#11=0
|
||||
[ToolBars\ToolBarID-Bar1]
|
||||
dwBarID=59422
|
||||
dwBars=3
|
||||
dwBar#0=0
|
||||
dwBar#1=4
|
||||
dwBar#2=0
|
||||
[ToolBars\ToolBarID-Bar2]
|
||||
dwBarID=59423
|
||||
dwHorz=1
|
||||
dwFloating=1
|
||||
dwXPos=855
|
||||
dwYPos=631
|
||||
dwBars=3
|
||||
dwBar#0=0
|
||||
dwBar#1=7
|
||||
dwBar#2=0
|
||||
[ToolBars\ToolBarID-Bar3]
|
||||
dwBarID=59423
|
||||
dwHorz=1
|
||||
dwFloating=1
|
||||
dwXPos=1006
|
||||
dwYPos=212
|
||||
dwBars=3
|
||||
dwBar#0=0
|
||||
dwBar#1=2
|
||||
dwBar#2=0
|
||||
[ToolBars\ToolBarID-Bar4]
|
||||
dwBarID=59423
|
||||
dwHorz=1
|
||||
dwFloating=1
|
||||
dwXPos=105
|
||||
dwYPos=600
|
||||
dwBars=3
|
||||
dwBar#0=0
|
||||
dwBar#1=3
|
||||
dwBar#2=0
|
||||
[ToolBars\ToolBarID-Bar5]
|
||||
dwBarID=59423
|
||||
dwHorz=1
|
||||
dwFloating=1
|
||||
dwXPos=838
|
||||
dwYPos=543
|
||||
dwBars=3
|
||||
dwBar#0=0
|
||||
dwBar#1=4
|
||||
dwBar#2=0
|
||||
[ToolBars\ToolBarID-Summary]
|
||||
dwBars=6
|
||||
dwScreenCX=1280
|
||||
dwScreenCY=1024
|
||||
[Variables]
|
||||
dwActiveTab=1
|
||||
[Variables\Tab_0]
|
||||
dwFormatID=-1
|
||||
dwRefresh=1
|
||||
[Variables\Tab_1]
|
||||
dwFormatID=-1
|
||||
dwRefresh=1
|
||||
[Variables\Tab_2]
|
||||
dwFormatID=-1
|
||||
dwRefresh=1
|
||||
[Views]
|
||||
dwLastView=0
|
||||
[Views\View_0]
|
||||
UnitName=ARM946E_S_0
|
||||
ImageName=D:\Iris\IrisMon\IrisMon_Data\ThumbRelease\IrisMon.axf
|
||||
dwDisassembly=0
|
||||
FileName=D:\Iris\IrisMon\crt0Arm.s
|
||||
dwMixedView=0
|
||||
dwShowMargin=1
|
||||
dwShowLineNumbers=1
|
||||
biWndPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPAAAAAAAAAAAAAAAAGFCAAAAAJEBAAAAA
|
||||
298
trunk/IrisMainp/IrisMon/IrisMonCard.c
Normal file
298
trunk/IrisMainp/IrisMon/IrisMonCard.c
Normal file
@ -0,0 +1,298 @@
|
||||
//*******************************************************************
|
||||
// IRIS-MAINPモニタプログラム カード関数
|
||||
//*******************************************************************
|
||||
#include "IrisMon.h"
|
||||
|
||||
|
||||
|
||||
#ifdef TEST_CARD_BY_MAINP
|
||||
|
||||
|
||||
//--------------------- グローバル 変数 -------------------------------
|
||||
|
||||
|
||||
CardIntrWork cardIntrWork;
|
||||
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// コマンド設定
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void SetCardOp(const CardCtrlParam *paramp)
|
||||
{
|
||||
int i;
|
||||
|
||||
WaitCardDma(paramp->dmaNo); // カード転送終了待ち
|
||||
|
||||
*(vu8 *)REG_CARD_MASTER_CNT = CARDMST_SEL_ROM // マスターイネーブル
|
||||
| CARDMST_ENABLE | CARDMST_IF_ENABLE;
|
||||
|
||||
for (i=0; i<2; i++) { // コマンド設定
|
||||
u32 opTmp = paramp->op[1 - i];
|
||||
vu8 *opDestBasep = (vu8 *)(REG_CARD_CMD + i*4);
|
||||
|
||||
opDestBasep[0] = opTmp >>24;
|
||||
opDestBasep[1] = opTmp >>16;
|
||||
opDestBasep[2] = opTmp >>8;
|
||||
opDestBasep[3] = opTmp >>0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カード待ち & DMA停止
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void WaitCardDma(u32 dmaNo)
|
||||
{
|
||||
WaitCard();
|
||||
|
||||
if (dmaNo <= 3) StopDma(dmaNo);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードページ読み込み(GAMEモード/同期)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void ReadCard4Game(void *romp, void *ramp, s32 size, u32 cntParam)
|
||||
{
|
||||
CardCtrlParam param;
|
||||
s32 restSize = size;
|
||||
s32 blockSize = MROM_PAGE_SIZE;
|
||||
|
||||
param.cardCnt = cntParam // コントロール設定
|
||||
| CARD_READ_MODE | CARD_1_PAGE
|
||||
| CARD_START | CARD_RESET_HI;
|
||||
param.dmaNo = 3; // DMA番号指定
|
||||
|
||||
while (restSize > 0) { // ブロック分割読み込み
|
||||
ReadCardAsync4Game(romp, ramp, blockSize, ¶m);
|
||||
|
||||
(u8 *)romp += blockSize;
|
||||
(u8 *)ramp += blockSize;
|
||||
restSize -= blockSize;
|
||||
}
|
||||
|
||||
WaitCardDma(param.dmaNo);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カード読み込み(DMA非同期)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void ReadCardAsync(void *romp, void *ramp, s32 size, CardCtrlParam *paramp)
|
||||
{
|
||||
SetCardOp(paramp); // コマンド設定
|
||||
|
||||
if (paramp->dmaNo <= 3) {
|
||||
DmaReadCard(paramp->dmaNo, ramp); // DMA設定(最大設定 DMA0-2: 64KB / DMA3: 256KB)
|
||||
*(vu32 *)REG_CARDCNT = paramp->cardCnt; // コントロール設定 & DMAスタート
|
||||
} else {
|
||||
void *ramEndp;
|
||||
u32 cardCntTmp;
|
||||
|
||||
*(vu32 *)REG_CARDCNT = paramp->cardCnt; // コントロール設定
|
||||
|
||||
ramEndp = (u8 *)ramp + size; // 格納終了アドレス算出
|
||||
|
||||
do { // CPU読み込み
|
||||
cardCntTmp = *(vu32 *)REG_CARDCNT;
|
||||
|
||||
if (cardCntTmp & CARD_DATA_READY) {
|
||||
u32 dataTmp = *(vu32 *)REG_CARD_DATA;
|
||||
|
||||
if (ramp < ramEndp)
|
||||
*((vu32 *)ramp) = dataTmp; // 指定サイズまで格納(後続データは読み捨て)
|
||||
((vu32 *)ramp)++;
|
||||
}
|
||||
} while (cardCntTmp & CARD_START);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カード転送ブロックサイズ 獲得
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 GetBlockSizeFromCardCnt(CardCnt *paramp)
|
||||
{
|
||||
s32 blockSize = 0;
|
||||
s32 pages = paramp->pages;
|
||||
|
||||
if (pages == ST_CARD_STATUS) blockSize = 4;
|
||||
else if (pages >= ST_CARD_1_PAGE) blockSize = 512 <<(pages - 1);
|
||||
|
||||
return blockSize;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードID読み込み(同期)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
u32 ReadCardID(CardCtrlParam *paramp)
|
||||
{
|
||||
paramp->dmaNo = -1; // DMA不使用指定
|
||||
|
||||
SetCardOp(paramp); // コマンド設定
|
||||
|
||||
*(vu32 *)REG_CARDCNT = paramp->cardCnt // コントロール設定
|
||||
| CARD_READ_MODE | CARD_STATUS
|
||||
| CARD_START | CARD_RESET_HI;
|
||||
WaitCardData();
|
||||
|
||||
return *(vu32 *)REG_CARD_DATA;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードID読み込み(NORMALモード)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
u32 ReadCardID4Normal(void)
|
||||
{
|
||||
CardCtrlParam param;
|
||||
|
||||
param.cardCnt = GetCardCnt4Normal(); // コントロール設定(スクランブル設定クリア)
|
||||
param.op[0] = 0; // コマンド設定
|
||||
param.op[1] = MROMOP_N_READ_ID;
|
||||
|
||||
return ReadCardID(¶m);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードID読み込み(NORMALモード)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
u32 ReadCardID4Game(void)
|
||||
{
|
||||
CardCtrlParam param;
|
||||
|
||||
param.cardCnt = GetCardCnt4Game(); // コントロール設定(スクランブル設定クリア)
|
||||
param.op[0] = 0; // コマンド設定
|
||||
param.op[1] = MROMOP_G_READ_ID;
|
||||
|
||||
return ReadCardID(¶m);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードデータ読み込み(GAMEモード/非同期)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void ReadCardAsync4Game(void *romp, void *ramp, s32 size, CardCtrlParam *paramp)
|
||||
{
|
||||
paramp->op[0] = (u32 )romp <<24; // コマンド設定
|
||||
paramp->op[1] = MROMOP_G_READ_PAGE | (u32 )romp >>8;
|
||||
|
||||
ReadCardAsync(romp, ramp, size, paramp);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カード割り込み 設定
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void SetCardIntr(void *romp, void *ramp, s32 size, CardIntrWork *ciwp)
|
||||
{
|
||||
ciwp->romp = romp;
|
||||
ciwp->ramp = ramp;
|
||||
ciwp->restSize = size;
|
||||
ciwp->blockSize = GetBlockSizeFromCardCnt((CardCnt *)&ciwp->param.cardCnt);
|
||||
ciwp->param.dmaNo = 3;
|
||||
|
||||
WaitCardDma(ciwp->param.dmaNo);
|
||||
|
||||
*(vu32 *)REG_IME = 0;
|
||||
// *(vu32 *)INTR_CHECK_BUF &= (-1 ^ CARD_DATA_INTR_FLAG); // カード割込チェックのクリア
|
||||
|
||||
*(vu32 *)REG_IF = CARD_DATA_INTR_FLAG;
|
||||
*(vu32 *)REG_IE |= CARD_DATA_INTR_FLAG; // カード割り込み許可
|
||||
*(vu32 *)REG_IME = 1;
|
||||
|
||||
ciwp->AsyncFuncp(ciwp->romp, ciwp->ramp, ciwp->blockSize, &ciwp->param);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カード割り込み 終了待ち
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void WaitCardIntr(void)
|
||||
{
|
||||
WaitIntr(0, CARD_DATA_INTR_FLAG);
|
||||
|
||||
{ CardIntrWork *ciwp = &cardIntrWork;
|
||||
|
||||
WaitCardDma(ciwp->param.dmaNo);
|
||||
}
|
||||
|
||||
*(vu32 *)REG_IME = 0;
|
||||
*(vu32 *)REG_IE &= (-1 ^ CARD_DATA_INTR_FLAG); // カード割り込み禁止
|
||||
*(vu32 *)REG_IME = 1;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カード割り込み 設定(GAMEモード)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void SetCardIntr4Game(void *romp, void *ramp, s32 size)
|
||||
{
|
||||
CardIntrWork *ciwp = &cardIntrWork;
|
||||
|
||||
ciwp->param.cardCnt = GetCardCnt4Game() // コントロール設定
|
||||
| CARD_READ_MODE | CARD_1_PAGE
|
||||
| CARD_START | CARD_RESET_HI;
|
||||
|
||||
ciwp->AsyncFuncp = ReadCardAsync4Game; // データ読み込み関数 セット
|
||||
|
||||
SetCardIntr(romp, ramp, size, ciwp);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カード割り込み
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void CardIntr(void)
|
||||
{
|
||||
CardIntrWork *ciwp = &cardIntrWork;
|
||||
s32 blockSize = ciwp->blockSize;
|
||||
|
||||
// ブロック分割読み込み
|
||||
|
||||
(u8 *)ciwp->romp += blockSize;
|
||||
(u8 *)ciwp->ramp += blockSize;
|
||||
ciwp->restSize -= blockSize;
|
||||
|
||||
if (ciwp->restSize > 0) {
|
||||
cardIntrWork.AsyncFuncp(ciwp->romp, ciwp->ramp, blockSize, &ciwp->param);
|
||||
} else {
|
||||
*(vu32 *)INTR_CHECK_BUF |= CARD_DATA_INTR_FLAG; // カード割込チェックのセット
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif // TEST_CARD_BY_MAINP
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードアクセス
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#ifndef TS_MON
|
||||
|
||||
void AccessCard(u32 dmaNo, s32 *srcp, s32 *destp, s32 size)
|
||||
{
|
||||
int i;
|
||||
|
||||
// *(vu8 *)REG_EXMEMCNT = CTRDG_ACCESS_MAINP | CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC; // 10-6アクセス
|
||||
|
||||
CpuCopy16_32(srcp, destp, size, 32); // カートリッジからの転送
|
||||
}
|
||||
|
||||
#endif // TS_MON
|
||||
|
||||
|
||||
40
trunk/IrisMainp/IrisMon/IrisMonDefine.h
Normal file
40
trunk/IrisMainp/IrisMon/IrisMonDefine.h
Normal file
@ -0,0 +1,40 @@
|
||||
//======================================================================
|
||||
// IRISモニタプログラム用定義
|
||||
//======================================================================
|
||||
#ifndef _IRIS_MON_DEFINE_H
|
||||
#define _IRIS_MON_DEFINE_H
|
||||
|
||||
|
||||
#include "IrisMonTarget.h"
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMA割り当て
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define V_DMA_NO 2
|
||||
#define M_DMA_NO 3
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// レジスタ&RAM リセット システムコール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define RESET_ALL_FLAGS 0xff // 全リセット
|
||||
|
||||
#define RESET_ALL_REG_FLAGS 0xe0 // 全レジスタ リセット
|
||||
|
||||
#define RESET_REG_FLAG 0x80 // レジスタ(下記以外)リセット
|
||||
#define RESET_REG_SOUND_FLAG 0x40 // サウンドレジスタ リセット
|
||||
#define RESET_REG_SIO_FLAG 0x20 // SIOレジスタ リセット
|
||||
|
||||
#define RESET_ALL_RAM_FLAGS 0x1f // 全RAM クリア
|
||||
|
||||
#define RESET_MMEM_FLAG 0x01 // メインメモリ クリア
|
||||
#define RESET_CPU_WRAM_FLAG 0x02 // CPU内部RAM クリア
|
||||
#define RESET_PLTT_FLAG 0x04 // パレット クリア
|
||||
#define RESET_VRAM_FLAG 0x08 // VRAM クリア
|
||||
#define RESET_OAM_FLAG 0x10 // OAM クリア
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_MON_DEFINE_H
|
||||
36
trunk/IrisMainp/IrisMon/IrisMonDefineArm.s
Normal file
36
trunk/IrisMainp/IrisMon/IrisMonDefineArm.s
Normal file
@ -0,0 +1,36 @@
|
||||
;********************************************************************/
|
||||
;* IRISモニタプログラム用定義 */
|
||||
;********************************************************************/
|
||||
IF :DEF: _IRIS_MON_DEFINE_H
|
||||
ELSE
|
||||
_IRIS_MON_DEFINE_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisMonTargetArm.s
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; レジスタ&RAM リセット システムコール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
RESET_ALL_FLAGS * 0xff ; 全リセット
|
||||
|
||||
RESET_ALL_REG_FLAGS * 0xe0 ; 全レジスタ リセット
|
||||
|
||||
RESET_REG_FLAG * 0x80 ; レジスタ(下記以外)リセット
|
||||
RESET_REG_SOUND_FLAG * 0x40 ; サウンドレジスタ リセット
|
||||
RESET_REG_SIO_FLAG * 0x20 ; SIOレジスタ リセット
|
||||
|
||||
RESET_ALL_RAM_FLAGS * 0x1f ; 全RAM クリア
|
||||
|
||||
RESET_MMEM_FLAG * 0x01 ; メインメモリ クリア
|
||||
RESET_CPU_WRAM_FLAG * 0x02 ; CPU内部RAM クリア
|
||||
RESET_PLTT_FLAG * 0x04 ; パレット クリア
|
||||
RESET_VRAM_FLAG * 0x08 ; VRAM クリア
|
||||
RESET_OAM_FLAG * 0x10 ; OAM クリア
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_MON_DEFINE_H
|
||||
|
||||
END
|
||||
80
trunk/IrisMainp/IrisMon/IrisMonMacro.h
Normal file
80
trunk/IrisMainp/IrisMon/IrisMonMacro.h
Normal file
@ -0,0 +1,80 @@
|
||||
//*******************************************************************
|
||||
// IRISモニタプログラム マクロ関数
|
||||
//*******************************************************************
|
||||
#ifndef _IRIS_MON_MACRO_H
|
||||
#define _IRIS_MON_MACRO_H
|
||||
|
||||
|
||||
#include <IrisTypes.h>
|
||||
#include "IrisMonTarget.h"
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// サブプロセッサ・インタフェース受信
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define RecvSubpIntf() \
|
||||
\
|
||||
((*(vSubpIntf *)REG_SUBPINTF).recvStatus)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU クリア
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuClear16_32(data, destp, size, bit) \
|
||||
{ \
|
||||
u##bit tmp = (vu##bit )(data); \
|
||||
CpuSet16_32((u8 *)&(tmp), (u8 *)(destp), ( \
|
||||
DMA_SRC_FIX | \
|
||||
DMA_##bit##BIT_BUS | (size)/((bit)/8))); \
|
||||
}
|
||||
|
||||
#define CpuArrayClear16_32( data, destp, bit) \
|
||||
CpuClear16_32( data, destp, sizeof(destp), bit)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuCopy16_32(srcp, destp, size, bit) \
|
||||
\
|
||||
CpuSet16_32((u8 *)(srcp), (u8 *)(destp), ( \
|
||||
DMA_SRC_INC | \
|
||||
DMA_##bit##BIT_BUS | (size)/((bit)/8)))
|
||||
|
||||
#define CpuArrayCopy16_32( srcp, destp, bit) \
|
||||
CpuCopy16_32( srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 高速クリア(32Byte単位)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuClearFast32(data, destp, size) \
|
||||
{ \
|
||||
u32 tmp = (vu32 )(data); \
|
||||
CpuSetFast32((u8 *)&(tmp), (u8 *)(destp), ( \
|
||||
DMA_SRC_FIX | (size)/(32/8))); \
|
||||
}
|
||||
|
||||
#define CpuClearArrayFast32( data, destp) \
|
||||
CpuClearFast32( data, destp, sizeof(destp))
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 高速コピー(32Byte単位)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuCopyFast32(srcp, destp, size) \
|
||||
\
|
||||
CpuSetFast32((u8 *)(srcp), (u8 *)(destp), ( \
|
||||
DMA_SRC_INC | (size)/(32/8)))
|
||||
|
||||
#define CpuCopyArrayFast32( srcp, destp) \
|
||||
CpuCopyFast32( srcp, destp, sizeof(srcp))
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_MON_MACRO_H
|
||||
82
trunk/IrisMainp/IrisMon/IrisMonMemoryMap.h
Normal file
82
trunk/IrisMainp/IrisMon/IrisMonMemoryMap.h
Normal file
@ -0,0 +1,82 @@
|
||||
//======================================================================
|
||||
// IRISモニタプログラム用定義
|
||||
//======================================================================
|
||||
#ifndef _IRIS_MON_MEMORY_MAP_H
|
||||
#define _IRIS_MON_MEMORY_MAP_H
|
||||
|
||||
|
||||
#include "IrisMonTarget.h"
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メモリ・マップ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define MON_DTCM 0x00800000 // モニタ用データTCM
|
||||
#define MON_DTCM_END (MON_DTCM + 0x4000)
|
||||
#undef DTCM
|
||||
#define DTCM MON_DTCM // データTCM
|
||||
|
||||
#define MMEM_CHK_SIZE_READ_BUF (MAIN_MEM_END - 0x8) // メインメモリ・サイズチェック書き込みバッファ
|
||||
#define MMEM_CHK_SIZE_WRITE_BUF (MAIN_MEM_EX_END - 0x8) // 読み込みバッファ
|
||||
|
||||
#define MON_PNA_DEFAULT 0x02000ec7 // PNAデフォルト値
|
||||
#define MON_PNB_DEFAULT 0x02000f75 // PNB
|
||||
|
||||
#define MON_CPU_WRAM 0x03000000 // CPU内部ワークRAM
|
||||
#define MON_CPU_WRAM_END (MON_CPU_WRAM + 0x01000000)
|
||||
#define MON_WRAM EX_WRAM // ワークRAM全体
|
||||
#define MON_WRAM_END MON_CPU_WRAM_END
|
||||
#define MON_USR_BUF EX_WRAM // ユーザ領域
|
||||
#define MON_USR_BUF_END (MON_CPU_WRAM_END - 4*32)
|
||||
#define MON_SYS_BUF (MON_CPU_WRAM_END - 4*32) //システム領域
|
||||
#define MON_SYS_BUF_END MON_CPU_WRAM_END
|
||||
#define MON_FIQ_VECTOR_BUF (MON_CPU_WRAM_END - 4*6 ) // FIQ割り込み分岐アドレス
|
||||
#define MON_INTR_VECTOR_BUF (MON_CPU_WRAM_END - 4*1 ) // 割り込み分岐アドレス
|
||||
|
||||
#define ROM_HEADER 0x08000004 // ROM内登録データ
|
||||
|
||||
#define MON_NINLOGO (ROM_HEADER + 0x0 ) // NINTENDOロゴ・データ
|
||||
#define MON_FIQ_FLAG (ROM_HEADER + 0x9c - 4) // FIQフラグ
|
||||
#define MON_KEY_GROUP_NO (ROM_HEADER + 0x9e - 4) // キーグループNo
|
||||
#define MON_SOFT_NAME (ROM_HEADER + 0xa0 - 4) // ソフト名
|
||||
#define MON_COMPLEMENT (ROM_HEADER + 0xbd - 4) // 補数チェック・データ
|
||||
|
||||
#define ICE_ROM0 0x09fe2000 // ICE ROM
|
||||
#define ICE_ROM0_END 0x09fe4000
|
||||
#define ICE_ROM1 0x09ffc000
|
||||
#define ICE_ROM1_END 0x09ffe000
|
||||
|
||||
#define DACS_KEY_REG0 0x0bfe2000 - 32 // DACSキーレジスタ
|
||||
#define DACS_KEY_REG1 0x0c000000 - 32
|
||||
|
||||
#define REG_PAUSE (REG_BASE + 0x300) // PAUSE
|
||||
#define REG_OBJ_CENTER (REG_BASE + 0x410) // OBJ中心位置
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メモリ・サイズ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define ROM_HEADER_SIZE (0xc0 - 4 + OFFSET_MON_NINLOGO) // ROM内登録データ
|
||||
#define MON_NINLOGO_SIZE (MON_SOFT_NAME - MON_NINLOGO) // NINTENDOロゴ・データ
|
||||
|
||||
#define ICE_ROM_SIZE 0x2000 // ICE ROM
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 登録データ・オフセット
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define OFFSET_MON_NINLOGO (MON_NINLOGO - MON_NINLOGO) // NINTENDOロゴ・データ
|
||||
#define OFFSET_MON_FIQ_FLAG (MON_FIQ_FLAG - MON_NINLOGO) // FIQフラグ
|
||||
#define OFFSET_MON_KEY_GROUP_NO (MON_KEY_GROUP_NO - MON_NINLOGO) // キーグループNo
|
||||
#define OFFSET_MON_SOFT_NAME (MON_SOFT_NAME - MON_NINLOGO) // ソフト名
|
||||
#define OFFSET_MON_COMPLEMENT (MON_COMPLEMENT - MON_NINLOGO) // 補数チェック・データ
|
||||
|
||||
#define OFFSET_REG_PAUSE 0x300 // PAUSE
|
||||
#define OFFSET_REG_OBJ_CENTER 0x410 // OBJ中心位置
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_MON_MEMORY_MAP_H
|
||||
76
trunk/IrisMainp/IrisMon/IrisMonMempryMapArm.s
Normal file
76
trunk/IrisMainp/IrisMon/IrisMonMempryMapArm.s
Normal file
@ -0,0 +1,76 @@
|
||||
;********************************************************************/
|
||||
;* IRISモニタプログラム用定義 */
|
||||
;********************************************************************/
|
||||
IF :DEF: _IRIS_MON_MEMORY_MAP_H
|
||||
ELSE
|
||||
_IRIS_MON_MEMORY_MAP_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisMonTargetArm.s
|
||||
INCLUDE IrisMainMemoryDefineArm.s
|
||||
|
||||
|
||||
;*------------------------------------------------------------------*/
|
||||
;* メモリ・マップ */
|
||||
;*------------------------------------------------------------------*/
|
||||
|
||||
MON_DTCM * 0x00800000 ; モニタ用データTCM
|
||||
MON_DTCM_END * (MON_DTCM + 0x4000)
|
||||
|
||||
IMG_CPU_WRAM * 0x03000000 ; CPU内部ワークRAM
|
||||
IMG_CPU_WRAM_END * (IMG_CPU_WRAM + 0x00800000)
|
||||
IMG_WRAM * MAIN_MEM ; ワークRAM全体
|
||||
IMG_WRAM_END * IMG_CPU_WRAM_END
|
||||
|
||||
;IMG_USR_BUF * MAIN_MEM ; ユーザ領域
|
||||
;IMG_USR_BUF_END * (IMG_CPU_WRAM_END - 4*32)
|
||||
;IMG_SYS_BUF * (IMG_CPU_WRAM_END - 4*32) ;システム領域
|
||||
;IMG_SYS_BUF_END * IMG_CPU_WRAM_END
|
||||
;IMG_FIQ_VECTOR_BUF * (IMG_CPU_WRAM_END - 4*5 ) ; FIQ割り込み分岐アドレス
|
||||
;IMG_INTR_VECTOR_BUF * (IMG_CPU_WRAM_END - 4*1 ) ; 割り込み分岐アドレス
|
||||
|
||||
ROM_HEADER * 0x08000004 ; ROM内登録データ
|
||||
|
||||
MON_NINLOGO * (ROM_HEADER + 0x0 ) ; NINTENDOロゴ・データ
|
||||
MON_FIQ_FLAG * (ROM_HEADER + 0x9c - 4) ; FIQフラグ
|
||||
MON_KEY_GROUP_NO * (ROM_HEADER + 0x9e - 4) ; キーグループNo
|
||||
MON_SOFT_NAME * (ROM_HEADER + 0xa0 - 4) ; ソフト名
|
||||
MON_COMPLEMENT * (ROM_HEADER + 0xbd - 4) ; 補数チェック・データ
|
||||
|
||||
ICE_ROM0 * 0x09fe2000 ; ICE ROM
|
||||
ICE_ROM0_END * 0x09fe4000
|
||||
ICE_ROM1 * 0x09ffc000
|
||||
ICE_ROM1_END * 0x09ffe000
|
||||
|
||||
DACS_KEY_REG0 * 0x0bfe2000 - 32 ; DACSキーレジスタ
|
||||
DACS_KEY_REG1 * 0x0c000000 - 32
|
||||
|
||||
REG_PAUSE * (REG_BASE + 0x300) ; PAUSE
|
||||
REG_OBJ_CENTER * (REG_BASE + 0x410) ; OBJ中心位置
|
||||
|
||||
;*------------------------------------------------------------------*/
|
||||
;* 登録データ・オフセット */
|
||||
;*------------------------------------------------------------------*/
|
||||
|
||||
OFFSET_MON_NINLOGO * (MON_NINLOGO - MON_NINLOGO) ; NINTENDOロゴ・データ
|
||||
OFFSET_MON_FIQ_FLAG * (MON_FIQ_FLAG - MON_NINLOGO) ; FIQフラグ
|
||||
OFFSET_MON_KEY_GROUP_NO * (MON_KEY_GROUP_NO - MON_NINLOGO) ; キーグループNo
|
||||
OFFSET_MON_SOFT_NAME * (MON_SOFT_NAME - MON_NINLOGO) ; ソフト名
|
||||
OFFSET_MON_COMPLEMENT * (MON_COMPLEMENT - MON_NINLOGO) ; 補数チェック・データ
|
||||
|
||||
OFFSET_REG_PAUSE * 0x300 ; PAUSE
|
||||
|
||||
;*------------------------------------------------------------------*/
|
||||
;* メモリ・サイズ */
|
||||
;*------------------------------------------------------------------*/
|
||||
|
||||
ROM_HEADER_SIZE * (0xc0 - 4 + OFFSET_MON_NINLOGO) ; ROM内登録データ
|
||||
MON_NINLOGO_SIZE * (MON_SOFT_NAME - MON_NINLOGO) ; NINTENDOロゴ・データ
|
||||
|
||||
ICE_ROM_SIZE * 0x2000 ; ICE ROM
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_SUBP_MON_MEMORY_MAP_H
|
||||
|
||||
END
|
||||
300
trunk/IrisMainp/IrisMon/IrisMonSub.c
Normal file
300
trunk/IrisMainp/IrisMon/IrisMonSub.c
Normal file
@ -0,0 +1,300 @@
|
||||
//*******************************************************************
|
||||
// IRISモニタプログラム サブルーチン
|
||||
//*******************************************************************
|
||||
#include "IrisMon.h"
|
||||
|
||||
|
||||
|
||||
|
||||
//--------------------- グローバル 変数 -------------------------------
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// レジスタ初期化
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void InitReg(void)
|
||||
{
|
||||
*(vu32 *)REG_IME = 0; // IME クリア
|
||||
*(vu32 *)REG_IE = 0; // IE クリア
|
||||
*(vu32 *)REG_IF = -1; // IF クリア
|
||||
|
||||
*(vu8 *)REG_WRAMCNT = WRAM_SUBP_ALL; // 共有内部ワークRAM割り当て
|
||||
|
||||
#ifdef TS_MON
|
||||
*(vu16 *)REG_POWCNT = 0; // LCD OFF
|
||||
#else
|
||||
*(vu16 *)REG_POWCNT = POW_LCDC_ON; // LCD ON(TEGボードにてサウンド出力を有効にするため)
|
||||
#endif
|
||||
|
||||
#ifdef TEST_ENABLE_JTAG
|
||||
|
||||
*(u8 *)REG_PAUSE = 3; // JTAGイネーブル & チェックフラグ セット
|
||||
|
||||
#endif // TEST_ENABLE_JTAG
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メモリ初期化
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void InitRam(void)
|
||||
{
|
||||
#ifdef TEG_MON
|
||||
CpuClearFast32(0xffffffff, 0x01000000, 0xf000); // リストRAM クリア
|
||||
#endif
|
||||
|
||||
CpuClearFast32(0, MON_DTCM, DTCM_SIZE - 512); // DTCM クリア
|
||||
CpuClearFast32(0, MAIN_MEM_EX_END - 0x8000, 0x8000); // メインメモリ・システム32KB領域 クリア
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CRC16bit 算出
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
const u16 crc16_table[16] = {
|
||||
0x0000, 0xCC01, 0xD801, 0x1400,
|
||||
0xF001, 0x3C00, 0x2800, 0xE401,
|
||||
0xA001, 0x6C00, 0x7800, 0xB401,
|
||||
0x5000, 0x9C01, 0x8801, 0x4400
|
||||
};
|
||||
|
||||
u16 GetCRC16(u32 start, u16 *datap, u32 size)
|
||||
{
|
||||
u16 *dataEndp = datap + size/2;
|
||||
u16 data16;
|
||||
u32 shift = 0;
|
||||
u16 r1, total = start;
|
||||
|
||||
while(datap < dataEndp) {
|
||||
if (!shift) data16 = *datap;
|
||||
|
||||
// 4bit単位
|
||||
r1 = crc16_table[total & 0xf];
|
||||
total = (total >>4);
|
||||
total = total ^ r1 ^ crc16_table[(data16 >>shift) & 0xf];
|
||||
|
||||
shift += 4;
|
||||
if (shift >= 0x10) {
|
||||
shift = 0;
|
||||
datap++;
|
||||
}
|
||||
}
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メインメモリ 拡張チェック
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
const u16 mmemSizeCheckTable[] = {0x56a9, 0x695a, 0xa695, 0x96a5};
|
||||
|
||||
s32 IsMmem8MB(void)
|
||||
{
|
||||
u32 mmemExFlag = 0;
|
||||
int i;
|
||||
|
||||
for (i=0; i<4; i++) {
|
||||
*(vu16 *)MMEM_CHK_SIZE_WRITE_BUF = mmemSizeCheckTable[i];
|
||||
if (*(vu16 *)MMEM_CHK_SIZE_READ_BUF != mmemSizeCheckTable[i]) mmemExFlag++;
|
||||
}
|
||||
*(vu16 *)MMEM_CHK_SIZE_WRITE_BUF = 0;
|
||||
|
||||
return (mmemExFlag >= 3);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ハフマンデータ展開(32Bit→32Bit)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define TREE_END 0x80
|
||||
|
||||
s32 UnCompHuffman32(const u8 *srcp, u32 *destp, u8 *tableBufp, const UC_InternalFuncp *ifp)
|
||||
{
|
||||
u8 *treep;// = (u8 *)srcp + 4;
|
||||
s32 treeSize;// = (*treep + 1) * 2;
|
||||
u32 treeCheck;
|
||||
u32 treeShift;
|
||||
u32 srcTmp;
|
||||
u32 destTmp = 0;
|
||||
u32 destTmpCount = 0;
|
||||
s32 srcCount;
|
||||
s32 error;
|
||||
int i;
|
||||
|
||||
s32 header = ifp->InitFuncp(srcp, destp, tableBufp); // 初期化(アドレス送信)
|
||||
s32 size = header >>8;
|
||||
s32 destCount = size;
|
||||
s32 dataBit = header & 0x0f;
|
||||
u32 destTmpDataNum = 4 + (dataBit & 0x7);
|
||||
u32 destTopShift = 32 - dataBit;
|
||||
|
||||
if (header < 0) { size = header;
|
||||
goto terminate;
|
||||
}
|
||||
|
||||
srcp += 3;
|
||||
tableBufp[0] = ifp->ByteStreamFuncp(++srcp);
|
||||
treeSize = (tableBufp[0] + 1) * 2;
|
||||
|
||||
for (i=1; i<treeSize; i++)
|
||||
tableBufp[i] = ifp->ByteStreamFuncp(++srcp);
|
||||
srcp++;
|
||||
|
||||
treep = tableBufp + 1;
|
||||
while (destCount > 0) {
|
||||
srcCount = 32;
|
||||
srcTmp = ifp->WordStreamFuncp(srcp);
|
||||
srcp += 4;
|
||||
while (--srcCount >= 0) {
|
||||
treeShift = (srcTmp >> 31) & 0x1;
|
||||
treeCheck = *treep;
|
||||
treeCheck <<= treeShift;
|
||||
treep = (u8 *)((((u32 )treep>>1) <<1) + (((*treep & 0x3f)+1) <<1) + treeShift);
|
||||
if (treeCheck & TREE_END) {
|
||||
destTmp >>= dataBit;
|
||||
destTmp |= *treep << destTopShift;
|
||||
treep = tableBufp + 1;
|
||||
if (++destTmpCount == destTmpDataNum) {
|
||||
*destp++ = destTmp;
|
||||
destCount -= 4;
|
||||
destTmpCount = 0;
|
||||
}
|
||||
}
|
||||
if (destCount <= 0) break;
|
||||
srcTmp <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
terminate:
|
||||
if (ifp->TerminateFuncp) { // 終了ダミー読み込み
|
||||
if ((error = ifp->TerminateFuncp(srcp)) < 0) return error;
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// LZバイトデータ展開(8Bit→16Bit)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 UnCompLZ77Short(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp)
|
||||
{
|
||||
u32 destTmp = 0;
|
||||
u32 flags;
|
||||
s32 offset;
|
||||
s32 offset0_8;
|
||||
s32 length;
|
||||
u32 shift = 0;
|
||||
u8 src;
|
||||
s32 error;
|
||||
int i;
|
||||
|
||||
s32 header = ifp->InitFuncp(srcp, destp, paramp); // 初期化(アドレス送信)
|
||||
s32 size = header >>8;
|
||||
s32 destCount = size;
|
||||
|
||||
if (header < 0) { size = header;
|
||||
goto terminate;
|
||||
}
|
||||
|
||||
srcp += 3;
|
||||
while (destCount > 0) {
|
||||
flags = ifp->ByteStreamFuncp(++srcp);
|
||||
for (i=8; --i>=0; ) {
|
||||
if (!(flags & 0x80)){ destTmp |= ifp->ByteStreamFuncp(++srcp) <<shift;
|
||||
destCount--;
|
||||
if (!(shift ^= 8)){
|
||||
*destp = destTmp;
|
||||
destp++;
|
||||
destTmp = 0;
|
||||
}
|
||||
} else { length = ((src = ifp->ByteStreamFuncp(++srcp)) >>4) + 3;
|
||||
offset = ( src & 0x0f) << 8;
|
||||
offset = (offset | ifp->ByteStreamFuncp(++srcp)) + 1;
|
||||
offset0_8 = (8 - shift) ^ ((offset & 1) <<3);
|
||||
destCount -= length;
|
||||
while (--length >= 0) { offset0_8 ^= 8;
|
||||
destTmp |= (destp[-((offset + ((8 - shift) >>3)) >>1)]
|
||||
& (0xff <<offset0_8)) >>offset0_8 <<shift;
|
||||
if (!(shift ^= 8)){
|
||||
*destp = destTmp;
|
||||
destp++;
|
||||
destTmp = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (destCount <= 0) break;
|
||||
flags <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
terminate:
|
||||
if (ifp->TerminateFuncp) { // 終了ダミー読み込み
|
||||
if ((error = ifp->TerminateFuncp(++srcp)) < 0) return error;
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ランレングスデータ展開(8Bit→16Bit)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 UnCompRLShort(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp)
|
||||
{
|
||||
s32 srcTmp;
|
||||
s32 destTmp = 0;
|
||||
u32 flags;
|
||||
s32 offset;
|
||||
s32 length;
|
||||
u32 shift = 0;
|
||||
s32 error;
|
||||
|
||||
s32 header = ifp->InitFuncp(srcp, destp, paramp); // 初期化(アドレス送信)
|
||||
s32 size = header >>8;
|
||||
s32 destCount = size;
|
||||
|
||||
if (header < 0) { size = header;
|
||||
goto terminate;
|
||||
}
|
||||
|
||||
srcp += 3;
|
||||
while (destCount > 0) {
|
||||
flags = ifp->ByteStreamFuncp(++srcp);
|
||||
length = flags & 0x7f;
|
||||
if (!(flags & 0x80)) { length++;
|
||||
destCount -= length;
|
||||
while (--length >= 0){ destTmp |= ifp->ByteStreamFuncp(++srcp) << shift;
|
||||
if (!(shift ^= 8)){ *destp++ = destTmp;
|
||||
destTmp = 0;
|
||||
}
|
||||
}
|
||||
} else { length += 3;
|
||||
destCount -= length;
|
||||
srcTmp = ifp->ByteStreamFuncp(++srcp);
|
||||
while (--length >= 0){ destTmp |= srcTmp << shift;
|
||||
if (!(shift ^= 8)){ *destp++ = destTmp;
|
||||
destTmp = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
terminate:
|
||||
if (ifp->TerminateFuncp) { // 終了ダミー読み込み
|
||||
if ((error = ifp->TerminateFuncp(++srcp)) < 0) return error;
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
79
trunk/IrisMainp/IrisMon/IrisMonSub.h
Normal file
79
trunk/IrisMainp/IrisMon/IrisMonSub.h
Normal file
@ -0,0 +1,79 @@
|
||||
/********************************************************************/
|
||||
/* IRISモニタプログラム サブルーチン */
|
||||
/********************************************************************/
|
||||
#ifndef _IRIS_MON_SUB_H
|
||||
#define _IRIS_MON_SUB_H
|
||||
|
||||
#include <Iris.h>
|
||||
#include "IrisMonTarget.h"
|
||||
#include "IrisMonMacro.h"
|
||||
|
||||
|
||||
// 圧縮展開関数型宣言
|
||||
typedef s32 (* UC_InitFuncp)(const u8 *devicep, void *ramp, const void *paramp);
|
||||
typedef s32 (* UC_TerminateFuncp)(const u8 *devicep);
|
||||
typedef u8 (* UC_ByteStreamFuncp)(const u8 *devicep);
|
||||
typedef u16 (* UC_ShortStreamFuncp)(const u8 *devicep);
|
||||
typedef u32 (* UC_WordStreamFuncp)(const u8 *devicep);
|
||||
|
||||
// 圧縮展開関数指定
|
||||
typedef struct {
|
||||
UC_InitFuncp InitFuncp; // 初期化関数
|
||||
UC_TerminateFuncp TerminateFuncp; // 終了関数
|
||||
UC_ByteStreamFuncp ByteStreamFuncp; // バイトストリーム読み込み関数
|
||||
UC_ShortStreamFuncp ShortStreamFuncp; // ハーフワードストリーム読み込み関数
|
||||
UC_WordStreamFuncp WordStreamFuncp; // ワードストリーム読み込み関数
|
||||
} UC_InternalFuncp;
|
||||
|
||||
|
||||
//--------------------- 汎用サブルーチン -------------------------------
|
||||
|
||||
void NotifySubpIntf(u32 param);
|
||||
void WaitSubpIntf(u32 param);
|
||||
|
||||
void InitCard(void);
|
||||
void ReadCardAsync(void *romp, void *ramp, s32 size, CardCtrlParam *paramp);
|
||||
void ReadCardAsync4Game(void *romp, void *ramp, s32 size, CardCtrlParam *paramp);
|
||||
void ReadCard4Game(void *romp, void *ramp, s32 size, u32 cntParam);
|
||||
|
||||
void SetCardIntr(void *romp, void *ramp, s32 size, CardIntrWork *ciwp);
|
||||
void SetCardIntr4Game(void *romp, void *ramp, s32 size);
|
||||
void CardIntr(void);
|
||||
void WaitCardIntr(void);
|
||||
|
||||
u32 ReadCardID4Normal(void);
|
||||
u32 ReadCardID4Game(void);
|
||||
void ChangeCardMode4Normal(void);
|
||||
|
||||
s32 GetBlockSizeFromCardCnt(CardCnt *paramp);
|
||||
void WaitCardDma(u32 dmaNo);
|
||||
|
||||
|
||||
void InitRam(void);
|
||||
void InitReg(void);
|
||||
|
||||
void DispTegCheck(char *str0, char *str1);
|
||||
void Iris2Agb(void);
|
||||
|
||||
void reset_cp15(u32 param);
|
||||
|
||||
|
||||
|
||||
void WaitIntr(u32 InitIfClear, u32 IfFlags);
|
||||
void WaitVBlankIntr(void);
|
||||
|
||||
void CpuSet16_32(const void *srcp, void *destp, u32 dmaCntData);
|
||||
void CpuSetFast32(const void *srcp, void *destp, u32 dmaCntData);
|
||||
|
||||
void UnPackBits32( u8 *srcp, u32 *destp, UnPackBitsParam *UnPackBitsParamp);
|
||||
void UnCompRLByte( u8 *srcp, u8 *destp);
|
||||
s32 UnCompRLShort(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp);
|
||||
void UnCompLZ77Byte( u8 *srcp, u8 *sestp);
|
||||
s32 UnCompLZ77Short(const u8 *srcp, u16 *ramp, const void *paramp, const UC_InternalFuncp *ifp);
|
||||
s32 UnCompHuffman32(const u8 *srcp, u32 *destp, u8 *tableBufp, const UC_InternalFuncp *ifp);
|
||||
void UnDiffByte2Byte( u8 *Srcp, u8 *Destp);
|
||||
void UnDiffShort2Short(u16 *Srcp, u16 *Destp);
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_MON_SUB_H
|
||||
32
trunk/IrisMainp/IrisMon/IrisMonTarget.h
Normal file
32
trunk/IrisMainp/IrisMon/IrisMonTarget.h
Normal file
@ -0,0 +1,32 @@
|
||||
//======================================================================
|
||||
// IRISサブプロセッサ・モニタプログラム用定義
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SUBP_MON_TARGET_H
|
||||
#define _IRIS_SUBP_MON_TARGET_H
|
||||
|
||||
|
||||
#include <IrisTarget.h>
|
||||
|
||||
|
||||
//#define BB_MON // ブレッドボード専用定義への切り換え
|
||||
//#define TEG_MON // TEGボード専用定義への切り換え
|
||||
#define TS_MON // TS専用定義への切り換え
|
||||
|
||||
|
||||
#define NDEBUG
|
||||
|
||||
|
||||
//#define DISP_BIOS_VERSION // BIOSバージョン表示
|
||||
|
||||
//#define DISP_READY_CARD_4_IPL2 // IPL2カード読み込み準備完了表示
|
||||
|
||||
//#define TEST_AGB_MODE // AGBモード・テスト
|
||||
|
||||
//#define DISP_AGB_HEADER_ERROR // AGBヘッダエラー表示
|
||||
|
||||
//#define TEST_ENABLE_JTAG // JTAGイネーブルテスト
|
||||
|
||||
//#define TEST_CARD_BY_MAINP // メインプロセッサでのカードアクセス・テスト
|
||||
|
||||
|
||||
#endif // _IRIS_SUBP_MON_TARGET_H
|
||||
24
trunk/IrisMainp/IrisMon/IrisMonTargetArm.s
Normal file
24
trunk/IrisMainp/IrisMon/IrisMonTargetArm.s
Normal file
@ -0,0 +1,24 @@
|
||||
;=======================================================================
|
||||
; IrisMonTargetArm.s
|
||||
; IRISターゲット選択(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
IF :DEF: _IRIS_MON_TARGET_H
|
||||
ELSE
|
||||
_IRIS_MON_TARGET_H * 1
|
||||
|
||||
|
||||
; BB_MON * 1 ; ブレッドボード専用定義への切り換え
|
||||
; TEG_MON * 1 ; TEGボード専用定義への切り換え
|
||||
TS_MON * 1 ; TS専用定義への切り換え
|
||||
|
||||
|
||||
; DISABLE_BOOT_IPL2 * 1 ; IPL2ブート無効化
|
||||
|
||||
; DISABLE_ENTRY_OF_ROM_HEADER * 1 ; ROMヘッダのエントリ情報無効化(TEG用)
|
||||
|
||||
|
||||
ENDIF ; _IRIS_MON_TARGET_H
|
||||
|
||||
END
|
||||
220
trunk/IrisMainp/IrisMon/IrisTegOnlySub.c
Normal file
220
trunk/IrisMainp/IrisMon/IrisTegOnlySub.c
Normal file
@ -0,0 +1,220 @@
|
||||
//*******************************************************************
|
||||
// TEG限定ルーチン
|
||||
//*******************************************************************
|
||||
#include "IrisMon.h"
|
||||
|
||||
|
||||
#if defined(DISP_BIOS_VERSION) || defined(DISP_READY_CARD_4_IPL2)
|
||||
|
||||
//---------------------- パレットデータ -------------------------------
|
||||
|
||||
const u16 samplePlttData[16][16] = {
|
||||
{RGB555(31,31,31), RGB555(0, 0, 0 ), RGB555(0, 0, 0 ), RGB555(0, 0, 0 ),}, // Black
|
||||
{RGB555(31,31,31), RGB555(31,0, 0 ), RGB555(31,0, 0 ), RGB555(31,0, 0 ),}, // Red
|
||||
{RGB555(31,31,31), RGB555(0, 31,0 ), RGB555(0, 31,0 ), RGB555(0, 31,0 ),}, // Green
|
||||
{RGB555(31,31,31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue
|
||||
{RGB555(31,31,31), RGB555(31,31,0 ), RGB555(31,31,0 ), RGB555(31,31,0 ),}, // Yellow
|
||||
{RGB555(31,31,31), RGB555(0, 31,31), RGB555(0, 31,31), RGB555(0, 31,31),}, // Cyan
|
||||
{RGB555(31,31,31), RGB555(31,0, 31), RGB555(31,0, 31), RGB555(31,0, 31),}, // Purple
|
||||
};
|
||||
|
||||
|
||||
//---------------------- キャラクタデータ -----------------------------
|
||||
|
||||
const u32 sampleCharData[8*0x30] = {
|
||||
0x00011100,0x00110010,0x01100011,0x01100011, //0030 0
|
||||
0x01100011,0x00100110,0x00011100,0x00000000,
|
||||
0x00011000,0x00011100,0x00011110,0x00011000, //0031 1
|
||||
0x00011000,0x00011000,0x00011000,0x00000000,
|
||||
0x00111110,0x01100011,0x01100011,0x00111000, //0032 2
|
||||
0x00001110,0x00000011,0x01111111,0x00000000,
|
||||
0x01111110,0x00110000,0x00011000,0x00111100, //0033 3
|
||||
0x01100000,0x01100011,0x00111110,0x00000000,
|
||||
0x00110000,0x00111000,0x00111100,0x00110110, //0034 4
|
||||
0x00110011,0x01111111,0x00110000,0x00000000,
|
||||
0x00111111,0x00000011,0x00000011,0x00111111, //0035 5
|
||||
0x01100000,0x01100011,0x00111110,0x00000000,
|
||||
0x00111100,0x00000110,0x00000011,0x00111111, //0036 6
|
||||
0x01100011,0x01100011,0x00111110,0x00000000,
|
||||
0x01111111,0x01110000,0x00111000,0x00011100, //0037 7
|
||||
0x00001100,0x00001100,0x00001100,0x00000000,
|
||||
0x00111110,0x01100011,0x01100011,0x00111110, //0038 8
|
||||
0x01100011,0x01100011,0x00111110,0x00000000,
|
||||
0x00111110,0x01100011,0x01100011,0x01111110, //0039 9
|
||||
0x01100000,0x00110000,0x00011110,0x00000000,
|
||||
0x00000000,0x00011000,0x00011000,0x00000000, //003A :
|
||||
0x00000000,0x00011000,0x00011000,0x00000000,
|
||||
0x00000000,0x00011000,0x00011000,0x00000000, //003B ;
|
||||
0x00000000,0x00011000,0x00011000,0x00010000,
|
||||
0x01100000,0x00111000,0x00001110,0x00000011, //003C <
|
||||
0x00001110,0x00111000,0x01100000,0x00000000,
|
||||
0x00000000,0x00000000,0x00111110,0x00000000, //003D =
|
||||
0x00000000,0x00111110,0x00000000,0x00000000,
|
||||
0x00000011,0x00001110,0x00111000,0x01100000, //003E >
|
||||
0x00111000,0x00001110,0x00000011,0x00000000,
|
||||
0x01111110,0x11000011,0x11000011,0x01111000, //003F ?
|
||||
0x00011000,0x00000000,0x00011000,0x00000000,
|
||||
0x00111110,0x01100011,0x01011001,0x01010101, //0040 @
|
||||
0x01011101,0x01110011,0x00011110,0x00000000,
|
||||
0x00111110,0x01100011,0x01100011,0x01111111, //0041 A
|
||||
0x01100011,0x01100011,0x01100011,0x00000000,
|
||||
0x00111111,0x01100011,0x01100011,0x00111111, //0042 B
|
||||
0x01100011,0x01100011,0x00111111,0x00000000,
|
||||
0x00111110,0x01100011,0x01100011,0x00000011, //0043 C
|
||||
0x01100011,0x01100011,0x00111110,0x00000000,
|
||||
0x00111111,0x01100011,0x01100011,0x01100011, //0044 D
|
||||
0x01100011,0x01100011,0x00111111,0x00000000,
|
||||
0x01111111,0x00000011,0x00000011,0x00111111, //0045 E
|
||||
0x00000011,0x00000011,0x01111111,0x00000000,
|
||||
0x01111111,0x00000011,0x00000011,0x00111111, //0046 F
|
||||
0x00000011,0x00000011,0x00000011,0x00000000,
|
||||
0x00111110,0x01100011,0x00000011,0x01111011, //0047 G
|
||||
0x01100011,0x01100011,0x00111110,0x00000000,
|
||||
0x01100011,0x01100011,0x01100011,0x01111111, //0048 H
|
||||
0x01100011,0x01100011,0x01100011,0x00000000,
|
||||
0x00011000,0x00011000,0x00011000,0x00011000, //0049 I
|
||||
0x00011000,0x00011000,0x00011000,0x00000000,
|
||||
0x01100000,0x01100000,0x01100000,0x01100000, //004A J
|
||||
0x01100000,0x01100011,0x00111110,0x00000000,
|
||||
0x01100011,0x01110011,0x00111011,0x00011111, //004B K
|
||||
0x00111011,0x01110011,0x01100011,0x00000000,
|
||||
0x00000011,0x00000011,0x00000011,0x00000011, //004C L
|
||||
0x00000011,0x00000011,0x01111111,0x00000000,
|
||||
0x01100011,0x01100011,0x01110111,0x01110111, //004D M
|
||||
0x01111111,0x01101011,0x01101011,0x00000000,
|
||||
0x01100011,0x01100111,0x01101111,0x01111111, //004E N
|
||||
0x01111011,0x01110011,0x01100011,0x00000000,
|
||||
0x00111110,0x01100011,0x01100011,0x01100011, //004F O
|
||||
0x01100011,0x01100011,0x00111110,0x00000000,
|
||||
0x00111111,0x01100011,0x01100011,0x00111111, //0050 P
|
||||
0x00000011,0x00000011,0x00000011,0x00000000,
|
||||
0x00111110,0x01100011,0x01100011,0x01100011, //0051 Q
|
||||
0x01100011,0x00111110,0x01110000,0x00000000,
|
||||
0x00111111,0x01100011,0x01100011,0x00111111, //0052 R
|
||||
0x01100011,0x01100011,0x01100011,0x00000000,
|
||||
0x00111110,0x01100011,0x00000011,0x00111110, //0053 S
|
||||
0x01100000,0x01100011,0x00111110,0x00000000,
|
||||
0x11111111,0x00011000,0x00011000,0x00011000, //0054 T
|
||||
0x00011000,0x00011000,0x00011000,0x00000000,
|
||||
0x01100011,0x01100011,0x01100011,0x01100011, //0055 U
|
||||
0x01100011,0x01100011,0x00111110,0x00000000,
|
||||
0x01100011,0x01100011,0x00110110,0x00110110, //0056 V
|
||||
0x00011100,0x00011100,0x00001000,0x00000000,
|
||||
0x11011011,0x11011011,0x11011011,0x11011011, //0057 W
|
||||
0x11011011,0x01111110,0x01100110,0x00000000,
|
||||
0x01000001,0x01100011,0x00110110,0x00011100, //0058 X
|
||||
0x00011100,0x00110110,0x01100011,0x00000000,
|
||||
0x11000011,0x11000011,0x11100111,0x01111110, //0059 Y
|
||||
0x00011000,0x00011000,0x00011000,0x00000000,
|
||||
0x01111111,0x00110000,0x00011000,0x00001100, //005A Z
|
||||
0x00000110,0x00000011,0x01111111,0x00000000,
|
||||
0x00001111,0x00000011,0x00000011,0x00000011, //005B [
|
||||
0x00000011,0x00000011,0x00001111,0x00000000,
|
||||
0x01100110,0x01100110,0x11111111,0x00011000, //005C \.
|
||||
0x11111111,0x00011000,0x00011000,0x00000000,
|
||||
0x01111000,0x01100000,0x01100000,0x01100000, //005D ]
|
||||
0x01100000,0x01100000,0x01111000,0x00000000,
|
||||
0x00011100,0x00110110,0x00100010,0x00000000, //005E ^
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000, //005F _
|
||||
0x00000000,0x00000000,0x01111111,0x00000000,
|
||||
};
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// TEG専用バージョンチェック表示
|
||||
//----------------------------------------------------------------------
|
||||
void BG_SetScreen(const char *srcp, u16 *destp, u32 plttNo);
|
||||
|
||||
void DispTegCheck(char *str0, char *str1)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
*(vu16 *)REG_POWCNT = POW_LCDC_ON | POW_2D_ON; // 各ロジック パワーON
|
||||
// OAMとパレットRAMへアクセスする場合は
|
||||
// 2DエンジンをONにして下さい
|
||||
|
||||
*(vu32 *)REG_DISPCNT = DISP_GFX_MODE | DISP_LCDC_OFF; // LCDC OFF
|
||||
// VRAM設定
|
||||
*(vu32 *)REG_VRAM_ABCD_CNT = (VRAM_LCDC_MODE | VRAM_DISABLE) <<VRAM_A_CNT_SHIFT
|
||||
| (VRAM_LCDC_MODE | VRAM_DISABLE) <<VRAM_B_CNT_SHIFT
|
||||
| (VRAM_LCDC_MODE | VRAM_DISABLE) <<VRAM_C_CNT_SHIFT
|
||||
| (VRAM_LCDC_MODE | VRAM_DISABLE) <<VRAM_D_CNT_SHIFT;
|
||||
*(vu32 *)REG_VRAM_EFG_W_CNT = (VRAM_BG_MODE | 0 <<VRAM_OFFSET_SHIFT | VRAM_ENABLE) <<VRAM_E_CNT_SHIFT
|
||||
| (VRAM_OBJ_MODE | 0 <<VRAM_OFFSET_SHIFT | VRAM_ENABLE) <<VRAM_F_CNT_SHIFT
|
||||
| (VRAM_OBJ_MODE | 1 <<VRAM_OFFSET_SHIFT | VRAM_ENABLE) <<VRAM_G_CNT_SHIFT
|
||||
| WRAM_SUBP_ALL <<WRAM_CNT_SHIFT;
|
||||
|
||||
CpuClearFast32(0, BG_VRAM, VRAM_E_SIZE ); // BG-VRAM クリア
|
||||
CpuClearFast32(0, PLTT, PLTT_SIZE ); // パレット クリア
|
||||
|
||||
CpuCopyArrayFast32(sampleCharData, BG_VRAM+0x8020); // BGキャラクタ セット
|
||||
CpuCopyArrayFast32(samplePlttData, BG_PLTT ); // BGパレット セット
|
||||
|
||||
BG_SetScreen(str0, &((u16 *)BG_VRAM)[32*11+9], 0); // バージョン表示
|
||||
BG_SetScreen(str1, &((u16 *)BG_VRAM)[32*13+9], 1); // キー押し指示
|
||||
|
||||
*(vu16 *)REG_BG1CNT = // BGコントロール セット
|
||||
BG_COLOR_16 | BG_SCREEN_SIZE_0 | BG_PRIORITY_0
|
||||
| 0 <<BG_SCREEN_BASE_SHIFT | 2 <<BG_CHAR_BASE_SHIFT ;
|
||||
|
||||
|
||||
*(vu32 *)REG_DISPCNT = DISP_GFX_MODE | DISP_BG_MODE_N2A1E1
|
||||
| DISP_BG1_ON; // LCDC ON
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// BGスクリーン セット
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void BG_SetScreen(const char *srcp, u16 *destp, u32 plttNo)
|
||||
{
|
||||
while (*srcp != '\0')
|
||||
*destp++ = (u16 )plttNo <<BG_SC_PLTT_SHIFT | (*srcp++ - '0' + 1);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// AGBモード遷移
|
||||
//----------------------------------------------------------------------
|
||||
void Halt(void);
|
||||
|
||||
#ifdef TEST_AGB_MODE
|
||||
|
||||
void Iris2Agb(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
*(vu32 *)REG_IME = 0;
|
||||
|
||||
while (((vDispStat *)REG_DISPSTAT)->blankingV == 1) ;
|
||||
while (((vDispStat *)REG_DISPSTAT)->blankingV != 1) ; // 表示期間待ち
|
||||
|
||||
*(vu16 *)REG_POWCNT = POW_LCDC_ON | POW_2D_ON;
|
||||
|
||||
// +LCD切り換え処理
|
||||
|
||||
*(vu32 *)REG_VRAM_ABCD_CNT = (VRAM_LCDC_MODE | VRAM_ENABLE) <<VRAM_A_CNT_SHIFT
|
||||
| (VRAM_LCDC_MODE | VRAM_ENABLE) <<VRAM_B_CNT_SHIFT;
|
||||
// | (VRAM_SUBP_MODE | VRAM_ENABLE) <<VRAM_C_CNT_SHIFT
|
||||
// | (VRAM_SUBP_MODE | VRAM_ENABLE) <<VRAM_D_CNT_SHIFT;
|
||||
|
||||
// *(vu32 *)REG_VRAM_EFG_W_CNT = 0;
|
||||
#if 0
|
||||
*(vu32 *)REG_VRAM_EFG_W_CNT = (VRAM_BG_MODE | 0 <<VRAM_OFFSET_SHIFT | VRAM_ENABLE) <<VRAM_E_CNT_SHIFT
|
||||
| (VRAM_OBJ_MODE | 0 <<VRAM_OFFSET_SHIFT | VRAM_ENABLE) <<VRAM_F_CNT_SHIFT
|
||||
| (VRAM_OBJ_MODE | 1 <<VRAM_OFFSET_SHIFT | VRAM_ENABLE) <<VRAM_G_CNT_SHIFT
|
||||
| WRAM_SUBP_ALL <<WRAM_CNT_SHIFT;
|
||||
#endif
|
||||
CpuClear16_32(RGB555(0,0,0), LCDC_VRAM_A, VRAM_A_SIZE * 2, 16); // VRAM-AB クリア
|
||||
|
||||
WaitSubpIntf(7); // モード遷移通知待ち
|
||||
NotifySubpIntf(7);
|
||||
|
||||
Halt(); // ホールト
|
||||
}
|
||||
|
||||
#endif // TEST_AGB_MODE
|
||||
BIN
trunk/IrisMainp/IrisMon/NitroAgbMonTS1_040304.bin
Normal file
BIN
trunk/IrisMainp/IrisMon/NitroAgbMonTS1_040304.bin
Normal file
Binary file not shown.
BIN
trunk/IrisMainp/IrisMon/NitroMainpMonTS1_040304.bin
Normal file
BIN
trunk/IrisMainp/IrisMon/NitroMainpMonTS1_040304.bin
Normal file
Binary file not shown.
424
trunk/IrisMainp/IrisMon/crt0Arm.s
Normal file
424
trunk/IrisMainp/IrisMon/crt0Arm.s
Normal file
@ -0,0 +1,424 @@
|
||||
;********************************************************************
|
||||
; IRISモニタプログラム スタートアップルーチン
|
||||
;********************************************************************
|
||||
|
||||
AREA Init, CODE, READONLY
|
||||
INCLUDE IrisDefineArm.s
|
||||
INCLUDE IrisMemoryMapArm.s
|
||||
INCLUDE IrisCardDefineArm.s
|
||||
|
||||
INCLUDE IrisMonDefineArm.s
|
||||
INCLUDE IrisMonMempryMapArm.s
|
||||
|
||||
|
||||
ENTRY
|
||||
;====================================================================
|
||||
; 割り込み領域
|
||||
;====================================================================
|
||||
CODE32
|
||||
start_v b start_handler
|
||||
undef_v b fiq_v
|
||||
swi_v b swi_handler
|
||||
code_abort_v b fiq_v
|
||||
data_abort_v b fiq_v
|
||||
reserve_v b fiq_v
|
||||
irq_v b irq_handler
|
||||
fiq_v b fiq_handler
|
||||
|
||||
;====================================================================
|
||||
; NINTENDOロゴデータ
|
||||
;====================================================================
|
||||
ALIGN
|
||||
GLOBAL Nin_Char_Diff_Huff
|
||||
Nin_Char_Diff_Huff
|
||||
|
||||
DCB 0x24,0xff,0xae,0x51,0x69,0x9a,0xa2,0x21,0x3d,0x84,0x82,0x0a,0x84,0xe4,0x09,0xad
|
||||
DCB 0x11,0x24,0x8b,0x98,0xc0,0x81,0x7f,0x21,0xa3,0x52,0xbe,0x19,0x93,0x09,0xce,0x20
|
||||
DCB 0x10,0x46,0x4a,0x4a,0xf8,0x27,0x31,0xec,0x58,0xc7,0xe8,0x33,0x82,0xe3,0xce,0xbf
|
||||
DCB 0x85,0xf4,0xdf,0x94,0xce,0x4b,0x09,0xc1,0x94,0x56,0x8a,0xc0,0x13,0x72,0xa7,0xfc
|
||||
DCB 0x9f,0x84,0x4d,0x73,0xa3,0xca,0x9a,0x61,0x58,0x97,0xa3,0x27,0xfc,0x03,0x98,0x76
|
||||
DCB 0x23,0x1d,0xc7,0x61,0x03,0x04,0xae,0x56,0xbf,0x38,0x84,0x00,0x40,0xa7,0x0e,0xfd
|
||||
DCB 0xff,0x52,0xfe,0x03,0x6f,0x95,0x30,0xf1,0x97,0xfb,0xc0,0x85,0x60,0xd6,0x80,0x25
|
||||
DCB 0xa9,0x63,0xbe,0x03,0x01,0x4e,0x38,0xe2,0xf9,0xa2,0x34,0xff,0xbb,0x3e,0x03,0x44
|
||||
DCB 0x78,0x00,0x90,0xcb,0x88,0x11,0x3a,0x94,0x65,0xc0,0x7c,0x63,0x87,0xf0,0x3c,0xaf
|
||||
DCB 0xd6,0x25,0xe4,0x8b,0x38,0x0a,0xac,0x72,0x21,0xd4,0xf8,0x07,0x56,0xcf,0x00,0x00
|
||||
|
||||
ALIGN
|
||||
;====================================================================
|
||||
; サブルーチン群
|
||||
;====================================================================
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; デバッガモニタへジャンプ
|
||||
;--------------------------------------------------------------------
|
||||
CODE32
|
||||
fiq_handler
|
||||
mrs sp, cpsr ; IRQ/FIQ不許可
|
||||
orr sp, sp, #PSR_IRQ_DISABLE | PSR_FIQ_DISABLE
|
||||
msr cpsr_cxsf, sp
|
||||
|
||||
ldr sp, fiq_sp ; SP のセット
|
||||
add sp, sp, #1
|
||||
|
||||
fiq_m stmfd sp!, {r12, lr} ; レジスタ の退避(合計4ワード)
|
||||
mrs lr, spsr
|
||||
mrc p15, 0, r12, c1, c0, 0 ; コプロセッサ・マスタ 退避
|
||||
stmfd sp!, {r12, lr}
|
||||
|
||||
bic r12, r12, #C1_PROTECT_UNIT_ENABLE ; プロテクションユニット ディセーブル
|
||||
mcr p15, 0, r12, c1, c0, 0
|
||||
|
||||
bic r12, sp, #1 ; デバッガ処理へジャンプ
|
||||
ldr r12, [r12, #16]
|
||||
cmp r12, #0
|
||||
blxne r12
|
||||
;--------------------------------------------------------------------
|
||||
; デバッガモニタからの復帰
|
||||
;--------------------------------------------------------------------
|
||||
CODE32
|
||||
fiq_return
|
||||
ldmfd sp!, {r12, lr} ; レジスタ の復帰
|
||||
mcr p15, 0, r12, c1, c0, 0 ; コプロセッサ・マスタ 復帰
|
||||
msr spsr_sxcf, lr
|
||||
ldmfd sp!, {r12, lr}
|
||||
subs pc, lr, #4
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; 初期化
|
||||
;--------------------------------------------------------------------
|
||||
EXTERN init_cp15
|
||||
EXTERN reset_cp15
|
||||
EXTERN IrisMonMain
|
||||
EXTERN intr_main
|
||||
CODE32
|
||||
start_handler
|
||||
cmp lr, #0 ; fiq_return => pc = -4 対策
|
||||
moveq lr, #4
|
||||
|
||||
mov r12, #REG_BASE ; モニタ/ユーザ チェック
|
||||
ldrb r12, [r12, #OFFSET_REG_PAUSE]
|
||||
teq r12, #1
|
||||
|
||||
mrseq r12, cpsr ; IRQ/FIQ不許可
|
||||
orreq r12, r12, #PSR_IRQ_DISABLE | PSR_FIQ_DISABLE
|
||||
msreq cpsr_cxsf,r12
|
||||
ldreq sp, fiq_sp ; SP のセット
|
||||
beq fiq_m ; デバッガモニタへジャンプ
|
||||
|
||||
|
||||
mov r4, #REG_BASE ; カードリセットLow信号 1us以上出力
|
||||
mov r0, #CARD_RESET_LO
|
||||
mov r1, #CARDMST_SEL_ROM | CARDMST_ENABLE
|
||||
str r0, [r4, #REG_CARDCNT - REG_BASE]
|
||||
str r1, [r4, #REG_CARD_MASTER_CNT - REG_BASE] ; データレジスタも同時にクリア
|
||||
; (実際はリードオンリーフラグへ書き込んでしまっている
|
||||
; <シャープさんからの指摘>)
|
||||
|
||||
restart_v mov r0, #0xc0 | PSR_SYS_MODE ; システムモードへ切り換え & IRQ/FIQ不許可
|
||||
msr cpsr_cxsf, r0
|
||||
|
||||
mov r0, #0x8000/4 ; メインメモリLow期間 0.97ms
|
||||
bl WaitByLoop
|
||||
|
||||
mainmem_change_burst ; メインメモリ バーストモード遷移
|
||||
ldr r4, =0x04000204 ; REG_EXMEMCNT
|
||||
mov r1, #MMEM_CE2_OUT
|
||||
strh r1, [r4]
|
||||
|
||||
mov r0, #0x8000/4 ; メインメモリHigh期間 0.97ms
|
||||
bl WaitByLoop
|
||||
|
||||
ldr r3, =MAIN_MEM_EX_END - 2
|
||||
ldr r1, =MMEMD4_BURST_MODE | MMEMD4_BURST_CONTINUOUS \
|
||||
| MMEMD4_PARTIAL_REFRESH_NONE | MMEMD4_SB1
|
||||
ldr r2, =MMEMD5_1ST_R4_W3 | MMEMD5_BURST_WRITE | MMEMD5_BURST_LINER \
|
||||
| MMEMD5_CLOCK_TRIGGER_UP | MMEMD5_SB1
|
||||
ldr r12, =MAIN_MEM | MMEMP_CLOCK_TRIGGER_UP \
|
||||
| MMEMP_BURST_MODE | MMEMP_BURST_CONTINUOUS \
|
||||
| MMEMP_1ST_R4_W3 | MMEMP_BURST_WRITE | MMEMP_BURST_LINER \
|
||||
| MMEMP_PARTIAL_REFRESH_NONE | MMEMP_SB1
|
||||
ldrh r0, [r3]
|
||||
strh r0, [r3]
|
||||
strh r0, [r3]
|
||||
strh r1, [r3]
|
||||
strh r2, [r3]
|
||||
ldrh r0, [r12]
|
||||
|
||||
ldr r4, =0x04000204 ; REG_EXMEMCNT
|
||||
mov r1, #MMEM_INTF_SYNC | MMEM_CE2_OUT
|
||||
strh r1, [r4]
|
||||
|
||||
|
||||
bl init_cp15 ; システム制御コプロセッサ 初期化
|
||||
|
||||
mov r4, #REG_BASE ; IME リセット
|
||||
strb r4, [r4, #OFFSET_REG_IME]
|
||||
|
||||
bl bankreg_init_stack_clear ; バンクレジスタ リセット & スタック領域 クリア
|
||||
; adr r0, intr_main ; 割り込みアドレスのセット
|
||||
; str r0, [sp, #0x100-4]
|
||||
|
||||
ldr r0, =IrisMonMain ; Cルーチン処理
|
||||
blx r0
|
||||
|
||||
main_return
|
||||
bl terminate_mon ; モニタ終了処理
|
||||
|
||||
ldr r12, =MAIN_MEM_EX_END ; ユーザ・エントリポイント 獲得
|
||||
|
||||
IF :DEF: DISABLE_ENTRY_OF_ROM_HEADER
|
||||
ldr lr, [r12, #-(0x200 - 0x28)] ; rmhp->arm9->ramAddr
|
||||
ELSE
|
||||
ldr lr, [r12, #-(0x200 - 0x24)] ; rmhp->arm9->entryAddr
|
||||
ENDIF
|
||||
|
||||
IF :DEF: DISABLE_BOOT_IPL2
|
||||
|
||||
ldrh r0, [r12, #-4] ; ROMヘッダ チェック
|
||||
cmp r0, #1
|
||||
0 beq %b0 ; ROMヘッダ不整合時
|
||||
sub r12, r12, #0x800
|
||||
ldrh r0, [r12, #0x14] ; デバッガチェック
|
||||
add r12, r12, #0x800
|
||||
cmp r0, #1 ; if (!shwp->isOnDebugger)
|
||||
mov r0, #0
|
||||
ldreq r12, [r12, #-(0x200 - 0x168)]; デバッガエントリポイント 獲得
|
||||
; cmpeq r12, #0 ; rmhp->dbgArm9RamAddr
|
||||
; cmpeq r12, #-1
|
||||
bxeq r12
|
||||
|
||||
IF :DEF: BB_MON
|
||||
0 b %b0 ; ブレッドボード開発用
|
||||
ENDIF
|
||||
mov r0, #0
|
||||
bx lr
|
||||
|
||||
ELSE
|
||||
sub r12, r12, #0x800
|
||||
ldrh r0, [r12, #0x2c] ; IPL2・CRCチェック
|
||||
cmp r0, #0 ; if (!shwp->flashCrcError)
|
||||
0 bne %b0
|
||||
|
||||
ldr r12, [r12, #0x20] ; IPL2・エントリポイント 獲得
|
||||
cmp r12, #0 ; shwp->flashArm9RamAddr
|
||||
0 beq %b0
|
||||
bx r12
|
||||
|
||||
ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; ソフトリセット
|
||||
;--------------------------------------------------------------------
|
||||
CODE32
|
||||
soft_reset
|
||||
bl terminate_mon ; 終了処理
|
||||
|
||||
ldr r12, =MAIN_MEM_EX_END ; ユーザ・エントリポイント 獲得
|
||||
ldr lr, [r12, #-(0x200 - 0x24)]
|
||||
mov r12, #0
|
||||
bx lr
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; モニタプログラム終了処理
|
||||
;--------------------------------------------------------------------
|
||||
CODE32
|
||||
terminate_mon
|
||||
mov r12, lr
|
||||
|
||||
mov r0, #PSR_SYS_MODE ; IRQ/FIQ許可
|
||||
msr cpsr_cxsf, r0
|
||||
|
||||
ldr r0, =C1_DTCM_ENABLE | C1_EXCEPT_VEC_UPPER \
|
||||
| C1_SB1_BITSET
|
||||
bl reset_cp15 ; プロテクションユニットディセーブル
|
||||
|
||||
bl bankreg_init_stack_clear ; バンクレジスタ リセット & スタック領域 クリア
|
||||
|
||||
ldmea r4, {r0-r11} ; 汎用レジスタ クリア
|
||||
bx r12
|
||||
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; バンクレジスタ リセット & スタック領域 クリア
|
||||
;--------------------------------------------------------------------
|
||||
CODE32
|
||||
bankreg_init_stack_clear
|
||||
mov r0, #0xc0 | PSR_SVC_MODE ; SVCモードへ切り換え & IRQ/FIQ不許可
|
||||
msr cpsr_cxsf, r0
|
||||
ldr sp, svc_sp ; SP のセット
|
||||
mov lr, #0
|
||||
msr spsr_csxf, lr
|
||||
mov r0, #0xc0 | PSR_IRQ_MODE ; IRQモードへ切り換え & IRQ/FIQ不許可
|
||||
msr cpsr_cxsf, r0
|
||||
ldr sp, irq_sp ; SP のセット
|
||||
mov lr, #0
|
||||
msr spsr_cxsf, lr
|
||||
mov r0, #0x40 | PSR_SYS_MODE ; システムモードへ切り換え & IRQ許可/FIQ不許可
|
||||
msr cpsr_cxsf, r0
|
||||
ldr sp, usr_sp ; SP のセット
|
||||
|
||||
stack_clear
|
||||
IF :DEF: BB_MON
|
||||
ldr r4, =CPU_WRAM_END
|
||||
ELSE
|
||||
mrc p15, 0, r4, c9, c1, 0 ; DTCMアドレス獲得
|
||||
; bic r4, r4, lsr #0xff
|
||||
mov r4, r4, lsr #C9_TCMR_BASE_SHIFT
|
||||
mov r4, r4, lsl #C9_TCMR_BASE_SHIFT
|
||||
add r4, r4, #DTCM_SIZE
|
||||
ENDIF ; BB_MON
|
||||
|
||||
adr r0, stack_clear_10 + 1
|
||||
bx r0
|
||||
CODE16
|
||||
stack_clear_10 mov r0, #0
|
||||
ldr r1, =-4*128
|
||||
1 str r0, [r4, r1]
|
||||
add r1, #4
|
||||
blt %b1
|
||||
bx lr
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; IRQ処理へジャンプ
|
||||
;--------------------------------------------------------------------
|
||||
ALIGN
|
||||
CODE32
|
||||
irq_handler
|
||||
stmfd sp!, {r0-r3,r12,lr} ; レジスタ の退避(6ワード)
|
||||
mrc p15, 0, r0, c9, c1, 0 ; DTCMアドレス獲得
|
||||
; bic r0, r0, lsr #0xff
|
||||
mov r0, r0, lsr #C9_TCMR_BASE_SHIFT
|
||||
mov r0, r0, lsl #C9_TCMR_BASE_SHIFT
|
||||
add r0, r0, #DTCM_SIZE
|
||||
|
||||
adr lr, irq_return
|
||||
ldr pc, [r0, #-4] ; 32bitコードでジャンプ
|
||||
;--------------------------------------------------------------------
|
||||
; IRQからの復帰
|
||||
;--------------------------------------------------------------------
|
||||
CODE32
|
||||
irq_return ldmfd sp!, {r0-r3,r12,lr} ; レジスタ の復帰
|
||||
subs pc, lr, #4
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; システムコールへジャンプ
|
||||
;--------------------------------------------------------------------
|
||||
CODE32
|
||||
swi_handler
|
||||
stmfd sp!, {r11, r12, lr} ; SVCモード レジスタ退避
|
||||
ldrh r12, [lr, #-2] ; システムコールNo 取得(ハーフワードアクセス対応)
|
||||
and r12, r12, #0xff
|
||||
adr r11, sys_table ; システムコール・アドレス 取得
|
||||
ldr r12, [r11, r12, lsl #2]
|
||||
mrs r11, spsr ; SVCモード SPSR退避(合計4ワード)
|
||||
stmfd sp!, {r11}
|
||||
and r11, r11, #PSR_IRQ_DISABLE ; IRQ許可状態 コピー
|
||||
orr r11, r11, #PSR_SYS_MODE ; システムモードへ切り換え & FIQ許可
|
||||
msr cpsr_cxsf,r11
|
||||
|
||||
stmfd sp!, {r2, lr} ; システムモード レジスタ退避(2ワード)
|
||||
blx r12 ; コードの切換とジャンプ
|
||||
;--------------------------------------------------------------------
|
||||
; システムコールからの復帰
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL swi_return
|
||||
CODE32
|
||||
swi_return ldmfd sp!, {r2, lr} ; システムモード レジスタ復帰
|
||||
mov r12, #0xc0 | PSR_SVC_MODE ; SVCモードへ切り換え
|
||||
msr cpsr_cxsf, r12 ; & IRQ/FIQ不許可
|
||||
|
||||
ldmfd sp!, {r11} ; SVCモード レジスタ復帰
|
||||
msr spsr_cxsf, r11
|
||||
ldmfd sp!, {r11, r12, lr}
|
||||
movs pc, lr
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; PAUSEレジスタ セット
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL SetPauseReg
|
||||
CODE16
|
||||
SetPauseReg
|
||||
ldr r2, =REG_PAUSE
|
||||
str r0, [r2, #0]
|
||||
bx lr
|
||||
|
||||
|
||||
;====================================================================
|
||||
; アドレステーブル
|
||||
;====================================================================
|
||||
ALIGN
|
||||
usr_sp DCD MON_DTCM_END - 0x140
|
||||
irq_sp DCD MON_DTCM_END - 0x60
|
||||
svc_sp DCD MON_DTCM_END - 0x40
|
||||
fiq_sp DCD ROM_HEADER_BUF - 0x64
|
||||
;fiq_sp DCD MON_DTCM_END - 0x24
|
||||
|
||||
|
||||
EXTERN AccessCard
|
||||
|
||||
EXTERN WaitByLoop
|
||||
EXTERN WaitIntr
|
||||
EXTERN WaitVBlankIntr
|
||||
EXTERN Halt
|
||||
|
||||
EXTERN IsMmem8MB
|
||||
EXTERN GetCRC16
|
||||
|
||||
EXTERN DivS32
|
||||
EXTERN SqrtU32
|
||||
|
||||
EXTERN CpuSet16_32
|
||||
EXTERN CpuSetFast32
|
||||
EXTERN UnPackBits32
|
||||
EXTERN UnCompLZ77Byte
|
||||
EXTERN UnCompLZ77Short
|
||||
EXTERN UnCompHuffman32
|
||||
EXTERN UnCompRLByte
|
||||
EXTERN UnCompRLShort
|
||||
EXTERN UnDiffByte2Byte
|
||||
EXTERN UnDiffShort2Short
|
||||
sys_table
|
||||
DCD soft_reset ; 0
|
||||
DCD 0 ; 1
|
||||
|
||||
DCD 0 ; 2
|
||||
DCD WaitByLoop ; 3
|
||||
DCD WaitIntr ; 4
|
||||
DCD WaitVBlankIntr ; 5
|
||||
DCD Halt ; 6
|
||||
DCD 0 ; 7
|
||||
DCD 0 ; 8
|
||||
DCD DivS32 ; 9
|
||||
DCD 0 ; 10
|
||||
DCD CpuSet16_32 ; 11
|
||||
DCD CpuSetFast32 ; 12
|
||||
DCD SqrtU32 ; 13
|
||||
DCD GetCRC16 ; 14
|
||||
DCD IsMmem8MB ; 15
|
||||
DCD UnPackBits32 ; 16
|
||||
DCD UnCompLZ77Byte ; 17
|
||||
DCD UnCompLZ77Short ; 18
|
||||
DCD UnCompHuffman32 ; 19
|
||||
DCD UnCompRLByte ; 20
|
||||
DCD UnCompRLShort ; 21
|
||||
DCD UnDiffByte2Byte ; 22
|
||||
DCD 0 ; 23
|
||||
DCD UnDiffShort2Short ; 24
|
||||
DCD 0 ; 25
|
||||
DCD 0 ; 26
|
||||
DCD 0 ; 27
|
||||
DCD 0 ; 28
|
||||
DCD 0 ; 29
|
||||
DCD 0 ; 30
|
||||
DCD SetPauseReg ; 31
|
||||
|
||||
END
|
||||
|
||||
|
||||
566
trunk/IrisMainp/IrisMon/crt0subArmCommon.s
Normal file
566
trunk/IrisMainp/IrisMon/crt0subArmCommon.s
Normal file
@ -0,0 +1,566 @@
|
||||
;********************************************************************
|
||||
; IRISモニタプログラム サブルーチン群
|
||||
;********************************************************************
|
||||
|
||||
AREA IrisCrt0Sub, CODE, READONLY
|
||||
INCLUDE IrisDefineArm.s
|
||||
INCLUDE IrisMemoryMapArm.s
|
||||
INCLUDE IrisSystemCallDefineArm.s
|
||||
|
||||
INCLUDE IrisMonDefineArm.s
|
||||
INCLUDE IrisMonMempryMapArm.s
|
||||
|
||||
MON_ONLY
|
||||
NDEBUG2
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; HALT
|
||||
;-----------------------------------------------------------------------
|
||||
GLOBAL Halt
|
||||
CODE32
|
||||
Halt
|
||||
mov r0, #0
|
||||
mcr p15, 0, r0, c7, c0, 4
|
||||
bx lr
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ループ待ち(r0=loopCount)
|
||||
;-----------------------------------------------------------------------
|
||||
GLOBAL WaitByLoop
|
||||
ALIGN
|
||||
CODE16
|
||||
WaitByLoop
|
||||
sub r0, #1
|
||||
bgt WaitByLoop
|
||||
|
||||
bx lr
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; Vブランク割り込みウェイト
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL WaitVBlankIntr
|
||||
ALIGN
|
||||
CODE32
|
||||
WaitVBlankIntr mov r0, #1
|
||||
mov r1, #V_BLANK_INTR_FLAG
|
||||
;--------------------------------------------------------------------
|
||||
; 割り込みウェイト(r0=InitCheckClear, r1=IntrFlag)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL WaitIntr
|
||||
CODE32
|
||||
WaitIntr stmfd sp!, {r4, lr} ; r4 はアライメント調整用
|
||||
|
||||
cmp r0, #0
|
||||
blne WaitIntr_sub ; IfCheck クリア
|
||||
|
||||
0
|
||||
mov lr, #0
|
||||
mcr p15, 0, lr, c7, c0, 4 ; OS_Halt()
|
||||
bl WaitIntr_sub
|
||||
beq %b0 ; while (!(IfCheck & IfFlags))
|
||||
|
||||
ldmfd sp!, {r4, lr}
|
||||
bx lr
|
||||
|
||||
WaitIntr_sub mov r12,#REG_BASE ; r12: #REG_BASE(stopサンプル依存のため書換えないこと!)
|
||||
str r12,[r12,#REG_IME - REG_BASE] ; IME = 0
|
||||
|
||||
mrc p15, 0, r3, c9, c1, 0 ; DTCMアドレス獲得
|
||||
; bic r3, r3, lsr #0xff
|
||||
mov r3, r3, lsr #C9_TCMR_BASE_SHIFT
|
||||
mov r3, r3, lsl #C9_TCMR_BASE_SHIFT
|
||||
add r3, r3, #DTCM_SIZE
|
||||
|
||||
ldr r2, [r3, #INTR_CHECK_BUF - DTCM_END]
|
||||
ands r0, r1, r2 ; IfCheck 判定
|
||||
eorne r2, r2, r0 ; IfCheck クリア
|
||||
strne r2, [r3, #INTR_CHECK_BUF - DTCM_END]
|
||||
|
||||
mov r0, #1
|
||||
str r0, [r12,#REG_IME - REG_BASE] ; IME = 1
|
||||
|
||||
bx lr
|
||||
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; 汎用符号付き割り算(r0/r1→r0',r0%r1→r1',|r0'|→r3')
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL DivS32
|
||||
ALIGN
|
||||
CODE32
|
||||
DivS32 ands r3, r1, #0x80000000 ; r1: 除数の絶対値
|
||||
rsbmi r1, r1, #0
|
||||
eors r12,r3, r0, asr #32 ; r12: d31=結果の符合,d30=被除数の符号
|
||||
rsbcs r0, r0, #0 ; r0: 被除数の絶対値
|
||||
movs r2, r1 ; r2: コントロール・ビット
|
||||
; beq devide_by_zero
|
||||
|
||||
divide_just_l cmp r2, r0, lsr #1
|
||||
movls r2, r2, lsl #1
|
||||
blo divide_just_l
|
||||
|
||||
divide_div_l cmp r0, r2 ; 減算できるかチェック
|
||||
adc r3, r3, r3 ; r3*2 + キャリー
|
||||
subcs r0, r0, r2 ; 減算可能なら減算
|
||||
teq r2, r1 ; 終了チェック
|
||||
movne r2, r2, lsr #1 ; 終了でなければ2で割り再チェック
|
||||
bne divide_div_l
|
||||
mov r1, r0
|
||||
mov r0, r3
|
||||
|
||||
movs r12,r12,lsl #1
|
||||
rsbcs r0, r0, #0
|
||||
rsbmi r1, r1, #0
|
||||
|
||||
bx lr
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; 平方根算出(r0=param)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL SqrtU32
|
||||
ALIGN
|
||||
CODE32
|
||||
SqrtU32 stmfd sp!, {r4, r5} ; r5 はアライメント調整用
|
||||
|
||||
mov r12,r0 ; r12: ParamBak
|
||||
mov r1, #1
|
||||
|
||||
1 cmp r0, r1
|
||||
movhi r0, r0, lsr #1
|
||||
movhi r1, r1, lsl #1
|
||||
bhi %b1
|
||||
|
||||
2 mov r0, r12 ; r0: 被除数
|
||||
mov r4, r1 ; r1: 除数
|
||||
mov r3, #0 ; r3: 商
|
||||
mov r2, r1 ; r2: コントロール・ビット
|
||||
|
||||
3 cmp r2, r0, lsr #1
|
||||
movls r2, r2, lsl #1
|
||||
blo %b3
|
||||
|
||||
4 cmp r0, r2 ; 減算できるかチェック
|
||||
adc r3, r3, r3 ; r3*2 + キャリー
|
||||
subcs r0, r0, r2 ; 減算可能なら減算
|
||||
teq r2, r1 ; 終了チェック
|
||||
movne r2, r2, lsr #1 ; 終了でなければ2で割り再チェック
|
||||
bne %b4
|
||||
|
||||
add r1, r1, r3
|
||||
movs r1, r1, lsr #1
|
||||
cmp r1, r4
|
||||
bcc %b2
|
||||
|
||||
mov r0, r4
|
||||
ldmfd sp!, {r4, r5}
|
||||
bx lr
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; CPU セット (r0=srcp, r1=destp, r2=dmaCntData)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL CpuSet16_32
|
||||
CODE16
|
||||
CpuSet16_32 push {r4-r6, lr} ; r6 はアライメント調整用
|
||||
|
||||
lsl r4, r2, #11 ; r4: size = (dmaCntData & 0x1fffff)*4
|
||||
lsr r4, #11-2
|
||||
|
||||
; bl CheckSrcp16_32 ; ソースアドレス チェック
|
||||
; beq %f6
|
||||
|
||||
0 mov r5, #0 ; r5: i = 0
|
||||
|
||||
lsr r3, r2, #27 ; if ((dmaCntData) & DMA_32BIT_BUS)
|
||||
bcc %f3
|
||||
|
||||
add r5, r1, r4 ; r5: destEndp = destp + size
|
||||
|
||||
lsr r3, r2, #25 ; if ((dmaCntData) & DMA_SRC_FIX)
|
||||
bcc %f2
|
||||
|
||||
ldmia r0!, {r3}
|
||||
1 cmp r1, r5 ; while (destp < destEndp)
|
||||
bge %f6
|
||||
stmia r1!, {r3} ; *((vu32 *)(destp))++ = *((vu32 *)(srcp))
|
||||
b %b1
|
||||
|
||||
2 cmp r1, r5 ; while (destp < destEndp)
|
||||
bge %f6
|
||||
ldmia r0!, {r3} ; *((vu32 *)(destp))++ = *((vu32 *)(srcp))++
|
||||
stmia r1!, {r3}
|
||||
b %b2
|
||||
|
||||
3 lsr r4, #1
|
||||
|
||||
lsr r3, r2, #25 ; if ((dmaCntData) & DMA_SRC_FIX)
|
||||
bcc %f5
|
||||
|
||||
ldrh r3, [r0, #0]
|
||||
4 cmp r5, r4 ; for ( ; i<count; i++)
|
||||
bge %f6
|
||||
strh r3, [r1, r5] ; ((vu16 *)(destp))[i] = ((vu16 *)(srcp))[0]
|
||||
add r5, #2
|
||||
b %b4
|
||||
|
||||
5 cmp r5, r4 ; for ( ; i<count; i++)
|
||||
bge %f6
|
||||
ldrh r3, [r0, r5] ; ((vu16 *)(destp))[i] = ((vu16 *)(srcp))[i]
|
||||
strh r3, [r1, r5]
|
||||
add r5, #2
|
||||
b %b5
|
||||
|
||||
6 pop {r4, r5}
|
||||
pop {r2, r3}
|
||||
bx r3
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; CPU 高速セット(32Byte) (r0=srcp, r1=destp, r2=dmaCntData)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL CpuSetFast32_T
|
||||
GLOBAL CpuSetFast32
|
||||
CODE16
|
||||
CpuSetFast32_T mov r3, pc
|
||||
bx r3
|
||||
ALIGN
|
||||
CODE32
|
||||
CpuSetFast32 stmfd sp!, {r4-r10, lr}
|
||||
|
||||
mov r10, r2, lsl #11 ; r10: count = (dmaCntData & 0x1fffff)*4
|
||||
|
||||
; movs r12, r10, lsr #11-2 ; r12: size = count * 4
|
||||
; bl CheckSrcp ; ソースアドレス チェック
|
||||
; beq %f5
|
||||
|
||||
add lr, r1, r10, lsr #11-2 ; lr: destEndp = destp + size
|
||||
mov r10, r10, lsr #11+3 ; r10: blockEndp = srcp + size/32*32
|
||||
add r10, r1, r10,lsl #3
|
||||
|
||||
0 movs r2, r2, lsr #25 ; if ((dmaCntData) & DMA_SRC_FIX)
|
||||
bcc %f3
|
||||
|
||||
ldr r2, [r0, #0]
|
||||
mov r3, r2
|
||||
mov r4, r2
|
||||
mov r5, r2
|
||||
mov r6, r2
|
||||
mov r7, r2
|
||||
mov r8, r2
|
||||
mov r9, r2
|
||||
1 cmp r1, r10 ; while (destp < destEndp)
|
||||
stmltia r1!, {r2-r9} ; *((vu32 *)(destp++)) = *((vu32 *)(srcp))
|
||||
blt %b1
|
||||
2 cmp r1, lr
|
||||
stmltia r1!, {r2}
|
||||
blt %b2
|
||||
b %f5
|
||||
|
||||
3 cmp r1, r10 ; while (destp < destEndp)
|
||||
ldmltia r0!, {r2-r9} ; *((vu32 *)(destp)++) = *((vu32 *)(srcp)++)
|
||||
stmltia r1!, {r2-r9}
|
||||
blt %b3
|
||||
4 cmp r1, lr
|
||||
ldmltia r0!, {r2}
|
||||
stmltia r1!, {r2}
|
||||
blt %b4
|
||||
|
||||
5 ldmfd sp!, {r4-r10, lr}
|
||||
bx lr
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; Bit圧縮データ展開 (r0=srcp, r1=destp, r2=unPackBitsParamp)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL UnPackBits32
|
||||
ALIGN
|
||||
CODE32
|
||||
UnPackBits32
|
||||
stmfd sp!, {r4-r12, lr} ; r12 はアライメント調整用
|
||||
sub sp, sp, #8
|
||||
|
||||
ldrh r7, [r2, #0] ; r7: srcNum = unPackBitsParamp->srcNum
|
||||
|
||||
; movs r12, r7 ; r12: srcCount
|
||||
; bl CheckSrcp ; ソースアドレス チェック
|
||||
; beq %f6
|
||||
|
||||
0 ldrb r6, [r2, #2] ; r6: srcBitNum = unPackBitsParamp->srcBitNum
|
||||
rsb r10, r6, #8 ; r10: srcBitNumInv = 8 - srcBitNum
|
||||
mov r14, #0 ; r14: destBak = 0
|
||||
ldr r11, [r2, #4] ; r8: destOffset0_On
|
||||
mov r8, r11, lsr #31 ; = unPackBitsParamp->destOffset0_On
|
||||
ldr r11,[r2, #4] ; destOffset = unPackBitsParamp->destOffset
|
||||
mov r11,r11, lsl #1
|
||||
mov r11,r11, lsr #1
|
||||
str r11,[sp, #0]
|
||||
ldrb r2, [r2, #3] ; r2: destBitNum = unPackBitsParamp->destBitNum
|
||||
mov r3, #0 ; r3: destBitCount = 0
|
||||
|
||||
1 subs r7, r7, #1 ; while (--srcNum >= 0)
|
||||
blt %f6
|
||||
|
||||
mov r11, #0xff ; r5: srcMask = 0xff >> srcBitNumInv
|
||||
mov r5, r11, asr r10
|
||||
ldrb r9, [r0], #1 ; r9: srcTmp = *srcp++
|
||||
mov r4, #0 ; r4: srcBitCount = 0
|
||||
|
||||
2 cmp r4, #8 ; while (srcBitCount < 8)
|
||||
bge %b1
|
||||
|
||||
and r11, r9, r5 ; r12: destTmp = ((srcTmp&srcMask) >>srcBitCount)
|
||||
movs r12, r11, lsr r4
|
||||
cmpeq r8, #0
|
||||
beq %f4
|
||||
|
||||
3 ldr r11, [sp, #0] ; destTmp += destOffset
|
||||
add r12, r12, r11
|
||||
4 orr r14, r14, r12, lsl r3 ; destBak |= destTmp << destBitCount
|
||||
add r3, r3, r2 ; destBitCount += destBitNum
|
||||
|
||||
cmp r3, #0x20 ; if (destBitCount >= 32)
|
||||
blt %f5
|
||||
|
||||
str r14, [r1], #4 ; *destp++ = destBak
|
||||
mov r14, #0 ; destBak = 0
|
||||
mov r3, #0 ; destBitCount = 0
|
||||
|
||||
5 mov r5, r5, lsl r6 ; srcMask <<= srcBitNum
|
||||
add r4, r4, r6 ; srcBitCount += srcBitNum
|
||||
b %b2
|
||||
|
||||
6 add sp, sp, #8
|
||||
ldmfd sp!, {r4-r12, lr}
|
||||
bx lr
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; LZ77データ展開(8Bit→8Bit)(r0=srcp, r1=destp)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL UnCompLZ77Byte
|
||||
ALIGN
|
||||
CODE32
|
||||
UnCompLZ77Byte
|
||||
stmfd sp!, {r4-r6, lr}
|
||||
|
||||
ldr r5, [r0], #4 ; r2: destCount = *(u32 *)srcp >> 8
|
||||
mov r2, r5, lsr #8 ; r0: srcp += 4
|
||||
|
||||
; movs r12, r2 ; r12: srcCount
|
||||
; bl CheckSrcp ; ソースアドレス チェック
|
||||
; beq %f6
|
||||
|
||||
1 cmp r2, #0 ; while (destCount > 0)
|
||||
ble %f6
|
||||
|
||||
ldrb r14, [r0], #1 ; r14: flags = *srcp++
|
||||
mov r4, #8 ; for (i=8; --i>=0; )
|
||||
2 subs r4, r4, #1
|
||||
blt %b1
|
||||
|
||||
tst r14, #0x80 ; if (!(flags & 0x80))
|
||||
bne %f3
|
||||
|
||||
ldrb r6, [r0], #1 ; *srcp++
|
||||
swpb r6, r6, [r1] ; r1: *destp++(バイト書き込み対策)
|
||||
add r1, r1, #1
|
||||
sub r2, r2, #1 ; destCount--
|
||||
b %f5
|
||||
|
||||
3 ldrb r5, [r0, #0] ; r3: length = (*srcp >> 4) + 3
|
||||
mov r6, #3
|
||||
add r3, r6, r5, asr #4
|
||||
ldrb r6, [r0], #1 ; r12: offset = (*srcp++ & 0x0f) << 8
|
||||
and r5, r6, #0xf
|
||||
mov r12,r5, lsl #8
|
||||
ldrb r6, [r0], #1 ; offset = (offset | *srcp++) + 1
|
||||
orr r5, r6, r12
|
||||
add r12, r5, #1
|
||||
sub r2, r2, r3 ; destCount -= length
|
||||
|
||||
4 ldrb r5, [r1, -r12] ; *destp++ = destp[-offset]
|
||||
swpb r5, r5, [r1] ; (バイト書き込み対策)
|
||||
add r1, r1, #1
|
||||
subs r3, r3, #1 ; while (--length > 0)
|
||||
bgt %b4
|
||||
|
||||
5 cmp r2, #0 ; if (destCount <= 0) break;
|
||||
movgt r14, r14, lsl #1 ; flags <<= 1
|
||||
bgt %b2
|
||||
b %b1
|
||||
|
||||
6 ldmfd sp!, {r4-r6, lr}
|
||||
bx lr
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; ランレングスデータ展開(8Bit→8Bit)(r0=srcp, r1=destp)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL UnCompRLByte
|
||||
CODE16
|
||||
UnCompRLByte
|
||||
push {r7, lr} ; r7 はアライメント調整用
|
||||
push {r4-r7}
|
||||
|
||||
ldmia r0!, {r3} ; r7: destCount = *(u32 *)srcp >> 8
|
||||
lsr r7, r3, #8 ; r0: srcp += 4
|
||||
|
||||
; mov r4, r7 ; r4: count
|
||||
; bl CheckSrcp16_32 ; ソースアドレス チェック
|
||||
; beq %f5
|
||||
|
||||
1 cmp r7, #0 ; while (destCount > 0)
|
||||
ble %f5
|
||||
|
||||
ldrb r4, [r0, #0] ; r4: flags = *srcp++
|
||||
add r0, #1
|
||||
lsl r2, r4, #25 ; r2: length = flags & 0x7f
|
||||
lsr r2, #25
|
||||
lsr r3, r4, #8 ; if (!(flags & 0x80))
|
||||
bcs %f3
|
||||
|
||||
add r2, #1 ; length++
|
||||
sub r7, r2 ; destCount -= length
|
||||
2 ldrb r3, [r0, #0] ; *destp++ = *srcp++
|
||||
strb r3, [r1, #0]
|
||||
add r0, #1
|
||||
add r1, #1
|
||||
sub r2, r2, #1 ; while (--length > 0)
|
||||
bgt %b2
|
||||
b %b1
|
||||
|
||||
3 add r2, #3 ; length += 3
|
||||
sub r7, r2 ; destCount -= length
|
||||
ldrb r5, [r0, #0] ; srcTmp = *srcp++
|
||||
add r0, #1
|
||||
4 strb r5, [r1, #0] ; *destp++ = srcTmp
|
||||
add r1, #1
|
||||
sub r2, r2, #1 ; while (--length > 0)
|
||||
bgt %b4
|
||||
b %b1
|
||||
|
||||
5 pop {r4-r7}
|
||||
pop {r2, r3}
|
||||
bx r3
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; 差分フィルタ展開(8Bit→8Bit) (r0=srcp, r1=destp)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL UnDiffByte2Byte
|
||||
CODE16
|
||||
UnDiffByte2Byte
|
||||
push {r4, lr}
|
||||
push {r4, r5} ; アライメント調整用
|
||||
|
||||
ldmia r0!, {r4} ; r4: destCount = *(u32 *)srcp >> 8
|
||||
lsr r4, r4, #8 ; r0: srcp += 4
|
||||
|
||||
; bl CheckSrcp16_32 ; ソースアドレス チェック
|
||||
; beq %f2
|
||||
|
||||
ldrb r2, [r0, #0] ; r2: destTmp = *srcp++
|
||||
add r0, #1
|
||||
strb r2, [r1, #0] ; r1: *destp++ = destTmp
|
||||
add r1, #1
|
||||
|
||||
1 sub r4, r4, #1 ; while (--destCount > 0)
|
||||
ble %f2
|
||||
ldrb r3, [r0, #0] ; destTmp += *srcp++
|
||||
add r2, r3, r2
|
||||
add r0, #1
|
||||
strb r2, [r1, #0] ; *destp++ = destTmp
|
||||
add r1, #1
|
||||
b %b1
|
||||
|
||||
2 pop {r4, r5}
|
||||
pop {r2, r3}
|
||||
bx r3
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; 差分フィルタ展開(16Bit→16Bit) (r0=srcp, r1=destp)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL UnDiffShort2Short
|
||||
CODE16
|
||||
UnDiffShort2Short
|
||||
push {r4, lr}
|
||||
push {r4, r5} ; アライメント調整用
|
||||
|
||||
ldmia r0!, {r4} ; r4: destCount = *(u32 *)srcp >> 8
|
||||
lsr r4, r4, #8 ; r0: srcp += 2
|
||||
|
||||
; bl CheckSrcp16_32 ; ソースアドレス チェック
|
||||
; beq %f2
|
||||
|
||||
ldrh r2, [r0, #0] ; r2: destTmp = *srcp++
|
||||
add r0, #2
|
||||
strh r2, [r1, #0] ; r1: *destp++ = destTmp
|
||||
add r1, #2
|
||||
|
||||
1 sub r4, r4, #2 ; while ((destCount-=2) > 0)
|
||||
ble %f2
|
||||
|
||||
ldrh r3, [r0, #0] ; destTmp += *srcp++
|
||||
add r2, r3, r2
|
||||
add r0, #2
|
||||
strh r2, [r1, #0] ; *destp++ = destTmp
|
||||
add r1, #2
|
||||
b %b1
|
||||
|
||||
2 pop {r4, r5}
|
||||
pop {r2, r3}
|
||||
bx r3
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; r3レジスタによるルーチン呼び出し
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL __call_via_r3
|
||||
CODE16
|
||||
__call_via_r3 bx r3
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; r2レジスタによるルーチン呼び出し
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL __call_via_r2
|
||||
CODE16
|
||||
__call_via_r2 bx r2
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; r1レジスタによるルーチン呼び出し
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL __call_via_r1
|
||||
CODE16
|
||||
__call_via_r1 bx r1
|
||||
|
||||
|
||||
|
||||
END
|
||||
|
||||
39
trunk/IrisMainp/include/Iris.h
Normal file
39
trunk/IrisMainp/include/Iris.h
Normal file
@ -0,0 +1,39 @@
|
||||
//======================================================================
|
||||
// Iris.h
|
||||
// IRIS •W<E280A2>€ƒwƒbƒ_ƒtƒ@ƒCƒ‹ŒQ
|
||||
//
|
||||
// Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_H
|
||||
#define _IRIS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisTypes.h>
|
||||
#include <IrisDefine.h>
|
||||
#include <IrisMemoryMap.h>
|
||||
#include <IrisMacro.h>
|
||||
#include <IrisSystemCall.h>
|
||||
#include <IrisOS.h>
|
||||
#include <IrisUTL.h>
|
||||
|
||||
#include <IrisVEC.h>
|
||||
#include <IrisQUAT.h>
|
||||
#include <IrisGX.h>
|
||||
#include <IrisGXB.h>
|
||||
#include <IrisGXC.h>
|
||||
#include <IrisGX_Primitive.h>
|
||||
#include <IrisGXB_Primitive.h>
|
||||
#include <IrisMTX.h>
|
||||
#include <IrisSinTable.h>
|
||||
#include <Iris2D.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_H
|
||||
89
trunk/IrisMainp/include/Iris2D.h
Normal file
89
trunk/IrisMainp/include/Iris2D.h
Normal file
@ -0,0 +1,89 @@
|
||||
//====================================================================
|
||||
// Iris2D.h
|
||||
// 2Dアフィン変換ライブラリ
|
||||
//
|
||||
// Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
//====================================================================
|
||||
#ifndef _IRIS_2D_H
|
||||
#define _IRIS_2D_H
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisTarget.h>
|
||||
#include <IrisTypes.h>
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// BGアフィン変換 セット
|
||||
//
|
||||
//・BGのアフィンパラメータを算出し、セットします。
|
||||
//
|
||||
//・引数:
|
||||
// BgAffineSrcData *srcp ソースアドレス
|
||||
// BgAffineDestData *destp デスティネーションアドレス
|
||||
// s32 num 計算回数
|
||||
//
|
||||
//・BgAffineSrcData構造体
|
||||
// s32 srcCenterX 元データ中心座標(小数点以下8bit)
|
||||
// s32 srcCenterY
|
||||
// s16 dispCenterX 表示中心座標
|
||||
// s16 dispCenterY
|
||||
// s16 ratioX 拡大縮小率(逆数/小数点以下8bit)
|
||||
// s16 ratioY
|
||||
// s16 theta 回転角(小数点以下8bit)
|
||||
//
|
||||
//・BgAffineDestData構造体
|
||||
// s16 h_diffX ライン方向X座標差分
|
||||
// s16 v_diffX 垂直方向X座標差分
|
||||
// s16 h_diffY ライン方向Y座標差分
|
||||
// s16 v_diffY 垂直方向Y座標差分
|
||||
// s32 startX スタートX座標
|
||||
// s32 startY スタートY座標
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void BG_SetAffine(const BgAffineSrcData *srcp, BgAffineDestData *destp, s32 num);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// OBJアフィン変換 セット
|
||||
//
|
||||
//・OBJのアフィンパラメータを算出し、セットします。
|
||||
//
|
||||
//・引数:
|
||||
// ObjAffineSrcData *srcp ソースアドレス
|
||||
// void *destp デスティネーションアドレス
|
||||
// s32 num 計算回数
|
||||
// s32 offset パラメータアドレスのオフセット・バイト数(通常 2|8)
|
||||
// OAMに直接セットする場合は"8"を指定
|
||||
//
|
||||
//・ObjAffineSrcData構造体
|
||||
// s16 ratioX 拡大縮小率(逆数/小数点以下8bit)
|
||||
// s16 ratioY
|
||||
// s16 theta 回転角(小数点以下8bit)
|
||||
//
|
||||
//・ObjAffineDestData構造体
|
||||
// s16 h_diffX ライン方向X座標差分
|
||||
// s16 v_diffX 垂直方向X座標差分
|
||||
// s16 h_diffY ライン方向Y座標差分
|
||||
// s16 v_diffY 垂直方向Y座標差分
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void OBJ_SetAffine(const ObjAffineSrcData *srcp, void *destp, s32 num, s32 offset);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_2D_H
|
||||
|
||||
34
trunk/IrisMainp/include/Iris2D_Arm.s
Normal file
34
trunk/IrisMainp/include/Iris2D_Arm.s
Normal file
@ -0,0 +1,34 @@
|
||||
;=====================================================================
|
||||
; Iris2D_Arm.s
|
||||
; 2Dアフィン変換ライブラリ(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
;=====================================================================
|
||||
IF :DEF: _IRIS_2D_H
|
||||
ELSE
|
||||
_IRIS_2D_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisTargetArm.s
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; BGアフィン変換パラメータ セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN BG_SetAffine
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; OBJアフィン変換 セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OBJ_SetAffine
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_2D_H
|
||||
|
||||
|
||||
|
||||
END
|
||||
|
||||
28
trunk/IrisMainp/include/Iris2D_Mw.s
Normal file
28
trunk/IrisMainp/include/Iris2D_Mw.s
Normal file
@ -0,0 +1,28 @@
|
||||
;=====================================================================
|
||||
; Iris2D_Mw.s
|
||||
; 2Dアフィン変換ライブラリ(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
;=====================================================================
|
||||
#ifndef _IRIS_2D_H
|
||||
#define _IRIS_2D_H
|
||||
|
||||
|
||||
.INCLUDE IrisTarget.h
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; BGアフィン変換パラメータ セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN BG_SetAffine
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; OBJアフィン変換 セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OBJ_SetAffine
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_2D_H
|
||||
1625
trunk/IrisMainp/include/IrisDefine.h
Normal file
1625
trunk/IrisMainp/include/IrisDefine.h
Normal file
File diff suppressed because it is too large
Load Diff
1607
trunk/IrisMainp/include/IrisDefineArm.s
Normal file
1607
trunk/IrisMainp/include/IrisDefineArm.s
Normal file
File diff suppressed because it is too large
Load Diff
2609
trunk/IrisMainp/include/IrisGX.h
Normal file
2609
trunk/IrisMainp/include/IrisGX.h
Normal file
File diff suppressed because it is too large
Load Diff
2320
trunk/IrisMainp/include/IrisGXB.h
Normal file
2320
trunk/IrisMainp/include/IrisGXB.h
Normal file
File diff suppressed because it is too large
Load Diff
262
trunk/IrisMainp/include/IrisGXB_Primitive.h
Normal file
262
trunk/IrisMainp/include/IrisGXB_Primitive.h
Normal file
@ -0,0 +1,262 @@
|
||||
//====================================================================
|
||||
// IrisGXB_Primitive.h
|
||||
// IRISプリミティブ描画ディスプレイリストをバッファへ生成
|
||||
//
|
||||
// Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
//====================================================================
|
||||
#ifndef _IRIS_GXB_PRIMITIVE_H
|
||||
#define _IRIS_GXB_PRIMITIVE_H
|
||||
|
||||
|
||||
#include <IrisTarget.h>
|
||||
#include <IrisTypes.h>
|
||||
#include <IrisGX_Primitive.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 立方体の描画
|
||||
//
|
||||
//・立方体を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// bufp ディスプレイリストバッファのポインタ
|
||||
// width 一辺の長さ
|
||||
// texParamp テクスチャパラメータへのポインタ
|
||||
// (フォーマットはPrimTexParam構造体を参照して下さい)
|
||||
//
|
||||
//・戻り値: なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GXB_DrawCube(bufp, width, texParamp) \
|
||||
\
|
||||
((bufp) = _GXB_DrawCube(bufp, width, texParamp))
|
||||
|
||||
u32 *_GXB_DrawCube(u32 *bufp, u16 width, const u32 (* texParamp)[4]);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 直方体の描画
|
||||
//
|
||||
//・直方体を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// bufp ディスプレイリストバッファのポインタ
|
||||
// width 幅
|
||||
// height 高さ
|
||||
// depth 奥行き
|
||||
// texParamp テクスチャパラメータへのポインタ
|
||||
// (フォーマットはPrimTexParam構造体を参照して下さい)
|
||||
//
|
||||
//・戻り値: なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GXB_DrawBox(bufp, width, height, depth, texParamp) \
|
||||
\
|
||||
((bufp) = _GXB_DrawBox(bufp, width, height, depth, texParamp))
|
||||
|
||||
u32 *_GXB_DrawBox(u32 *bufp, u16 width, u16 height, u16 depth, const u32 (* texParamp)[4]);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 球の描画
|
||||
//
|
||||
//・球を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// bufp ディスプレイリストバッファのポインタ
|
||||
// radius 半径
|
||||
// numMajor 緯度(latitude)の分割数
|
||||
// numMinor 経度(longitude)の分割数
|
||||
// texParamp テクスチャパラメータへのポインタ
|
||||
// (フォーマットはPrimTexParam構造体を参照して下さい)
|
||||
//
|
||||
//・戻り値: なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GXB_DrawSphere(bufp, radius, numMajor, numMinor, texParamp) \
|
||||
\
|
||||
((bufp) = _GXB_DrawSphere(bufp, radius, numMajor, numMinor, texParamp))
|
||||
|
||||
u32 *_GXB_DrawSphere(u32 *bufp, s16 radius, s16 numMajor, s16 numMinor, const u32 (* texParamp)[4]);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 正二十面体を再帰的に分割した球の描画
|
||||
//
|
||||
//・正二十面体を再帰的に分割した球を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// bufp ディスプレイリストバッファのポインタ
|
||||
// radius 半径
|
||||
// numLevel 細分のレベル数
|
||||
//
|
||||
//・戻り値: なし
|
||||
//
|
||||
//※平方根演算器と除算器を使用するため、TCM上で実行したとしても
|
||||
// DMA転送とシステムバス上で衝突した場合には
|
||||
// CPUのストールが発生してしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GXB_DrawSphereHedron(bufp, radius, numLevel) \
|
||||
\
|
||||
((bufp) = _GXB_DrawSphereHedron(bufp, radius, numLevel))
|
||||
|
||||
u32 *_GXB_DrawSphereHedron(u32 *bufp, s16 radius, s16 numLevel);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 円柱の描画
|
||||
//
|
||||
//・円柱を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// bufp ディスプレイリストバッファのポインタ
|
||||
// radius 半径
|
||||
// height 高さ
|
||||
// numEdges 円周の分割数
|
||||
// texParamp テクスチャパラメータへのポインタ
|
||||
// (フォーマットはPrimTexParam構造体を参照して下さい)
|
||||
//
|
||||
//・戻り値: なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GXB_DrawCylinder(bufp, radius, height, numEdges, texParamp) \
|
||||
\
|
||||
((bufp) = _GXB_DrawCylinder(bufp, radius, height, numEdges, texParamp))
|
||||
|
||||
u32 *_GXB_DrawCylinder(u32 *bufp, s16 radius, u16 height, s16 numEdges, const u32 (* texParamp)[4]);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 円錐の描画
|
||||
//
|
||||
//・円錐を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// bufp ディスプレイリストバッファのポインタ
|
||||
// radius 底面の半径
|
||||
// height 高さ
|
||||
// numEdges 円周の分割数
|
||||
// texParamp テクスチャパラメータへのポインタ
|
||||
// (フォーマットはPrimTexParam構造体を参照して下さい)
|
||||
//
|
||||
//・戻り値: なし
|
||||
//
|
||||
//※平方根演算器と除算器を使用するため、TCM上で実行したとしても
|
||||
// DMA転送とシステムバス上で衝突した場合には
|
||||
// CPUのストールが発生してしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GXB_DrawCone(bufp, radius, height, numEdges, texParamp) \
|
||||
\
|
||||
((bufp) = _GXB_DrawCone(bufp, radius, height, numEdges, texParamp))
|
||||
|
||||
u32 *_GXB_DrawCone(u32 *bufp, s16 radius, u16 height, s16 numEdges, const u32 (* texParamp)[4]);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// トーラス(円環)の描画
|
||||
//
|
||||
//・トーラス(円環)を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// bufp ディスプレイリストバッファのポインタ
|
||||
// size トーラスの中心から回転される円の中心までの距離
|
||||
// rc sizeと回転される円の半径の比率
|
||||
// numc 回転される円の分割数
|
||||
// numt 軸回転による円の分割数
|
||||
// texParamp テクスチャパラメータへのポインタ
|
||||
// (フォーマットはPrimTexParam構造体を参照して下さい)
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GXB_DrawTorus(bufp, size, rc, numc, numt, texParamp) \
|
||||
\
|
||||
((bufp) = _GXB_DrawTorus(bufp, size, rc, numc, numt, texParamp))
|
||||
|
||||
u32 *_GXB_DrawTorus(u32 *bufp, s16 size, s16 rc, s16 numc, s16 numt, const u32 (* texParamp)[4]);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 正八面体の描画
|
||||
//
|
||||
//・正八面体を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// bufp ディスプレイリストバッファのポインタ
|
||||
// radius 半径
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※平方根演算器と除算器を使用するため、TCM上で実行したとしても
|
||||
// DMA転送とシステムバス上で衝突した場合には
|
||||
// CPUのストールが発生してしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GXB_Draw8Hedron(bufp, radius) \
|
||||
\
|
||||
((bufp) = _GXB_Draw8Hedron(bufp, radius))
|
||||
|
||||
u32 *_GXB_Draw8Hedron(u32 *bufp, s16 radius);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 正十二面体の描画
|
||||
//
|
||||
//・正十二面体を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// bufp ディスプレイリストバッファのポインタ
|
||||
// radius 半径
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※平方根演算器と除算器を使用するため、TCM上で実行したとしても
|
||||
// DMA転送とシステムバス上で衝突した場合には
|
||||
// CPUのストールが発生してしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GXB_Draw12Hedron(bufp, radius) \
|
||||
\
|
||||
((bufp) = _GXB_Draw12Hedron(bufp, radius))
|
||||
|
||||
u32 *_GXB_Draw12Hedron(u32 *bufp, s16 radius);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 正二十面体の描画
|
||||
//
|
||||
//・正二十面体を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// bufp ディスプレイリストバッファのポインタ
|
||||
// radius 半径
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※平方根演算器と除算器を使用するため、TCM上で実行したとしても
|
||||
// DMA転送とシステムバス上で衝突した場合には
|
||||
// CPUのストールが発生してしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GXB_Draw20Hedron(bufp, radius) \
|
||||
\
|
||||
((bufp) = _GXB_Draw20Hedron(bufp, radius))
|
||||
|
||||
u32 *_GXB_Draw20Hedron(u32 *bufp, s16 radius);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_GXB_PRIMITIVE_H
|
||||
|
||||
2430
trunk/IrisMainp/include/IrisGXC.h
Normal file
2430
trunk/IrisMainp/include/IrisGXC.h
Normal file
File diff suppressed because it is too large
Load Diff
232
trunk/IrisMainp/include/IrisGX_Primitive.h
Normal file
232
trunk/IrisMainp/include/IrisGX_Primitive.h
Normal file
@ -0,0 +1,232 @@
|
||||
//====================================================================
|
||||
// IrisGX_Primitive.h
|
||||
// IRISプリミティブ描画ディスプレイリスト生成
|
||||
//
|
||||
// Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
//====================================================================
|
||||
#ifndef _IRIS_GX_PRIMITIVE_H
|
||||
#define _IRIS_GX_PRIMITIVE_H
|
||||
|
||||
|
||||
#include <IrisTarget.h>
|
||||
#include <IrisTypes.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// プリミティブ描画関数用テクスチャパラメータ構造体
|
||||
typedef struct {
|
||||
TexImageParamCnt img; // テクスチャイメージコマンドのパラメータ
|
||||
TexPlttBaseCnt plt; // テクスチャパレットベースコマンドのパラメータ
|
||||
|
||||
TexCoord texStart; // テクスチャスタート座標
|
||||
TexCoord texEnd; // テクスチャエンド座標
|
||||
} PrimTexParam;
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 立方体の描画
|
||||
//
|
||||
//・立方体を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// width 一辺の長さ
|
||||
// texParamp テクスチャパラメータへのポインタ
|
||||
// (フォーマットはPrimTexParam構造体を参照して下さい)
|
||||
//
|
||||
//・戻り値: なし
|
||||
//
|
||||
//※I/Oレジスタ経由でジオメトリFIFOへ直接書き込むため、
|
||||
// ディスプレイリスト転送中には実行しないで下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void GX_DrawCube(u16 width, const u32 (* texParamp)[4]);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 直方体の描画
|
||||
//
|
||||
//・直方体を描画します。
|
||||
// texParamp テクスチャパラメータへのポインタ
|
||||
// (フォーマットはPrimTexParam構造体を参照して下さい)
|
||||
//
|
||||
//・引数:
|
||||
// width 幅
|
||||
// height 高さ
|
||||
// depth 奥行き
|
||||
//
|
||||
//・戻り値: なし
|
||||
//
|
||||
//※I/Oレジスタ経由でジオメトリFIFOへ直接書き込むため、
|
||||
// ディスプレイリスト転送中には実行しないで下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void GX_DrawBox(u16 width, u16 height, u16 depth, const u32 (* texParamp)[4]);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 球の描画
|
||||
//
|
||||
//・球を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// radius 半径
|
||||
// numMajor 緯度(latitude)の分割数
|
||||
// numMinor 経度(longitude)の分割数
|
||||
// texParamp テクスチャパラメータへのポインタ
|
||||
// (フォーマットはPrimTexParam構造体を参照して下さい)
|
||||
//
|
||||
//・戻り値: なし
|
||||
//
|
||||
//※I/Oレジスタ経由でジオメトリFIFOへ直接書き込むため、
|
||||
// ディスプレイリスト転送中には実行しないで下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void GX_DrawSphere(s16 radius, s16 numMajor, s16 numMinor, const u32 (* texParamp)[4]);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 正二十面体を再帰的に分割した球の描画
|
||||
//
|
||||
//・正二十面体を再帰的に分割した球を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// radius 半径
|
||||
// numLevel 細分のレベル数
|
||||
//
|
||||
//・戻り値: なし
|
||||
//
|
||||
//※I/Oレジスタ経由でジオメトリFIFOへ直接書き込むため、
|
||||
// ディスプレイリスト転送中には実行しないで下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void GX_DrawSphereHedron(s16 radius, s16 numLevel);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 円柱の描画
|
||||
//
|
||||
//・円柱を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// radius 半径
|
||||
// height 高さ
|
||||
// numEdges 円周の分割数
|
||||
// texParamp テクスチャパラメータへのポインタ
|
||||
// (フォーマットはPrimTexParam構造体を参照して下さい)
|
||||
//
|
||||
//・戻り値: なし
|
||||
//
|
||||
//※I/Oレジスタ経由でジオメトリFIFOへ直接書き込むため、
|
||||
// ディスプレイリスト転送中には実行しないで下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void GX_DrawCylinder(s16 radius, u16 height, s16 numEdges, const u32 (* texParamp)[4]);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 円錐の描画
|
||||
//
|
||||
//・円錐を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// radius 底面の半径
|
||||
// height 高さ
|
||||
// numEdges 円周の分割数
|
||||
// texParamp テクスチャパラメータへのポインタ
|
||||
// (フォーマットはPrimTexParam構造体を参照して下さい)
|
||||
//
|
||||
//・戻り値: なし
|
||||
//
|
||||
//※I/Oレジスタ経由でジオメトリFIFOへ直接書き込むため、
|
||||
// ディスプレイリスト転送中には実行しないで下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void GX_DrawCone(s16 radius, u16 height, s16 numEdges, const u32 (* texParamp)[4]);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// トーラス(円環)の描画
|
||||
//
|
||||
//・トーラス(円環)を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// size トーラスの中心から回転される円の中心までの距離
|
||||
// rc sizeと回転される円の半径の比率
|
||||
// numc 回転される円の分割数
|
||||
// numt 軸回転による円の分割数
|
||||
// texParamp テクスチャパラメータへのポインタ
|
||||
// (フォーマットはPrimTexParam構造体を参照して下さい)
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※I/Oレジスタ経由でジオメトリFIFOへ直接書き込むため、
|
||||
// ディスプレイリスト転送中には実行しないで下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void GX_DrawTorus(s16 size, s16 rc, s16 numc, s16 numt, const u32 (* texParamp)[4]);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 正八面体の描画
|
||||
//
|
||||
//・正八面体を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// radius 半径
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※I/Oレジスタ経由でジオメトリFIFOへ直接書き込むため、
|
||||
// ディスプレイリスト転送中には実行しないで下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void GX_Draw8Hedron(s16 radius);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 正十二面体の描画
|
||||
//
|
||||
//・正十二面体を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// radius 半径
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※I/Oレジスタ経由でジオメトリFIFOへ直接書き込むため、
|
||||
// ディスプレイリスト転送中には実行しないで下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void GX_Draw12Hedron(s16 radius);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 正二十面体の描画
|
||||
//
|
||||
//・正二十面体を描画します。
|
||||
//
|
||||
//・引数:
|
||||
// radius 半径
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※I/Oレジスタ経由でジオメトリFIFOへ直接書き込むため、
|
||||
// ディスプレイリスト転送中には実行しないで下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void GX_Draw20Hedron(s16 radius);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_GX_PRIMITIVE_H
|
||||
|
||||
673
trunk/IrisMainp/include/IrisMTX.h
Normal file
673
trunk/IrisMainp/include/IrisMTX.h
Normal file
@ -0,0 +1,673 @@
|
||||
//======================================================================
|
||||
// IrisMTX.h
|
||||
// 行列ライブラリ
|
||||
//
|
||||
// MTX関数は64bitの乗算を多用しますので、できるだけ
|
||||
// GX関数を使用し、負荷を軽減するようにして下さい。
|
||||
//
|
||||
// Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_MTX_H
|
||||
#define _IRIS_MTX_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisTarget.h>
|
||||
#include <IrisTypes.h>
|
||||
#include <IrisSinTable.h>
|
||||
|
||||
|
||||
//======================================================================
|
||||
// 汎用行列
|
||||
//======================================================================
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 単位行列の生成
|
||||
//
|
||||
//・dstpが指す行列へ単位行列を生成します。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 行列格納バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_Identity(Mtx *dstp);
|
||||
void MTX33_Identity(Mtx33 *dstp);
|
||||
void MTX44_Identity(Mtx44 *dstp);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 行列のコピー
|
||||
//
|
||||
//・srcpが指す行列をdstpが指す行列へコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// srcp 転送元行列のポインタ
|
||||
// dstp 転送先行列バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// 4x3行列を指定行列へコピー
|
||||
|
||||
void MTX_Copy( const Mtx *srcp, Mtx *dstp);
|
||||
void MTX_Copy2Mtx33(const Mtx *srcp, Mtx33 *dstp);
|
||||
void MTX_Copy2Mtx44(const Mtx *srcp, Mtx44 *dstp);
|
||||
|
||||
// 3x3行列を指定行列へコピー
|
||||
|
||||
void MTX33_Copy( const Mtx33 *srcp, Mtx33 *dstp);
|
||||
void MTX33_Copy2Mtx( const Mtx33 *srcp, Mtx *dstp);
|
||||
void MTX33_Copy2Mtx44(const Mtx33 *srcp, Mtx44 *dstp);
|
||||
|
||||
// 4x4行列を指定行列へコピー
|
||||
|
||||
void MTX44_Copy( const Mtx44 *srcp, Mtx44 *dstp);
|
||||
void MTX44_Copy2Mtx( const Mtx44 *srcp, Mtx *dstp);
|
||||
void MTX44_Copy2Mtx33(const Mtx44 *srcp, Mtx33 *dstp);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 行列の連結
|
||||
//
|
||||
//・src0pとsrc1pが指す行列の転結行列をdstpへ生成します。
|
||||
//
|
||||
//・引数:
|
||||
// src0p 転送元行列のポインタ
|
||||
// src1p 転送元行列のポインタ
|
||||
// dstp 連結行列バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_Concat(Mtx *src0p, Mtx *src1p, Mtx *dstp);
|
||||
void MTX33_Concat(Mtx33 *src0p, Mtx33 *src1p, Mtx33 *dstp);
|
||||
void MTX44_Concat(Mtx44 *src0p, Mtx44 *src1p, Mtx44 *dstp);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 転置行列の生成
|
||||
//
|
||||
//・srcpが指す行列の転置行列をdstpが指す行列へ生成します。
|
||||
//
|
||||
//・引数:
|
||||
// srcp 転置前行列のポインタ
|
||||
// dstp 生成行列バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_Transpose( Mtx *srcp, Mtx *dstp);
|
||||
void MTX33_Transpose( Mtx33 *srcp, Mtx33 *dstp);
|
||||
void MTX44_Transpose( Mtx44 *srcp, Mtx44 *dstp);
|
||||
|
||||
|
||||
//======================================================================
|
||||
// モデル行列
|
||||
//======================================================================
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 平行移動行列の生成
|
||||
//
|
||||
//・平行移動行列をdstpが指す行列へ生成します。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// x X成分
|
||||
// y Y成分
|
||||
// z Z成分
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_Translate(Mtx *dstp, s32 x, s32 y, s32 z);
|
||||
void MTX44_Translate(Mtx44 *dstp, s32 x, s32 y, s32 z);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 平行移動行列を前方から適用
|
||||
//
|
||||
//・srcpが指す行列に平行移動行列を前方から適用した行列を
|
||||
// dstpが指す行列へ生成します。
|
||||
//
|
||||
//・引数:
|
||||
// srcp 適用行列のポインタ
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// x X成分
|
||||
// y Y成分
|
||||
// z Z成分
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_TranslateBefore(Mtx *srcp, Mtx *dstp, s32 x, s32 y, s32 z);
|
||||
void MTX44_TranslateBefore(Mtx44 *srcp, Mtx44 *dstp, s32 x, s32 y, s32 z);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 平行移動行列を後方から適用
|
||||
//
|
||||
//・srcpが指す行列に平行移動行列を後方から適用した行列を
|
||||
// dstpが指す行列へ生成します。
|
||||
//
|
||||
//・引数:
|
||||
// srcp 適用行列のポインタ
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// x X成分
|
||||
// y Y成分
|
||||
// z Z成分
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_TranslateAfter(Mtx *srcp, Mtx *dstp, s32 x, s32 y, s32 z);
|
||||
void MTX44_TranslateAfter(Mtx44 *srcp, Mtx44 *dstp, s32 x, s32 y, s32 z);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// スケール行列の生成
|
||||
//
|
||||
//・スケール行列をdstpが指す行列へ生成します。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// x X成分
|
||||
// y Y成分
|
||||
// z Z成分
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_Scale(Mtx *dstp, s32 xS, s32 yS, s32 zS);
|
||||
void MTX33_Scale(Mtx33 *dstp, s32 xS, s32 yS, s32 zS);
|
||||
void MTX44_Scale(Mtx44 *dstp, s32 xS, s32 yS, s32 zS);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// スケール行列を前方から適用
|
||||
//
|
||||
//・srcpが指す行列にスケール行列を前方から適用した行列を
|
||||
// dstpが指す行列へ生成します。
|
||||
//
|
||||
//・引数:
|
||||
// srcp 適用行列のポインタ
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// x X成分
|
||||
// y Y成分
|
||||
// z Z成分
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_ScaleBefore(Mtx *srcp, Mtx *dstp, s32 xS, s32 yS, s32 zS);
|
||||
void MTX33_ScaleBefore(Mtx33 *srcp, Mtx33 *dstp, s32 xS, s32 yS, s32 zS);
|
||||
void MTX44_ScaleBefore(Mtx44 *srcp, Mtx44 *dstp, s32 xS, s32 yS, s32 zS);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// スケール行列を後方から適用
|
||||
//
|
||||
//・srcpが指す行列にスケール行列を後方から適用した行列を
|
||||
// dstpが指す行列へ生成します。
|
||||
//
|
||||
//・引数:
|
||||
// srcp 適用行列のポインタ
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// x X成分
|
||||
// y Y成分
|
||||
// z Z成分
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_ScaleAfter(Mtx *srcp, Mtx *dstp, s32 xS, s32 yS, s32 zS);
|
||||
void MTX33_ScaleAfter(Mtx33 *srcp, Mtx33 *dstp, s32 xS, s32 yS, s32 zS);
|
||||
void MTX44_ScaleAfter(Mtx44 *srcp, Mtx44 *dstp, s32 xS, s32 yS, s32 zS);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
//
|
||||
// 主軸回転行列の生成
|
||||
//
|
||||
//・主軸回転行列をdstpが指す行列へ生成します。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// theta 回転角度[256|1024|4096段階]
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define MTX_RotateX(dstp, theta) MTXxx_RotatePriv(_, X, SIN_NDIV_DEFAULT, dstp, theta)
|
||||
#define MTX_RotateY(dstp, theta) MTXxx_RotatePriv(_, Y, SIN_NDIV_DEFAULT, dstp, theta)
|
||||
#define MTX_RotateZ(dstp, theta) MTXxx_RotatePriv(_, Z, SIN_NDIV_DEFAULT, dstp, theta)
|
||||
|
||||
#define MTX33_RotateX(dstp, theta) MTXxx_RotatePriv(33_, X, SIN_NDIV_DEFAULT, dstp, theta)
|
||||
#define MTX33_RotateY(dstp, theta) MTXxx_RotatePriv(33_, Y, SIN_NDIV_DEFAULT, dstp, theta)
|
||||
#define MTX33_RotateZ(dstp, theta) MTXxx_RotatePriv(33_, Z, SIN_NDIV_DEFAULT, dstp, theta)
|
||||
|
||||
#define MTX44_RotateX(dstp, theta) MTXxx_RotatePriv(44_, X, SIN_NDIV_DEFAULT, dstp, theta)
|
||||
#define MTX44_RotateY(dstp, theta) MTXxx_RotatePriv(44_, Y, SIN_NDIV_DEFAULT, dstp, theta)
|
||||
#define MTX44_RotateZ(dstp, theta) MTXxx_RotatePriv(44_, Z, SIN_NDIV_DEFAULT, dstp, theta)
|
||||
|
||||
void MTX_RotateX256(Mtx *dstp, u32 theta);
|
||||
void MTX_RotateY256(Mtx *dstp, u32 theta);
|
||||
void MTX_RotateZ256(Mtx *dstp, u32 theta);
|
||||
void MTX_RotateX1024(Mtx *dstp, u32 theta);
|
||||
void MTX_RotateY1024(Mtx *dstp, u32 theta);
|
||||
void MTX_RotateZ1024(Mtx *dstp, u32 theta);
|
||||
void MTX_RotateX4096(Mtx *dstp, u32 theta);
|
||||
void MTX_RotateY4096(Mtx *dstp, u32 theta);
|
||||
void MTX_RotateZ4096(Mtx *dstp, u32 theta);
|
||||
|
||||
void MTX33_RotateX256(Mtx33 *dstp, u32 theta);
|
||||
void MTX33_RotateY256(Mtx33 *dstp, u32 theta);
|
||||
void MTX33_RotateZ256(Mtx33 *dstp, u32 theta);
|
||||
void MTX33_RotateX1024(Mtx33 *dstp, u32 theta);
|
||||
void MTX33_RotateY1024(Mtx33 *dstp, u32 theta);
|
||||
void MTX33_RotateZ1024(Mtx33 *dstp, u32 theta);
|
||||
void MTX33_RotateX4096(Mtx33 *dstp, u32 theta);
|
||||
void MTX33_RotateY4096(Mtx33 *dstp, u32 theta);
|
||||
void MTX33_RotateZ4096(Mtx33 *dstp, u32 theta);
|
||||
|
||||
void MTX44_RotateX256(Mtx44 *dstp, u32 theta);
|
||||
void MTX44_RotateY256(Mtx44 *dstp, u32 theta);
|
||||
void MTX44_RotateZ256(Mtx44 *dstp, u32 theta);
|
||||
void MTX44_RotateX1024(Mtx44 *dstp, u32 theta);
|
||||
void MTX44_RotateY1024(Mtx44 *dstp, u32 theta);
|
||||
void MTX44_RotateZ1024(Mtx44 *dstp, u32 theta);
|
||||
void MTX44_RotateX4096(Mtx44 *dstp, u32 theta);
|
||||
void MTX44_RotateY4096(Mtx44 *dstp, u32 theta);
|
||||
void MTX44_RotateZ4096(Mtx44 *dstp, u32 theta);
|
||||
|
||||
// 中間マクロ(下記のマクロは直接使用しないで下さい)
|
||||
|
||||
#define MTXxx_RotatePriv(xx_, axis, ndiv, dstp, theta) MTXxx_RotateNDiv(xx_, axis, ndiv, dstp, theta)
|
||||
#define MTXxx_RotateNDiv(xx_, axis, ndiv, dstp, theta) MTX##xx_##Rotate##axis##ndiv( dstp, theta)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 主軸回転行列(三角関数による回転角指定)の生成
|
||||
//
|
||||
//・主軸回転行列をdstpが指す行列へ生成します。
|
||||
//・回転角度はサインとコサインにて指定します。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// sinA 回転角度のサイン
|
||||
// cosA 回転角度のコサイン
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_RotateXSinCos(Mtx *dstp, s32 sinA, s32 cosA);
|
||||
void MTX_RotateYSinCos(Mtx *dstp, s32 sinA, s32 cosA);
|
||||
void MTX_RotateZSinCos(Mtx *dstp, s32 sinA, s32 cosA);
|
||||
|
||||
void MTX33_RotateXSinCos(Mtx33 *dstp, s32 sinA, s32 cosA);
|
||||
void MTX33_RotateYSinCos(Mtx33 *dstp, s32 sinA, s32 cosA);
|
||||
void MTX33_RotateZSinCos(Mtx33 *dstp, s32 sinA, s32 cosA);
|
||||
|
||||
void MTX44_RotateXSinCos(Mtx44 *dstp, s32 sinA, s32 cosA);
|
||||
void MTX44_RotateYSinCos(Mtx44 *dstp, s32 sinA, s32 cosA);
|
||||
void MTX44_RotateZSinCos(Mtx44 *dstp, s32 sinA, s32 cosA);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 任意軸回転行列の生成
|
||||
//
|
||||
//・任意軸回転行列をdstpが指す行列へ生成します。
|
||||
//
|
||||
//・通常版は平方根演算器と除算器を使用しますが、高速版は使用しません
|
||||
// (高速版には単位ベクトルを渡して下さい)。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// axisp 回転軸ベクトルのポインタ
|
||||
// theta 回転角度[256|1024|4096段階]
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※通常版は平方根演算器と除算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define MTX_RotateAxis( dstp, axisp, heta) MTXxx_RotateAxisPriv( _, SIN_NDIV_DEFAULT, dstp, axisp, theta)
|
||||
#define MTX_RotateAxisFast(dstp, axisp, theta) MTXxx_RotateAxisPrivFast(_, SIN_NDIV_DEFAULT, dstp, axisp, theta)
|
||||
|
||||
#define MTX33_RotateAxis( dstp, axisp, heta) MTXxx_RotateAxisPriv( 33_, SIN_NDIV_DEFAULT, dstp, axisp, theta)
|
||||
#define MTX33_RotateAxisFast(dstp, axisp, theta) MTXxx_RotateAxisPrivFast(33_, SIN_NDIV_DEFAULT, dstp, axisp, theta)
|
||||
|
||||
#define MTX44_RotateAxis( dstp, axisp, heta) MTXxx_RotateAxisPriv( 44_, SIN_NDIV_DEFAULT, dstp, axisp, theta)
|
||||
#define MTX44_RotateAxisFast(dstp, axisp, theta) MTXxx_RotateAxisPrivFast(44_, SIN_NDIV_DEFAULT, dstp, axisp, theta)
|
||||
|
||||
void MTX_RotateAxis256(Mtx *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX_RotateAxis256Fast(Mtx *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX_RotateAxis1024(Mtx *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX_RotateAxis1024Fast(Mtx *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX_RotateAxis4096(Mtx *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX_RotateAxis4096Fast(Mtx *dstp, const Vec *axisp, u32 theta);
|
||||
|
||||
void MTX33_RotateAxis256(Mtx33 *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX33_RotateAxis256Fast(Mtx33 *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX33_RotateAxis1024(Mtx33 *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX33_RotateAxis1024Fast(Mtx33 *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX33_RotateAxis4096(Mtx33 *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX33_RotateAxis4096Fast(Mtx33 *dstp, const Vec *axisp, u32 theta);
|
||||
|
||||
void MTX44_RotateAxis256(Mtx44 *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX44_RotateAxis256Fast(Mtx44 *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX44_RotateAxis1024(Mtx44 *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX44_RotateAxis1024Fast(Mtx44 *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX44_RotateAxis4096(Mtx44 *dstp, const Vec *axisp, u32 theta);
|
||||
void MTX44_RotateAxis4096Fast(Mtx44 *dstp, const Vec *axisp, u32 theta);
|
||||
|
||||
// 中間マクロ(下記のマクロは直接使用しないで下さい)
|
||||
|
||||
#define MTXxx_RotateAxisPriv( xx_, ndiv, dstp, axisp, theta) MTXxx_RotateAxisNDiv( xx_, ndiv, dstp, axisp, theta)
|
||||
#define MTXxx_RotateAxisPrivFast(xx_, ndiv, dstp, axisp, theta) MTXxx_RotateAxisNDivFast(xx_, ndiv, dstp, axisp, theta)
|
||||
#define MTXxx_RotateAxisNDiv( xx_, ndiv, dstp, axisp, theta) MTX##xx_##RotateAxis##ndiv( dstp, axisp, theta)
|
||||
#define MTXxx_RotateAxisNDivFast(xx_, ndiv, dstp, axisp, theta) MTX##xx_##RotateAxis##ndiv##Fast( dstp, axisp, theta)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 任意軸回転行列(三角関数による回転角指定)の生成
|
||||
//
|
||||
//・任意軸回転行列をdstpが指す行列へ生成します。
|
||||
//・回転角度はサインとコサインにて指定します。
|
||||
//
|
||||
//・通常版は平方根演算器と除算器を使用しますが、高速版は使用しません
|
||||
// (高速版には単位ベクトルを渡して下さい)。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// axisp 回転軸ベクトルのポインタ
|
||||
// sinA 回転角度のサイン
|
||||
// cosA 回転角度のコサイン
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※通常版は平方根演算器と除算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_RotateAxisSinCos(Mtx *dstp, const Vec *axisp, s32 sinA, s32 cosA);
|
||||
void MTX_RotateAxisSinCosFast(Mtx *dstp, const Vec *axisp, s32 sinA, s32 cosA);
|
||||
|
||||
void MTX33_RotateAxisSinCos(Mtx33 *dstp, const Vec *axisp, s32 sinA, s32 cosA);
|
||||
void MTX33_RotateAxisSinCosFast(Mtx33 *dstp, const Vec *axisp, s32 sinA, s32 cosA);
|
||||
|
||||
void MTX44_RotateAxisSinCos(Mtx44 *dstp, const Vec *axisp, s32 sinA, s32 cosA);
|
||||
void MTX44_RotateAxisSinCosFast(Mtx44 *dstp, const Vec *axisp, s32 sinA, s32 cosA);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Z軸にアライメントする回転行列の生成
|
||||
//
|
||||
//・任意軸をZ軸の正方向と一致させる回転を行う行列を
|
||||
// dstpが指す行列へ生成します。
|
||||
//
|
||||
// H = sqrt (X*X + Z*Z)
|
||||
//
|
||||
// [ 1 ] [ Z/H -X/H ] [ Z/H -X/H ]
|
||||
// [ v ] [ H/1 -Y/1 ] [ 1 ] = [ v ] [ -YX/H H -YZ/H ]
|
||||
// [ Y/1 H/1 ] [ X/H Z/H ] [ X Y Z ]
|
||||
//
|
||||
//・関数内で平方根演算器と除算器を使用します。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// vLookInvp 視線と逆方向の単位ベクトル(*_LookAt*() で得られます)
|
||||
//
|
||||
//※平方根演算器と除算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_AlignZ(Mtx *dstp, const Vec *vLookInvp);
|
||||
void MTX33_AlignZ(Mtx33 *dstp, const Vec *vLookInvp);
|
||||
void MTX44_AlignZ(Mtx44 *dstp, const Vec *vLookInvp);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// クォータニオンから変換した回転行列の生成
|
||||
//
|
||||
//・クォータニオンから変換した回転行列をdstpが指す行列へ生成します。
|
||||
//
|
||||
//・通常版は除算器を使用しますが、高速版は使用しません
|
||||
// (高速版には正規化クォータニオンを渡して下さい)。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 行列格納バッファのポインタ
|
||||
// quatp クォータニオンのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※通常版は除算器を使用するため、ディスプレイリスト等のDMA転送と
|
||||
// 並列して実行するとストールが発生する可能性があります。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_QuatMtx(Mtx *dstp, const Quat *quatp);
|
||||
void MTX_QuatMtxFast(Mtx *dstp, const Quat *quatp);
|
||||
|
||||
void MTX33_QuatMtx(Mtx33 *dstp, const Quat *quatp);
|
||||
void MTX33_QuatMtxFast(Mtx33 *dstp, const Quat *quatp);
|
||||
|
||||
void MTX44_QuatMtx(Mtx44 *dstp, const Quat *quatp);
|
||||
void MTX44_QuatMtxFast(Mtx44 *dstp, const Quat *quatp);
|
||||
|
||||
|
||||
//======================================================================
|
||||
// ビュー行列
|
||||
//======================================================================
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 視界行列の生成
|
||||
//
|
||||
//・視界行列をdstpが指す行列へ生成します。
|
||||
//
|
||||
//・関数内でベクトルの正規化のために平方根演算器と除算器を使用します。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// eye 視点
|
||||
// at 注視点
|
||||
// vUp 上方向ベクトル
|
||||
// vDst 0(NULLポインタ)以外を渡すと、視線逆方向ベクトルを返します
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※平方根演算器と除算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_LookAt( Mtx *dstp, const Pos *eye, const Pos *at, const Vec *vUp, Vec *vDst);
|
||||
void MTX_LookAtFast(Mtx *dstp, const Pos *eye, const Pos *at, const Vec *vUp, Vec *vDst);
|
||||
|
||||
|
||||
//======================================================================
|
||||
// 射影行列
|
||||
//======================================================================
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 左右対称の透視射影行列の生成
|
||||
//
|
||||
//・左右対称の透視法視錐台の行列をdstpが指す行列へ生成します。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// fovy 縦方向の視野角度[256|1024|4096段階]
|
||||
// aspect 横方向の視野を確定する縦横比(視野の 幅/高さ)
|
||||
// near 視点からnearクリップ面までの距離(常に正)
|
||||
// far 視点からfarクリップ面までの距離 (常に正)
|
||||
// scaleW クリップ座標W値のスケールパラメータ(座標変換後の精度調整)
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※除算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define MTX44_Perspective(dstp, fovy, aspect, near, far, scaleW) MTX44_PerspectivePriv(SIN_NDIV_DEFAULT, dstp, fovy, aspect, near, far, scaleW)
|
||||
|
||||
void MTX44_Perspective256(Mtx44 *dstp, u32 fovy, s32 aspect, s32 near, s32 far, s32 scaleW);
|
||||
void MTX44_Perspective1024(Mtx44 *dstp, u32 fovy, s32 aspect, s32 near, s32 far, s32 scaleW);
|
||||
void MTX44_Perspective4096(Mtx44 *dstp, u32 fovy, s32 aspect, s32 near, s32 far, s32 scaleW);
|
||||
|
||||
// 中間マクロ(下記のマクロは直接使用しないで下さい)
|
||||
|
||||
#define MTX44_PerspectivePriv(ndiv, dstp, fovy, aspect, near, far, scaleW) MTX44_PerspectiveNDiv(ndiv, dstp, fovy, aspect, near, far, scaleW)
|
||||
#define MTX44_PerspectiveNDiv(ndiv, dstp, fovy, aspect, near, far, scaleW) MTX44_Perspective##ndiv( dstp, fovy, aspect, near, far, scaleW)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 左右対称の透視射影行列(三角関数による視野角指定)の生成
|
||||
//
|
||||
//・左右対称の透視法視錐台の行列をdstpが指す行列へ生成します。
|
||||
//・回転角度はサインとコサインにて指定します。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// sinA 縦方向の視野角度のサイン
|
||||
// cosA 縦方向の視野角度のコサイン(上位関数からの呼び出し高速化のため最後に渡す)
|
||||
// aspect 横方向の視野を確定する縦横比(視野の 幅/高さ)
|
||||
// near 視点からnearクリップ面までの距離(常に正)
|
||||
// far 視点からfarクリップ面までの距離 (常に正)
|
||||
// scaleW クリップ座標W値のスケールパラメータ(座標変換後の精度調整)
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※除算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX44_PerspectiveSinCos(Mtx44 *dstp, s32 sinA, s32 aspect, s32 near, s32 far, s32 scaleW, s32 cosA);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 透視射影行列の生成
|
||||
//
|
||||
//・透視法視錐台の行列をdstpが指す行列へ生成します。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// t nearクリップ面上辺のy座標
|
||||
// b nearクリップ面下辺のy座標
|
||||
// l nearクリップ面左辺のx座標
|
||||
// r nearクリップ面右辺のx座標
|
||||
// n 視点からnearクリップ面までの距離(常に正)
|
||||
// f 視点からfarクリップ面までの距離 (常に正)
|
||||
// scaleW クリップ座標W値のスケールパラメータ(座標変換後の精度調整)
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※除算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX44_Frustum(Mtx44 *dstp, s32 t, s32 b, s32 l, s32 r, s32 n, s32 f, s32 scaleW);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 正射影行列の生成
|
||||
//
|
||||
//・正射影の平行視体積の行列をdstpが指す行列へ生成します。
|
||||
//
|
||||
//・引数:
|
||||
// dstp 生成行列バッファのポインタ
|
||||
// t nearクリップ面上辺のy座標
|
||||
// b nearクリップ面下辺のy座標
|
||||
// l nearクリップ面左辺のx座標
|
||||
// r nearクリップ面右辺のx座標
|
||||
// n 視点からnearクリップ面までの距離(正負どちらでも可)
|
||||
// f 視点からfarクリップ面までの距離 (正負どちらでも可)
|
||||
// scaleW クリップ座標W値のスケールパラメータ(座標変換後の精度調整)
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※除算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX44_Ortho( Mtx44 *dstp, s32 t, s32 b, s32 l, s32 r, s32 n, s32 f, s32 scaleW);
|
||||
|
||||
|
||||
//======================================================================
|
||||
// 行列・ベクトル乗算
|
||||
//======================================================================
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 3Dベクトルと行列の乗算
|
||||
//
|
||||
//・srcpが指す3Dベクトルをmultが指す行列で座標変換した結果を
|
||||
// dstpが指す3Dベクトルへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// mult 乗算行列
|
||||
// srcp 乗算前のベクトル
|
||||
// dstp 乗算後のベクトル
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_MultVec( const Mtx *mult, Vec *srcp, Vec *dstp);
|
||||
void MTX33_MultVec(const Mtx33 *mult, Vec *srcp, Vec *dstp);
|
||||
void MTX44_MultVec(const Mtx44 *mult, Vec *srcp, Vec *dstp);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 複数の3Dベクトルと行列の乗算
|
||||
//
|
||||
//・srcBasepが指す3Dベクトル群をmultが指す行列で座標変換した結果を
|
||||
// dstBasepが指す3Dベクトル群へ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// mult 乗算行列
|
||||
// srcBasep 乗算前のベクトル
|
||||
// dstBasep 乗算後のベクトル
|
||||
// count 回数
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_MultVecArray( const Mtx *mult, Vec *srcBasep, Vec *dstBasep, u32 count);
|
||||
void MTX33_MultVecArray(const Mtx33 *mult, Vec *srcBasep, Vec *dstBasep, u32 count);
|
||||
void MTX44_MultVecArray(const Mtx44 *mult, Vec *srcBasep, Vec *dstBasep, u32 count);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 3Dベクトルと行列のスケール回転成分との乗算
|
||||
//
|
||||
//・srcpが指す3Dベクトルをmultが指す行列のスケール回転成分で座標変換した結果を
|
||||
// dstpが指す3Dベクトルへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// mult 乗算行列のスケール回転成分
|
||||
// srcp 乗算前のベクトル
|
||||
// dstp 乗算後のベクトル
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_MultVecSR( const Mtx *mult, Vec *srcp, Vec *dstp);
|
||||
void MTX44_MultVecSR(const Mtx44 *mult, Vec *srcp, Vec *dstp);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 複数の3Dベクトルと行列のスケール回転成分との乗算
|
||||
//
|
||||
//・srcBasepが指す3Dベクトル群をmultが指す行列のスケール回転成分で座標変換した結果を
|
||||
// dstBasepが指す3Dベクトル群へ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// mult 乗算行列のスケール回転成分
|
||||
// srcBasep 乗算前のベクトル
|
||||
// dstBasep 乗算後のベクトル
|
||||
// count 回数
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void MTX_MultVecArraySR( const Mtx *mult, Vec *srcBasep, Vec *dstBasep, u32 count);
|
||||
void MTX44_MultVecArraySR(const Mtx44 *mult, Vec *srcBasep, Vec *dstBasep, u32 count);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_MTX_H
|
||||
701
trunk/IrisMainp/include/IrisMacro.h
Normal file
701
trunk/IrisMainp/include/IrisMacro.h
Normal file
@ -0,0 +1,701 @@
|
||||
//======================================================================
|
||||
// IrisMacro.h
|
||||
// IRIS 標準マクロ関数
|
||||
//
|
||||
// Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_MACRO_H
|
||||
#define _IRIS_MACRO_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <IrisTarget.h>
|
||||
#include <IrisTypes.h>
|
||||
#include <IrisDefine.h>
|
||||
#include <IrisMemoryMap.h>
|
||||
#include <IrisSystemCall.h>
|
||||
#include <IrisUTL.h>
|
||||
#include <IrisOS.h>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カラー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define RGB555(r, g, b) \
|
||||
\
|
||||
((r) << RED5_SHIFT | (g) << GREEN5_SHIFT | (b) << BLUE5_SHIFT)
|
||||
|
||||
#define RGBA5551(r, g, b, a) \
|
||||
\
|
||||
((r) << RED5_SHIFT | (g) << GREEN5_SHIFT | (b) << BLUE5_SHIFT | (a) << ALPHA1_SHIFT)
|
||||
|
||||
#define RGBF5551(r, g, b, flag) \
|
||||
\
|
||||
((r) << RED5_SHIFT | (g) << GREEN5_SHIFT | (b) << BLUE5_SHIFT | (flag) << 15)
|
||||
|
||||
|
||||
#define RGB888(r, g, b) \
|
||||
\
|
||||
((r) << RED8_SHIFT | (g) << GREEN8_SHIFT | (b) << BLUE8_SHIFT)
|
||||
|
||||
#define RGBA8888(r, g, b, a) \
|
||||
\
|
||||
((r) << RED8_SHIFT | (g) << GREEN8_SHIFT | (b) << BLUE8_SHIFT | (a) << ALPHA8_SHIFT)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 座標
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define XYZ101010(x, y, z) (((x) & X10_MASK) << X10_SHIFT \
|
||||
| ((y) & X10_MASK) << Y10_SHIFT \
|
||||
| ((z) & X10_MASK) << Z10_SHIFT)
|
||||
|
||||
#define XY1616(x, y) (((x) & X16_MASK) | (y) << Y16_SHIFT)
|
||||
#define Z16(z) ((z) & X16_MASK)
|
||||
|
||||
#define ZW1616(z, w) (((z) & X16_MASK) | (w) << Y16_SHIFT)
|
||||
#define HD1616(h, d) (((h) & X16_MASK) | (d) << Y16_SHIFT)
|
||||
|
||||
#define ST1616(s, t) (((s) & TEX_S_MASK ) | (t) << TEX_T_SHIFT)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ライト
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define LIGHT_VECTOR(no, x, y, z) ((no)<<LIGHT_ID_SHIFT | XYZ101010((x), (y), (z)))
|
||||
#define LIGHT_COLOR( no, r, g, b) ((no)<<LIGHT_ID_SHIFT | RGB555( (r), (g), (b)))
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// テクスチャイメージ&パレット アドレス変換
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// スタティックリスト用
|
||||
#define ADDR_TO_TEXIMAGE_BASE(basep) (((basep) >> TEX_IMAGE_BASE_SHIFT) & TEX_IMAGE_BASE_MASK)
|
||||
#define ADDR_TO_TEXPLTT_BASE(basep, mode) (((basep) >> mode##_SHIFT) & TEX_PLTT_BASE_MASK)
|
||||
|
||||
// リアルタイム処理用
|
||||
#define Addr2TexImageBase(basep) (((u32 )(basep) >> TEX_IMAGE_BASE_SHIFT) & TEX_IMAGE_BASE_MASK)
|
||||
#define Addr2TexPlttBase(basep, mode) ( (u32 )(basep) >> "\0\4\3\4\4\4\4"[mode])
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 除算器
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// パラメータ設定(通常版)
|
||||
|
||||
#define SetDiv(numer, denom, numBits, denBits) \
|
||||
{ \
|
||||
*(vu32 *)REG_DIVCNT = DIV_##numBits##_##denBits##BIT_MODE; \
|
||||
SetDivImm(numer, denom, numBits, denBits); \
|
||||
}
|
||||
|
||||
// パラメータ設定(モード設定省略版)
|
||||
|
||||
#define SetDivImm(numer, denom, numBits, denBits) \
|
||||
{ \
|
||||
*(vs##numBits *)REG_DIV_NUMER = (numer); \
|
||||
*(vs##denBits *)REG_DIV_DENOM = (denom); \
|
||||
}
|
||||
|
||||
// 除算器終了待ち
|
||||
|
||||
#define IsDivBusy() (((vu8 *)REG_DIVCNT)[1] & (DIV_BUSY>>8))
|
||||
#define WaitDiv() \
|
||||
{ \
|
||||
while (IsDivBusy()) ; \
|
||||
}
|
||||
|
||||
// 結果読み出し(除算器終了未確認版)
|
||||
|
||||
#define DivResultImm(bits) (*(vs##bits *)REG_DIV_RESULT)
|
||||
#define DivRemResultImm(bits) (*(vs##bits *)REG_DIVREM_RESULT)
|
||||
|
||||
// 結果読み出し(通常版)
|
||||
|
||||
#define DivResult(bits) DivResult##bits##()
|
||||
#define DivRemResult(bits) DivRemResult##bits##()
|
||||
|
||||
__inline static s64 DivResult64(void)
|
||||
{
|
||||
WaitDiv();
|
||||
|
||||
return DivResultImm(64);
|
||||
}
|
||||
__inline static s64 DivRemResult64(void)
|
||||
{
|
||||
WaitDiv();
|
||||
|
||||
return DivRemResultImm(64);
|
||||
}
|
||||
|
||||
__inline static s32 DivResult32(void)
|
||||
{
|
||||
WaitDiv();
|
||||
|
||||
return DivResultImm(32);
|
||||
}
|
||||
__inline static s32 DivRemResult32(void)
|
||||
{
|
||||
WaitDiv();
|
||||
|
||||
return DivRemResultImm(32);
|
||||
}
|
||||
|
||||
__inline static s16 DivResult16(void)
|
||||
{
|
||||
WaitDiv();
|
||||
|
||||
return DivResultImm(16);
|
||||
}
|
||||
__inline static s16 DivRemResult16(void)
|
||||
{
|
||||
WaitDiv();
|
||||
|
||||
return DivRemResultImm(16);
|
||||
}
|
||||
|
||||
__inline static s8 DivResult8(void)
|
||||
{
|
||||
WaitDiv();
|
||||
|
||||
return DivResultImm(8);
|
||||
}
|
||||
__inline static s8 DivRemResult8(void)
|
||||
{
|
||||
WaitDiv();
|
||||
|
||||
return DivRemResultImm(8);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 平方根演算器
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// パラメータ設定(通常版)
|
||||
|
||||
#define SetSqrt(param, bits) \
|
||||
{ \
|
||||
*(vu32 *)REG_SQRTCNT = SQRT_##bits##BIT_MODE; \
|
||||
SetSqrtImm(param, bits); \
|
||||
}
|
||||
|
||||
// パラメータ設定(モード設定省略版)
|
||||
|
||||
#define SetSqrtImm(param, bits) \
|
||||
{ \
|
||||
*(vu##bits *)REG_SQRT_PARAM = (param); \
|
||||
}
|
||||
|
||||
// 平方根演算器終了待ち
|
||||
|
||||
#define IsSqrtBusy() (((vu8 *)REG_SQRTCNT)[1] & (SQRT_BUSY>>8))
|
||||
#define WaitSqrt() \
|
||||
{ \
|
||||
while (IsSqrtBusy()) ; \
|
||||
}
|
||||
|
||||
// 結果読み出し(除算器終了未確認版)
|
||||
|
||||
#define SqrtResultImm(bits) (*(vu##bits *)REG_SQRT_RESULT)
|
||||
|
||||
// 結果読み出し(通常版)
|
||||
|
||||
#define SqrtResult(bits) SqrtResult##bits##()
|
||||
|
||||
__inline static u32 SqrtResult32(void)
|
||||
{
|
||||
WaitSqrt();
|
||||
|
||||
return SqrtResultImm(32);
|
||||
}
|
||||
__inline static u16 SqrtResult16(void)
|
||||
{
|
||||
WaitSqrt();
|
||||
|
||||
return SqrtResultImm(16);
|
||||
}
|
||||
__inline static u8 SqrtResult8(void)
|
||||
{
|
||||
WaitSqrt();
|
||||
|
||||
return SqrtResultImm(8);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データ読み込み
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define ReadData(readp, bit) (*(vu##bit *)(readp))
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データ書き込み
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define WriteData(writep, data, bit) \
|
||||
\
|
||||
(*(vu##bit *)(writep) = (data))
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データ コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CopyData(readp, writep, bit) \
|
||||
\
|
||||
(*(vu##bit *)(writep) = *(vu##bit *)(readp))
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// アドレス境界整列バッファの有効化
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#ifdef __CC_ARM
|
||||
#define EnableAlignBuf(alignBuf) \
|
||||
{ \
|
||||
vu16 alignBufTmp = *(vu16 *)alignBuf; \
|
||||
}
|
||||
#else
|
||||
#define EnableAlignBuf(alignBuf) ((void) 0)
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 割り込みアドレス セット
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SetIntrAddr(intrp) \
|
||||
\
|
||||
(*(vu32 *)INTR_VECTOR_BUF = (vu32 )intrp)
|
||||
|
||||
//・割り込み処理のアドレスをセットします。
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMA セット
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
//#define SIMULATOR
|
||||
#ifndef SIMULATOR
|
||||
#define DmaSet(dmaNo, srcp, destp, dmaCntData) \
|
||||
{ \
|
||||
vu32 *dmaCntp = &((vu32 *)REG_DMA0)[dmaNo * 3]; \
|
||||
dmaCntp[0] = (vu32 )(srcp); \
|
||||
dmaCntp[1] = (vu32 )(destp); \
|
||||
dmaCntp[2] = (vu32 )(dmaCntData); \
|
||||
{u32 dummy = dmaCntp[2];} \
|
||||
{u32 dummy = dmaCntp[2];} \
|
||||
}
|
||||
#define DmaSetAsync(dmaNo, srcp, destp, dmaCntData) \
|
||||
{ \
|
||||
vu32 *dmaCntp = &((vu32 *)REG_DMA0)[dmaNo * 3]; \
|
||||
dmaCntp[0] = (vu32 )(srcp); \
|
||||
dmaCntp[1] = (vu32 )(destp); \
|
||||
dmaCntp[2] = (vu32 )(dmaCntData); \
|
||||
}
|
||||
#else
|
||||
#define DmaSet(dmaNo, srcp, destp, dmaCntData) \
|
||||
{ \
|
||||
int i; \
|
||||
for (i=0; i<(dmaCntData & 0x1ffff); i++) \
|
||||
if ((dmaCntData) & DMA_SRC_FIX) { \
|
||||
if ((dmaCntData) & DMA_32BIT_BUS) \
|
||||
((vu32 *)(destp))[i] = ((vu32 *)(srcp))[0]; \
|
||||
else ((vu16 *)(destp))[i] = ((vu16 *)(srcp))[0]; \
|
||||
} else { \
|
||||
if ((dmaCntData) & DMA_32BIT_BUS) \
|
||||
((vu32 *)(destp))[i] = ((vu32 *)(srcp))[i]; \
|
||||
else ((vu16 *)(destp))[i] = ((vu16 *)(srcp))[i]; \
|
||||
} \
|
||||
}
|
||||
#define DmaSetAsync(dmaNo, srcp, destp, dmaCntData) \
|
||||
DmaSet( dmaNo, srcp, destp, dmaCntData)
|
||||
#endif
|
||||
|
||||
//・DMAコントローラにパラメータをセットします。
|
||||
//・SIMULATERを定義するとCPUでシミュレートします。
|
||||
// GDBでデバッグする場合などに有効です。
|
||||
//・最後にDMA起動待ちのために"LDR"命令が挿入されます。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// dmaCntData パラメータデータ
|
||||
//
|
||||
//※CPU内部RAM上のプログラムにてDMAを起動すると
|
||||
// その次の命令が先に実行されます。
|
||||
// よって、DMA直後に転送先をCPUにて変更しようとした場合、
|
||||
// 読み込み/書き戻しの間にDMAが起動されてしまいますので、
|
||||
// DMAの転送先のデータが意図していない値になる場合があります。
|
||||
// その場合にはWaitDma()を直後に挿入して、DMAが終了したか
|
||||
// どうかをチェックすると続くコードへの影響を確実に回避できます。
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMA クリア
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define DmaClear(dmaNo, data, destp, size, bit) \
|
||||
{ \
|
||||
vu32 *srcp = &((vu32 *)REG_DMA0_CLR_DATA)[dmaNo]; \
|
||||
*srcp = (data); \
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_IMM | \
|
||||
DMA_SRC_FIX | DMA_DEST_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8)))); \
|
||||
}
|
||||
|
||||
#define DmaClearIf(dmaNo, data, destp, size, bit) \
|
||||
{ \
|
||||
vu32 *srcp = &((vu32 *)REG_DMA0_CLR_DATA)[dmaNo]; \
|
||||
*srcp = (data); \
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_IMM | \
|
||||
DMA_IF_ENABLE | \
|
||||
DMA_SRC_FIX | DMA_DEST_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8)))); \
|
||||
}
|
||||
|
||||
#define DmaClearArray( dmaNo, data, destp, bit) \
|
||||
DmaClear( dmaNo, data, destp, sizeof(destp), bit)
|
||||
|
||||
#define DmaClearArrayIf(dmaNo, data, destp, bit) \
|
||||
DmaClearIf( dmaNo, data, destp, sizeof(destp), bit)
|
||||
|
||||
//・DMAでRAMクリアします。
|
||||
//・クリアデータはスタックに置かれ、それをデスティネーションへコピーします。
|
||||
//・DmaClearIf/DmaClearArrayIfは終了時に割り込み要求を発生します。
|
||||
//・DmaClearArray/DmaClearArrayIfはデスティネーション配列全体をクリアします。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// data クリアデータ
|
||||
// destp デスティネーションアドレス
|
||||
// size クリアバイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
//
|
||||
//
|
||||
//※CPU内部RAM上のプログラムにてDMAを起動すると
|
||||
// その次の命令が先に実行されます。
|
||||
// よって、DMA直後に転送先をCPUにて変更しようとした場合、
|
||||
// 読み込み/書き戻しの間にDMAが起動されてしまいますので、
|
||||
// DMAの転送先のデータが意図していない値になる場合があります。
|
||||
// その場合にはWaitDma()を直後に挿入して、DMAが終了したか
|
||||
// どうかをチェックすると続くコードへの影響を確実に回避できます。
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMA コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define DmaCopy(dmaNo, srcp, destp, size, bit) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_IMM | \
|
||||
DMA_SRC_INC | DMA_DEST_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/((bit)/8))))
|
||||
|
||||
#define DmaCopyIf(dmaNo, srcp, destp, size, bit) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_IMM | \
|
||||
DMA_IF_ENABLE | \
|
||||
DMA_SRC_INC | DMA_DEST_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8))))
|
||||
|
||||
#define DmaCopyArray( dmaNo, srcp, destp, bit) \
|
||||
DmaCopy( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
#define DmaCopyArrayIf(dmaNo, srcp, destp, bit) \
|
||||
DmaCopyIf( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
//・DMAでコピーします。
|
||||
//・DmaCopyIf/DmaCopyArrayIfは終了時に割り込み要求を発生します。
|
||||
//・DmaCopyArray/DmaCopyArrayIfはソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送バイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
//
|
||||
//
|
||||
//※CPU内部RAM上のプログラムにてDMAを起動すると
|
||||
// その次の命令が先に実行されます。
|
||||
// よって、DMA直後に転送先をCPUにて変更しようとした場合、
|
||||
// 読み込み/書き戻しの間にDMAが起動されてしまいますので、
|
||||
// DMAの転送先のデータが意図していない値になる場合があります。
|
||||
// その場合にはWaitDma()を直後に挿入して、DMAが終了したか
|
||||
// どうかをチェックすると続くコードへの影響を確実に回避できます。
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// HブランクDMA コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define H_DmaCopy(dmaNo, srcp, destp, size, bit) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_H_BLANK | \
|
||||
DMA_SRC_INC | DMA_DEST_RELOAD | \
|
||||
DMA_CONTINUOUS_ON | \
|
||||
DMA_##bit##BIT_BUS | ((size)/((bit)/8))))
|
||||
|
||||
#define H_DmaCopyIf(dmaNo, srcp, destp, size, bit) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_H_BLANK | \
|
||||
DMA_IF_ENABLE | \
|
||||
DMA_SRC_INC | DMA_DEST_RELOAD | \
|
||||
DMA_CONTINUOUS_ON | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8))))
|
||||
|
||||
#define H_DmaCopyArray( dmaNo, srcp, destp, bit) \
|
||||
H_DmaCopy( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
#define H_DmaCopyArrayIf(dmaNo, srcp, destp, bit) \
|
||||
H_DmaCopyIf( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
//・Hブランクに同期してDMAでコピーします。
|
||||
//・H_DmaCopyIf/H_DmaCopyArrayIfは終了時に割り込み要求を発生します。
|
||||
//・H_DmaCopyArray/H_DmaCopyArrayIfはソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送バイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// VブランクDMA コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define V_DmaCopy(dmaNo, srcp, destp, size, bit) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_V_BLANK | \
|
||||
DMA_SRC_INC | DMA_DEST_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8))))
|
||||
|
||||
#define V_DmaCopyIf(dmaNo, srcp, destp, size, bit) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_V_BLANK | \
|
||||
DMA_IF_ENABLE | \
|
||||
DMA_SRC_INC | DMA_DEST_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8))))
|
||||
|
||||
#define V_DmaCopyArray( dmaNo, srcp, destp, bit) \
|
||||
V_DmaCopy( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
#define V_DmaCopyArrayIf(dmaNo, srcp, destp, bit) \
|
||||
V_DmaCopyIf( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
//・Vブランクに同期してDMAでコピーします。
|
||||
//・V_DmaCopyIf/V_DmaCopyArrayIfは終了時に割り込み要求を発生します。
|
||||
//・V_DmaCopyArray/V_DmaCopyArrayIfはソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送バイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メインメモリ表示DMA
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define DmaDispMainmem(dmaNo, srcp) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, REG_DISP_WRAM_FIFO, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_DISP_MMEM | \
|
||||
DMA_SRC_INC | DMA_DEST_FIX | \
|
||||
DMA_CONTINUOUS_ON | \
|
||||
DMA_32BIT_BUS | (4)))
|
||||
|
||||
//・メインメモリ上のイメージを表示するDMA転送を行います。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// srcp ソースアドレス
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ジオメトリFIFO-DMA
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GX_Dma(dmaNo, srcp, length) \
|
||||
\
|
||||
DmaSetAsync(dmaNo, srcp, REG_GXFIFO, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_GXFIFO | \
|
||||
DMA_SRC_INC | DMA_DEST_FIX | \
|
||||
DMA_32BIT_BUS | (length)))
|
||||
|
||||
#define GX_DmaIf(dmaNo, srcp, length) \
|
||||
\
|
||||
DmaSetAsync(dmaNo, srcp, REG_GXFIFO, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_GXFIFO | \
|
||||
DMA_IF_ENABLE | \
|
||||
DMA_SRC_INC | DMA_DEST_FIX | \
|
||||
DMA_32BIT_BUS | (length)))
|
||||
|
||||
#define GX_DmaFast(dmaNo, srcp, length) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, REG_GXFIFO, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_IMM | \
|
||||
DMA_SRC_INC | DMA_DEST_FIX | \
|
||||
DMA_32BIT_BUS | (length)))
|
||||
|
||||
#define GX_DmaFastIf(dmaNo, srcp, length) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, REG_GXFIFO, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_IMM | \
|
||||
DMA_IF_ENABLE | \
|
||||
DMA_SRC_INC | DMA_DEST_FIX | \
|
||||
DMA_32BIT_BUS | (length)))
|
||||
|
||||
#define GX_DmaArray( dmaNo, srcp, destp, bit) \
|
||||
GX_Dma( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
#define GX_DmaArrayIf(dmaNo, srcp, destp, bit) \
|
||||
GX_DmaIf(dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
#define GX_DmaArrayFast( dmaNo, srcp, destp, bit) \
|
||||
GX_DmaFast( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
#define GX_DmaArrayFastIf(dmaNo, srcp, destp, bit) \
|
||||
GX_DmaFastIf(dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
//・ジオメトリFIFOからの要求によってDMAでコピーします。
|
||||
//・GX_DmaIf/GX_DmaArrayIf/GX_DmaFastIf/GX_DmaArrayFastIf
|
||||
// は終了時に割り込み要求を発生します。
|
||||
//・GX_DmaArray/GX_DmaArrayIf/GX_DmaArrayFast/GX_DmaArrayFastIf
|
||||
// はソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// srcp ソースアドレス
|
||||
// size 転送バイト数
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMA 終了待ち
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define WaitDma(dmaNo) \
|
||||
{ \
|
||||
vu32 *(dmaCntp) = &((vu32 *)REG_DMA0)[dmaNo * 3]; \
|
||||
while (dmaCntp[2] & DMA_ENABLE) ; \
|
||||
}
|
||||
|
||||
//・DMAの終了を待ちます。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMA ストップ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define StopDma(dmaNo) \
|
||||
{ \
|
||||
vu16 *(dmaCntp) = &((vu16 *)REG_DMA0)[dmaNo * 6]; \
|
||||
dmaCntp[5] &= ~((DMA_TIMMING_MASK | DMA_CONTINUOUS_ON) \
|
||||
>> 16); \
|
||||
dmaCntp[5] &= ~( DMA_ENABLE >> 16); \
|
||||
{u32 dummy = dmaCntp[5];} \
|
||||
{u32 dummy = dmaCntp[5];} \
|
||||
}
|
||||
|
||||
//・DMAを停止します。
|
||||
//・但し、処理中にDMAの自動起動が掛かった場合は一度だけDMAが実行されます。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU クリア
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuClear(data, destp, size, bit) UTL_CpuClear##bit(data, (void *)(destp), size)
|
||||
|
||||
#define CpuClearArray(data, destp, bit) \
|
||||
CpuClear( data, destp, sizeof(destp), bit)
|
||||
|
||||
//・CPUでRAMクリアするシステムコールを呼び出します。
|
||||
//・クリアデータはスタックに置かれ、それをデスティネーションへコピーします。
|
||||
//・CpuClearArrayはデスティネーション配列全体をクリアします。
|
||||
//
|
||||
//・引数:
|
||||
// data クリアデータ
|
||||
// destp デスティネーションアドレス
|
||||
// size クリアバイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuCopy(srcp, destp, size, bit) UTL_CpuCopy##bit((void *)(srcp), (void *)(destp), size)
|
||||
|
||||
#define CpuCopyArray(srcp, destp, bit) \
|
||||
CpuCopy( srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
//・CPUでコピーするシステムコールを呼び出します。
|
||||
//・CpuCopyArrayはソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送バイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 高速クリア
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuClearFast(data, destp, size) UTL_CpuClearFast(data, (void *)(destp), size)
|
||||
|
||||
#define CpuClearArrayFast(data, destp) \
|
||||
CpuClearFast( data, destp, sizeof(destp))
|
||||
|
||||
//・CPUで高速にRAMクリアするシステムコールを呼び出します。
|
||||
//・クリアデータはスタックに置かれ、それをデスティネーションへコピーします。
|
||||
//・CpuClearArrayFastはデスティネーション配列全体をクリアします。
|
||||
//
|
||||
//・引数:
|
||||
// data クリアデータ
|
||||
// destp デスティネーションアドレス
|
||||
// size クリアバイト数
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 高速コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuCopyFast(srcp, destp, size) UTL_CpuCopyFast((void *)(srcp), (void *)(destp), size)
|
||||
|
||||
#define CpuCopyArrayFast(srcp, destp) \
|
||||
CpuCopyFast( srcp, destp, sizeof(srcp))
|
||||
|
||||
//・CPUで高速にコピーするシステムコールを呼び出します。
|
||||
//・CpuCopyArrayFastはソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送バイト数
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_MACRO_H
|
||||
32
trunk/IrisMainp/include/IrisMacroArm.s
Normal file
32
trunk/IrisMainp/include/IrisMacroArm.s
Normal file
@ -0,0 +1,32 @@
|
||||
;=======================================================================
|
||||
; IrisMacroArm.s
|
||||
; IRIS 標準マクロ関数(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2002-2004 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
IF :DEF: _IRIS_MACRO_H
|
||||
ELSE
|
||||
_IRIS_MACRO_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisTargetArm.s
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; システムコール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
MACRO
|
||||
SystemCall16 $No
|
||||
swi $No
|
||||
MEND
|
||||
MACRO
|
||||
SystemCall32 $No
|
||||
swi $No << 16
|
||||
MEND
|
||||
|
||||
|
||||
ENDIF ; _IRIS_MACRO_H
|
||||
|
||||
END
|
||||
|
||||
28
trunk/IrisMainp/include/IrisMacroMw.s
Normal file
28
trunk/IrisMainp/include/IrisMacroMw.s
Normal file
@ -0,0 +1,28 @@
|
||||
;=======================================================================
|
||||
; IrisMacroMw.s
|
||||
; IRIS 標準マクロ関数(MWASMARM用)
|
||||
;
|
||||
; Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
#ifndef _IRIS_MACRO_H
|
||||
#define _IRIS_MACRO_H
|
||||
|
||||
|
||||
.INCLUDE IrisTarget.h
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; システムコール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
SystemCall16: .MACRO No
|
||||
swi No
|
||||
.ENDM
|
||||
|
||||
SystemCall32: .MACRO No
|
||||
swi No << 16
|
||||
.ENDM
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_MACRO_H
|
||||
704
trunk/IrisMainp/include/IrisMemoryMap.h
Normal file
704
trunk/IrisMainp/include/IrisMemoryMap.h
Normal file
@ -0,0 +1,704 @@
|
||||
//======================================================================
|
||||
// IrisMemoryMap.h
|
||||
// IRIS メモリマップ定数
|
||||
//
|
||||
// Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_MEMORY_MAP_H
|
||||
#define _IRIS_MEMORY_MAP_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisTarget.h>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メモリ・マップ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SHARED_WORK 0x027ff000 // CPU間共有ワーク領域
|
||||
#define SHARED_WORK_END 0x02800000
|
||||
|
||||
#if defined(NDEBUG)
|
||||
#define SUBP_PRV 0x02380000 // サブプロセッサ専有領域(リリースバージョン)
|
||||
#elif defined(MMEM_4M)
|
||||
#define SUBP_PRV 0x02300000 // (デバッグバージョン<メインメモリ4M本体>)
|
||||
#else
|
||||
#define SUBP_PRV 0x02600000 // (デバッグバージョン<メインメモリ8M本体>)
|
||||
#endif
|
||||
#define SUBP_PRV_END SHARED_WORK
|
||||
|
||||
|
||||
#if defined(IRIS_TEG) | defined(IRIS_TS)
|
||||
#define ITCM 0x01ff8000 // 命令TCM
|
||||
#define ITCM_END (ITCM + 0x8000)
|
||||
#define DTCM SUBP_PRV // データTCM(TEGボード以降)
|
||||
#else
|
||||
#define DTCM 0x8000 // (ブレッドボード専用)
|
||||
#endif
|
||||
#define DTCM_END (DTCM + 0x4000)
|
||||
|
||||
#define INTR_VECTOR_BUF (DTCM_END - 0x4) // 割り込み分岐アドレス
|
||||
#define INTR_CHECK_BUF (DTCM_END - 0x8) // 割り込みチェック
|
||||
|
||||
#define SEND_FIFO_LOCK_BUF (DTCM_END - 0x10) // CPU間送信FIFO・ロックバッファ
|
||||
#define TIMER3_LOCK_BUF (DTCM_END - 0x12) // タイマー3・ロックバッファ
|
||||
#define TIMER2_LOCK_BUF (DTCM_END - 0x14) // タイマー2
|
||||
#define TIMER1_LOCK_BUF (DTCM_END - 0x16) // タイマー1
|
||||
#define TIMER0_LOCK_BUF (DTCM_END - 0x18) // タイマー0
|
||||
#define DMA3_LOCK_BUF (DTCM_END - 0x1a) // DMA3・ロックバッファ
|
||||
#define DMA2_LOCK_BUF (DTCM_END - 0x1c) // DMA2
|
||||
#define DMA1_LOCK_BUF (DTCM_END - 0x1e) // DMA1
|
||||
#define DMA0_LOCK_BUF (DTCM_END - 0x20) // DMA0
|
||||
|
||||
|
||||
#define MAIN_MEM 0x02000000 // メインメモリ
|
||||
#define MAIN_MEM_END (MAIN_MEM + 0x400000)
|
||||
#define MAIN_MEM_EX_END (MAIN_MEM + 0x800000) //(拡張時の最終アドレス)
|
||||
|
||||
#define MAIN_MEM_CMD_AREA (MAIN_MEM_EX_END - 0x2) // メインメモリコマンド発行エリア(使用禁止エリア)
|
||||
|
||||
#define SHARED_LOCK_BUF (MAIN_MEM_EX_END - 0x40) // 共有リソース・ロックバッファ
|
||||
#define SHARED_LOCK_BUF_END (MAIN_MEM_EX_END - 0x10)
|
||||
|
||||
#define INIT_LOCK_BUF (MAIN_MEM_EX_END - 0x10) // 初期化ロックバッファ
|
||||
#define CARTRIDGE_LOCK_BUF (MAIN_MEM_EX_END - 0x18) // カートリッジ・ロックバッファ
|
||||
#define CARD_LOCK_BUF (MAIN_MEM_EX_END - 0x20) // カード・ロックバッファ
|
||||
#define WRAM_BLOCK1_LOCK_BUF (MAIN_MEM_EX_END - 0x28) // CPU内部ワークRAM・ブロック1・ロックバッファ
|
||||
#define WRAM_BLOCK0_LOCK_BUF (MAIN_MEM_EX_END - 0x30) // ブロック0・ロックバッファ
|
||||
#define VRAM_D_LOCK_BUF (MAIN_MEM_EX_END - 0x38) // VRAM-D・ロックバッファ
|
||||
#define VRAM_C_LOCK_BUF (MAIN_MEM_EX_END - 0x40) // C・ロックバッファ
|
||||
|
||||
#define FROM_SUBP_IF_BUF (MAIN_MEM_EX_END - 0x50) // サブ→メインプロセッサ割り込み要求フラグ(2Byte×8)
|
||||
#define WM_FROM_SUBP_IF_BUF (MAIN_MEM_EX_END - 0x50) // ワイヤレスマネージャ予約
|
||||
#define TO_SUBP_IF_BUF (MAIN_MEM_EX_END - 0x60) // メイン→サブプロセッサ割り込み要求フラグ(2Byte×8)
|
||||
#define WM_TO_SUBP_IF_BUF (MAIN_MEM_EX_END - 0x60) // ワイヤレスマネージャ予約
|
||||
|
||||
#define ROM_HEADER_BUF (MAIN_MEM_EX_END - 0x200)// ROM内登録エリアデータ・バッファ
|
||||
|
||||
#define DMA_CLEAR_DATA_BUF (MAIN_MEM_EX_END - 0x210)// DMAクリアデータ・バッファ(暫定対応、廃止予定)
|
||||
|
||||
|
||||
#define CPU_WRAM 0x037f8000 // CPU内部ワークRAM
|
||||
#define CPU_WRAM_END (CPU_WRAM + 0x8000)
|
||||
#define CPU_WRAM_BLOCK0 0x037f8000 // ブロック0
|
||||
#define CPU_WRAM_BLOCK0_END (CPU_WRAM_BLOCK0 + 0x4000)
|
||||
#define CPU_WRAM_BLOCK1 0x037fc000 // ブロック1
|
||||
#define CPU_WRAM_BLOCK1_END (CPU_WRAM_BLOCK1 + 0x4000)
|
||||
|
||||
|
||||
#define REG_BASE 0x04000000 // レジスタ群
|
||||
#define PLTT 0x05000000 // パレットRAM
|
||||
#define PLTT_END (PLTT + 0x400)
|
||||
#define BG_PLTT (PLTT + 0x0) // BGパレットRAM
|
||||
#define BG_PLTT_END (PLTT + 0x200)
|
||||
#define OBJ_PLTT (PLTT + 0x200) // OBJパレットRAM
|
||||
#define OBJ_PLTT_END (PLTT + 0x400)
|
||||
#define VRAM 0x06000000 // VRAM
|
||||
#define BG_VRAM (VRAM + 0x0) // BGキャラクタ/スクリーンRAM
|
||||
#define BG_VRAM_END (VRAM + 0x80000)
|
||||
#define OBJ_VRAM (VRAM + 0x400000) // OBJキャラクタRAM
|
||||
#define OBJ_VRAM_END (VRAM + 0x440000)
|
||||
#define LCDC_VRAM (VRAM + 0x800000) // LCDC-VRAM
|
||||
#define LCDC_VRAM_A (VRAM + 0x800000)
|
||||
#define LCDC_VRAM_B (VRAM + 0x820000)
|
||||
#define LCDC_VRAM_C (VRAM + 0x840000)
|
||||
#define LCDC_VRAM_D (VRAM + 0x860000)
|
||||
#define LCDC_VRAM_E (VRAM + 0x880000)
|
||||
#define LCDC_VRAM_F (VRAM + 0x890000)
|
||||
#define LCDC_VRAM_G (VRAM + 0x894000)
|
||||
#define LCDC_VRAM_END (VRAM + 0x898000)
|
||||
#define OAM 0x07000000 // OAM
|
||||
#define OAM_END (OAM + 0x400)
|
||||
|
||||
#define CARTRIDGE 0x08000000 // カートリッジ
|
||||
#define CTRDG_AD16_BANK0 0x08000000 // カートリッジ AD16バス バンク0
|
||||
#define CTRDG_AD16_BANK0_END 0x0a000000
|
||||
#define CTRDG_AD16_BANK1 0x0a000000 // バンク1
|
||||
#define CTRDG_AD16_BANK1_END 0x0c000000
|
||||
#define CTRDG_AD16_BANK2 0x0c000000 // バンク2
|
||||
#define CTRDG_AD16_BANK2_END 0x0e000000
|
||||
#define CTRDG_DT8 0x0e000000 // カートリッジ 8bitデータバス
|
||||
#define CTRDG_DT8_END 0x10000000
|
||||
|
||||
#define BIOS 0xffff0000 // BIOS
|
||||
#define BIOS_END (BIOS + 0x8000)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メモリ・サイズ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SHARED_WORK_SIZE (SHARED_WORK_END - SHARED_WORK) // CPU間共有ワーク領域(4KB以上、2のべき乗サイズ)
|
||||
#define SUBP_PRV_SIZE (SUBP_PRV_END - SUBP_PRV) // サブプロセッサ専有領域(32KB以上、2のべき乗サイズ)
|
||||
|
||||
#define SHARED_LOCK_BUF_SIZE (SHARED_LOCK_BUF_END - SHARED_LOCK_BUF) // 共有リソース・ロックバッファ
|
||||
|
||||
|
||||
#define ITCM_SIZE 0x8000 // 命令TCM
|
||||
#define DTCM_SIZE 0x4000 // データTCM
|
||||
#define ICACHE_SIZE 0x2000 // 命令キャッシュ
|
||||
#define DCACHE_SIZE 0x1000 // データキャッシュ
|
||||
|
||||
#define CACHE_LINE_SIZE 32 // キャッシュライン
|
||||
|
||||
#define MAIN_MEM_SIZE 0x400000 // メインメモリ
|
||||
#define MAIN_MEM_EX_SIZE 0x800000 // (拡張時)
|
||||
|
||||
#define CPU_WRAM_SIZE 0x8000 // CPU内部ワークRAM 合計
|
||||
#define CPU_WRAM_BLOCK0_SIZE 0x4000 // ブロック0
|
||||
#define CPU_WRAM_BLOCK1_SIZE 0x4000 // ブロック1
|
||||
|
||||
#define MROM_PAGE_SIZE 512 // マスクROM・ページ
|
||||
|
||||
#define PLTT_SIZE (2*256*2) // パレットRAM
|
||||
#define BG_PLTT_SIZE (2*256) // BGパレットRAM
|
||||
#define OBJ_PLTT_SIZE (2*256) // OBJパレットRAM
|
||||
#define BG_VRAM_SIZE 0x80000 // BG-VRAM
|
||||
#define OBJ_VRAM_SIZE 0x40000 // OBJ-VRAM
|
||||
#define LCDC_VRAM_SIZE 0x98000 // LCDC-VRAM
|
||||
#define VRAM_A_SIZE 0x20000 // VRAM-A
|
||||
#define VRAM_B_SIZE 0x20000 // B
|
||||
#define VRAM_C_SIZE 0x20000 // C
|
||||
#define VRAM_D_SIZE 0x20000 // D
|
||||
#define VRAM_E_SIZE 0x10000 // E
|
||||
#define VRAM_F_SIZE 0x4000 // F
|
||||
#define VRAM_G_SIZE 0x4000 // G
|
||||
#define OAM_SIZE (8*128) // OAM
|
||||
|
||||
#define CARTRIDGE_SIZE 0x02000000 // カートリッジ
|
||||
#define CTRDG_AD16_BANK_SIZE 0x02000000 // カートリッジ AD16バス バンク
|
||||
#define CTRDG_AD16_BANK0_SIZE 0x02000000 // バンク0
|
||||
#define CTRDG_AD16_BANK1_SIZE 0x02000000 // バンク1
|
||||
#define CTRDG_AD16_BANK2_SIZE 0x02000000 // バンク2
|
||||
#define CTRDG_DT8_SIZE 0x02000000 // カートリッジ 8bitデータバス
|
||||
|
||||
#define BIOS_SIZE 0x8000 // BIOS
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// レジスタ・アドレス
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define REG_IME (REG_BASE + 0x208) // 割り込みマスタイネーブル
|
||||
#define REG_IE (REG_BASE + 0x210) // 割り込み許可
|
||||
#define REG_IF (REG_BASE + 0x214) // 割り込み要求
|
||||
|
||||
|
||||
#define REG_SUBPINTF (REG_BASE + 0x180) // サブプロセッサインタフェース
|
||||
#define REG_SUBP_FIFO_CNT (REG_BASE + 0x184) // CPU間FIFOコントロール
|
||||
#define REG_SEND_FIFO (REG_BASE + 0x188) // 送信FIFO
|
||||
#define REG_RECV_FIFO (REG_BASE + 0x100000) // 受信FIFO
|
||||
|
||||
#define REG_EXMEMCNT (REG_BASE + 0x204) // 外部メモリコントロール
|
||||
|
||||
#define REG_POWCNT (REG_BASE + 0x304) // パワーコントロール
|
||||
|
||||
|
||||
#define REG_DIVCNT (REG_BASE + 0x280) // 除算器 コントロール
|
||||
#define REG_DIV_NUMER (REG_BASE + 0x290) // 被除数
|
||||
#define REG_DIV_DENOM (REG_BASE + 0x298) // 除数
|
||||
#define REG_DIV_RESULT (REG_BASE + 0x2a0) // 商
|
||||
#define REG_DIVREM_RESULT (REG_BASE + 0x2a8) // 余り
|
||||
|
||||
#define REG_SQRTCNT (REG_BASE + 0x2b0) // 平方根演算器 コントロール
|
||||
#define REG_SQRT_RESULT (REG_BASE + 0x2b4) // 結果
|
||||
#define REG_SQRT_PARAM (REG_BASE + 0x2b8) // パラメータ
|
||||
|
||||
|
||||
#define REG_DISPCNT (REG_BASE + 0x0) // 表示コントロール
|
||||
#define REG_DISPCNT_L (REG_BASE + 0x0)
|
||||
#define REG_DISPCNT_H (REG_BASE + 0x2)
|
||||
#define REG_DISP2DCNT (REG_BASE + 0x0) // 2D表示コントロール
|
||||
#define REG_DISP3DCNT (REG_BASE + 0x60) // 3D表示コントロール
|
||||
|
||||
#define REG_DISPSTAT (REG_BASE + 0x4) // 表示ステータス
|
||||
#define REG_VCOUNT (REG_BASE + 0x6) // Vカウンタ
|
||||
#define REG_GXSTAT (REG_BASE + 0x600) // ジオメトリエンジンステータス
|
||||
|
||||
|
||||
#define REG_VRAMCNT (REG_BASE + 0x240) // VRAMコントロール
|
||||
#define REG_WRAMCNT (REG_BASE + 0x247) // 内部ワークRAMコントロール
|
||||
#define REG_WVRAMCNT (REG_BASE + 0x244) // VRAM E~G + 内部ワークRAM コントロール
|
||||
#define REG_VRAM_A_CNT (REG_BASE + 0x240) // VRAM A
|
||||
#define REG_VRAM_B_CNT (REG_BASE + 0x241) // VRAM B
|
||||
#define REG_VRAM_C_CNT (REG_BASE + 0x242) // VRAM C
|
||||
#define REG_VRAM_D_CNT (REG_BASE + 0x243) // VRAM D
|
||||
#define REG_VRAM_E_CNT (REG_BASE + 0x244) // VRAM E
|
||||
#define REG_VRAM_F_CNT (REG_BASE + 0x245) // VRAM F
|
||||
#define REG_VRAM_G_CNT (REG_BASE + 0x246) // VRAM G
|
||||
#define REG_VRAM_H_CNT (REG_BASE + 0x248) // VRAM H
|
||||
#define REG_VRAM_I_CNT (REG_BASE + 0x249) // VRAM I
|
||||
#define REG_VRAM_AB_CNT (REG_BASE + 0x240) // VRAM AB
|
||||
#define REG_VRAM_CD_CNT (REG_BASE + 0x242) // VRAM CD
|
||||
#define REG_VRAM_EF_CNT (REG_BASE + 0x244) // VRAM EF
|
||||
#define REG_VRAM_G_W_CNT (REG_BASE + 0x246) // VRAM G + 内部ワークRAM
|
||||
#define REG_VRAM_ABCD_CNT (REG_BASE + 0x240) // VRAM A~D
|
||||
#define REG_VRAM_EFG_W_CNT (REG_BASE + 0x244) // VRAM E~G + 内部ワークRAM
|
||||
#define REG_VRAM_HI_CNT (REG_BASE + 0x248) // VRAM HI
|
||||
|
||||
|
||||
|
||||
#define REG_MASTER_BRIGHT (REG_BASE + 0x6c) // マスター輝度 コントロール
|
||||
#define REG_DISPCAPCNT (REG_BASE + 0x64) // 表示キャプチャ コントロール
|
||||
#define REG_DISP_MMEM_FIFO (REG_BASE + 0x68) // メインメモリ表示FIFO
|
||||
|
||||
|
||||
#define REG_MOSAIC (REG_BASE + 0x4c) // モザイク サイズ
|
||||
|
||||
#define REG_BLDCNT (REG_BASE + 0x50) // ブレンドモード コントロール
|
||||
#define REG_BLDALPHA (REG_BASE + 0x52) // 半透明 パラメータ
|
||||
#define REG_BLDY (REG_BASE + 0x54) // 輝度変更 パラメータ
|
||||
|
||||
#define REG_WINCNT (REG_BASE + 0x40) // ウインドウ コントロール
|
||||
#define REG_WIN0H (REG_BASE + 0x40) // ウインドウ0水平領域
|
||||
#define REG_WIN1H (REG_BASE + 0x42) // ウインドウ1水平領域
|
||||
#define REG_WIN0V (REG_BASE + 0x44) // ウインドウ0垂直領域
|
||||
#define REG_WIN1V (REG_BASE + 0x46) // ウインドウ1垂直領域
|
||||
#define REG_WININ (REG_BASE + 0x48) // ウインドウ内コントロール
|
||||
#define REG_WIN0 (REG_BASE + 0x48) // ウインドウ0コントロール
|
||||
#define REG_WIN1 (REG_BASE + 0x49) // ウインドウ1コントロール
|
||||
#define REG_WIN01 (REG_BASE + 0x48) // ウインドウ0・1コントロール
|
||||
#define REG_WINOUT (REG_BASE + 0x4a) // ウインドウ外コントロール
|
||||
#define REG_OBJWIN (REG_BASE + 0x4b) // OBJウインドウコントロール
|
||||
#define REG_WINOUTOBJ (REG_BASE + 0x4a) // ウインドウ外・OBJウインドウコントロール
|
||||
|
||||
|
||||
#define REG_BGCNT (REG_BASE + 0x8) // BGコントロール
|
||||
#define REG_BG0CNT (REG_BASE + 0x8) // BG0コントロール
|
||||
#define REG_BG1CNT (REG_BASE + 0xa) // BG1コントロール
|
||||
#define REG_BG2CNT (REG_BASE + 0xc) // BG2コントロール
|
||||
#define REG_BG3CNT (REG_BASE + 0xe) // BG3コントロール
|
||||
#define REG_BGOFS (REG_BASE + 0x10) // BGオフセット
|
||||
#define REG_BG0HOFS (REG_BASE + 0x10) // BG0Hオフセット
|
||||
#define REG_BG0VOFS (REG_BASE + 0x12) // BG0Vオフセット
|
||||
#define REG_BG1HOFS (REG_BASE + 0x14) // BG1Hオフセット
|
||||
#define REG_BG1VOFS (REG_BASE + 0x16) // BG1Vオフセット
|
||||
#define REG_BG2HOFS (REG_BASE + 0x18) // BG2Hオフセット
|
||||
#define REG_BG2VOFS (REG_BASE + 0x1a) // BG2Vオフセット
|
||||
#define REG_BG3HOFS (REG_BASE + 0x1c) // BG3Hオフセット
|
||||
#define REG_BG3VOFS (REG_BASE + 0x1e) // BG3Vオフセット
|
||||
#define REG_BG2AFFINE (REG_BASE + 0x20) // BG2アフィン変換パラメータ群
|
||||
#define REG_BG2PA (REG_BASE + 0x20) // BG2ライン方向X座標差分
|
||||
#define REG_BG2PB (REG_BASE + 0x22) // BG2 垂直方向X座標差分
|
||||
#define REG_BG2PC (REG_BASE + 0x24) // BG2ライン方向Y座標差分
|
||||
#define REG_BG2PD (REG_BASE + 0x26) // BG2 垂直方向Y座標差分
|
||||
#define REG_BG2X (REG_BASE + 0x28) // BG2スタートX座標
|
||||
#define REG_BG2Y (REG_BASE + 0x2c) // BG2スタートY座標
|
||||
#define REG_BG3AFFINE (REG_BASE + 0x30) // BG3アフィン変換パラメータ群
|
||||
#define REG_BG3PA (REG_BASE + 0x30) // BG3ライン方向X座標差分
|
||||
#define REG_BG3PB (REG_BASE + 0x32) // BG3 垂直方向X座標差分
|
||||
#define REG_BG3PC (REG_BASE + 0x34) // BG3ライン方向Y座標差分
|
||||
#define REG_BG3PD (REG_BASE + 0x36) // BG3 垂直方向Y座標差分
|
||||
#define REG_BG3X (REG_BASE + 0x38) // BG3スタートX座標
|
||||
#define REG_BG3Y (REG_BASE + 0x3c) // BG3スタートY座標
|
||||
|
||||
|
||||
|
||||
#define REG_GXFIFO (REG_BASE + 0x400) // ジオメトリFIFO
|
||||
|
||||
#define REG_LISTRAM_COUNT (REG_BASE + 0x604) // ポリゴンリストRAMカウンタ
|
||||
#define REG_VTXRAM_COUNT (REG_BASE + 0x606) // 頂点RAMカウンタ
|
||||
#define REG_RDLINES_COUNT (REG_BASE + 0x320) // レンダリング済みライン数カウンタ
|
||||
|
||||
|
||||
#define REG_SWAP_BUFFERS (REG_BASE + 0x540) // レンダリングエンジン参照データ群のスワップ
|
||||
|
||||
#define REG_VIEWPORT (REG_BASE + 0x580) // 視界
|
||||
|
||||
#define REG_MTX_MODE (REG_BASE + 0x440) // 行列モード
|
||||
|
||||
#define REG_MTX_PUSH (REG_BASE + 0x444) // 行列プッシュ
|
||||
#define REG_MTX_POP (REG_BASE + 0x448) // 行列ポップ
|
||||
#define REG_MTX_STORE (REG_BASE + 0x44c) // 行列ストア
|
||||
#define REG_MTX_RESTORE (REG_BASE + 0x450) // 行列リストア
|
||||
|
||||
#define REG_MTX_IDENTITY (REG_BASE + 0x454) // 単位行列 初期化
|
||||
#define REG_MTX_LOAD_4x4 (REG_BASE + 0x458) // 行列ロード(4x4)
|
||||
#define REG_MTX_LOAD_4x3 (REG_BASE + 0x45c) // (4x3)
|
||||
#define REG_MTX_MULT_4x4 (REG_BASE + 0x460) // 行列乗算 (4x4)
|
||||
#define REG_MTX_MULT_4x3 (REG_BASE + 0x464) // (4x3)
|
||||
#define REG_MTX_MULT_3x3 (REG_BASE + 0x468) // (3x3)
|
||||
#define REG_MTX_SCALE (REG_BASE + 0x46c) // スケール行列乗算(1x3)
|
||||
#define REG_MTX_TRANS (REG_BASE + 0x470) // 移動行列乗算(1x3)
|
||||
|
||||
#define REG_CLIPMTX_RESULT (REG_BASE + 0x640) // カレントクリップ座標行列 読み込み
|
||||
#define REG_VECMTX_RESULT (REG_BASE + 0x680) // カレントベクトル行列 読み込み
|
||||
|
||||
|
||||
#define REG_LIGHT_VECTOR (REG_BASE + 0x4c8) // ライトベクトル
|
||||
#define REG_LIGHT_COLOR (REG_BASE + 0x4cc) // ライトカラー
|
||||
|
||||
#define REG_MATERIAL_COLOR (REG_BASE + 0x4c0) // マテリアルカラー
|
||||
#define REG_DIF_AMB (REG_BASE + 0x4c0) // 拡散光 & 環境光成分
|
||||
#define REG_SPE_EMI (REG_BASE + 0x4c4) // 反射光 & 放射光成分
|
||||
#define REG_SHININESS (REG_BASE + 0x4d0) // 鏡面反射輝度
|
||||
|
||||
|
||||
#define REG_POLYGON_ATTR (REG_BASE + 0x4a4) // ポリゴン属性
|
||||
|
||||
#define REG_TEX_PARAM (REG_BASE + 0x4a8) // テクスチャパラメータ
|
||||
#define REG_TEXIMAGE_PARAM (REG_BASE + 0x4a8)
|
||||
#define REG_TEXPLTT_BASE (REG_BASE + 0x4ac)
|
||||
|
||||
#define REG_BEGIN_VTXS (REG_BASE + 0x500) // 頂点リスト スタート
|
||||
#define REG_END_VTXS (REG_BASE + 0x504) // 頂点リスト エンド
|
||||
|
||||
#define REG_COLOR (REG_BASE + 0x480) // 頂点カラー
|
||||
#define REG_NORMAL (REG_BASE + 0x484) // 頂点法線
|
||||
#define REG_TEXCOORD (REG_BASE + 0x488) // 頂点テクスチャ座標
|
||||
#define REG_VTX_16 (REG_BASE + 0x48c) // 頂点16bit座標
|
||||
#define REG_VTX_10 (REG_BASE + 0x490) // 頂点10bit座標
|
||||
#define REG_VTX_XY (REG_BASE + 0x494) // 頂点16bitXY座標
|
||||
#define REG_VTX_XZ (REG_BASE + 0x498) // 頂点16bitXZ座標
|
||||
#define REG_VTX_YZ (REG_BASE + 0x49c) // 頂点16bitYZ座標
|
||||
#define REG_VTX_DIFF (REG_BASE + 0x4a0) // 頂点16bit座標差分値
|
||||
|
||||
#define REG_BOX_TEST (REG_BASE + 0x5c0) // ボックステスト
|
||||
#define REG_POS_TEST (REG_BASE + 0x5c4) // 位置テスト
|
||||
#define REG_VEC_TEST (REG_BASE + 0x5c8) // ベクトルテスト
|
||||
|
||||
#define REG_POS_RESULT (REG_BASE + 0x620) // 位置テスト結果
|
||||
#define REG_VEC_RESULT (REG_BASE + 0x630) // ベクトルテスト結果
|
||||
|
||||
|
||||
#define REG_CLEAR_COLOR_ATTR (REG_BASE +0x350) // カラー&属性バッファ クリア値
|
||||
#define REG_CLEAR_DEPTH (REG_BASE + 0x354) // Zバッファ クリア値
|
||||
#define REG_CLRIMAGE_OFFSET (REG_BASE + 0x356) // クリアイメージ オフセット
|
||||
|
||||
#define REG_EDGE_COLOR (REG_BASE + 0x330) // エッジカラー
|
||||
|
||||
#define REG_FOG_COLOR (REG_BASE + 0x358) // フォグ カラー
|
||||
#define REG_FOG_OFFSET (REG_BASE + 0x35c) // フォグ オフセット
|
||||
#define REG_FOG_TABLE (REG_BASE + 0x360) // フォグ濃度テーブル
|
||||
|
||||
#define REG_TOON_TABLE (REG_BASE + 0x380) // トゥーンシェーディング・テーブル
|
||||
|
||||
#define REG_ALPHA_TEST_REF (REG_BASE + 0x340) // アルファテスト参照値
|
||||
|
||||
#define REG_DISP_1DOT_DEPTH (REG_BASE + 0x610) // 1ドットポリゴン描画開始Z値
|
||||
|
||||
|
||||
|
||||
#define REG_DMA0 (REG_BASE + 0xb0) // DMA0
|
||||
#define REG_DMA0SAD (REG_BASE + 0xb0)
|
||||
#define REG_DMA0DAD (REG_BASE + 0xb4)
|
||||
#define REG_DMA0CNT (REG_BASE + 0xb8)
|
||||
#define REG_DMA0CNT_L (REG_BASE + 0xb8)
|
||||
#define REG_DMA0CNT_H (REG_BASE + 0xba)
|
||||
#define REG_DMA1 (REG_BASE + 0xbc) // DMA1
|
||||
#define REG_DMA1SAD (REG_BASE + 0xbc)
|
||||
#define REG_DMA1DAD (REG_BASE + 0xc0)
|
||||
#define REG_DMA1CNT (REG_BASE + 0xc4)
|
||||
#define REG_DMA1CNT_L (REG_BASE + 0xc4)
|
||||
#define REG_DMA1CNT_H (REG_BASE + 0xc6)
|
||||
#define REG_DMA2 (REG_BASE + 0xc8) // DMA2
|
||||
#define REG_DMA2SAD (REG_BASE + 0xc8)
|
||||
#define REG_DMA2DAD (REG_BASE + 0xcc)
|
||||
#define REG_DMA2CNT (REG_BASE + 0xd0)
|
||||
#define REG_DMA2CNT_L (REG_BASE + 0xd0)
|
||||
#define REG_DMA2CNT_H (REG_BASE + 0xd2)
|
||||
#define REG_DMA3 (REG_BASE + 0xd4) // DMA3
|
||||
#define REG_DMA3SAD (REG_BASE + 0xd4)
|
||||
#define REG_DMA3DAD (REG_BASE + 0xd8)
|
||||
#define REG_DMA3CNT (REG_BASE + 0xdc)
|
||||
#define REG_DMA3CNT_L (REG_BASE + 0xdc)
|
||||
#define REG_DMA3CNT_H (REG_BASE + 0xde)
|
||||
#define REG_DMA3CNT_L (REG_BASE + 0xdc)
|
||||
#ifdef IRIS_TS
|
||||
#define REG_DMA0_CLR_DATA (REG_BASE + 0xe0) // DMA クリアデータ
|
||||
#define REG_DMA1_CLR_DATA (REG_BASE + 0xe4)
|
||||
#define REG_DMA2_CLR_DATA (REG_BASE + 0xe8)
|
||||
#define REG_DMA3_CLR_DATA (REG_BASE + 0xec)
|
||||
#else
|
||||
#define REG_DMA0_CLR_DATA (DMA_CLEAR_DATA_BUF + 0x0)
|
||||
#define REG_DMA1_CLR_DATA (DMA_CLEAR_DATA_BUF + 0x4)
|
||||
#define REG_DMA2_CLR_DATA (DMA_CLEAR_DATA_BUF + 0x8)
|
||||
#define REG_DMA3_CLR_DATA (DMA_CLEAR_DATA_BUF + 0xc)
|
||||
#endif
|
||||
|
||||
|
||||
#define REG_TM0CNT (REG_BASE + 0x100) // タイマー0
|
||||
#define REG_TM0CNT_L (REG_BASE + 0x100)
|
||||
#define REG_TM0CNT_H (REG_BASE + 0x102)
|
||||
#define REG_TM1CNT (REG_BASE + 0x104) // タイマー1
|
||||
#define REG_TM1CNT_L (REG_BASE + 0x104)
|
||||
#define REG_TM1CNT_H (REG_BASE + 0x106)
|
||||
#define REG_TM2CNT (REG_BASE + 0x108) // タイマー2
|
||||
#define REG_TM2CNT_L (REG_BASE + 0x108)
|
||||
#define REG_TM2CNT_H (REG_BASE + 0x10a)
|
||||
#define REG_TM3CNT (REG_BASE + 0x10c) // タイマー3
|
||||
#define REG_TM3CNT_L (REG_BASE + 0x10c)
|
||||
#define REG_TM3CNT_H (REG_BASE + 0x10e)
|
||||
|
||||
|
||||
#define REG_KEYINPUT (REG_BASE + 0x130) // キー入力
|
||||
#define REG_KEYCNT (REG_BASE + 0x132) // キーコントロール
|
||||
|
||||
#define REG_R0CNT (REG_BASE + 0x134) // 汎用ポート0
|
||||
#define REG_R1CNT (REG_BASE + 0x138) // 1
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// レジスタ・オフセット
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define OFFSET_REG_IME 0x208 // 割り込みマスタイネーブル
|
||||
#define OFFSET_REG_IE 0x210 // 割り込み許可
|
||||
#define OFFSET_REG_IF 0x214 // 割り込み要求
|
||||
|
||||
#define OFFSET_REG_SUBPINTF 0x180 // サブプロセッサインタフェース
|
||||
#define OFFSET_REG_SUBP_FIFO_CNT 0x184 // CPU間FIFOコントロール
|
||||
#define OFFSET_REG_SEND_FIFO 0x188 // 送信FIFO
|
||||
#define OFFSET_REG_RECV_FIFO 0x100000 // 受信FIFO
|
||||
|
||||
#define OFFSET_REG_EXMEMCNT 0x204 // 外部メモリコントロール
|
||||
|
||||
#define OFFSET_REG_POWCNT 0x304 // パワーコントロール
|
||||
|
||||
|
||||
#define OFFSET_REG_DIVCNT 0x280 // 除算器 コントロール
|
||||
#define OFFSET_REG_DIV_NUMER 0x290 // 被除数
|
||||
#define OFFSET_REG_DIV_DENOM 0x298 // 除数
|
||||
#define OFFSET_REG_DIV_RESULT 0x2a0 // 商
|
||||
#define OFFSET_REG_DIVREM_RESULT 0x2a8 // 余り
|
||||
|
||||
#define OFFSET_REG_SQRTCNT 0x2b0 // 平方根演算器 コントロール
|
||||
#define OFFSET_REG_SQRT_RESULT 0x2b4 // 結果
|
||||
#define OFFSET_REG_SQRT_PARAM 0x2b8 // パラメータ
|
||||
|
||||
|
||||
#define OFFSET_REG_DISPCNT 0x0 // 表示コントロール
|
||||
#define OFFSET_REG_DISPCNT_L 0x0
|
||||
#define OFFSET_REG_DISPCNT_H 0x2
|
||||
#define OFFSET_REG_DISP2DCNT 0x0 // 2D表示コントロール
|
||||
#define OFFSET_REG_DISP3DCNT 0x60 // 3D表示コントロール
|
||||
|
||||
#define OFFSET_REG_DISPSTAT 0x4 // 表示ステータス
|
||||
#define OFFSET_REG_VCOUNT 0x6 // Vカウンタ
|
||||
#define OFFSET_REG_GXSTAT 0x600 // ジオメトリエンジンステータス
|
||||
|
||||
|
||||
#define OFFSET_REG_VRAMCNT 0x240 // VRAMコントロール
|
||||
#define OFFSET_REG_WRAMCNT 0x247 // 内部ワークRAMコントロール
|
||||
#define OFFSET_REG_WVRAMCNT 0x244 // VRAM E~G + 内部ワークRAM コントロール
|
||||
#define OFFSET_REG_VRAM_A_CNT 0x240 // VRAM A
|
||||
#define OFFSET_REG_VRAM_B_CNT 0x241 // VRAM B
|
||||
#define OFFSET_REG_VRAM_C_CNT 0x242 // VRAM C
|
||||
#define OFFSET_REG_VRAM_D_CNT 0x243 // VRAM D
|
||||
#define OFFSET_REG_VRAM_E_CNT 0x244 // VRAM E
|
||||
#define OFFSET_REG_VRAM_F_CNT 0x245 // VRAM F
|
||||
#define OFFSET_REG_VRAM_G_CNT 0x246 // VRAM G
|
||||
#define OFFSET_REG_VRAM_H_CNT 0x248 // VRAM H
|
||||
#define OFFSET_REG_VRAM_I_CNT 0x249 // VRAM I
|
||||
#define OFFSET_REG_VRAM_AB_CNT 0x240 // VRAM AB
|
||||
#define OFFSET_REG_VRAM_CD_CNT 0x242 // VRAM CD
|
||||
#define OFFSET_REG_VRAM_EF_CNT 0x244 // VRAM EF
|
||||
#define OFFSET_REG_VRAM_G_W_CNT 0x246 // VRAM G + 内部ワークRAM
|
||||
#define OFFSET_REG_VRAM_ABCD_CNT 0x240 // VRAM A~D
|
||||
#define OFFSET_REG_VRAM_EFG_W_CNT 0x244 // VRAM E~G + 内部ワークRAM
|
||||
#define OFFSET_REG_VRAM_HI_CNT 0x248 // VRAM HI
|
||||
|
||||
|
||||
#define OFFSET_REG_MASTER_BRIGHT 0x6c // マスター輝度 コントロール
|
||||
#define OFFSET_REG_DISPCAPCNT 0x64 // 表示キャプチャ コントロール
|
||||
#define OFFSET_REG_DISP_MMEM_FIFO 0x68 // メインメモリ表示FIFO
|
||||
#define OFFSET_REG_TVOUTCNT 0x70 // テレビ出力コントロール
|
||||
|
||||
|
||||
#define OFFSET_REG_MOSAIC 0x4c // モザイク サイズ
|
||||
|
||||
#define OFFSET_REG_BLDCNT 0x50 // ブレンドモード コントロール
|
||||
#define OFFSET_REG_BLDALPHA 0x52 // 半透明 パラメータ
|
||||
#define OFFSET_REG_BLDY 0x54 // 輝度変更 パラメータ
|
||||
|
||||
#define OFFSET_REG_WINCNT 0x40 // ウインドウ コントロール
|
||||
#define OFFSET_REG_WIN0H 0x40 // ウインドウ0水平領域
|
||||
#define OFFSET_REG_WIN1H 0x42 // ウインドウ1水平領域
|
||||
#define OFFSET_REG_WIN0V 0x44 // ウインドウ0垂直領域
|
||||
#define OFFSET_REG_WIN1V 0x46 // ウインドウ1垂直領域
|
||||
#define OFFSET_REG_WININ 0x48 // ウインドウ内コントロール
|
||||
#define OFFSET_REG_WIN0 0x48 // ウインドウ0コントロール
|
||||
#define OFFSET_REG_WIN1 0x49 // ウインドウ1コントロール
|
||||
#define OFFSET_REG_WIN01 0x48 // ウインドウ0・1コントロール
|
||||
#define OFFSET_REG_WINOUT 0x4a // ウインドウ外コントロール
|
||||
#define OFFSET_REG_OBJWIN 0x4b // OBJウインドウコントロール
|
||||
#define OFFSET_REG_WINOUTOBJ 0x4a // ウインドウ外・OBJウインドウコントロール
|
||||
|
||||
|
||||
#define OFFSET_REG_BGCNT 0x8 // BGコントロール
|
||||
#define OFFSET_REG_BG0CNT 0x8 // BG0コントロール
|
||||
#define OFFSET_REG_BG1CNT 0xa // BG1コントロール
|
||||
#define OFFSET_REG_BG2CNT 0xc // BG2コントロール
|
||||
#define OFFSET_REG_BG3CNT 0xe // BG3コントロール
|
||||
#define OFFSET_REG_BGOFS 0x10 // BGオフセット
|
||||
#define OFFSET_REG_BG0HOFS 0x10 // BG0Hオフセット
|
||||
#define OFFSET_REG_BG0VOFS 0x12 // BG0Vオフセット
|
||||
#define OFFSET_REG_BG1HOFS 0x14 // BG1Hオフセット
|
||||
#define OFFSET_REG_BG1VOFS 0x16 // BG1Vオフセット
|
||||
#define OFFSET_REG_BG2HOFS 0x18 // BG2Hオフセット
|
||||
#define OFFSET_REG_BG2VOFS 0x1a // BG2Vオフセット
|
||||
#define OFFSET_REG_BG3HOFS 0x1c // BG3Hオフセット
|
||||
#define OFFSET_REG_BG3VOFS 0x1e // BG3Vオフセット
|
||||
#define OFFSET_REG_BG2AFFINE 0x20 // BG2アフィン変換パラメータ群
|
||||
#define OFFSET_REG_BG2PA 0x20 // BG2ライン方向X座標差分
|
||||
#define OFFSET_REG_BG2PB 0x22 // BG2 垂直方向X座標差分
|
||||
#define OFFSET_REG_BG2PC 0x24 // BG2ライン方向Y座標差分
|
||||
#define OFFSET_REG_BG2PD 0x26 // BG2 垂直方向Y座標差分
|
||||
#define OFFSET_REG_BG2X 0x28 // BG2スタートX座標
|
||||
#define OFFSET_REG_BG2Y 0x2c // BG2スタートY座標
|
||||
#define OFFSET_REG_BG3AFFINE 0x30 // BG3アフィン変換パラメータ群
|
||||
#define OFFSET_REG_BG3PA 0x30 // BG3ライン方向X座標差分
|
||||
#define OFFSET_REG_BG3PB 0x32 // BG3 垂直方向X座標差分
|
||||
#define OFFSET_REG_BG3PC 0x34 // BG3ライン方向Y座標差分
|
||||
#define OFFSET_REG_BG3PD 0x36 // BG3 垂直方向Y座標差分
|
||||
#define OFFSET_REG_BG3X 0x38 // BG3スタートX座標
|
||||
#define OFFSET_REG_BG3Y 0x3c // BG3スタートY座標
|
||||
|
||||
|
||||
|
||||
#define OFFSET_REG_GXFIFO 0x400 // ジオメトリFIFO
|
||||
|
||||
#define OFFSET_REG_LISTRAM_COUNT 0x604 // ポリゴンリストRAMカウンタ
|
||||
#define OFFSET_REG_VTXRAM_COUNT 0x606 // 頂点RAMカウンタ
|
||||
#define OFFSET_REG_RDLINES_COUNT 0x320 // レンダリング済みライン数カウンタ
|
||||
|
||||
|
||||
#define OFFSET_REG_SWAP_BUFFERS 0x540 // レンダリングエンジン参照データ群のスワップ
|
||||
|
||||
#define OFFSET_REG_VIEWPORT 0x580 // 視界
|
||||
|
||||
#define OFFSET_REG_MTX_MODE 0x440 // 行列モード
|
||||
|
||||
#define OFFSET_REG_MTX_PUSH 0x444 // 行列プッシュ
|
||||
#define OFFSET_REG_MTX_POP 0x448 // 行列ポップ
|
||||
#define OFFSET_REG_MTX_STORE 0x44c // 行列ストア
|
||||
#define OFFSET_REG_MTX_RESTORE 0x450 // 行列リストア
|
||||
|
||||
#define OFFSET_REG_MTX_IDENTITY 0x454 // 単位行列 初期化
|
||||
#define OFFSET_REG_MTX_LOAD_4x4 0x458 // 行列ロード(4x4)
|
||||
#define OFFSET_REG_MTX_LOAD_4x3 0x45c // (4x3)
|
||||
#define OFFSET_REG_MTX_MULT_4x4 0x460 // 行列乗算 (4x4)
|
||||
#define OFFSET_REG_MTX_MULT_4x3 0x464 // (4x3)
|
||||
#define OFFSET_REG_MTX_MULT_3x3 0x468 // (3x3)
|
||||
#define OFFSET_REG_MTX_SCALE 0x46c // スケール行列乗算(1x3)
|
||||
#define OFFSET_REG_MTX_TRANS 0x470 // 移動行列乗算(1x3)
|
||||
|
||||
#define OFFSET_REG_CLIPMTX_RESULT 0x640 // カレントクリップ座標行列 読み込み
|
||||
#define OFFSET_REG_VECMTX_RESULT 0x680 // カレントベクトル行列 読み込み
|
||||
|
||||
|
||||
#define OFFSET_REG_LIGHT_VECTOR 0x4c8 // ライトベクトル
|
||||
#define OFFSET_REG_LIGHT_COLOR 0x4cc // ライトカラー
|
||||
|
||||
#define OFFSET_REG_MATERIAL_COLOR 0x4c0 // マテリアルカラー
|
||||
#define OFFSET_REG_DIF_AMB 0x4c0 // 拡散光 & 環境光成分
|
||||
#define OFFSET_REG_SPE_EMI 0x4c4 // 反射光 & 放射光成分
|
||||
#define OFFSET_REG_SHININESS 0x4d0 // 鏡面反射輝度
|
||||
|
||||
|
||||
#define OFFSET_REG_POLYGON_ATTR 0x4a4 // ポリゴン属性
|
||||
|
||||
#define OFFSET_REG_TEX_PARAM 0x4a8 // テクスチャパラメータ
|
||||
#define OFFSET_REG_TEXIMAGE_PARAM 0x4a8
|
||||
#define OFFSET_REG_TEXPLTT_BASE 0x4ac
|
||||
|
||||
#define OFFSET_REG_BEGIN_VTXS 0x500 // 頂点リスト スタート
|
||||
#define OFFSET_REG_END_VTXS 0x504 // 頂点リスト エンド
|
||||
|
||||
#define OFFSET_REG_COLOR 0x480 // 頂点カラー
|
||||
#define OFFSET_REG_NORMAL 0x484 // 頂点法線
|
||||
#define OFFSET_REG_TEXCOORD 0x488 // 頂点テクスチャ座標
|
||||
#define OFFSET_REG_VTX_16 0x48c // 頂点16bit座標
|
||||
#define OFFSET_REG_VTX_10 0x490 // 頂点10bit座標
|
||||
#define OFFSET_REG_VTX_XY 0x494 // 頂点16bitXY座標
|
||||
#define OFFSET_REG_VTX_XZ 0x498 // 頂点16bitXZ座標
|
||||
#define OFFSET_REG_VTX_YZ 0x49c // 頂点16bitYZ座標
|
||||
#define OFFSET_REG_VTX_DIFF 0x4a0 // 頂点16bit座標差分値
|
||||
|
||||
#define OFFSET_REG_BOX_TEST 0x5c0 // ボックステスト
|
||||
#define OFFSET_REG_POS_TEST 0x5c4 // 位置テスト
|
||||
#define OFFSET_REG_VEC_TEST 0x5c8 // ベクトルテスト
|
||||
|
||||
#define OFFSET_REG_POS_RESULT 0x620 // 位置テスト結果
|
||||
#define OFFSET_REG_VEC_RESULT 0x630 // ベクトルテスト結果
|
||||
|
||||
|
||||
#define OFFSET_REG_CLEAR_COLOR_ATTR 0x350 // カラー&属性バッファ クリア値
|
||||
#define OFFSET_REG_CLEAR_DEPTH 0x354 // Zバッファ クリア値
|
||||
#define OFFSET_REG_CLRIMAGE_OFFSET 0x356 // クリアイメージ オフセット
|
||||
|
||||
#define OFFSET_REG_EDGE_COLOR 0x330 // エッジカラー
|
||||
|
||||
#define OFFSET_REG_FOG_COLOR 0x358 // フォグ カラー
|
||||
#define OFFSET_REG_FOG_OFFSET 0x35c // フォグ オフセット
|
||||
#define OFFSET_REG_FOG_TABLE 0x360 // フォグ濃度テーブル
|
||||
|
||||
#define OFFSET_REG_TOON_TABLE 0x380 // トゥーンシェーディング・テーブル
|
||||
|
||||
#define OFFSET_REG_ALPHA_TEST_REF 0x340 // アルファテスト参照値
|
||||
|
||||
#define OFFSET_REG_DISP_1DOT_DEPTH 0x610 // 1ドットポリゴン描画開始Z値
|
||||
|
||||
|
||||
|
||||
#define OFFSET_REG_DMA0 0xb0 // DMA0
|
||||
#define OFFSET_REG_DMA0SAD 0xb0
|
||||
#define OFFSET_REG_DMA0DAD 0xb4
|
||||
#define OFFSET_REG_DMA0CNT 0xb8
|
||||
#define OFFSET_REG_DMA0CNT_L 0xb8
|
||||
#define OFFSET_REG_DMA0CNT_H 0xba
|
||||
#define OFFSET_REG_DMA1 0xbc // DMA1
|
||||
#define OFFSET_REG_DMA1SAD 0xbc
|
||||
#define OFFSET_REG_DMA1DAD 0xc0
|
||||
#define OFFSET_REG_DMA1CNT 0xc4
|
||||
#define OFFSET_REG_DMA1CNT_L 0xc4
|
||||
#define OFFSET_REG_DMA1CNT_H 0xc6
|
||||
#define OFFSET_REG_DMA2 0xc8 // DMA2
|
||||
#define OFFSET_REG_DMA2SAD 0xc8
|
||||
#define OFFSET_REG_DMA2DAD 0xcc
|
||||
#define OFFSET_REG_DMA2CNT 0xd0
|
||||
#define OFFSET_REG_DMA2CNT_L 0xd0
|
||||
#define OFFSET_REG_DMA2CNT_H 0xd2
|
||||
#define OFFSET_REG_DMA3 0xd4 // DMA3
|
||||
#define OFFSET_REG_DMA3SAD 0xd4
|
||||
#define OFFSET_REG_DMA3DAD 0xd8
|
||||
#define OFFSET_REG_DMA3CNT 0xdc
|
||||
#define OFFSET_REG_DMA3CNT_L 0xdc
|
||||
#ifdef IRIS_TS
|
||||
#define OFFSET_REG_DMA0_CLR_DATA 0xe0 // DMA クリアデータ
|
||||
#define OFFSET_REG_DMA1_CLR_DATA 0xe4
|
||||
#define OFFSET_REG_DMA2_CLR_DATA 0xe8
|
||||
#define OFFSET_REG_DMA3_CLR_DATA 0xec
|
||||
#endif
|
||||
|
||||
|
||||
#define OFFSET_REG_TM0CNT 0x100 // タイマー0
|
||||
#define OFFSET_REG_TM0CNT_L 0x100
|
||||
#define OFFSET_REG_TM0CNT_H 0x102
|
||||
#define OFFSET_REG_TM1CNT 0x104 // タイマー1
|
||||
#define OFFSET_REG_TM1CNT_L 0x104
|
||||
#define OFFSET_REG_TM1CNT_H 0x106
|
||||
#define OFFSET_REG_TM2CNT 0x108 // タイマー2
|
||||
#define OFFSET_REG_TM2CNT_L 0x108
|
||||
#define OFFSET_REG_TM2CNT_H 0x10a
|
||||
#define OFFSET_REG_TM3CNT 0x10c // タイマー3
|
||||
#define OFFSET_REG_TM3CNT_L 0x10c
|
||||
#define OFFSET_REG_TM3CNT_H 0x10e
|
||||
|
||||
|
||||
#define OFFSET_REG_KEYINPUT 0x130 // キー入力
|
||||
#define OFFSET_REG_KEYCNT 0x132 // キーコントロール
|
||||
|
||||
#define OFFSET_REG_R0CNT 0x134 // 汎用ポート0
|
||||
#define OFFSET_REG_R1CNT 0x138 // 1
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_MEMORY_MAP_H
|
||||
704
trunk/IrisMainp/include/IrisMemoryMapArm.s
Normal file
704
trunk/IrisMainp/include/IrisMemoryMapArm.s
Normal file
@ -0,0 +1,704 @@
|
||||
;=======================================================================
|
||||
; IrisMemoryMapArm.s
|
||||
; IRIS メモリマップ定数(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
IF :DEF: _IRIS_MEMORY_MAP_H
|
||||
ELSE
|
||||
_IRIS_MEMORY_MAP_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisTargetArm.s
|
||||
INCLUDE IrisDefineArm.s
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; メモリ・マップ
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
SHARED_WORK * 0x027ff000 ; CPU間共有ワーク領域
|
||||
SHARED_WORK_END * 0x02800000
|
||||
|
||||
IF :DEF: NDEBUG
|
||||
SUBP_PRV * 0x02380000 ; サブプロセッサ専有領域(リリースバージョン)
|
||||
ELSE
|
||||
IF :DEF: MMEM_4M
|
||||
SUBP_PRV * 0x02300000 ; (デバッグバージョン<メインメモリ4M本体>)
|
||||
ELSE
|
||||
SUBP_PRV * 0x02600000 ; (デバッグバージョン<メインメモリ8M本体>)
|
||||
ENDIF
|
||||
ENDIF
|
||||
SUBP_PRV_END * SHARED_WORK
|
||||
|
||||
|
||||
IF :DEF: IRIS_TEG :LOR: :DEF: IRIS_TS
|
||||
ITCM * 0x01ff8000 ; 命令TCM
|
||||
ITCM_END * (ITCM + 0x8000)
|
||||
DTCM * SUBP_PRV ; データTCM(TEGボード以降)
|
||||
ELSE
|
||||
DTCM * 0x8000 ; (ブレッドボード専用)
|
||||
ENDIF
|
||||
DTCM_END * (DTCM + 0x4000)
|
||||
|
||||
INTR_VECTOR_BUF * (DTCM_END - 0x4) ; 割り込み分岐アドレス
|
||||
INTR_CHECK_BUF * (DTCM_END - 0x8) ; 割り込みチェック
|
||||
|
||||
SEND_FIFO_LOCK_BUF * (DTCM_END - 0x10) ; CPU間送信FIFO・ロックバッファ
|
||||
TIMER3_LOCK_BUF * (DTCM_END - 0x12) ; タイマー3・ロックバッファ
|
||||
TIMER2_LOCK_BUF * (DTCM_END - 0x14) ; タイマー2
|
||||
TIMER1_LOCK_BUF * (DTCM_END - 0x16) ; タイマー1
|
||||
TIMER0_LOCK_BUF * (DTCM_END - 0x18) ; タイマー0
|
||||
DMA3_LOCK_BUF * (DTCM_END - 0x1a) ; DMA3・ロックバッファ
|
||||
DMA2_LOCK_BUF * (DTCM_END - 0x1c) ; DMA2
|
||||
DMA1_LOCK_BUF * (DTCM_END - 0x1e) ; DMA1
|
||||
DMA0_LOCK_BUF * (DTCM_END - 0x20) ; DMA0
|
||||
|
||||
|
||||
MAIN_MEM * 0x02000000 ; メインメモリ
|
||||
MAIN_MEM_END * (MAIN_MEM + 0x400000)
|
||||
MAIN_MEM_EX_END * (MAIN_MEM + 0x800000) ;(拡張時の最終アドレス)
|
||||
|
||||
MAIN_MEM_CMD_AREA * (MAIN_MEM_EX_END - 0x2) ; メインメモリコマンド発行エリア(使用禁止エリア)
|
||||
|
||||
SHARED_LOCK_BUF * (MAIN_MEM_EX_END - 0x40) ; 共有リソース・ロックバッファ
|
||||
SHARED_LOCK_BUF_END * (MAIN_MEM_EX_END - 0x10)
|
||||
|
||||
INIT_LOCK_BUF * (MAIN_MEM_EX_END - 0x10) ; 初期化ロックバッファ
|
||||
CARTRIDGE_LOCK_BUF * (MAIN_MEM_EX_END - 0x18) ; カートリッジ・ロックバッファ
|
||||
CARD_LOCK_BUF * (MAIN_MEM_EX_END - 0x20) ; カード・ロックバッファ
|
||||
WRAM_BLOCK1_LOCK_BUF * (MAIN_MEM_EX_END - 0x28) ; CPU内部ワークRAM・ブロック1・ロックバッファ
|
||||
WRAM_BLOCK0_LOCK_BUF * (MAIN_MEM_EX_END - 0x30) ; ブロック0・ロックバッファ
|
||||
VRAM_D_LOCK_BUF * (MAIN_MEM_EX_END - 0x38) ; VRAM-D・ロックバッファ
|
||||
VRAM_C_LOCK_BUF * (MAIN_MEM_EX_END - 0x40) ; C・ロックバッファ
|
||||
|
||||
FROM_SUBP_IF_BUF * (MAIN_MEM_EX_END - 0x50) ; サブ→メインプロセッサ割り込み要求フラグ(2Byte×8)
|
||||
WM_FROM_SUBP_IF_BUF * (MAIN_MEM_EX_END - 0x50) ; ワイヤレスマネージャ予約
|
||||
TO_SUBP_IF_BUF * (MAIN_MEM_EX_END - 0x60) ; メイン→サブプロセッサ割り込み要求フラグ(2Byte×8)
|
||||
WM_TO_SUBP_IF_BUF * (MAIN_MEM_EX_END - 0x60) ; ワイヤレスマネージャ予約
|
||||
|
||||
ROM_HEADER_BUF * (MAIN_MEM_EX_END - 0x200); ROM内登録エリアデータ・バッファ
|
||||
|
||||
DMA_CLEAR_DATA_BUF * (MAIN_MEM_EX_END - 0x210); DMAクリアデータ・バッファ(暫定対応、廃止予定)
|
||||
|
||||
|
||||
CPU_WRAM * 0x037f8000 ; CPU内部ワークRAM
|
||||
CPU_WRAM_END * (CPU_WRAM + 0x8000)
|
||||
CPU_WRAM_BLOCK0 * 0x037f8000 ; ブロック0
|
||||
CPU_WRAM_BLOCK0_END * (CPU_WRAM_BLOCK0 + 0x4000)
|
||||
CPU_WRAM_BLOCK1 * 0x037fc000 ; ブロック1
|
||||
CPU_WRAM_BLOCK1_END * (CPU_WRAM_BLOCK1 + 0x4000)
|
||||
|
||||
|
||||
REG_BASE * 0x04000000 ; レジスタ群
|
||||
PLTT * 0x05000000 ; パレットRAM
|
||||
PLTT_END * (PLTT + 0x400)
|
||||
BG_PLTT * (PLTT + 0x0) ; BGパレットRAM
|
||||
BG_PLTT_END * (PLTT + 0x200)
|
||||
OBJ_PLTT * (PLTT + 0x200) ; OBJパレットRAM
|
||||
OBJ_PLTT_END * (PLTT + 0x400)
|
||||
VRAM * 0x06000000 ; VRAM
|
||||
BG_VRAM * (VRAM + 0x0) ; BGキャラクタ/スクリーンRAM
|
||||
BG_VRAM_END * (VRAM + 0x80000)
|
||||
OBJ_VRAM * (VRAM + 0x400000) ; OBJキャラクタRAM
|
||||
OBJ_VRAM_END * (VRAM + 0x440000)
|
||||
LCDC_VRAM * (VRAM + 0x800000) ; LCDC-VRAM
|
||||
LCDC_VRAM_A * (VRAM + 0x800000)
|
||||
LCDC_VRAM_B * (VRAM + 0x820000)
|
||||
LCDC_VRAM_C * (VRAM + 0x840000)
|
||||
LCDC_VRAM_D * (VRAM + 0x860000)
|
||||
LCDC_VRAM_E * (VRAM + 0x880000)
|
||||
LCDC_VRAM_F * (VRAM + 0x890000)
|
||||
LCDC_VRAM_G * (VRAM + 0x894000)
|
||||
LCDC_VRAM_END * (VRAM + 0x898000)
|
||||
OAM * 0x07000000 ; OAM
|
||||
OAM_END * (OAM + 0x400)
|
||||
|
||||
CARTRIDGE * 0x08000000 ; カートリッジ
|
||||
CTRDG_AD16_BANK0 * 0x08000000 ; カートリッジ AD16バス バンク0
|
||||
CTRDG_AD16_BANK0_END * 0x0a000000
|
||||
CTRDG_AD16_BANK1 * 0x0a000000 ; バンク1
|
||||
CTRDG_AD16_BANK1_END * 0x0c000000
|
||||
CTRDG_AD16_BANK2 * 0x0c000000 ; バンク2
|
||||
CTRDG_AD16_BANK2_END * 0x0e000000
|
||||
CTRDG_DT8 * 0x0e000000 ; カートリッジ 8bitデータバス
|
||||
CTRDG_DT8_END * 0x10000000
|
||||
|
||||
BIOS * 0xffff0000 ; BIOS
|
||||
BIOS_END * (BIOS + 0x8000)
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; メモリ・サイズ
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
SHARED_WORK_SIZE * (SHARED_WORK_END - SHARED_WORK) ; CPU間共有ワーク領域(4KB以上、2のべき乗サイズ)
|
||||
SUBP_PRV_SIZE * (SUBP_PRV_END - SUBP_PRV) ; サブプロセッサ専有領域(32KB以上、2のべき乗サイズ)
|
||||
|
||||
SHARED_LOCK_BUF_SIZE * (SHARED_LOCK_BUF_END - SHARED_LOCK_BUF) ; 共有リソース・ロックバッファ
|
||||
|
||||
|
||||
ITCM_SIZE * 0x8000 ; 命令TCM
|
||||
DTCM_SIZE * 0x4000 ; データTCM
|
||||
ICACHE_SIZE * 0x2000 ; 命令キャッシュ
|
||||
DCACHE_SIZE * 0x1000 ; データキャッシュ
|
||||
|
||||
CACHE_LINE_SIZE * 32 ; キャッシュライン
|
||||
|
||||
MAIN_MEM_SIZE * 0x400000 ; メインメモリ
|
||||
MAIN_MEM_EX_SIZE * 0x800000 ; (拡張時)
|
||||
|
||||
CPU_WRAM_SIZE * 0x8000 ; CPU内部ワークRAM 合計
|
||||
CPU_WRAM_BLOCK0_SIZE * 0x4000 ; ブロック0
|
||||
CPU_WRAM_BLOCK1_SIZE * 0x4000 ; ブロック1
|
||||
|
||||
MROM_PAGE_SIZE * 512 ; マスクROM・ページ
|
||||
|
||||
PLTT_SIZE * (2*256*2) ; パレットRAM
|
||||
BG_PLTT_SIZE * (2*256) ; BGパレットRAM
|
||||
OBJ_PLTT_SIZE * (2*256) ; OBJパレットRAM
|
||||
BG_VRAM_SIZE * 0x80000 ; BG-VRAM
|
||||
OBJ_VRAM_SIZE * 0x40000 ; OBJ-VRAM
|
||||
LCDC_VRAM_SIZE * 0x98000 ; LCDC-VRAM
|
||||
VRAM_A_SIZE * 0x20000 ; VRAM-A
|
||||
VRAM_B_SIZE * 0x20000 ; B
|
||||
VRAM_C_SIZE * 0x20000 ; C
|
||||
VRAM_D_SIZE * 0x20000 ; D
|
||||
VRAM_E_SIZE * 0x10000 ; E
|
||||
VRAM_F_SIZE * 0x4000 ; F
|
||||
VRAM_G_SIZE * 0x4000 ; G
|
||||
OAM_SIZE * (8*128) ; OAM
|
||||
|
||||
CARTRIDGE_SIZE * 0x02000000 ; カートリッジ
|
||||
CTRDG_AD16_BANK_SIZE * 0x02000000 ; カートリッジ AD16バス バンク
|
||||
CTRDG_AD16_BANK0_SIZE * 0x02000000 ; バンク0
|
||||
CTRDG_AD16_BANK1_SIZE * 0x02000000 ; バンク1
|
||||
CTRDG_AD16_BANK2_SIZE * 0x02000000 ; バンク2
|
||||
CTRDG_DT8_SIZE * 0x02000000 ; カートリッジ 8bitデータバス
|
||||
|
||||
BIOS_SIZE * 0x8000 ; BIOS
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; レジスタ・アドレス
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
REG_IME * (REG_BASE + 0x208) ; 割り込みマスタイネーブル
|
||||
REG_IE * (REG_BASE + 0x210) ; 割り込み許可
|
||||
REG_IF * (REG_BASE + 0x214) ; 割り込み要求
|
||||
|
||||
|
||||
REG_SUBPINTF * (REG_BASE + 0x180) ; サブプロセッサインタフェース
|
||||
REG_SUBP_FIFO_CNT * (REG_BASE + 0x184) ; CPU間FIFOコントロール
|
||||
REG_SEND_FIFO * (REG_BASE + 0x188) ; 送信FIFO
|
||||
REG_RECV_FIFO * (REG_BASE + 0x100000) ; 受信FIFO
|
||||
|
||||
REG_EXMEMCNT * (REG_BASE + 0x204) ; 外部メモリコントロール
|
||||
|
||||
REG_POWCNT * (REG_BASE + 0x304) ; パワーコントロール
|
||||
|
||||
|
||||
REG_DIVCNT * (REG_BASE + 0x280) ; 除算器 コントロール
|
||||
REG_DIV_NUMER * (REG_BASE + 0x290) ; 被除数
|
||||
REG_DIV_DENOM * (REG_BASE + 0x298) ; 除数
|
||||
REG_DIV_RESULT * (REG_BASE + 0x2a0) ; 商
|
||||
REG_DIVREM_RESULT * (REG_BASE + 0x2a8) ; 余り
|
||||
|
||||
REG_SQRTCNT * (REG_BASE + 0x2b0) ; 平方根演算器 コントロール
|
||||
REG_SQRT_RESULT * (REG_BASE + 0x2b4) ; 結果
|
||||
REG_SQRT_PARAM * (REG_BASE + 0x2b8) ; パラメータ
|
||||
|
||||
|
||||
REG_DISPCNT * (REG_BASE + 0x0) ; 表示コントロール
|
||||
REG_DISPCNT_L * (REG_BASE + 0x0)
|
||||
REG_DISPCNT_H * (REG_BASE + 0x2)
|
||||
REG_DISP2DCNT * (REG_BASE + 0x0) ; 2D表示コントロール
|
||||
REG_DISP3DCNT * (REG_BASE + 0x60) ; 3D表示コントロール
|
||||
|
||||
REG_DISPSTAT * (REG_BASE + 0x4) ; 表示ステータス
|
||||
REG_VCOUNT * (REG_BASE + 0x6) ; Vカウンタ
|
||||
REG_GXSTAT * (REG_BASE + 0x600) ; ジオメトリエンジンステータス
|
||||
|
||||
|
||||
REG_VRAMCNT * (REG_BASE + 0x240) ; VRAMコントロール
|
||||
REG_WRAMCNT * (REG_BASE + 0x247) ; 内部ワークRAMコントロール
|
||||
REG_WVRAMCNT * (REG_BASE + 0x244) ; VRAM E~G + 内部ワークRAM コントロール
|
||||
REG_VRAM_A_CNT * (REG_BASE + 0x240) ; VRAM A
|
||||
REG_VRAM_B_CNT * (REG_BASE + 0x241) ; VRAM B
|
||||
REG_VRAM_C_CNT * (REG_BASE + 0x242) ; VRAM C
|
||||
REG_VRAM_D_CNT * (REG_BASE + 0x243) ; VRAM D
|
||||
REG_VRAM_E_CNT * (REG_BASE + 0x244) ; VRAM E
|
||||
REG_VRAM_F_CNT * (REG_BASE + 0x245) ; VRAM F
|
||||
REG_VRAM_G_CNT * (REG_BASE + 0x246) ; VRAM G
|
||||
REG_VRAM_H_CNT * (REG_BASE + 0x248) ; VRAM H
|
||||
REG_VRAM_I_CNT * (REG_BASE + 0x249) ; VRAM I
|
||||
REG_VRAM_AB_CNT * (REG_BASE + 0x240) ; VRAM AB
|
||||
REG_VRAM_CD_CNT * (REG_BASE + 0x242) ; VRAM CD
|
||||
REG_VRAM_EF_CNT * (REG_BASE + 0x244) ; VRAM EF
|
||||
REG_VRAM_G_W_CNT * (REG_BASE + 0x246) ; VRAM G + 内部ワークRAM
|
||||
REG_VRAM_ABCD_CNT * (REG_BASE + 0x240) ; VRAM A~D
|
||||
REG_VRAM_EFG_W_CNT * (REG_BASE + 0x244) ; VRAM E~G + 内部ワークRAM
|
||||
REG_VRAM_HI_CNT * (REG_BASE + 0x248) ; VRAM HI
|
||||
|
||||
|
||||
|
||||
REG_MASTER_BRIGHT * (REG_BASE + 0x6c) ; マスター輝度 コントロール
|
||||
REG_DISPCAPCNT * (REG_BASE + 0x64) ; 表示キャプチャ コントロール
|
||||
REG_DISP_MMEM_FIFO * (REG_BASE + 0x68) ; メインメモリ表示FIFO
|
||||
|
||||
|
||||
REG_MOSAIC * (REG_BASE + 0x4c) ; モザイク サイズ
|
||||
|
||||
REG_BLDCNT * (REG_BASE + 0x50) ; ブレンドモード コントロール
|
||||
REG_BLDALPHA * (REG_BASE + 0x52) ; 半透明 パラメータ
|
||||
REG_BLDY * (REG_BASE + 0x54) ; 輝度変更 パラメータ
|
||||
|
||||
REG_WINCNT * (REG_BASE + 0x40) ; ウインドウ コントロール
|
||||
REG_WIN0H * (REG_BASE + 0x40) ; ウインドウ0水平領域
|
||||
REG_WIN1H * (REG_BASE + 0x42) ; ウインドウ1水平領域
|
||||
REG_WIN0V * (REG_BASE + 0x44) ; ウインドウ0垂直領域
|
||||
REG_WIN1V * (REG_BASE + 0x46) ; ウインドウ1垂直領域
|
||||
REG_WININ * (REG_BASE + 0x48) ; ウインドウ内コントロール
|
||||
REG_WIN0 * (REG_BASE + 0x48) ; ウインドウ0コントロール
|
||||
REG_WIN1 * (REG_BASE + 0x49) ; ウインドウ1コントロール
|
||||
REG_WIN01 * (REG_BASE + 0x48) ; ウインドウ0・1コントロール
|
||||
REG_WINOUT * (REG_BASE + 0x4a) ; ウインドウ外コントロール
|
||||
REG_OBJWIN * (REG_BASE + 0x4b) ; OBJウインドウコントロール
|
||||
REG_WINOUTOBJ * (REG_BASE + 0x4a) ; ウインドウ外・OBJウインドウコントロール
|
||||
|
||||
|
||||
REG_BGCNT * (REG_BASE + 0x8) ; BGコントロール
|
||||
REG_BG0CNT * (REG_BASE + 0x8) ; BG0コントロール
|
||||
REG_BG1CNT * (REG_BASE + 0xa) ; BG1コントロール
|
||||
REG_BG2CNT * (REG_BASE + 0xc) ; BG2コントロール
|
||||
REG_BG3CNT * (REG_BASE + 0xe) ; BG3コントロール
|
||||
REG_BGOFS * (REG_BASE + 0x10) ; BGオフセット
|
||||
REG_BG0HOFS * (REG_BASE + 0x10) ; BG0Hオフセット
|
||||
REG_BG0VOFS * (REG_BASE + 0x12) ; BG0Vオフセット
|
||||
REG_BG1HOFS * (REG_BASE + 0x14) ; BG1Hオフセット
|
||||
REG_BG1VOFS * (REG_BASE + 0x16) ; BG1Vオフセット
|
||||
REG_BG2HOFS * (REG_BASE + 0x18) ; BG2Hオフセット
|
||||
REG_BG2VOFS * (REG_BASE + 0x1a) ; BG2Vオフセット
|
||||
REG_BG3HOFS * (REG_BASE + 0x1c) ; BG3Hオフセット
|
||||
REG_BG3VOFS * (REG_BASE + 0x1e) ; BG3Vオフセット
|
||||
REG_BG2AFFINE * (REG_BASE + 0x20) ; BG2アフィン変換パラメータ群
|
||||
REG_BG2PA * (REG_BASE + 0x20) ; BG2ライン方向X座標差分
|
||||
REG_BG2PB * (REG_BASE + 0x22) ; BG2 垂直方向X座標差分
|
||||
REG_BG2PC * (REG_BASE + 0x24) ; BG2ライン方向Y座標差分
|
||||
REG_BG2PD * (REG_BASE + 0x26) ; BG2 垂直方向Y座標差分
|
||||
REG_BG2X * (REG_BASE + 0x28) ; BG2スタートX座標
|
||||
REG_BG2Y * (REG_BASE + 0x2c) ; BG2スタートY座標
|
||||
REG_BG3AFFINE * (REG_BASE + 0x30) ; BG3アフィン変換パラメータ群
|
||||
REG_BG3PA * (REG_BASE + 0x30) ; BG3ライン方向X座標差分
|
||||
REG_BG3PB * (REG_BASE + 0x32) ; BG3 垂直方向X座標差分
|
||||
REG_BG3PC * (REG_BASE + 0x34) ; BG3ライン方向Y座標差分
|
||||
REG_BG3PD * (REG_BASE + 0x36) ; BG3 垂直方向Y座標差分
|
||||
REG_BG3X * (REG_BASE + 0x38) ; BG3スタートX座標
|
||||
REG_BG3Y * (REG_BASE + 0x3c) ; BG3スタートY座標
|
||||
|
||||
|
||||
|
||||
REG_GXFIFO * (REG_BASE + 0x400) ; ジオメトリFIFO
|
||||
|
||||
REG_LISTRAM_COUNT * (REG_BASE + 0x604) ; ポリゴンリストRAMカウンタ
|
||||
REG_VTXRAM_COUNT * (REG_BASE + 0x606) ; 頂点RAMカウンタ
|
||||
REG_RDLINES_COUNT * (REG_BASE + 0x320) ; レンダリング済みライン数カウンタ
|
||||
|
||||
|
||||
REG_SWAP_BUFFERS * (REG_BASE + 0x540) ; レンダリングエンジン参照データ群のスワップ
|
||||
|
||||
REG_VIEWPORT * (REG_BASE + 0x580) ; 視界
|
||||
|
||||
REG_MTX_MODE * (REG_BASE + 0x440) ; 行列モード
|
||||
|
||||
REG_MTX_PUSH * (REG_BASE + 0x444) ; 行列プッシュ
|
||||
REG_MTX_POP * (REG_BASE + 0x448) ; 行列ポップ
|
||||
REG_MTX_STORE * (REG_BASE + 0x44c) ; 行列ストア
|
||||
REG_MTX_RESTORE * (REG_BASE + 0x450) ; 行列リストア
|
||||
|
||||
REG_MTX_IDENTITY * (REG_BASE + 0x454) ; 単位行列 初期化
|
||||
REG_MTX_LOAD_4x4 * (REG_BASE + 0x458) ; 行列ロード(4x4)
|
||||
REG_MTX_LOAD_4x3 * (REG_BASE + 0x45c) ; (4x3)
|
||||
REG_MTX_MULT_4x4 * (REG_BASE + 0x460) ; 行列乗算 (4x4)
|
||||
REG_MTX_MULT_4x3 * (REG_BASE + 0x464) ; (4x3)
|
||||
REG_MTX_MULT_3x3 * (REG_BASE + 0x468) ; (3x3)
|
||||
REG_MTX_SCALE * (REG_BASE + 0x46c) ; スケール行列乗算(1x3)
|
||||
REG_MTX_TRANS * (REG_BASE + 0x470) ; 移動行列乗算(1x3)
|
||||
|
||||
REG_CLIPMTX_RESULT * (REG_BASE + 0x640) ; カレントクリップ座標行列 読み込み
|
||||
REG_VECMTX_RESULT * (REG_BASE + 0x680) ; カレントベクトル行列 読み込み
|
||||
|
||||
|
||||
REG_LIGHT_VECTOR * (REG_BASE + 0x4c8) ; ライトベクトル
|
||||
REG_LIGHT_COLOR * (REG_BASE + 0x4cc) ; ライトカラー
|
||||
|
||||
REG_MATERIAL_COLOR * (REG_BASE + 0x4c0) ; マテリアルカラー
|
||||
REG_DIF_AMB * (REG_BASE + 0x4c0) ; 拡散光 & 環境光成分
|
||||
REG_SPE_EMI * (REG_BASE + 0x4c4) ; 反射光 & 放射光成分
|
||||
REG_SHININESS * (REG_BASE + 0x4d0) ; 鏡面反射輝度
|
||||
|
||||
|
||||
REG_POLYGON_ATTR * (REG_BASE + 0x4a4) ; ポリゴン属性
|
||||
|
||||
REG_TEX_PARAM * (REG_BASE + 0x4a8) ; テクスチャパラメータ
|
||||
REG_TEXIMAGE_PARAM * (REG_BASE + 0x4a8)
|
||||
REG_TEXPLTT_BASE * (REG_BASE + 0x4ac)
|
||||
|
||||
REG_BEGIN_VTXS * (REG_BASE + 0x500) ; 頂点リスト スタート
|
||||
REG_END_VTXS * (REG_BASE + 0x504) ; 頂点リスト エンド
|
||||
|
||||
REG_COLOR * (REG_BASE + 0x480) ; 頂点カラー
|
||||
REG_NORMAL * (REG_BASE + 0x484) ; 頂点法線
|
||||
REG_TEXCOORD * (REG_BASE + 0x488) ; 頂点テクスチャ座標
|
||||
REG_VTX_16 * (REG_BASE + 0x48c) ; 頂点16bit座標
|
||||
REG_VTX_10 * (REG_BASE + 0x490) ; 頂点10bit座標
|
||||
REG_VTX_XY * (REG_BASE + 0x494) ; 頂点16bitXY座標
|
||||
REG_VTX_XZ * (REG_BASE + 0x498) ; 頂点16bitXZ座標
|
||||
REG_VTX_YZ * (REG_BASE + 0x49c) ; 頂点16bitYZ座標
|
||||
REG_VTX_DIFF * (REG_BASE + 0x4a0) ; 頂点16bit座標差分値
|
||||
|
||||
REG_BOX_TEST * (REG_BASE + 0x5c0) ; ボックステスト
|
||||
REG_POS_TEST * (REG_BASE + 0x5c4) ; 位置テスト
|
||||
REG_VEC_TEST * (REG_BASE + 0x5c8) ; ベクトルテスト
|
||||
|
||||
REG_POS_RESULT * (REG_BASE + 0x620) ; 位置テスト結果
|
||||
REG_VEC_RESULT * (REG_BASE + 0x630) ; ベクトルテスト結果
|
||||
|
||||
|
||||
REG_CLEAR_COLOR_ATTR * (REG_BASE + 0x350) ; カラー&属性バッファ クリア値
|
||||
REG_CLEAR_DEPTH * (REG_BASE + 0x354) ; Zバッファ クリア値
|
||||
REG_CLRIMAGE_OFFSET * (REG_BASE + 0x356) ; クリアイメージ オフセット
|
||||
|
||||
REG_EDGE_COLOR * (REG_BASE + 0x330) ; エッジカラー
|
||||
|
||||
REG_FOG_COLOR * (REG_BASE + 0x358) ; フォグ カラー
|
||||
REG_FOG_OFFSET * (REG_BASE + 0x35c) ; フォグ オフセット
|
||||
REG_FOG_TABLE * (REG_BASE + 0x360) ; フォグ濃度テーブル
|
||||
|
||||
REG_TOON_TABLE * (REG_BASE + 0x380) ; トゥーンシェーディング・テーブル
|
||||
|
||||
REG_ALPHA_TEST_REF * (REG_BASE + 0x340) ; アルファテスト参照値
|
||||
|
||||
REG_DISP_1DOT_DEPTH * (REG_BASE + 0x610) ; 1ドットポリゴン描画開始Z値
|
||||
|
||||
|
||||
|
||||
REG_DMA0 * (REG_BASE + 0xb0) ; DMA0
|
||||
REG_DMA0SAD * (REG_BASE + 0xb0)
|
||||
REG_DMA0DAD * (REG_BASE + 0xb4)
|
||||
REG_DMA0CNT * (REG_BASE + 0xb8)
|
||||
REG_DMA0CNT_L * (REG_BASE + 0xb8)
|
||||
REG_DMA0CNT_H * (REG_BASE + 0xba)
|
||||
REG_DMA1 * (REG_BASE + 0xbc) ; DMA1
|
||||
REG_DMA1SAD * (REG_BASE + 0xbc)
|
||||
REG_DMA1DAD * (REG_BASE + 0xc0)
|
||||
REG_DMA1CNT * (REG_BASE + 0xc4)
|
||||
REG_DMA1CNT_L * (REG_BASE + 0xc4)
|
||||
REG_DMA1CNT_H * (REG_BASE + 0xc6)
|
||||
REG_DMA2 * (REG_BASE + 0xc8) ; DMA2
|
||||
REG_DMA2SAD * (REG_BASE + 0xc8)
|
||||
REG_DMA2DAD * (REG_BASE + 0xcc)
|
||||
REG_DMA2CNT * (REG_BASE + 0xd0)
|
||||
REG_DMA2CNT_L * (REG_BASE + 0xd0)
|
||||
REG_DMA2CNT_H * (REG_BASE + 0xd2)
|
||||
REG_DMA3 * (REG_BASE + 0xd4) ; DMA3
|
||||
REG_DMA3SAD * (REG_BASE + 0xd4)
|
||||
REG_DMA3DAD * (REG_BASE + 0xd8)
|
||||
REG_DMA3CNT * (REG_BASE + 0xdc)
|
||||
REG_DMA3CNT_L * (REG_BASE + 0xdc)
|
||||
REG_DMA3CNT_H * (REG_BASE + 0xde)
|
||||
IF :DEF: IRIS_TS
|
||||
REG_DMA0_CLR_DATA * (REG_BASE + 0xe0) ; DMA クリアデータ
|
||||
REG_DMA1_CLR_DATA * (REG_BASE + 0xe4)
|
||||
REG_DMA2_CLR_DATA * (REG_BASE + 0xe8)
|
||||
REG_DMA3_CLR_DATA * (REG_BASE + 0xec)
|
||||
ELSE
|
||||
REG_DMA0_CLR_DATA * (DMA_CLEAR_DATA_BUF + 0x0)
|
||||
REG_DMA1_CLR_DATA * (DMA_CLEAR_DATA_BUF + 0x4)
|
||||
REG_DMA2_CLR_DATA * (DMA_CLEAR_DATA_BUF + 0x8)
|
||||
REG_DMA3_CLR_DATA * (DMA_CLEAR_DATA_BUF + 0xc)
|
||||
ENDIF
|
||||
|
||||
|
||||
REG_TM0CNT * (REG_BASE + 0x100) ; タイマー0
|
||||
REG_TM0CNT_L * (REG_BASE + 0x100)
|
||||
REG_TM0CNT_H * (REG_BASE + 0x102)
|
||||
REG_TM1CNT * (REG_BASE + 0x104) ; タイマー1
|
||||
REG_TM1CNT_L * (REG_BASE + 0x104)
|
||||
REG_TM1CNT_H * (REG_BASE + 0x106)
|
||||
REG_TM2CNT * (REG_BASE + 0x108) ; タイマー2
|
||||
REG_TM2CNT_L * (REG_BASE + 0x108)
|
||||
REG_TM2CNT_H * (REG_BASE + 0x10a)
|
||||
REG_TM3CNT * (REG_BASE + 0x10c) ; タイマー3
|
||||
REG_TM3CNT_L * (REG_BASE + 0x10c)
|
||||
REG_TM3CNT_H * (REG_BASE + 0x10e)
|
||||
|
||||
|
||||
REG_KEYINPUT * (REG_BASE + 0x130) ; キー入力
|
||||
REG_KEYCNT * (REG_BASE + 0x132) ; キーコントロール
|
||||
|
||||
REG_R0CNT * (REG_BASE + 0x134) ; 汎用ポート0
|
||||
REG_R1CNT * (REG_BASE + 0x138) ; 1
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; レジスタ・オフセット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
OFFSET_REG_IME * 0x208 ; 割り込みマスタイネーブル
|
||||
OFFSET_REG_IE * 0x210 ; 割り込み許可
|
||||
OFFSET_REG_IF * 0x214 ; 割り込み要求
|
||||
|
||||
OFFSET_REG_SUBPINTF * 0x180 ; サブプロセッサインタフェース
|
||||
OFFSET_REG_SUBP_FIFO_CNT * 0x184 ; CPU間FIFOコントロール
|
||||
OFFSET_REG_SEND_FIFO * 0x188 ; 送信FIFO
|
||||
OFFSET_REG_RECV_FIFO * 0x100000 ; 受信FIFO
|
||||
|
||||
OFFSET_REG_EXMEMCNT * 0x204 ; 外部メモリコントロール
|
||||
|
||||
OFFSET_REG_POWCNT * 0x304 ; パワーコントロール
|
||||
|
||||
|
||||
OFFSET_REG_DIVCNT * 0x280 ; 除算器 コントロール
|
||||
OFFSET_REG_DIV_NUMER * 0x290 ; 被除数
|
||||
OFFSET_REG_DIV_DENOM * 0x298 ; 除数
|
||||
OFFSET_REG_DIV_RESULT * 0x2a0 ; 商
|
||||
OFFSET_REG_DIVREM_RESULT * 0x2a8 ; 余り
|
||||
|
||||
OFFSET_REG_SQRTCNT * 0x2b0 ; 平方根演算器 コントロール
|
||||
OFFSET_REG_SQRT_RESULT * 0x2b4 ; 結果
|
||||
OFFSET_REG_SQRT_PARAM * 0x2b8 ; パラメータ
|
||||
|
||||
|
||||
OFFSET_REG_DISPCNT * 0x0 ; 表示コントロール
|
||||
OFFSET_REG_DISPCNT_L * 0x0
|
||||
OFFSET_REG_DISPCNT_H * 0x2
|
||||
OFFSET_REG_DISP2DCNT * 0x0 ; 2D表示コントロール
|
||||
OFFSET_REG_DISP3DCNT * 0x60 ; 3D表示コントロール
|
||||
|
||||
OFFSET_REG_DISPSTAT * 0x4 ; 表示ステータス
|
||||
OFFSET_REG_VCOUNT * 0x6 ; Vカウンタ
|
||||
OFFSET_REG_GXSTAT * 0x600 ; ジオメトリエンジンステータス
|
||||
|
||||
|
||||
OFFSET_REG_VRAMCNT * 0x240 ; VRAMコントロール
|
||||
OFFSET_REG_WRAMCNT * 0x247 ; 内部ワークRAMコントロール
|
||||
OFFSET_REG_WVRAMCNT * 0x244 ; VRAM E~G + 内部ワークRAM コントロール
|
||||
OFFSET_REG_VRAM_A_CNT * 0x240 ; VRAM A
|
||||
OFFSET_REG_VRAM_B_CNT * 0x241 ; VRAM B
|
||||
OFFSET_REG_VRAM_C_CNT * 0x242 ; VRAM C
|
||||
OFFSET_REG_VRAM_D_CNT * 0x243 ; VRAM D
|
||||
OFFSET_REG_VRAM_E_CNT * 0x244 ; VRAM E
|
||||
OFFSET_REG_VRAM_F_CNT * 0x245 ; VRAM F
|
||||
OFFSET_REG_VRAM_G_CNT * 0x246 ; VRAM G
|
||||
OFFSET_REG_VRAM_H_CNT * 0x248 ; VRAM H
|
||||
OFFSET_REG_VRAM_I_CNT * 0x249 ; VRAM I
|
||||
OFFSET_REG_VRAM_AB_CNT * 0x240 ; VRAM AB
|
||||
OFFSET_REG_VRAM_CD_CNT * 0x242 ; VRAM CD
|
||||
OFFSET_REG_VRAM_EF_CNT * 0x244 ; VRAM EF
|
||||
OFFSET_REG_VRAM_G_W_CNT * 0x246 ; VRAM G + 内部ワークRAM
|
||||
OFFSET_REG_VRAM_ABCD_CNT * 0x240 ; VRAM A~D
|
||||
OFFSET_REG_VRAM_EFG_W_CNT * 0x244 ; VRAM E~G + 内部ワークRAM
|
||||
OFFSET_REG_VRAM_HI_CNT * 0x248 ; VRAM HI
|
||||
|
||||
|
||||
OFFSET_REG_MASTER_BRIGHT * 0x6c ; マスター輝度 コントロール
|
||||
OFFSET_REG_DISPCAPCNT * 0x64 ; 表示キャプチャ コントロール
|
||||
OFFSET_REG_DISP_MMEM_FIFO * 0x68 ; メインメモリ表示FIFO
|
||||
OFFSET_REG_TVOUTCNT * 0x70 ; テレビ出力コントロール
|
||||
|
||||
|
||||
OFFSET_REG_MOSAIC * 0x4c ; モザイク サイズ
|
||||
|
||||
OFFSET_REG_BLDCNT * 0x50 ; ブレンドモード コントロール
|
||||
OFFSET_REG_BLDALPHA * 0x52 ; 半透明 パラメータ
|
||||
OFFSET_REG_BLDY * 0x54 ; 輝度変更 パラメータ
|
||||
|
||||
OFFSET_REG_WINCNT * 0x40 ; ウインドウ コントロール
|
||||
OFFSET_REG_WIN0H * 0x40 ; ウインドウ0水平領域
|
||||
OFFSET_REG_WIN1H * 0x42 ; ウインドウ1水平領域
|
||||
OFFSET_REG_WIN0V * 0x44 ; ウインドウ0垂直領域
|
||||
OFFSET_REG_WIN1V * 0x46 ; ウインドウ1垂直領域
|
||||
OFFSET_REG_WININ * 0x48 ; ウインドウ内コントロール
|
||||
OFFSET_REG_WIN0 * 0x48 ; ウインドウ0コントロール
|
||||
OFFSET_REG_WIN1 * 0x49 ; ウインドウ1コントロール
|
||||
OFFSET_REG_WIN01 * 0x48 ; ウインドウ0・1コントロール
|
||||
OFFSET_REG_WINOUT * 0x4a ; ウインドウ外コントロール
|
||||
OFFSET_REG_OBJWIN * 0x4b ; OBJウインドウコントロール
|
||||
OFFSET_REG_WINOUTOBJ * 0x4a ; ウインドウ外・OBJウインドウコントロール
|
||||
|
||||
|
||||
OFFSET_REG_BGCNT * 0x8 ; BGコントロール
|
||||
OFFSET_REG_BG0CNT * 0x8 ; BG0コントロール
|
||||
OFFSET_REG_BG1CNT * 0xa ; BG1コントロール
|
||||
OFFSET_REG_BG2CNT * 0xc ; BG2コントロール
|
||||
OFFSET_REG_BG3CNT * 0xe ; BG3コントロール
|
||||
OFFSET_REG_BGOFS * 0x10 ; BGオフセット
|
||||
OFFSET_REG_BG0HOFS * 0x10 ; BG0Hオフセット
|
||||
OFFSET_REG_BG0VOFS * 0x12 ; BG0Vオフセット
|
||||
OFFSET_REG_BG1HOFS * 0x14 ; BG1Hオフセット
|
||||
OFFSET_REG_BG1VOFS * 0x16 ; BG1Vオフセット
|
||||
OFFSET_REG_BG2HOFS * 0x18 ; BG2Hオフセット
|
||||
OFFSET_REG_BG2VOFS * 0x1a ; BG2Vオフセット
|
||||
OFFSET_REG_BG3HOFS * 0x1c ; BG3Hオフセット
|
||||
OFFSET_REG_BG3VOFS * 0x1e ; BG3Vオフセット
|
||||
OFFSET_REG_BG2AFFINE * 0x20 ; BG2アフィン変換パラメータ群
|
||||
OFFSET_REG_BG2PA * 0x20 ; BG2ライン方向X座標差分
|
||||
OFFSET_REG_BG2PB * 0x22 ; BG2 垂直方向X座標差分
|
||||
OFFSET_REG_BG2PC * 0x24 ; BG2ライン方向Y座標差分
|
||||
OFFSET_REG_BG2PD * 0x26 ; BG2 垂直方向Y座標差分
|
||||
OFFSET_REG_BG2X * 0x28 ; BG2スタートX座標
|
||||
OFFSET_REG_BG2Y * 0x2c ; BG2スタートY座標
|
||||
OFFSET_REG_BG3AFFINE * 0x30 ; BG3アフィン変換パラメータ群
|
||||
OFFSET_REG_BG3PA * 0x30 ; BG3ライン方向X座標差分
|
||||
OFFSET_REG_BG3PB * 0x32 ; BG3 垂直方向X座標差分
|
||||
OFFSET_REG_BG3PC * 0x34 ; BG3ライン方向Y座標差分
|
||||
OFFSET_REG_BG3PD * 0x36 ; BG3 垂直方向Y座標差分
|
||||
OFFSET_REG_BG3X * 0x38 ; BG3スタートX座標
|
||||
OFFSET_REG_BG3Y * 0x3c ; BG3スタートY座標
|
||||
|
||||
|
||||
|
||||
OFFSET_REG_GXFIFO * 0x400 ; ジオメトリFIFO
|
||||
|
||||
OFFSET_REG_LISTRAM_COUNT * 0x604 ; ポリゴンリストRAMカウンタ
|
||||
OFFSET_REG_VTXRAM_COUNT * 0x606 ; 頂点RAMカウンタ
|
||||
OFFSET_REG_RDLINES_COUNT * 0x320 ; レンダリング済みライン数カウンタ
|
||||
|
||||
|
||||
OFFSET_REG_SWAP_BUFFERS * 0x540 ; レンダリングエンジン参照データ群のスワップ
|
||||
|
||||
OFFSET_REG_VIEWPORT * 0x580 ; 視界
|
||||
|
||||
OFFSET_REG_MTX_MODE * 0x440 ; 行列モード
|
||||
|
||||
OFFSET_REG_MTX_PUSH * 0x444 ; 行列プッシュ
|
||||
OFFSET_REG_MTX_POP * 0x448 ; 行列ポップ
|
||||
OFFSET_REG_MTX_STORE * 0x44c ; 行列ストア
|
||||
OFFSET_REG_MTX_RESTORE * 0x450 ; 行列リストア
|
||||
|
||||
OFFSET_REG_MTX_IDENTITY * 0x454 ; 単位行列 初期化
|
||||
OFFSET_REG_MTX_LOAD_4x4 * 0x458 ; 行列ロード(4x4)
|
||||
OFFSET_REG_MTX_LOAD_4x3 * 0x45c ; (4x3)
|
||||
OFFSET_REG_MTX_MULT_4x4 * 0x460 ; 行列乗算 (4x4)
|
||||
OFFSET_REG_MTX_MULT_4x3 * 0x464 ; (4x3)
|
||||
OFFSET_REG_MTX_MULT_3x3 * 0x468 ; (3x3)
|
||||
OFFSET_REG_MTX_SCALE * 0x46c ; スケール行列乗算(1x3)
|
||||
OFFSET_REG_MTX_TRANS * 0x470 ; 移動行列乗算(1x3)
|
||||
|
||||
OFFSET_REG_CLIPMTX_RESULT * 0x640 ; カレントクリップ座標行列 読み込み
|
||||
OFFSET_REG_VECMTX_RESULT * 0x680 ; カレントベクトル行列 読み込み
|
||||
|
||||
|
||||
OFFSET_REG_LIGHT_VECTOR * 0x4c8 ; ライトベクトル
|
||||
OFFSET_REG_LIGHT_COLOR * 0x4cc ; ライトカラー
|
||||
|
||||
OFFSET_REG_MATERIAL_COLOR * 0x4c0 ; マテリアルカラー
|
||||
OFFSET_REG_DIF_AMB * 0x4c0 ; 拡散光 & 環境光成分
|
||||
OFFSET_REG_SPE_EMI * 0x4c4 ; 反射光 & 放射光成分
|
||||
OFFSET_REG_SHININESS * 0x4d0 ; 鏡面反射輝度
|
||||
|
||||
|
||||
OFFSET_REG_POLYGON_ATTR * 0x4a4 ; ポリゴン属性
|
||||
|
||||
OFFSET_REG_TEX_PARAM * 0x4a8 ; テクスチャパラメータ
|
||||
OFFSET_REG_TEXIMAGE_PARAM * 0x4a8
|
||||
OFFSET_REG_TEXPLTT_BASE * 0x4ac
|
||||
|
||||
OFFSET_REG_BEGIN_VTXS * 0x500 ; 頂点リスト スタート
|
||||
OFFSET_REG_END_VTXS * 0x504 ; 頂点リスト エンド
|
||||
|
||||
OFFSET_REG_COLOR * 0x480 ; 頂点カラー
|
||||
OFFSET_REG_NORMAL * 0x484 ; 頂点法線
|
||||
OFFSET_REG_TEXCOORD * 0x488 ; 頂点テクスチャ座標
|
||||
OFFSET_REG_VTX_16 * 0x48c ; 頂点16bit座標
|
||||
OFFSET_REG_VTX_10 * 0x490 ; 頂点10bit座標
|
||||
OFFSET_REG_VTX_XY * 0x494 ; 頂点16bitXY座標
|
||||
OFFSET_REG_VTX_XZ * 0x498 ; 頂点16bitXZ座標
|
||||
OFFSET_REG_VTX_YZ * 0x49c ; 頂点16bitYZ座標
|
||||
OFFSET_REG_VTX_DIFF * 0x4a0 ; 頂点16bit座標差分値
|
||||
|
||||
OFFSET_REG_BOX_TEST * 0x5c0 ; ボックステスト
|
||||
OFFSET_REG_POS_TEST * 0x5c4 ; 位置テスト
|
||||
OFFSET_REG_VEC_TEST * 0x5c8 ; ベクトルテスト
|
||||
|
||||
OFFSET_REG_POS_RESULT * 0x620 ; 位置テスト結果
|
||||
OFFSET_REG_VEC_RESULT * 0x630 ; ベクトルテスト結果
|
||||
|
||||
|
||||
OFFSET_REG_CLEAR_COLOR_ATTR * 0x350 ; カラー&属性バッファ クリア値
|
||||
OFFSET_REG_CLEAR_DEPTH * 0x354 ; Zバッファ クリア値
|
||||
OFFSET_REG_CLRIMAGE_OFFSET * 0x356 ; クリアイメージ オフセット
|
||||
|
||||
OFFSET_REG_EDGE_COLOR * 0x330 ; エッジカラー
|
||||
|
||||
OFFSET_REG_FOG_COLOR * 0x358 ; フォグ カラー
|
||||
OFFSET_REG_FOG_OFFSET * 0x35c ; フォグ オフセット
|
||||
OFFSET_REG_FOG_TABLE * 0x360 ; フォグ濃度テーブル
|
||||
|
||||
OFFSET_REG_TOON_TABLE * 0x380 ; トゥーンシェーディング・テーブル
|
||||
|
||||
OFFSET_REG_ALPHA_TEST_REF * 0x340 ; アルファテスト参照値
|
||||
|
||||
OFFSET_REG_DISP_1DOT_DEPTH * 0x610 ; 1ドットポリゴン描画開始Z値
|
||||
|
||||
|
||||
|
||||
OFFSET_REG_DMA0 * 0xb0 ; DMA0
|
||||
OFFSET_REG_DMA0SAD * 0xb0
|
||||
OFFSET_REG_DMA0DAD * 0xb4
|
||||
OFFSET_REG_DMA0CNT * 0xb8
|
||||
OFFSET_REG_DMA0CNT_L * 0xb8
|
||||
OFFSET_REG_DMA0CNT_H * 0xba
|
||||
OFFSET_REG_DMA1 * 0xbc ; DMA1
|
||||
OFFSET_REG_DMA1SAD * 0xbc
|
||||
OFFSET_REG_DMA1DAD * 0xc0
|
||||
OFFSET_REG_DMA1CNT * 0xc4
|
||||
OFFSET_REG_DMA1CNT_L * 0xc4
|
||||
OFFSET_REG_DMA1CNT_H * 0xc6
|
||||
OFFSET_REG_DMA2 * 0xc8 ; DMA2
|
||||
OFFSET_REG_DMA2SAD * 0xc8
|
||||
OFFSET_REG_DMA2DAD * 0xcc
|
||||
OFFSET_REG_DMA2CNT * 0xd0
|
||||
OFFSET_REG_DMA2CNT_L * 0xd0
|
||||
OFFSET_REG_DMA2CNT_H * 0xd2
|
||||
OFFSET_REG_DMA3 * 0xd4 ; DMA3
|
||||
OFFSET_REG_DMA3SAD * 0xd4
|
||||
OFFSET_REG_DMA3DAD * 0xd8
|
||||
OFFSET_REG_DMA3CNT * 0xdc
|
||||
OFFSET_REG_DMA3CNT_L * 0xdc
|
||||
OFFSET_REG_DMA3CNT_H * 0xde
|
||||
IF :DEF: IRIS_TS
|
||||
OFFSET_REG_DMA0_CLR_DATA * 0xe0 ; DMA クリアデータ
|
||||
OFFSET_REG_DMA1_CLR_DATA * 0xe4
|
||||
OFFSET_REG_DMA2_CLR_DATA * 0xe8
|
||||
OFFSET_REG_DMA3_CLR_DATA * 0xec
|
||||
ENDIF
|
||||
|
||||
|
||||
OFFSET_REG_TM0CNT * 0x100 ; タイマー0
|
||||
OFFSET_REG_TM0CNT_L * 0x100
|
||||
OFFSET_REG_TM0CNT_H * 0x102
|
||||
OFFSET_REG_TM1CNT * 0x104 ; タイマー1
|
||||
OFFSET_REG_TM1CNT_L * 0x104
|
||||
OFFSET_REG_TM1CNT_H * 0x106
|
||||
OFFSET_REG_TM2CNT * 0x108 ; タイマー2
|
||||
OFFSET_REG_TM2CNT_L * 0x108
|
||||
OFFSET_REG_TM2CNT_H * 0x10a
|
||||
OFFSET_REG_TM3CNT * 0x10c ; タイマー3
|
||||
OFFSET_REG_TM3CNT_L * 0x10c
|
||||
OFFSET_REG_TM3CNT_H * 0x10e
|
||||
|
||||
|
||||
OFFSET_REG_KEYINPUT * 0x130 ; キー入力
|
||||
OFFSET_REG_KEYCNT * 0x132 ; キーコントロール
|
||||
|
||||
OFFSET_REG_R0CNT * 0x134 ; 汎用ポート0
|
||||
OFFSET_REG_R1CNT * 0x138 ; 1
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_MEMORY_MAP_H
|
||||
|
||||
END
|
||||
|
||||
1221
trunk/IrisMainp/include/IrisOS.h
Normal file
1221
trunk/IrisMainp/include/IrisOS.h
Normal file
File diff suppressed because it is too large
Load Diff
478
trunk/IrisMainp/include/IrisOS_Arm.s
Normal file
478
trunk/IrisMainp/include/IrisOS_Arm.s
Normal file
@ -0,0 +1,478 @@
|
||||
;=====================================================================
|
||||
; IrisOS_Arm.s
|
||||
; OSライブラリ(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2003-2004 NINTENDO Co.,Ltd.
|
||||
;=====================================================================
|
||||
IF :DEF: _IRIS_OS_H
|
||||
ELSE
|
||||
_IRIS_OS_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisTargetArm.s
|
||||
INCLUDE IrisDefineArm.s
|
||||
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; ロック変数
|
||||
;=======================================================================
|
||||
|
||||
; ロックID
|
||||
|
||||
OS_UNLOCK_ID * 0 ; ロック変数がロックされていない場合のID
|
||||
OS_MAINP_LOCKED_FLAG * 0x40 ; メインプロセッサによるロック確認フラグ
|
||||
OS_MAINP_LOCK_ID_START * 0x40 ; メインプロセッサ用ロックIDの割り当て開始番号
|
||||
OS_MAINP_LOCK_ID_END * 0x6f ; 割り当て終了番号
|
||||
OS_MAINP_DBG_LOCK_ID * 0x70 ; デバッガ予約番号
|
||||
OS_MAINP_SYSTEM_LOCK_ID * 0x7f ; システム予約番号
|
||||
OS_SUBP_LOCKED_FLAG * 0x80 ; サブプロセッサによるロック確認フラグ
|
||||
OS_SUBP_LOCK_ID_START * 0x80 ; サブプロセッサ用ロックIDの割り当て開始番号
|
||||
OS_SUBP_LOCK_ID_END * 0xaf ; 割り当て終了番号
|
||||
OS_SUBP_DBG_LOCK_ID * 0xb0 ; デバッガ予約番号
|
||||
OS_SUBP_SYSTEM_LOCK_ID * 0xbf ; システム予約番号
|
||||
|
||||
OS_LOCK_SUCCESS * 0 ; ロック成功
|
||||
OS_LOCK_ERROR * -1 ; ロックエラー
|
||||
|
||||
OS_UNLOCK_SUCCESS * 0 ; ロック解除成功
|
||||
OS_UNLOCK_ERROR * -2 ; ロック解除エラー
|
||||
|
||||
OS_LOCK_FREE * 0 ; ロック解除中
|
||||
|
||||
OS_LOCK_ID_ERROR * -3 ; ロックIDエラー
|
||||
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロック関数の初期化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_InitLock
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロックIDの獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_GetLockID
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; スピンロック(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_LockWord
|
||||
EXTERN OS_LockByte
|
||||
|
||||
EXTERN OS_LockCard
|
||||
EXTERN OS_LockCartridge
|
||||
EXTERN OS_LockWramBlock0
|
||||
EXTERN OS_LockWramBlock1
|
||||
EXTERN OS_LockVramC
|
||||
EXTERN OS_LockVramD
|
||||
|
||||
EXTERN OS_LockSendFifo
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロックの解除(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_UnLockWord
|
||||
EXTERN OS_UnLockByte
|
||||
|
||||
EXTERN OS_UnLockCard
|
||||
EXTERN OS_UnLockCartridge
|
||||
EXTERN OS_UnLockWramBlock0
|
||||
EXTERN OS_UnLockWramBlock1
|
||||
EXTERN OS_UnLockVramC
|
||||
EXTERN OS_UnLockVramD
|
||||
|
||||
EXTERN OS_UnLockSendFifo
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロックの試行(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_TryLockWord
|
||||
EXTERN OS_TryLockByte
|
||||
|
||||
EXTERN OS_TryLockCard
|
||||
EXTERN OS_TryLockCartridge
|
||||
EXTERN OS_TryLockWramBlock0
|
||||
EXTERN OS_TryLockWramBlock1
|
||||
EXTERN OS_TryLockVramC
|
||||
EXTERN OS_TryLockVramD
|
||||
|
||||
EXTERN OS_TryLockSendFifo
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロックフラグの読み込み(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_ReadLockWord
|
||||
EXTERN OS_ReadLockByte
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロック変数の所有モジュールIDの読み込み(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_ReadOwnerOfLockWord
|
||||
EXTERN OS_ReadOwnerOfLockByte
|
||||
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ホールト
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
IF :DEF: IRIS_BB
|
||||
ELSE
|
||||
|
||||
EXTERN OS_Halt
|
||||
|
||||
ENDIF ; IRIS_BB
|
||||
|
||||
|
||||
|
||||
IF :DEF: IRIS_BB
|
||||
ELSE
|
||||
|
||||
;=======================================================================
|
||||
; プログラムステータスレジスタ
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プログラムステータスレジスタ セット(r0=パラメータ)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_SetCpsr
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; カレント・プログラムステータスレジスタ値 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_GetCpsr
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; IRQ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_EnableCpsrIRQ
|
||||
EXTERN OS_DisableCpsrIRQ
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; FIQ&IRQ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_EnableCpsrFIQ_IRQ
|
||||
EXTERN OS_DisableCpsrFIQ_IRQ
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; 例外ベクタ
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 例外ベクタを上位/下位アドレスへ移動
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_UpperExceptionVector
|
||||
EXTERN OS_LowerExceptionVector
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; プロテクションユニット
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションユニット イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_EnableProtectUnit
|
||||
EXTERN OS_DisableProtectUnit
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; 命令キャッシュ
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令キャッシュ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_EnableICache
|
||||
EXTERN OS_DisableICache
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令キャッシュ 無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_InvalidateICache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令キャッシュラインのアドレスによる無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_InvalidateICacheAddr
|
||||
EXTERN OS_InvalidateICacheAddrs
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令キャッシュラインのアドレスによるプリフェッチ
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_PrefetchICacheAddr
|
||||
EXTERN OS_PrefetchICacheAddrs
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令キャッシュ ロックダウン
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_LockdownICache
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; データキャッシュ
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_EnableDCache
|
||||
EXTERN OS_DisableDCache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュ 無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_InvalidateDCache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュラインのアドレスによる無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_InvalidateDCacheAddr
|
||||
EXTERN OS_InvalidateDCacheAddrs
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュ クリーン
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_CleanDCache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュラインのアドレスによるクリーン
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_CleanDCacheAddr
|
||||
EXTERN OS_CleanDCacheAddrs
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュラインのインデックスによるクリーン
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_CleanDCacheIndex
|
||||
EXTERN OS_CleanDCacheIndices
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュ クリーン&無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_Clean2InvalidateDCache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュラインのアドレスによるクリーン&無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_Clean2InvalidateDCacheAddr
|
||||
EXTERN OS_Clean2InvalidateDCacheAddrs
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュラインのインデックスによるクリーン&無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_Clean2InvalidateDCacheIndex
|
||||
EXTERN OS_Clean2InvalidateDCacheIndices
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュラインのアドレスによるプリロード
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_PreloadDCacheAddr
|
||||
EXTERN OS_PreloadDCacheAddrs
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュ ロックダウン
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_LockdownDCache
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; ライトバッファ
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ライトバッファ エンプティ待ち
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_WaitWriteBufferEmpty
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; 命令TCM
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令TCM イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_EnableITCM
|
||||
EXTERN OS_DisableITCM
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令TCMパラメータ セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_SetParamITCM
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令TCMパラメータ 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_GetParamITCM
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; データTCM
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データTCM イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_EnableICache
|
||||
EXTERN OS_EnableICache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データTCMパラメータ セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_SetParamDTCM
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データTCMパラメータ 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_GetParamDTCM
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; プロテクションリージョン
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎の命令キャッシュ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_EnableICache4PR
|
||||
EXTERN OS_DisableICache4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎のデータキャッシュ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_EnableDCache4PR
|
||||
EXTERN OS_DisableDCache4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎のライトバッファ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_EnableWriteBuffer4PR
|
||||
EXTERN OS_DisableWriteBuffer4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎の命令キャッシュ イネーブルフラグ獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_GetICacheEnableFlags4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎のデータキャッシュ イネーブルフラグ獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_GetDCacheEnableFlags4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎のライトバッファ・イネーブルフラグ 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_GetWriteBufferEnableFlags4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎の命令アクセス制限 セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_SetIPermissions4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎のデータアクセス制限 セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_SetDPermissions4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎の命令アクセス制限 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_GetIPermissions4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎のデータアクセス制限 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_GetDPermissions4PR
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 各プロテクションリージョンのパラメータ セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_SetProtectRegion0
|
||||
EXTERN OS_SetProtectRegion1
|
||||
EXTERN OS_SetProtectRegion2
|
||||
EXTERN OS_SetProtectRegion3
|
||||
EXTERN OS_SetProtectRegion4
|
||||
EXTERN OS_SetProtectRegion5
|
||||
EXTERN OS_SetProtectRegion6
|
||||
EXTERN OS_SetProtectRegion7
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 各プロテクションリージョンのパラメータ 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_GetProtectRegion0
|
||||
EXTERN OS_GetProtectRegion1
|
||||
EXTERN OS_GetProtectRegion2
|
||||
EXTERN OS_GetProtectRegion3
|
||||
EXTERN OS_GetProtectRegion4
|
||||
EXTERN OS_GetProtectRegion5
|
||||
EXTERN OS_GetProtectRegion6
|
||||
EXTERN OS_GetProtectRegion7
|
||||
|
||||
|
||||
ENDIF ; IRIS_BB
|
||||
|
||||
|
||||
ENDIF ; _IRIS_OS_H
|
||||
|
||||
|
||||
|
||||
END
|
||||
|
||||
477
trunk/IrisMainp/include/IrisOS_Mw.s
Normal file
477
trunk/IrisMainp/include/IrisOS_Mw.s
Normal file
@ -0,0 +1,477 @@
|
||||
;=====================================================================
|
||||
; IrisOS_Mw.s
|
||||
; OSライブラリ(MWASMARM用)
|
||||
;
|
||||
; Copyright (C) 2003-2004 NINTENDO Co.,Ltd.
|
||||
;=====================================================================
|
||||
#ifndef _IRIS_OS_H
|
||||
#define _IRIS_OS_H
|
||||
|
||||
|
||||
.INCLUDE IrisTarget.h
|
||||
.INCLUDE IrisDefine.h
|
||||
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; ロック変数
|
||||
;=======================================================================
|
||||
|
||||
// ロックID
|
||||
|
||||
#define OS_UNLOCK_ID 0 // ロック変数がロックされていない場合のID
|
||||
#define OS_MAINP_LOCKED_FLAG 0x40 // メインプロセッサによるロック確認フラグ
|
||||
#define OS_MAINP_LOCK_ID_START 0x40 // メインプロセッサ用ロックIDの割り当て開始番号
|
||||
#define OS_MAINP_LOCK_ID_END 0x6f // 割り当て終了番号
|
||||
#define OS_MAINP_DBG_LOCK_ID 0x70 // デバッガ予約番号
|
||||
#define OS_MAINP_SYSTEM_LOCK_ID 0x7f // システム予約番号
|
||||
#define OS_SUBP_LOCKED_FLAG 0x80 // サブプロセッサによるロック確認フラグ
|
||||
#define OS_SUBP_LOCK_ID_START 0x80 // サブプロセッサ用ロックIDの割り当て開始番号
|
||||
#define OS_SUBP_LOCK_ID_END 0xaf // 割り当て終了番号
|
||||
#define OS_SUBP_DBG_LOCK_ID 0xb0 // デバッガ予約番号
|
||||
#define OS_SUBP_SYSTEM_LOCK_ID 0xbf // システム予約番号
|
||||
|
||||
#define OS_LOCK_SUCCESS 0 // ロック成功
|
||||
#define OS_LOCK_ERROR -1 // ロックエラー
|
||||
|
||||
#define OS_UNLOCK_SUCCESS 0 // ロック解除成功
|
||||
#define OS_UNLOCK_ERROR -2 // ロック解除エラー
|
||||
|
||||
#define OS_LOCK_FREE 0 // ロック解除中
|
||||
|
||||
#define OS_LOCK_ID_ERROR -3 // ロックIDエラー
|
||||
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロック関数の初期化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_InitLock
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロックIDの獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_GetLockID
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; スピンロック(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_LockWord
|
||||
.EXTERN OS_LockByte
|
||||
|
||||
.EXTERN OS_LockCard
|
||||
.EXTERN OS_LockCartridge
|
||||
.EXTERN OS_LockWramBlock0
|
||||
.EXTERN OS_LockWramBlock1
|
||||
.EXTERN OS_LockVramC
|
||||
.EXTERN OS_LockVramD
|
||||
|
||||
.EXTERN OS_LockSendFifo
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロックの解除(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_UnLockWord
|
||||
.EXTERN OS_UnLockByte
|
||||
|
||||
.EXTERN OS_UnLockCard
|
||||
.EXTERN OS_UnLockCartridge
|
||||
.EXTERN OS_UnLockWramBlock0
|
||||
.EXTERN OS_UnLockWramBlock1
|
||||
.EXTERN OS_UnLockVramC
|
||||
.EXTERN OS_UnLockVramD
|
||||
|
||||
.EXTERN OS_UnLockSendFifo
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロックの試行(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_TryLockWord
|
||||
.EXTERN OS_TryLockByte
|
||||
|
||||
.EXTERN OS_TryLockCard
|
||||
.EXTERN OS_TryLockCartridge
|
||||
.EXTERN OS_TryLockWramBlock0
|
||||
.EXTERN OS_TryLockWramBlock1
|
||||
.EXTERN OS_TryLockVramC
|
||||
.EXTERN OS_TryLockVramD
|
||||
|
||||
.EXTERN OS_TryLockSendFifo
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロックフラグの読み込み(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_ReadLockWord
|
||||
.EXTERN OS_ReadLockByte
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロック変数の所有モジュールIDの読み込み(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_ReadOwnerOfLockWord
|
||||
.EXTERN OS_ReadOwnerOfLockByte
|
||||
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ホールト
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
#ifdef IRIS_BB
|
||||
#else
|
||||
|
||||
.EXTERN OS_Halt
|
||||
|
||||
#endif // IRIS_BB
|
||||
|
||||
|
||||
|
||||
#ifdef IRIS_BB
|
||||
#else
|
||||
|
||||
;=======================================================================
|
||||
; プログラムステータスレジスタ
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プログラムステータスレジスタ セット(r0=パラメータ)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_SetCpsr
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; カレント・プログラムステータスレジスタ値 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_GetCpsr
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; IRQ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_EnableCpsrIRQ
|
||||
.EXTERN OS_DisableCpsrIRQ
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; FIQ&IRQ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_EnableCpsrFIQ_IRQ
|
||||
.EXTERN OS_DisableCpsrFIQ_IRQ
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; 例外ベクタ
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 例外ベクタを上位/下位アドレスへ移動
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_UpperExceptionVector
|
||||
.EXTERN OS_LowerExceptionVector
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; プロテクションユニット
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションユニット イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_EnableProtectUnit
|
||||
.EXTERN OS_DisableProtectUnit
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; 命令キャッシュ
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令キャッシュ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_EnableICache
|
||||
.EXTERN OS_DisableICache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令キャッシュ 無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_InvalidateICache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令キャッシュラインのアドレスによる無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_InvalidateICacheAddr
|
||||
.EXTERN OS_InvalidateICacheAddrs
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令キャッシュラインのアドレスによるプリフェッチ
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_PrefetchICacheAddr
|
||||
.EXTERN OS_PrefetchICacheAddrs
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令キャッシュ ロックダウン
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_LockdownICache
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; データキャッシュ
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_EnableDCache
|
||||
.EXTERN OS_DisableDCache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュ 無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_InvalidateDCache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュラインのアドレスによる無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_InvalidateDCacheAddr
|
||||
.EXTERN OS_InvalidateDCacheAddrs
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュ クリーン
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_CleanDCache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュラインのアドレスによるクリーン
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_CleanDCacheAddr
|
||||
.EXTERN OS_CleanDCacheAddrs
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュラインのインデックスによるクリーン
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_CleanDCacheIndex
|
||||
.EXTERN OS_CleanDCacheIndices
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュ クリーン&無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_Clean2InvalidateDCache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュラインのアドレスによるクリーン&無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_Clean2InvalidateDCacheAddr
|
||||
.EXTERN OS_Clean2InvalidateDCacheAddrs
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュラインのインデックスによるクリーン&無効化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_Clean2InvalidateDCacheIndex
|
||||
.EXTERN OS_Clean2InvalidateDCacheIndices
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュラインのアドレスによるプリロード
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_PreloadDCacheAddr
|
||||
.EXTERN OS_PreloadDCacheAddrs
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データキャッシュ ロックダウン
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_LockdownDCache
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; ライトバッファ
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ライトバッファ エンプティ待ち
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_WaitWriteBufferEmpty
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; 命令TCM
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令TCM イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_EnableITCM
|
||||
.EXTERN OS_DisableITCM
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令TCMパラメータ セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_SetParamITCM
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 命令TCMパラメータ 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_GetParamITCM
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; データTCM
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データTCM イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_EnableICache
|
||||
.EXTERN OS_EnableICache
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データTCMはイネーブルか?
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_IsEnableDTCM
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データTCMパラメータ セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_SetParamDTCM
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データTCMパラメータ 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_GetParamDTCM
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; プロテクションリージョン
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎の命令キャッシュ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_EnableICache4PR
|
||||
.EXTERN OS_DisableICache4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎のデータキャッシュ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_EnableDCache4PR
|
||||
.EXTERN OS_DisableDCache4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎のライトバッファ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_EnableWriteBuffer4PR
|
||||
.EXTERN OS_DisableWriteBuffer4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎の命令キャッシュ イネーブルフラグ獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_GetICacheEnableFlags4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎のデータキャッシュ イネーブルフラグ獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_GetDCacheEnableFlags4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎のライトバッファ・イネーブルフラグ 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_GetWriteBufferEnableFlags4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎の命令アクセス制限 セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_SetIPermissions4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎のデータアクセス制限 セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_SetDPermissions4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎の命令アクセス制限 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_GetIPermissions4PR
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プロテクションリージョン毎のデータアクセス制限 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_GetDPermissions4PR
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 各プロテクションリージョンのパラメータ セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_SetProtectRegion0
|
||||
.EXTERN OS_SetProtectRegion1
|
||||
.EXTERN OS_SetProtectRegion2
|
||||
.EXTERN OS_SetProtectRegion3
|
||||
.EXTERN OS_SetProtectRegion4
|
||||
.EXTERN OS_SetProtectRegion5
|
||||
.EXTERN OS_SetProtectRegion6
|
||||
.EXTERN OS_SetProtectRegion7
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 各プロテクションリージョンのパラメータ 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN OS_GetProtectRegion0
|
||||
.EXTERN OS_GetProtectRegion1
|
||||
.EXTERN OS_GetProtectRegion2
|
||||
.EXTERN OS_GetProtectRegion3
|
||||
.EXTERN OS_GetProtectRegion4
|
||||
.EXTERN OS_GetProtectRegion5
|
||||
.EXTERN OS_GetProtectRegion6
|
||||
.EXTERN OS_GetProtectRegion7
|
||||
|
||||
|
||||
#endif // IRIS_BB
|
||||
|
||||
|
||||
#endif // _IRIS_OS_H
|
||||
199
trunk/IrisMainp/include/IrisQUAT.h
Normal file
199
trunk/IrisMainp/include/IrisQUAT.h
Normal file
@ -0,0 +1,199 @@
|
||||
//======================================================================
|
||||
// IrisQUAT.h
|
||||
// クォータニオンライブラリ
|
||||
//
|
||||
// Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_QUAT_H
|
||||
#define _IRIS_QUAT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisTarget.h>
|
||||
#include <IrisTypes.h>
|
||||
#include <IrisSinTable.h>
|
||||
|
||||
|
||||
#define QM_S_SFT 14 // クォータニオンから行列への変換の精度調整定数
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 軸ベクトルと回転角からクォータニオンへの変換
|
||||
//
|
||||
//・軸ベクトルと回転角から求めたクォータニオンをdstpが指すクォータニオンへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// axisp 回転軸ベクトルのポインタ
|
||||
// theta 回転角度[256|1024|4096段階]
|
||||
// dstp クォータニオン格納バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define VEC_Conv2Quat(axisp, theta, dstp) VEC_Conv2QuatPriv(SIN_NDIV_DEFAULT, axisp, theta, dstp)
|
||||
|
||||
void VEC_Conv2Quat256(const Vec *axisp, u32 theta, Quat *dstp);
|
||||
void VEC_Conv2Quat1024(const Vec *axisp, u32 theta, Quat *dstp);
|
||||
void VEC_Conv2Quat4096(const Vec *axisp, u32 theta, Quat *dstp);
|
||||
|
||||
// 中間マクロ(下記のマクロは直接使用しないで下さい)
|
||||
|
||||
#define VEC_Conv2QuatPriv(ndiv, axisp, theta, dstp) VEC_Conv2QuatNDiv(ndiv, axisp, theta, dstp)
|
||||
#define VEC_Conv2QuatNDiv(ndiv, axisp, theta, dstp) VEC_Conv2Quat##ndiv( axisp, theta, dstp)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// クォータニオンの内積
|
||||
//
|
||||
//・2つのクォータニオンの内積を求めます。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1クォータニオンのポインタ
|
||||
// b 第2クォータニオンのポインタ
|
||||
//
|
||||
//・戻り値:内積
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 QUAT_DotProduct(const Quat *a, const Quat *b);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// クォータニオンの正規化
|
||||
//
|
||||
//・srcpが指すクォータニオンを正規化してdstpが指すクォータニオンへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// srcp 未正規化クォータニオンのポインタ
|
||||
// dstp 正規化クォータニオン格納バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※平方根演算器と除算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void QUAT_Normalize(Quat *srcp, Quat *dstp);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// クォータニオンの逆数(逆回転)
|
||||
//
|
||||
//・srcpが指すクォータニオンの逆数を求め、dstpが指すクォータニオンへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// srcp 元のクォータニオンのポインタ
|
||||
// dstp 逆クォータニオン格納バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※除算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void QUAT_Inverse(Quat *srcp, Quat *dstp);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// クォータニオンの乗算
|
||||
//
|
||||
//・2つのクォータニオンを乗算してaxbが指すクォータニオンへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1クォータニオンのポインタ
|
||||
// b 第2クォータニオンのポインタ
|
||||
// axb 乗算クォータニオン格納バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void QUAT_Multiply(Quat *a, Quat *b, Quat *axb);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// クォータニオンの加算
|
||||
//
|
||||
//・2つのクォータニオンを加算した結果をa_bが指すクォータニオンへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1クォータニオンのポインタ
|
||||
// b 第2クォータニオンのポインタ
|
||||
// a_b 加算後のクォータニオン格納バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void QUAT_Add(Quat *a, Quat *b, Quat *a_b);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// クォータニオンの減算
|
||||
//
|
||||
//・srcpが指すクォータニオンをスケーリングした結果をdstpが指すクォータニオンへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1クォータニオンのポインタ
|
||||
// b 第2クォータニオンのポインタ
|
||||
// a_b 減算後のクォータニオン格納バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void QUAT_Sub(Quat *a, Quat *b, Quat *a_b);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// クォータニオンのスケーリング
|
||||
//
|
||||
//・2つのクォータニオンをスケーリングした結果をa_bが指すクォータニオンへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// srcp スケーリング前のクォータニオンのポインタ
|
||||
// dstp スケーリング後のクォータニオン格納バッファのポインタ
|
||||
// scale スケーリングパラメータ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void QUAT_Scale(Quat *srcp, Quat *dstp, s32 scale);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// クォータニオンの線形補間
|
||||
//
|
||||
//・2つのクォータニオンを線形補間した結果をdが指すクォータニオンへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1クォータニオンのポインタ
|
||||
// b 第2クォータニオンのポインタ
|
||||
// d 補間クォータニオン格納バッファのポインタ
|
||||
// t 補間パラメータ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void QUAT_Lerp( Quat *p, Quat *q, Quat *d, s32 t);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// クォータニオンの球面線形補間
|
||||
//
|
||||
//・2つのクォータニオンを球面線形補間した結果をdが指すクォータニオンへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1クォータニオンのポインタ
|
||||
// b 第2クォータニオンのポインタ
|
||||
// d 補間クォータニオン格納バッファのポインタ
|
||||
// t 補間パラメータ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※除算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void QUAT_Slerp(Quat *p, Quat *q, Quat *d, s32 t);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_QUAT_H
|
||||
128
trunk/IrisMainp/include/IrisSinTable.h
Normal file
128
trunk/IrisMainp/include/IrisSinTable.h
Normal file
@ -0,0 +1,128 @@
|
||||
//======================================================================
|
||||
// IrisSinTable.h
|
||||
// Sinテーブル関連
|
||||
//
|
||||
// Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SIN_TABLE_H
|
||||
#define _IRIS_SIN_TABLE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisTarget.h>
|
||||
#include <IrisTypes.h>
|
||||
#include <IrisDefine.h>
|
||||
|
||||
|
||||
|
||||
#define SIN_NDIV_DEFAULT 256 // デフォルトSinテーブルの分割数
|
||||
|
||||
#define SINCOS256TBL_ON_TCM // TCM上に配置するのに適した256段階のSinCosテーブルを選択
|
||||
#define SINCOS1024TBL_ON_TCM // TCM上に配置するのに適した1024段階のSinCosテーブルを選択
|
||||
#define SINCOS4096TBL_ON_TCM // TCM上に配置するのに適した4096段階のSinCosテーブルを選択
|
||||
|
||||
|
||||
// デフォルトSinテーブル(シフト調整有り)
|
||||
|
||||
#define SinTbl(theta) TrigonTblPriv(Sin, SIN_NDIV_DEFAULT, theta)
|
||||
#define CosTbl(theta) TrigonTblPriv(Cos, SIN_NDIV_DEFAULT, theta)
|
||||
|
||||
|
||||
// 回転角精度別Sinテーブル(シフト調整有り)
|
||||
|
||||
#ifdef SINCOS256TBL_ON_TCM
|
||||
#define Sin256Tbl(theta) (sin256_tbl[ ((u16 )((theta) )) >>8])
|
||||
#define Cos256Tbl(theta) (sin256_tbl[ ((u16 )((theta)+0x10000/4)) >>8])
|
||||
#else
|
||||
#define Sin256Tbl(theta) (sincos256_tbl[ (((u16 )((theta) )) >>8) * 2 ])
|
||||
#define Cos256Tbl(theta) (sincos256_tbl[ (((u16 )((theta) )) >>8) * 2 + 1])
|
||||
#endif
|
||||
|
||||
#ifdef SINCOS1024TBL_ON_TCM
|
||||
#define Sin1024Tbl(theta) (sin1024_tbl[ ((u16 )((theta) )) >>6])
|
||||
#define Cos1024Tbl(theta) (sin1024_tbl[ ((u16 )((theta)+0x10000/4)) >>6])
|
||||
#else
|
||||
#define Sin1024Tbl(theta) (sincos1024_tbl[(((u16 )((theta) )) >>6) * 2 ])
|
||||
#define Cos1024Tbl(theta) (sincos1024_tbl[(((u16 )((theta) )) >>6) * 2 + 1])
|
||||
#endif
|
||||
|
||||
#ifdef SINCOS4096TBL_ON_TCM
|
||||
#define Sin4096Tbl(theta) (sin4096_tbl[ ((u16 )((theta) )) >>4])
|
||||
#define Cos4096Tbl(theta) (sin4096_tbl[ ((u16 )((theta)+0x10000/4)) >>4])
|
||||
#else
|
||||
#define Sin4096Tbl(theta) (sincos4096_tbl[(((u16 )((theta) )) >>4) * 2 ])
|
||||
#define Cos4096Tbl(theta) (sincos4096_tbl[(((u16 )((theta) )) >>4) * 2 + 1])
|
||||
#endif
|
||||
|
||||
|
||||
// デフォルトSinテーブル(シフト調整無し)
|
||||
|
||||
#define SinTblImm(theta) TrigonTblImmPriv(Sin, SIN_NDIV_DEFAULT, theta)
|
||||
#define CosTblImm(theta) TrigonTblImmPriv(Cos, SIN_NDIV_DEFAULT, theta)
|
||||
|
||||
|
||||
// 回転角精度別Sinテーブル(シフト調整無し)
|
||||
|
||||
#ifdef SINCOS256TBL_ON_TCM
|
||||
#define Sin256TblImm(theta) (sin256_tbl[ (u8 )((theta) )])
|
||||
#define Cos256TblImm(theta) (sin256_tbl[ (u8 )((theta)+0x100/4 )])
|
||||
#else
|
||||
#define Sin256TblImm(theta) (sincos256_tbl[ (u8 )((theta) ) * 2 ])
|
||||
#define Cos256TblImm(theta) (sincos256_tbl[ (u8 )((theta) ) * 2 + 1])
|
||||
#endif
|
||||
|
||||
#ifdef SINCOS1024TBL_ON_TCM
|
||||
#define Sin1024TblImm(theta) (sin1024_tbl[ (u16 )((theta) )])
|
||||
#define Cos1024TblImm(theta) (sin1024_tbl[ (u16 )((theta)+0x400/4 )])
|
||||
#else
|
||||
#define Sin1024TblImm(theta) (sincos1024_tbl[(u16 )(theta) )) * 2 ])
|
||||
#define Cos1024TblImm(theta) (sincos1024_tbl[(u16 )(theta) )) * 2 + 1])
|
||||
#endif
|
||||
|
||||
#ifdef SINCOS4096TBL_ON_TCM
|
||||
#define Sin4096TblImm(theta) (sin4096_tbl[ (u16 )((theta) )])
|
||||
#define Cos4096TblImm(theta) (sin4096_tbl[ (u16 )((theta)+0x1000/4)])
|
||||
#else
|
||||
#define Sin4096TblImm(theta) (sincos4096_tbl[(u16 )((theta) ) * 2 ])
|
||||
#define Cos4096TblImm(theta) (sincos4096_tbl[(u16 )((theta) ) * 2 + 1])
|
||||
#endif
|
||||
|
||||
|
||||
// ArcCosテーブル
|
||||
|
||||
#define ArcCosTbl(cos) ((cos) >= V_ONE ? 0 \
|
||||
: arcCos256_tbl[-(cos) >= V_ONE ? 0 \
|
||||
: ((cos)>>(V_SFT - 8)) + 0])
|
||||
|
||||
|
||||
// 中間マクロ(下記のマクロは直接使用しないで下さい)
|
||||
|
||||
#define TrigonTblPriv( trigon, ndiv, theta) TrigonNDivTbl( trigon, ndiv, theta)
|
||||
#define TrigonNDivTbl( trigon, ndiv, theta) trigon##ndiv##Tbl( theta)
|
||||
|
||||
#define TrigonTblImmPriv(trigon, ndiv, theta) TrigonNDivTblImm(trigon, ndiv, theta)
|
||||
#define TrigonNDivTblImm(trigon, ndiv, theta) trigon##ndiv##TblImm( theta)
|
||||
|
||||
extern const s16 sin256_tbl[];
|
||||
extern const s16 sin1024_tbl[];
|
||||
extern const s16 sin4096_tbl[];
|
||||
extern const s16 sincos256_tbl[];
|
||||
extern const s16 sincos1024_tbl[];
|
||||
extern const s16 sincos4096_tbl[];
|
||||
|
||||
extern const u16 arcCos256_tbl[];
|
||||
|
||||
#define ArcTanTbl(tan) (arcTan256_tbl[((tan)>>(9-7)) + 128])
|
||||
|
||||
extern const s16 arcTan256_tbl[];
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_SIN_TABLE_H
|
||||
235
trunk/IrisMainp/include/IrisSystemCall.h
Normal file
235
trunk/IrisMainp/include/IrisSystemCall.h
Normal file
@ -0,0 +1,235 @@
|
||||
//======================================================================
|
||||
// IrisSystemCall.h
|
||||
// IRIS システムコール
|
||||
//
|
||||
// Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SYSTEM_CALL_H
|
||||
#define _IRIS_SYSTEM_CALL_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <IrisTarget.h>
|
||||
#include <IrisTypes.h>
|
||||
#include <IrisSystemCallDefine.h>
|
||||
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#ifndef CODE32
|
||||
#define SystemCall(No) asm { SWI No }
|
||||
#else
|
||||
#define SystemCall(No) asm { SWI No << 16 }
|
||||
#endif
|
||||
#elif defined( __GNUC__ )
|
||||
#ifndef CODE32
|
||||
#define SystemCall(No) asm ("SWI "#No)
|
||||
#else
|
||||
#define SystemCall(No) asm ("SWI "#No" << 16")
|
||||
#endif
|
||||
#elif defined( __CC_ARM )
|
||||
#ifndef CODE32
|
||||
#define SystemCall(No) __asm { SWI No }
|
||||
#else
|
||||
#define SystemCall(No) __asm { SWI No << 16 }
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カード読み込み
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#if defined(IRIS_TS)
|
||||
#define SVC_ReadCard(dmaNo, srcp, destp, size) _SVC_ReadCard(dmaNo, (void *)(srcp), (void *)(destp), size)
|
||||
|
||||
void _SVC_ReadCard(s32 dmaNo, void *srcp, void *destp, s32 size);
|
||||
|
||||
#elif defined(IRIS_TEG)
|
||||
#define SVC_ReadCard(dmaNo, srcp, destp, size) _SVC_TEG_ReadCard(dmaNo, (void *)(srcp), (void *)(destp), size)
|
||||
|
||||
void _SVC_TEG_ReadCard(s32 dmaNo, void *srcp, void *destp, s32 size);
|
||||
|
||||
#else
|
||||
#define SVC_ReadCard(dmaNo, srcp, destp, size) ((void) 0)
|
||||
#endif
|
||||
|
||||
//・カードからデータを読み込みます。
|
||||
//・カード上のアドレスは512Byte境界、本体側のアドレスは4Byte境界へ
|
||||
// 合わせる必要があります。
|
||||
//
|
||||
//・引数:
|
||||
// s32 dmaNo DMA番号(0~3 以外の値が渡された時はCPUで読み込みます)
|
||||
// (TEGボードでは無視され、常にCPUにて転送されます)
|
||||
// void *srcp カード上のソースアドレス
|
||||
// void *destp 本体側のデスティネーションアドレス
|
||||
// s32 size 転送サイズ
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 割り込みウェイト
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void SVC_WaitIntr(u32 clearEnable, u32 intrFlags);
|
||||
|
||||
//・IntrFlagsで指定した割り込みが発生するまでHalt状態で待ち続けます。
|
||||
//・割り込み処理にてINTR_CHECK_BUF (DTCM_END - 0x8) へ該当するフラグをセットして下さい。
|
||||
//・複数の割り込みを併用した時、OS_Halt()が繰り返し呼び出される場合と比べて
|
||||
// システムコール呼び出しのオーバーヘッドを軽減することができます。
|
||||
//
|
||||
//・引数:
|
||||
// u32 clearEnable 既に該当フラグがセットされている場合にクリアするかどうかの指定
|
||||
// u32 intrFlags ウェイトする割り込みの指定(IrisSystemCallDefine.h参照)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Vブランク割り込みウェイト
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void SVC_WaitVBlankIntr(void);
|
||||
|
||||
//・Vブランク割り込みが発生するまでHalt状態で待ち続けます。
|
||||
//・割り込み処理にてINTR_CHECK_BUF (DTCM_END - 0x8) へ該当するフラグをセットして下さい。
|
||||
//・複数の割り込みを併用した時、OS_Halt()が繰り返し呼び出される場合と比べて
|
||||
// システムコール呼び出しのオーバーヘッドを軽減することができます。
|
||||
//・SVC_WaitIntr(1, V_BLANK_INTR_FLAG)と等価です。
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPUセット
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void SVC_CpuSet(const void *srcp, void *destp, u32 dmaCntData);
|
||||
|
||||
//・DmaSetマクロ互換のパラメータでRAMクリアまたはコピーします。
|
||||
//・32bit転送では強制的に4Byte境界にてアクセスされますが、
|
||||
// 16bit転送では引数を2Byte境界へ合わせて渡す必要があります。
|
||||
//
|
||||
//・引数:
|
||||
// void *srcp ソースアドレス
|
||||
// void *destp デスティネーションアドレス
|
||||
// u32 dmaCntData DMA_SRC_FIX/DMA_32BIT_BUS/DMA_COUNT_MASKのみ有効
|
||||
// DMA_SRC_FIX( 0, 1) = (ソースアドレス・インクリメント, ソースアドレス固定)
|
||||
// DMA_32BIT_BUS(0, 1) = (16bit転送, 32bit転送)
|
||||
// DMA_COUNT_MASK & dmaCntData = 転送回数
|
||||
//
|
||||
//・上位マクロ:
|
||||
// SVC_CpuClear, SVC_CpuClearArray, SVC_CpuCopy, SVC_CpuCopyArray
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU高速セット
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void SVC_CpuSetFast(const void *srcp, void *destp, u32 dmaCntData);
|
||||
|
||||
//・DmaSetマクロ互換のパラメータで高速にRAMクリアまたはコピーします。
|
||||
//・オーバーフローしない範囲では32Byte単位の複数ロード/ストア命令が使用されます。
|
||||
//・4Byte境界以外で引数を与えても強制的に4Byte境界にてアクセスされます。
|
||||
//
|
||||
//・引数:
|
||||
// void *srcp ソースアドレス
|
||||
// void *destp デスティネーションアドレス
|
||||
// u32 dmaCntData DMA_SRC_FIX/DMA_COUNT_MASKのみ有効
|
||||
// DMA_SRC_FIX(0, 1) = (ソースアドレス・インクリメント, ソースアドレス固定)
|
||||
// DMA_COUNT_MASK & dmaCntData = 転送回数
|
||||
//
|
||||
//・上位マクロ:
|
||||
// SVC_CpuClearFast, SVC_CpuClearArrayFast, SVC_CpuCopyFast, SVC_CpuCopyArrayFast
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU クリア
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SVC_CpuClear(data, destp, size, bit) \
|
||||
{ \
|
||||
vu##bit tmp = (vu##bit )(data); \
|
||||
SVC_CpuSet((u8 *)&(tmp), (u8 *)(destp), ( \
|
||||
DMA_SRC_FIX | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8) & 0x1fffff))); \
|
||||
}
|
||||
|
||||
#define SVC_CpuClearArray(data, destp, bit) \
|
||||
SVC_CpuClear( data, destp, sizeof(destp), bit)
|
||||
|
||||
//・CPUでRAMクリアするシステムコールを呼び出します。
|
||||
//・クリアデータはスタックに置かれ、それをデスティネーションへコピーします。
|
||||
//・SVC_CpuClearArrayはデスティネーション配列全体をクリアします。
|
||||
//
|
||||
//・引数:
|
||||
// data クリアデータ
|
||||
// destp デスティネーションアドレス
|
||||
// size クリアバイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SVC_CpuCopy(srcp, destp, size, bit) \
|
||||
\
|
||||
SVC_CpuSet((u8 *)(srcp), (u8 *)(destp), ( \
|
||||
DMA_SRC_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8) & 0x1fffff)))
|
||||
|
||||
#define SVC_CpuCopyArray(srcp, destp, bit) \
|
||||
SVC_CpuCopy( srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
//・CPUでコピーするシステムコールを呼び出します。
|
||||
//・SVC_CpuCopyArrayはソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送バイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 高速クリア
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SVC_CpuClearFast(data, destp, size) \
|
||||
{ \
|
||||
vu32 tmp = (vu32 )(data); \
|
||||
SVC_CpuSetFast((u8 *)&(tmp), (u8 *)(destp), ( \
|
||||
DMA_SRC_FIX | ((size)/(32/8) & 0x1fffff))); \
|
||||
}
|
||||
|
||||
#define SVC_CpuClearArrayFast(data, destp) \
|
||||
SVC_CpuClearFast( data, destp, sizeof(destp))
|
||||
|
||||
//・CPUで高速にRAMクリアするシステムコールを呼び出します。
|
||||
//・クリアデータはスタックに置かれ、それをデスティネーションへコピーします。
|
||||
//・オーバーフローしない範囲では32Byte単位の複数ストア命令が使用されます。
|
||||
//・SVC_CpuClearArrayFastはデスティネーション配列全体をクリアします。
|
||||
//
|
||||
//・引数:
|
||||
// data クリアデータ
|
||||
// destp デスティネーションアドレス
|
||||
// size クリアバイト数
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 高速コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SVC_CpuCopyFast(srcp, destp, size) \
|
||||
\
|
||||
SVC_CpuSetFast((u8 *)(srcp), (u8 *)(destp), ( \
|
||||
DMA_SRC_INC | ((size)/(32/8) & 0x1fffff)))
|
||||
|
||||
#define SVC_CpuCopyArrayFast(srcp, destp) \
|
||||
SVC_CpuCopyFast( srcp, destp, sizeof(srcp))
|
||||
|
||||
//・CPUで高速にコピーするシステムコールを呼び出します。
|
||||
//・オーバーフローしない範囲では32Byte単位の複数ロード/ストア命令が使用されます。
|
||||
//・SVC_CpuCopyArrayFastはソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送バイト数
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_SYSTEM_CALL_H
|
||||
51
trunk/IrisMainp/include/IrisSystemCallArm.s
Normal file
51
trunk/IrisMainp/include/IrisSystemCallArm.s
Normal file
@ -0,0 +1,51 @@
|
||||
;=======================================================================
|
||||
; IrisSystemCallArm.s
|
||||
; IRIS システムコール(ARMASM用)
|
||||
;
|
||||
; 各システムコールの仕様は IrisSystemCall.h
|
||||
; を参照して下さい。
|
||||
;
|
||||
; Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
IF :DEF: _IRIS_SYSTEM_CALL_H
|
||||
ELSE
|
||||
_IRIS_SYSTEM_CALL_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisTargetArm.s
|
||||
INCLUDE IrisSystemCallDefineArm.s
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 割り込みウェイト
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN SVC_WaitIntr
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; Vブランク割り込みウェイト
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN SVC_WaitVBlankIntr
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPUセット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN SVC_CpuSet
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU高速セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN SVC_CpuSetFast
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_SYSTEM_CALL_H
|
||||
|
||||
END
|
||||
|
||||
31
trunk/IrisMainp/include/IrisSystemCallDefine.h
Normal file
31
trunk/IrisMainp/include/IrisSystemCallDefine.h
Normal file
@ -0,0 +1,31 @@
|
||||
//======================================================================
|
||||
// IrisSystemCallDefine.h
|
||||
// IRIS システムコール用定数
|
||||
//
|
||||
// Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SYSTEM_CALL_DEFINE_H
|
||||
#define _IRIS_SYSTEM_CALL_DEFINE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisTarget.h>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// システムコールNo
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SWI_NO_WAIT_INTR 4 // SVC_WaitIntr()
|
||||
#define SWI_NO_WAIT_VBLANK_INTR 5 // SVC_WaitVBlankIntr()
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_SYSTEM_CALL_DEFINE_H
|
||||
30
trunk/IrisMainp/include/IrisSystemCallDefineArm.s
Normal file
30
trunk/IrisMainp/include/IrisSystemCallDefineArm.s
Normal file
@ -0,0 +1,30 @@
|
||||
;=======================================================================
|
||||
; IrisSystemCallDefineArm.s
|
||||
; IRIS システムコール用定数(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
IF :DEF: _IRIS_SYSTEM_CALL_DEFINE_H
|
||||
ELSE
|
||||
_IRIS_SYSTEM_CALL_DEFINE_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisTargetArm.s
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; システムコールNo
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
SWI_NO_WAIT_INTR * 4 ; SVC_WaitIntr()
|
||||
SWI_NO_WAIT_VBLANK_INTR * 5 ; SVC_WaitVBlankIntr()
|
||||
|
||||
SWI_NO_CPU_SET * 11 ; SVC_CpuSet()
|
||||
SWI_NO_CPU_SET_FAST * 12 ; SVC_CpuSetFast()
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_SYSTEM_CALL_DEFINE_H
|
||||
|
||||
END
|
||||
|
||||
47
trunk/IrisMainp/include/IrisSystemCallMw.s
Normal file
47
trunk/IrisMainp/include/IrisSystemCallMw.s
Normal file
@ -0,0 +1,47 @@
|
||||
;=======================================================================
|
||||
; IrisSystemCallMw.s
|
||||
; IRIS システムコール(MWASMARM用)
|
||||
;
|
||||
; 各システムコールの仕様は IrisSystemCall.h
|
||||
; を参照して下さい。
|
||||
;
|
||||
; Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
#ifndef _IRIS_SYSTEM_CALL_H
|
||||
#define _IRIS_SYSTEM_CALL_H
|
||||
|
||||
|
||||
.INCLUDE IrisTarget.h
|
||||
.INCLUDE IrisSystemCallDefine.h
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 割り込みウェイト
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN SVC_WaitIntr
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; Vブランク割り込みウェイト
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN SVC_WaitVBlankIntr
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPUセット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN SVC_CpuSet
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU高速セット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN SVC_CpuSetFast
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_SYSTEM_CALL_H
|
||||
38
trunk/IrisMainp/include/IrisTarget.h
Normal file
38
trunk/IrisMainp/include/IrisTarget.h
Normal file
@ -0,0 +1,38 @@
|
||||
//======================================================================
|
||||
// IrisTarget.h
|
||||
// IRISターゲット選択
|
||||
//
|
||||
// Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_TARGET_H
|
||||
#define _IRIS_TARGET_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
//#define IRIS_BB // ブレッドボード専用定義への切り換え
|
||||
//#define IRIS_TEG // TEGボード専用定義への切り換え
|
||||
#define IRIS_TS // TS専用定義への切り換え
|
||||
|
||||
#define MMEM_4M // メインメモリ4M本体用定義への切り換え
|
||||
|
||||
#ifdef NDEBUG
|
||||
#else
|
||||
//#define ENABLE_DBGLIB // デバッグライブラリを使用します
|
||||
#endif
|
||||
|
||||
//#define NSYNC_SUBP // サブプロセッサと同期を取らない場合
|
||||
|
||||
#ifdef IRIS_BB
|
||||
#else
|
||||
#define EXCEPT_VEC_TO_ITCM // 例外ベクタを命令TCM上へ移動する場合
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_TARGET_H
|
||||
39
trunk/IrisMainp/include/IrisTargetArm.s
Normal file
39
trunk/IrisMainp/include/IrisTargetArm.s
Normal file
@ -0,0 +1,39 @@
|
||||
;=======================================================================
|
||||
; IrisTargetArm.s
|
||||
; IRISターゲット選択(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
IF :DEF: _IRIS_TARGET_H
|
||||
ELSE
|
||||
_IRIS_TARGET_H * 1
|
||||
|
||||
|
||||
; IRIS_BB * 1 ; ブレッドボード専用定義への切り換え
|
||||
IRIS_TEG * 1 ; TEGボード専用定義への切り換え
|
||||
; IRIS_TS * 1 ; TS専用定義への切り換え
|
||||
|
||||
MMEM_4M * 1 ; メインメモリ4M本体用定義への切り換え
|
||||
|
||||
IF :DEF: NDEBUG
|
||||
ELSE
|
||||
|
||||
; ENABLE_DBGLIB ; デバッグライブラリを使用します
|
||||
|
||||
ENDIF
|
||||
|
||||
; NSYNC_SUBP * 1 ; サブプロセッサと同期を取らない場合
|
||||
|
||||
|
||||
IF :DEF: IRIS_BB
|
||||
ELSE
|
||||
|
||||
EXCEPT_VEC_TO_ITCM * 1 ; 例外ベクタを命令TCM上へ移動する場合
|
||||
|
||||
ENDIF
|
||||
|
||||
|
||||
ENDIF ; _IRIS_TARGET_H
|
||||
|
||||
END
|
||||
|
||||
851
trunk/IrisMainp/include/IrisTypes.h
Normal file
851
trunk/IrisMainp/include/IrisTypes.h
Normal file
@ -0,0 +1,851 @@
|
||||
//======================================================================
|
||||
// IrisTypes.h
|
||||
// IRIS 標準型宣言
|
||||
//
|
||||
// Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_TYPES_H
|
||||
#define _IRIS_TYPES_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisTarget.h>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データタイプ再定義
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
typedef unsigned char u8;
|
||||
typedef unsigned short int u16;
|
||||
typedef unsigned int u32;
|
||||
typedef unsigned long long int u64;
|
||||
|
||||
typedef signed char s8;
|
||||
typedef signed short int s16;
|
||||
typedef signed int s32;
|
||||
typedef signed long long int s64;
|
||||
|
||||
typedef float f32;
|
||||
typedef double f64;
|
||||
|
||||
|
||||
#define vl volatile
|
||||
|
||||
typedef vl u8 vu8;
|
||||
typedef vl u16 vu16;
|
||||
typedef vl u32 vu32;
|
||||
typedef vl u64 vu64;
|
||||
|
||||
typedef vl s8 vs8;
|
||||
typedef vl s16 vs16;
|
||||
typedef vl s32 vs32;
|
||||
typedef vl s64 vs64;
|
||||
|
||||
typedef vl f32 vf32;
|
||||
typedef vl f64 vf64;
|
||||
|
||||
|
||||
|
||||
// ディスプレイリスト
|
||||
typedef u32 Gxl;
|
||||
typedef vl Gxl vGxl;
|
||||
|
||||
|
||||
// ライトベクトル
|
||||
typedef struct {
|
||||
s32 x:10;
|
||||
s32 y:10;
|
||||
s32 z:10;
|
||||
u32 no:2;
|
||||
} LightVector;
|
||||
typedef vl LightVector vLightVector;
|
||||
|
||||
// ライトカラー
|
||||
typedef struct {
|
||||
u16 r:5;
|
||||
u16 g:5;
|
||||
u16 b:5;
|
||||
u16 :0;
|
||||
|
||||
u16 :14;
|
||||
u16 no:2;
|
||||
} LightColor;
|
||||
typedef vl LightColor vLightColor;
|
||||
|
||||
|
||||
// 10bit 3Dベクトル(テストベクトル)
|
||||
typedef struct {
|
||||
s32 x:10;
|
||||
s32 y:10;
|
||||
s32 z:10;
|
||||
} Vec10, Pos10, TestVec;
|
||||
typedef vl Pos10 vPos10;
|
||||
typedef vl Vec10 vVec10;
|
||||
typedef vl TestVec vTestVec;
|
||||
|
||||
// 16bit 3Dベクトル(標準ベクトル、テスト位置座標)
|
||||
typedef struct {
|
||||
s16 x;
|
||||
s16 y;
|
||||
s16 z;
|
||||
s16 w; // パッド領域(生成コードの高速化のために追加)
|
||||
} Vec16, Vec, Pos16, TestPos;
|
||||
typedef vl Pos16 vPos16;
|
||||
typedef vl Vec16 vVec16;
|
||||
typedef vl Vec vVec;
|
||||
typedef vl TestPos vTestPos;
|
||||
|
||||
// 32bit 3Dベクトル(標準位置座標)
|
||||
typedef struct {
|
||||
s32 x;
|
||||
s32 y;
|
||||
s32 z;
|
||||
} Vec32, Pos32, Pos;
|
||||
typedef vl Vec32 vVec32;
|
||||
typedef vl Pos32 vPos32;
|
||||
typedef vl Pos vPos;
|
||||
|
||||
// 16bit クォータニオン(標準クォータニオン)
|
||||
typedef struct {
|
||||
s16 x;
|
||||
s16 y;
|
||||
s16 z;
|
||||
s16 w;
|
||||
} Quat16, Quat;
|
||||
typedef vl Quat16 vQuat16;
|
||||
typedef vl Quat vQuat;
|
||||
|
||||
// 32bit クォータニオン
|
||||
typedef struct {
|
||||
s32 x;
|
||||
s32 y;
|
||||
s32 z;
|
||||
s32 w;
|
||||
} Quat32;
|
||||
typedef vl Quat32 vQuat32;
|
||||
|
||||
|
||||
// 16bit 2Dベクトル(標準2Dベクトル)
|
||||
typedef struct {
|
||||
s16 x;
|
||||
s16 y;
|
||||
} Vec2D16, Pos2D16, Vec2D;
|
||||
typedef vl Vec2D16 vVec2D16;
|
||||
typedef vl Pos2D16 vPos2D16;
|
||||
typedef vl Vec2D vVec2D;
|
||||
|
||||
// 32bit 2Dベクトル(標準2D位置座標)
|
||||
typedef struct {
|
||||
s32 x;
|
||||
s32 y;
|
||||
} Vec2D32, Pos2D32, Pos2D;
|
||||
typedef vl Vec2D32 vVec2D32;
|
||||
typedef vl Pos2D32 vPos2D32;
|
||||
typedef vl Pos2D vPos2D;
|
||||
|
||||
|
||||
// テクスチャ座標
|
||||
|
||||
typedef struct {
|
||||
s16 s;
|
||||
s16 t;
|
||||
} TexCoord, ST1616_t;
|
||||
typedef vl TexCoord vTexCoord;
|
||||
typedef vl ST1616_t vST1616_t;
|
||||
|
||||
|
||||
// テストボックス
|
||||
typedef struct {
|
||||
s16 x;
|
||||
s16 y;
|
||||
s16 z;
|
||||
s16 w;
|
||||
s16 h;
|
||||
s16 d;
|
||||
} TestBox, Box16_t;
|
||||
typedef vl TestBox vTestBox;
|
||||
typedef vl Box16_t vBox16_t;
|
||||
|
||||
|
||||
// 5bitカラー
|
||||
typedef struct {
|
||||
u16 r:5;
|
||||
u16 g:5;
|
||||
u16 b:5;
|
||||
u16 a:1;
|
||||
} Color5, RGBA5551_t;
|
||||
typedef vl Color5 vColor5;
|
||||
typedef vl RGBA5551_t vRGBA5551_t;
|
||||
|
||||
// 8bitカラー
|
||||
typedef struct {
|
||||
u8 r;
|
||||
u8 g;
|
||||
u8 b;
|
||||
u8 a;
|
||||
} Color8, RGBA8888_t;
|
||||
typedef vl Color8 vColor8;
|
||||
typedef vl RGBA8888_t vRGBA8888_t;
|
||||
|
||||
|
||||
|
||||
// 3要素の行
|
||||
typedef s32 MtxRow3_t[3];
|
||||
typedef struct {
|
||||
MtxRow3_t r;
|
||||
} MtxRow3;
|
||||
|
||||
typedef MtxRow3 MtxRow;
|
||||
typedef MtxRow3 Mtx33Row;
|
||||
|
||||
typedef vl MtxRow vMtxRow;
|
||||
typedef vl MtxRow3 vMtxRow3;
|
||||
typedef vl Mtx33Row vMtx33Row;
|
||||
|
||||
// 4要素の行
|
||||
typedef s32 MtxRow4_t[4];
|
||||
typedef struct {
|
||||
MtxRow4_t r;
|
||||
} MtxRow4;
|
||||
|
||||
typedef MtxRow4 Mtx44Row;
|
||||
|
||||
typedef vl MtxRow4 vMtxRow4;
|
||||
typedef vl Mtx44Row vMtx44Row;
|
||||
|
||||
// 4x3行列
|
||||
typedef s32 Mtx_t[4][3];
|
||||
typedef union {
|
||||
Mtx_t m;
|
||||
} Mtx;
|
||||
typedef vl Mtx vMtx;
|
||||
|
||||
// 3x3行列
|
||||
typedef s32 Mtx33_t[3][3];
|
||||
typedef union {
|
||||
Mtx33_t m;
|
||||
} Mtx33;
|
||||
typedef vl Mtx33 vMtx33;
|
||||
|
||||
// 4x4行列
|
||||
// used for projection matrix
|
||||
typedef s32 Mtx44_t[4][4];
|
||||
typedef union {
|
||||
Mtx44_t m;
|
||||
} Mtx44;
|
||||
typedef vl Mtx44 vMtx44;
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 構造体
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// プログラムステータスレジスタ構造体
|
||||
typedef struct {
|
||||
u32 cpuMode:5; // CPUモード
|
||||
u32 thumbState:1; // THUMBステート
|
||||
u32 fiq_disable:1; // FIQ不許可
|
||||
u32 irq_disable:1; // IRQ不許可
|
||||
u32 :19;
|
||||
u32 q:1; // スティッキーオーバーフロー
|
||||
u32 v:1; // オーバーフロー
|
||||
u32 c:1; // キャリー/ボロー/拡張
|
||||
u32 z:1; // ゼロ
|
||||
u32 n:1; // 負/未満
|
||||
} PsrData;
|
||||
typedef vl PsrData vPsrData;
|
||||
|
||||
|
||||
// 割り込み要求/許可フラグ構造体
|
||||
typedef struct {
|
||||
u16 blankV:1; // Vブランク
|
||||
u16 blankH:1; // Hブランク
|
||||
u16 countV:1; // Vカウンタ一致
|
||||
u16 timer0:1; // タイマー0
|
||||
u16 timer1:1; // タイマー1
|
||||
u16 timer2:1; // タイマー2
|
||||
u16 timer3:1; // タイマー3
|
||||
u16 sio:1; // シリアル通信
|
||||
u16 dma0:1; // DMA0
|
||||
u16 dma1:1; // DMA1
|
||||
u16 dma2:1; // DMA2
|
||||
u16 dma3:1; // DMA3
|
||||
u16 key:1; // キー
|
||||
u16 cartridge:1; // カートリッジ
|
||||
u16 :2;
|
||||
|
||||
u16 subp:1; // サブプロセッサ
|
||||
u16 subpSendFifoEmpty:1; // サブプロセッサ間送信FIFOエンプティ
|
||||
u16 subpRecvFifoNotEmpty:1; // サブプロセッサ間受信FIFOノットエンプティ
|
||||
u16 cardData:1; // カードデータ
|
||||
u16 cardIreq:1; // カードIREQ
|
||||
u16 gxfifo:1; // ジオメトリコマンドFIFO
|
||||
} IntrFlags;
|
||||
typedef vl IntrFlags vIntrFlags;
|
||||
|
||||
|
||||
// サブプロセッサインタフェース構造体
|
||||
typedef struct {
|
||||
u16 recvStatus:4; // 受信ステータス
|
||||
u16 :4;
|
||||
u16 sendStatus:4; // 送信ステータス
|
||||
u16 :1;
|
||||
u16 sendIf:1; // 割り込み要求送信
|
||||
u16 recvIf_enable:1; // 割り込み要求受信 許可
|
||||
u16 subp_enable:1; // サブプロセッサ イネーブル(削除予定)
|
||||
} SubpIntf;
|
||||
typedef vl SubpIntf vSubpIntf;
|
||||
|
||||
|
||||
// サブプロセッサ通信FIFOコントロール構造体
|
||||
typedef struct {
|
||||
u16 sendEmpty:1; // 送信FIFO エンプティ
|
||||
u16 sendFull:1; // フル
|
||||
u16 sendIf_enable:1; // 割り込み要求 許可
|
||||
u16 sendClear:1; // クリア
|
||||
u16 :4;
|
||||
u16 recvEmpty:1; // 受信FIFO エンプティ
|
||||
u16 recvFull:1; // フル
|
||||
u16 recvIf_enable:1; // 割り込み要求 許可
|
||||
u16 :4;
|
||||
u16 enable:1; // FIFOイネーブル
|
||||
} SubpFifoCnt;
|
||||
typedef vl SubpFifoCnt vSubpFifoCnt;
|
||||
|
||||
|
||||
|
||||
// VRAMコントロール構造体
|
||||
typedef struct
|
||||
{
|
||||
u8 mode:3;
|
||||
u8 offset:2;
|
||||
u8 :2;
|
||||
u8 enable:1;
|
||||
} VramCnt;
|
||||
typedef vl VramCnt vVramCnt;
|
||||
|
||||
|
||||
// 内部ワークRAMコントロール構造体
|
||||
typedef struct
|
||||
{
|
||||
u8 block0:1;
|
||||
u8 block1:1;
|
||||
} WramCnt;
|
||||
typedef vl WramCnt vWramCnt;
|
||||
|
||||
|
||||
|
||||
// 表示コントロール構造体
|
||||
typedef struct {
|
||||
u16 bgMode:3; // BGモード選択
|
||||
u16 bg0_3D_on:1; // BG0へ3Dを表示
|
||||
u16 objCharMapType:1; // OBJキャラクタデータ マッピングタイプ
|
||||
u16 objBmpMapType:2; // OBJビットマップデータ マッピングタイプ
|
||||
u16 lcdc_off:1; // LCDC OFF
|
||||
u16 bg0_on:1; // BG0 ON
|
||||
u16 bg1_on:1; // BG1 ON
|
||||
u16 bg2_on:1; // BG2 ON
|
||||
u16 bg3_on:1; // BG3 ON
|
||||
u16 obj_on:1; // OBJ ON
|
||||
u16 win0_on:1; // ウインドウ0 ON
|
||||
u16 win1_on:1; // ウインドウ1 ON
|
||||
u16 objwin_on:1; // OBJウインドウ ON
|
||||
|
||||
u16 dispMode:2; // 表示モード
|
||||
u16 dispVram:2; // 表示VRAM選択
|
||||
u16 objCharVramEx:2; // OBJキャラクタデータVRAM拡張
|
||||
u16 objBmpVramEx:1; // OBJビットマップデータVRAM拡張
|
||||
u16 blankH_objOff:1; // Hブランク中OBJ処理 OFF
|
||||
|
||||
u16 bgCharBaseOffset:3; // BGキャラクタデータベースアドレス・オフセット
|
||||
u16 bgScBaseOffset:3; // BGスクリーンデータベースアドレス・オフセット
|
||||
u16 bgPlttEx:1; // BGパレット拡張
|
||||
u16 objPlttEx:1; // OBJパレット拡張
|
||||
} DispCnt;
|
||||
typedef vl DispCnt vDispCnt;
|
||||
|
||||
|
||||
// 3D表示コントロール構造体
|
||||
typedef struct {
|
||||
u16 texMaster_on:1; // テクスチャマスタ ON
|
||||
u16 shadingEx:1; // 拡張シェーディングモード
|
||||
u16 alphaTest_on:1; // アルファテスト ON
|
||||
u16 alphaBlend_on:1; // アルファブレンド ON
|
||||
u16 antiAliasing_on:1; // アンチエリアシング ON
|
||||
u16 edgeMarking_on:1; // エッジマーキング ON
|
||||
u16 fogMode:1; // フォグモード
|
||||
u16 fogMaster_on:1; // フォグマスタ ON
|
||||
|
||||
u16 fogIndex:4; // フォグ インデックス範囲
|
||||
u16 render_over:1; // レンダリング オーバーフロー
|
||||
u16 geometry_over:1; // ジオメトリ オーバーフロー
|
||||
u16 clearImage_on:1; // プリレンダリングイメージ初期化 ON
|
||||
} Disp3DCnt;
|
||||
typedef vl Disp3DCnt vDisp3DCnt;
|
||||
|
||||
|
||||
// 表示ステータス構造体
|
||||
typedef struct {
|
||||
u16 blankingV:1; // Vブランク期間中
|
||||
u16 blankingH:1; // Hブランク期間中
|
||||
u16 countV:1; // Vカウンタ一致中
|
||||
u16 blankV_if_enable:1; // Vブランク割り込み要求 許可
|
||||
u16 blankH_if_enable:1; // Hブランク割り込み要求 許可
|
||||
u16 countV_if_enable:1; // Vカウンタ一致割り込み要求 許可
|
||||
u16 :1;
|
||||
u16 setV_d8:1; // Vカウンタ比較値設定(D8)
|
||||
u16 setV:8; // (D7-0)
|
||||
|
||||
u16 readV:9; // Vカウンタ現在値
|
||||
u16 :0;
|
||||
} DispStat;
|
||||
typedef vl DispStat vDispStat;
|
||||
|
||||
|
||||
// 表示キャプチャコントロール構造体
|
||||
typedef struct {
|
||||
u16 gfxBlendWeight:8; // グラフィックス側のブレンド係数
|
||||
u16 ramBlendWeight:8; // RAM側のブレンド係数
|
||||
|
||||
u16 destVram:2; // 書き込みVRAM指定
|
||||
u16 destVramOffset:2; // 書き込みVRAMアドレス・オフセット
|
||||
u16 size:2; // キャプチャサイズ
|
||||
u16 :2;
|
||||
u16 dispSrc:1; // 表示側読み込み指定
|
||||
u16 ramSrc:1; // RAM側読み込み指定
|
||||
u16 srcVramOffset:2; // 読み込みVRAMアドレス・オフセット
|
||||
u16 :1;
|
||||
u16 blendMode:2; // ブレンドモード
|
||||
u16 enable:1; // キャプチャイネーブル
|
||||
} DispCapCnt;
|
||||
typedef vl DispCapCnt vDispCapCnt;
|
||||
|
||||
|
||||
|
||||
// モザイクコントロール構造体
|
||||
typedef struct {
|
||||
u16 sizeBgH:4; // BGモザイク Hサイズ
|
||||
u16 sizeBgV:4; // BGモザイク Vサイズ
|
||||
u16 sizeObjH:4; // OBJモザイク Hサイズ
|
||||
u16 sizeObjV:4; // OBJモザイク Vサイズ
|
||||
} MosCnt;
|
||||
typedef vl MosCnt vMosCnt;
|
||||
|
||||
|
||||
// ブレンドコントロール構造体
|
||||
typedef struct {
|
||||
u16 nearPixel_bg0_on:1; // 1stピクセル
|
||||
u16 nearPixel_bg1_on:1;
|
||||
u16 nearPixel_bg2_on:1;
|
||||
u16 nearPixel_bg3_on:1;
|
||||
u16 nearPixel_obj_on:1;
|
||||
u16 nearPixel_bd_on:1;
|
||||
u16 blendMode:2; // ブレンドモード
|
||||
u16 farPixel_bg0_on:1; // 2ndピクセル
|
||||
u16 farPixel_bg1_on:1;
|
||||
u16 farPixel_bg2_on:1;
|
||||
u16 farPixel_bg3_on:1;
|
||||
u16 farPixel_obj_on:1;
|
||||
u16 farPixel_bd_on:1;
|
||||
u16 :2;
|
||||
u16 a:5; // パラメータ A
|
||||
u16 :3;
|
||||
u16 b:5; // パラメータ B
|
||||
u16 :3;
|
||||
u16 y:5; // パラメータ Y
|
||||
u16 :3;
|
||||
} BlendCnt;
|
||||
typedef vl BlendCnt vBlendCnt;
|
||||
|
||||
|
||||
// ウインドウコントロール構造体
|
||||
typedef struct {
|
||||
u8 bg0_on:1; // BG0 ON
|
||||
u8 bg1_on:1; // BG1 ON
|
||||
u8 bg2_on:1; // BG2 ON
|
||||
u8 bg3_on:1; // BG3 ON
|
||||
u8 obj_on:1; // OBJ ON
|
||||
u8 blend_on:1; // カラー特殊効果 ON
|
||||
u8 :2;
|
||||
} WindCnt;
|
||||
typedef vl WindCnt vWindCnt;
|
||||
|
||||
|
||||
|
||||
// BGコントロール構造体
|
||||
typedef struct {
|
||||
u16 priority:2; // 表示優先
|
||||
u16 charBasep:2; // キャラクタ ベースアドレス
|
||||
u16 :2;
|
||||
u16 mosaic:1; // モザイク
|
||||
u16 colorMode:1; // 16色/256色 選択
|
||||
u16 scBasep:5; // スクリーン ベースアドレス
|
||||
u16 loop:1; // ループ
|
||||
u16 size:2; // スクリーンサイズ
|
||||
} BgCnt;
|
||||
typedef vl BgCnt vBgCnt;
|
||||
|
||||
// パレット拡張BGコントロール構造体
|
||||
typedef struct {
|
||||
u16 priority:2; // 表示優先
|
||||
u16 charBasep:2; // キャラクタ ベースアドレス
|
||||
u16 :2;
|
||||
u16 mosaic:1; // モザイク
|
||||
u16 colorMode:1; // 16色/256色 選択
|
||||
u16 scBasep:5; // スクリーン ベースアドレス
|
||||
u16 exPlttSlot:1; // 拡張パレットのスロット割り当て
|
||||
u16 size:2; // スクリーンサイズ
|
||||
} ExPlttBgCnt;
|
||||
typedef vl ExPlttBgCnt vExPlttBgCnt;
|
||||
|
||||
|
||||
// BGオフセットコントロール構造体
|
||||
typedef struct {
|
||||
u16 h;
|
||||
u16 v;
|
||||
} BgOffsetCnt;
|
||||
typedef vl BgOffsetCnt vBgOffsetCnt;
|
||||
|
||||
|
||||
// BGスクリーン構造体
|
||||
typedef struct {
|
||||
u16 charNo:10; // キャラクタNo
|
||||
u16 flipH:1; // Hフリップ
|
||||
u16 flipV:1; // Vフリップ
|
||||
u16 pltt:4; // パレットNo
|
||||
} BgScData;
|
||||
typedef vl BgScData vBgScData;
|
||||
|
||||
|
||||
// BGアフィン変換ソースデータ構造体
|
||||
typedef struct {
|
||||
s32 srcCenterX; // 元データ中心座標 << 8
|
||||
s32 srcCenterY;
|
||||
s16 dispCenterX; // 表示中心座標
|
||||
s16 dispCenterY;
|
||||
s16 ratioX; // 拡大縮小率 << 8
|
||||
s16 ratioY;
|
||||
s16 theta; // 回転角(-128 ~ 127)<< 8
|
||||
} BgAffineSrcData;
|
||||
typedef vl BgAffineSrcData vBgAffineSrcData;
|
||||
|
||||
// BGアフィン変換デスティネーションデータ構造体
|
||||
typedef struct {
|
||||
s16 h_diffX; // ライン方向X座標差分
|
||||
s16 v_diffX; // 垂直方向X座標差分
|
||||
s16 h_diffY; // ライン方向Y座標差分
|
||||
s16 v_diffY; // 垂直方向Y座標差分
|
||||
s32 startX; // スタートX座標
|
||||
s32 startY; // スタートY座標
|
||||
} BgAffineDestData;
|
||||
typedef vl BgAffineDestData vBgAffineDestData;
|
||||
|
||||
|
||||
// OAM構造体
|
||||
typedef struct {
|
||||
u16 posV:8; // Y座標
|
||||
u16 affineMode:2; // アフィンモード
|
||||
u16 objMode:2; // OBJモード
|
||||
u16 mosaic:1; // モザイク
|
||||
u16 colorMode:1; // 16色/256色 選択
|
||||
u16 shape:2; // OBJ形状
|
||||
|
||||
u16 posH:9; // X座標
|
||||
u16 affineParamNo_lo:3; // アフィン変換パラメータNo 下位3ビット
|
||||
u16 flipH:1; // Hフリップ
|
||||
u16 flipV:1; // Vフリップ
|
||||
u16 size:2; // OBJサイズ
|
||||
|
||||
u16 charNo:10; // キャラクタNo
|
||||
u16 priority:2; // 表示優先
|
||||
u16 pltt:4; // パレットNo
|
||||
u16 affineParam; // アフィン変換パラメータ
|
||||
} OamData;
|
||||
typedef vl OamData vOamData;
|
||||
|
||||
// ビットマップOBJ専用OAM構造体
|
||||
typedef struct {
|
||||
u16 posV:8; // Y座標
|
||||
u16 affineMode:2; // アフィンモード
|
||||
u16 objMode:2; // OBJモード
|
||||
u16 mosaic:1; // モザイク
|
||||
u16 colorMode:1; // 16色/256色 選択
|
||||
u16 shape:2; // OBJ形状
|
||||
|
||||
u16 posH:9; // X座標
|
||||
u16 affineParamNo_lo:3; // アフィン変換パラメータNo 下位3ビット
|
||||
u16 flipH:1; // Hフリップ
|
||||
u16 flipV:1; // Vフリップ
|
||||
u16 size:2; // OBJサイズ
|
||||
|
||||
u16 charNo:10; // キャラクタNo
|
||||
u16 priority:2; // 表示優先
|
||||
u16 alpha:4; // アルファ値
|
||||
u16 affineParam; // アフィン変換パラメータ
|
||||
} BmpObjOamData;
|
||||
typedef vl BmpObjOamData vBmpObjOamData;
|
||||
|
||||
|
||||
// OBJアフィン変換ソースデータ構造体
|
||||
typedef struct {
|
||||
s16 ratioX; // 拡大縮小率
|
||||
s16 ratioY;
|
||||
s16 theta; // 回転角(-128 ~ 127)<< 8
|
||||
} ObjAffineSrcData;
|
||||
typedef vl ObjAffineSrcData vObjAffineSrcData;
|
||||
|
||||
// OBJアフィン変換デスティネーションデータ構造体
|
||||
typedef struct {
|
||||
s16 h_diffX; // ライン方向X座標差分
|
||||
s16 v_diffX; // 垂直方向X座標差分
|
||||
s16 h_diffY; // ライン方向Y座標差分
|
||||
s16 v_diffY; // 垂直方向Y座標差分
|
||||
} ObjAffineDestData;
|
||||
typedef vl ObjAffineDestData vObjAffineDestData;
|
||||
|
||||
|
||||
// カラーパレット構造体
|
||||
typedef struct {
|
||||
u16 red:5; // 赤
|
||||
u16 green:5; // 緑
|
||||
u16 blue:5; // 青
|
||||
u16 :1;
|
||||
} PlttData;
|
||||
typedef vl PlttData vPlttData;
|
||||
|
||||
|
||||
|
||||
// 初期化イメージオフセットコントロール構造体
|
||||
typedef struct
|
||||
{
|
||||
u16 x:8;
|
||||
u16 y:8;
|
||||
} ClearImageOffsetCnt;
|
||||
typedef vl ClearImageOffsetCnt vClearImageOffsetCnt;
|
||||
|
||||
|
||||
// ビューポート構造体
|
||||
typedef struct
|
||||
{
|
||||
u16 x1:8;
|
||||
u16 y1:8;
|
||||
u16 x2:8;
|
||||
u16 y2:8;
|
||||
} ViewPortCnt;
|
||||
typedef vl ViewPortCnt vViewPortCnt;
|
||||
|
||||
|
||||
// ジオメトリエンジンステータス構造体
|
||||
typedef struct {
|
||||
u16 testBusy:1; // テスト処理中
|
||||
u16 boxInView:1; // ボックスの一部が視体積内にあるか
|
||||
u16 :6;
|
||||
u16 posvecStackLevel:5; // 位置&ベクトルマトリクス スタックレベル
|
||||
u16 projStackLevel:1; // プロジェクションマトリクス スタックレベル
|
||||
u16 mtxStackBusy:1; // マトリクススタック ビジー
|
||||
u16 mtxStackError:1; // オーバーフロー or アンダーフロー
|
||||
|
||||
u16 fifoCount:8; // ジオメトリFIFO 格納数
|
||||
u16 fifoFull:1; // フル
|
||||
u16 fifoUnderHalf:1; // ハーフ以下
|
||||
u16 fifoEmpty:1; // エンプティ
|
||||
u16 geometryBusy:1; // ジオメトリエンジン ビジー
|
||||
u16 :2;
|
||||
u16 fifoIntrType:2; // ジオメトリFIFO 割り込みタイプ
|
||||
} GxStat;
|
||||
typedef vl GxStat vGxStat;
|
||||
|
||||
|
||||
// 行列モード コントロール構造体
|
||||
typedef struct {
|
||||
u16 mode; // 行列モード
|
||||
|
||||
u16 pad; // パッド領域
|
||||
} MtxModeCnt;
|
||||
typedef vl MtxModeCnt vMtxModeCnt;
|
||||
|
||||
|
||||
// ポリゴン属性 コントロール構造体
|
||||
typedef struct {
|
||||
u16 light0_on:1; // ライト0 ON
|
||||
u16 light1_on:1; // ライト1 ON
|
||||
u16 light2_on:1; // ライト2 ON
|
||||
u16 light3_on:1; // ライト3 ON
|
||||
u16 renderMode:2; // レンダリングモード
|
||||
u16 backFace_on:1; // 裏面 ON
|
||||
u16 frontFace_on:1; // 表面 ON
|
||||
|
||||
u16 :3;
|
||||
u16 xlu_depth_on:1; // 半透明ポリゴンのデプスバッファ更新 ON
|
||||
u16 farClipping_on:1; // FARクリッピング ON
|
||||
u16 disp1Dot:1; // 1ドット時表示
|
||||
u16 depthTestMode:1; // デプステストモード
|
||||
u16 fog_on:1; // フォグ ON
|
||||
|
||||
u16 alpha:8; // 不透明度
|
||||
u16 id:8; // ID
|
||||
} PolygonAttrCnt;
|
||||
typedef vl PolygonAttrCnt vPolygonAttrCnt;
|
||||
|
||||
|
||||
/// BEGIN コントロール構造体
|
||||
typedef struct {
|
||||
u16 primitiveType; // プリミティブタイプ
|
||||
|
||||
u16 pad; // パッド領域
|
||||
} BeginCnt;
|
||||
typedef vl BeginCnt vBeginCnt;
|
||||
|
||||
|
||||
// テクスチャパラメータ コントロール構造体
|
||||
typedef struct {
|
||||
u16 imageBasep; // イメージベースアドレス
|
||||
|
||||
u16 repeatS:1; // Sリピート
|
||||
u16 repeatT:1; // T
|
||||
u16 flipS:1; // Sフリップ
|
||||
u16 flipT:1; // T
|
||||
u16 sizeS:3; // Sサイズ
|
||||
u16 sizeT:3; // T
|
||||
u16 format:3; // テクスチャフォーマット
|
||||
u16 pltt0_off:1; // カラーパレット0 OFF
|
||||
u16 coordGenSrc:2; // 座標変換ソース
|
||||
|
||||
u16 plttBasep; // パレットベースアドレス
|
||||
|
||||
u16 pad; // パッド領域
|
||||
} TexParamCnt;
|
||||
typedef vl TexParamCnt vTexParamCnt;
|
||||
|
||||
// テクスチャイメージパラメータ コントロール構造体
|
||||
typedef struct {
|
||||
u16 imageBasep; // イメージベースアドレス
|
||||
|
||||
u16 repeatS:1; // Sリピート
|
||||
u16 repeatT:1; // T
|
||||
u16 flipS:1; // Sフリップ
|
||||
u16 flipT:1; // T
|
||||
u16 sizeS:3; // Sサイズ
|
||||
u16 sizeT:3; // T
|
||||
u16 format:3; // テクスチャフォーマット
|
||||
u16 pltt0_off:1; // カラーパレット0 OFF
|
||||
u16 coordGenSrc:2; // 座標変換ソース
|
||||
} TexImageParamCnt;
|
||||
typedef vl TexImageParamCnt vTexImageParamCnt;
|
||||
|
||||
// テクスチャパレットベースアドレス コントロール構造体
|
||||
typedef struct {
|
||||
u16 plttBasep; // パレットベースアドレス
|
||||
|
||||
u16 pad; // パッド領域
|
||||
} TexPlttBaseCnt;
|
||||
typedef vl TexPlttBaseCnt vTexPlttBaseCnt;
|
||||
|
||||
|
||||
|
||||
// DMAコントロール構造体
|
||||
typedef struct {
|
||||
u16 count; // 転送数
|
||||
u16 :5;
|
||||
u16 destpCnt:2; // 転送先アドレス コントロール
|
||||
u16 srcpCnt:2; // 転送元アドレス コントロール
|
||||
u16 continuous:1; // コンティニュアスモード
|
||||
u16 busSize:1; // バスサイズ 16/32Bit選択
|
||||
u16 timming:3; // タイミング選択
|
||||
u16 if_enable:1; // 割り込み要求 許可
|
||||
u16 enable:1; // DMA許可
|
||||
} DmaCnt;
|
||||
typedef vl DmaCnt vDmaCnt;
|
||||
|
||||
|
||||
// タイマーコントロール構造体
|
||||
typedef struct {
|
||||
u16 count; // カウント数
|
||||
u16 prescaler:2; // プリスケーラ選択
|
||||
u16 connect:1; // 下位タイマー接続
|
||||
u16 :3;
|
||||
u16 if_enable:1; // 割り込み要求 許可
|
||||
u16 enable:1; // タイマー許可
|
||||
|
||||
u16 pad:8; // パッド領域
|
||||
} TimerCnt;
|
||||
typedef vl TimerCnt vTimerCnt;
|
||||
|
||||
|
||||
// キーデータ構造体
|
||||
typedef struct {
|
||||
u16 a:1; // A
|
||||
u16 b:1; // B
|
||||
u16 select:1; // セレクト
|
||||
u16 start:1; // スタート
|
||||
u16 plusR:1; // 右
|
||||
u16 plusL:1; // 左
|
||||
u16 plusU:1; // 上
|
||||
u16 plusD:1; // 下
|
||||
u16 r:1; // R
|
||||
u16 l:1; // L
|
||||
u16 :6;
|
||||
} KeyData;
|
||||
typedef vl KeyData vKeyData;
|
||||
|
||||
// キーコントロール構造体
|
||||
typedef struct {
|
||||
u16 sel_a:1; // Aボタン 選択
|
||||
u16 sel_b:1; // Bボタン 選択
|
||||
u16 sel_select:1; // セレクトボタン 選択
|
||||
u16 sel_start:1; // スタートボタン 選択
|
||||
u16 sel_plusR:1; // 右キー 選択
|
||||
u16 sel_plusL:1; // 左キー 選択
|
||||
u16 sel_plusU:1; // 上キー 選択
|
||||
u16 sel_plusD:1; // 下キー 選択
|
||||
u16 sel_r:1; // Rボタン 選択
|
||||
u16 sel_l:1; // Lボタン 選択
|
||||
u16 :4;
|
||||
u16 if_enable:1; // 割り込み要求 許可
|
||||
u16 intrType:1; // 割り込みタイプ 選択
|
||||
} KeyCnt;
|
||||
typedef vl KeyCnt vKeyCnt;
|
||||
|
||||
|
||||
// 外部メモリコントロール構造体
|
||||
typedef struct {
|
||||
u16 ctrdgDt8_cycles:2; // カートリッジ 8bitデータバス アクセスサイクル数
|
||||
u16 ctrdgtAd16_1stCycles:2; // AD16バス 1stアクセスサイクル数
|
||||
u16 ctrdgAd16_2ndCycles:1; // 2ndアクセスサイクル数
|
||||
u16 ctrdgPhiClock:2; // φ端子出力クロック 選択
|
||||
u16 ctrdgAccess:1; // アクセス権選択
|
||||
u16 :3;
|
||||
u16 cardAccess:1; // カードアクセス権選択
|
||||
#ifdef IRIS_TS
|
||||
u16 mainmemByteAccess:1; // メインメモリバイトアクセス検出
|
||||
u16 mainmemCE2:1; // CE2信号出力
|
||||
#else
|
||||
u16 :2;
|
||||
#endif
|
||||
u16 mainmemInterface:1; // インタフェース
|
||||
u16 mainmemPriority:1; // 優先権
|
||||
} ExMemCnt;
|
||||
typedef vl ExMemCnt vExMemCnt;
|
||||
|
||||
|
||||
// Bit圧縮データ展開用パラメータ
|
||||
typedef struct {
|
||||
u16 srcNum; // ソースデータ・バイト数
|
||||
u16 srcBitNum:8; // 1ソースデータ・ビット数
|
||||
u16 destBitNum:8; // 1デスティネーションデータ・ビット数
|
||||
u32 destOffset:31; // ソースデータに加算する数
|
||||
u32 destOffset0_on:1; // 0のデータにオフセットを加算するか否かのフラグ
|
||||
} UnPackBitsParam;
|
||||
typedef vl UnPackBitsParam vUnPackBitsParam;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_TYPES_H
|
||||
357
trunk/IrisMainp/include/IrisUTL.h
Normal file
357
trunk/IrisMainp/include/IrisUTL.h
Normal file
@ -0,0 +1,357 @@
|
||||
//====================================================================
|
||||
// IrisUTL.h
|
||||
// ユーティリティライブラリ
|
||||
//
|
||||
// Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
//====================================================================
|
||||
#ifndef _IRIS_UTL_H
|
||||
#define _IRIS_UTL_H
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisTarget.h>
|
||||
#include <IrisTypes.h>
|
||||
|
||||
|
||||
|
||||
//======================================================================
|
||||
// クリア & コピー
|
||||
//======================================================================
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 16bitクリア
|
||||
//
|
||||
//・CPUにて16bitデータでクリアします。
|
||||
//
|
||||
//・引数:
|
||||
// data クリアデータ
|
||||
// destp デスティネーションアドレス
|
||||
// size クリアサイズ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void UTL_CpuClear16(u32 data, void *destp, s32 size);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 16bitコピー
|
||||
//
|
||||
//・CPUにて16bit幅でコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送サイズ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void UTL_CpuCopy16(const void *srcp, void *destp, s32 size);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 32bitクリア
|
||||
//
|
||||
//・CPUにて32bitデータでクリアします。
|
||||
//
|
||||
//・引数:
|
||||
// data クリアデータ
|
||||
// destp デスティネーションアドレス
|
||||
// size クリアサイズ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void UTL_CpuClear32(u32 data, void *destp, s32 size);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 32bitコピー
|
||||
//
|
||||
//・CPUにて32bit幅でコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送サイズ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void UTL_CpuCopy32(const void *srcp, void *destp, s32 size);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 高速クリア
|
||||
//
|
||||
//・CPUにて32bitデータで高速にクリアします。
|
||||
//・オーバーフローしない範囲では32Byte単位の複数ストア命令が使用されます。
|
||||
//
|
||||
//・引数:
|
||||
// data クリアデータ
|
||||
// destp デスティネーションアドレス
|
||||
// size クリアサイズ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void UTL_CpuClearFast(u32 data, void *destp, s32 size);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 高速コピー
|
||||
//
|
||||
//・CPUにて32bit幅で高速にコピーします。
|
||||
//・オーバーフローしない範囲では32Byte単位の複数ロード/ストア命令が使用されます。
|
||||
//
|
||||
//・引数:
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送サイズ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void UTL_CpuCopyFast(const void *srcp, void *destp, s32 size);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データのスワップ(ワード/バイト)
|
||||
//
|
||||
//・setDataとdestpが指す先のデータをスワップします。
|
||||
//・プロセッサ間やモジュール間で共有リソースを排他制御するための
|
||||
// スピンロック等を実現することができます。
|
||||
//
|
||||
//・引数:
|
||||
// setData セットするデータ
|
||||
// destp スワップ先のポインタ
|
||||
//
|
||||
//・戻り値:スワップ先へ直前に格納されていた値
|
||||
//
|
||||
//※但し、メインメモリに対してはキャッシュ経由でなければ
|
||||
// バイトアクセスはできないことに注意して下さい。
|
||||
// ですので、メインメモリ上では基本的に UTL_SwapWord() を使用して下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 UTL_SwapWord(u32 setData, volatile u32 *destp);
|
||||
u8 UTL_SwapByte(u32 setData, volatile u8 *destp);
|
||||
|
||||
|
||||
//======================================================================
|
||||
// 圧縮データ展開
|
||||
//======================================================================
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Bit圧縮データ展開
|
||||
//
|
||||
//・0固定のビットを詰めたデータを展開します。
|
||||
//・ソースアドレスにメインメモリを指定する場合は
|
||||
// データキャッシュを有効にする必要があります。
|
||||
//・デスティネーションアドレスは4Byte境界に合わせて下さい。
|
||||
//
|
||||
//・引数:
|
||||
// void *srcp ソースアドレス
|
||||
// void *destp デスティネーションアドレス
|
||||
// UnPackBitsParam *paramp UnPackBitsParam構造体データのアドレス
|
||||
//
|
||||
//・UnPackBitsParam構造体
|
||||
// u16 srcNum ソースデータ・バイト数
|
||||
// u8 srcBitNum 1ソースデータ・ビット数
|
||||
// u8 destBitNum 1デスティネーションデータ・ビット数
|
||||
// u32 destOffset:31 ソースデータに加算するオフセット数
|
||||
// destOffset0_On:1 0のデータにオフセットを加算するか否かのフラグ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void UTL_UnPackBits(const void *srcp, void *destp, UnPackBitsParam *paramp);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// LZ77圧縮データ8bit展開
|
||||
//
|
||||
//・LZ77圧縮データを展開し、8bit単位で書き込みます。
|
||||
//・ソースアドレス、デスティネーションアドレスともに、メインメモリを
|
||||
// 指定する場合はデータキャッシュを有効にする必要があります。
|
||||
//・VRAMに直接展開することはできません。
|
||||
//・圧縮データのサイズが4の倍数にならなかった場合は
|
||||
// 出来るだけ0で詰めて調整して下さい。
|
||||
//・ソースアドレスは4Byte境界に合わせて下さい。
|
||||
//
|
||||
//・引数:
|
||||
// void *srcp ソースアドレス
|
||||
// void *destp デスティネーションアドレス
|
||||
//
|
||||
//・データヘッダ
|
||||
// u32 :4 予約
|
||||
// compType:4 圧縮タイプ( = 1)
|
||||
// destSize:24 展開後のデータサイズ
|
||||
//
|
||||
//・フラグデータフォーマット
|
||||
// u8 flags 圧縮/無圧縮フラグ
|
||||
// (0, 1) = (無圧縮データ, 圧縮データ)
|
||||
//・コードデータフォーマット(Big Endian)
|
||||
// u16 length:4 展開データ長 - 3(一致長3Byte以上時のみ圧縮)
|
||||
// offset:12 一致データオフセット - 1
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void UTL_UnCompLZ77Byte(const void *srcp, void *destp);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// LZ77圧縮データ16bit展開
|
||||
//
|
||||
//・LZ77圧縮データを展開し、16bit単位で書き込みます。
|
||||
//・データTCMやメインメモリにも展開できますが、UTL_UnCompLZ77Byte()
|
||||
// より低速です。
|
||||
//・ソースアドレスにメインメモリを指定する場合は
|
||||
// データキャッシュを有効にする必要があります。
|
||||
//・圧縮データは一致文字列を2Byte以前より検索したものにして下さい。
|
||||
//・圧縮データのサイズが4の倍数にならなかった場合は
|
||||
// 出来るだけ0で詰めて調整して下さい。
|
||||
//・ソースアドレスは4Byte境界に合わせて下さい。
|
||||
//
|
||||
//・引数:
|
||||
// void *srcp ソースアドレス
|
||||
// void *destp デスティネーションアドレス
|
||||
//
|
||||
//・データヘッダ
|
||||
// u32 :4 予約
|
||||
// compType:4 圧縮タイプ( = 1)
|
||||
// destSize:24 展開後のデータサイズ
|
||||
//
|
||||
//・フラグデータフォーマット
|
||||
// u8 flags 圧縮/無圧縮フラグ
|
||||
// (0, 1) = (無圧縮データ, 圧縮データ)
|
||||
//・コードデータフォーマット(Big Endian)
|
||||
// u16 length:4 展開データ長 - 3(一致長3Byte以上時のみ圧縮)
|
||||
// offset:12 一致データオフセット( >= 2) - 1
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void UTL_UnCompLZ77Short(const void *srcp, void *destp);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ハフマン圧縮データ展開
|
||||
//
|
||||
//・ハフマン圧縮データを展開し、32bit単位で書き込みます。
|
||||
//・ソースアドレスにメインメモリを指定する場合は
|
||||
// データキャッシュを有効にする必要があります。
|
||||
//・圧縮データのサイズが4の倍数にならなかった場合は
|
||||
// 出来るだけ0で詰めて調整して下さい。
|
||||
//・ソースアドレスは4Byte境界に合わせて下さい。
|
||||
//
|
||||
//・引数:
|
||||
// void *srcp ソースアドレス
|
||||
// void *destp デスティネーションアドレス
|
||||
//
|
||||
//・データヘッダ
|
||||
// u32 bitSize:4 1データ・ビットサイズ(通常 4|8)
|
||||
// compType:4 圧縮タイプ( = 2)
|
||||
// destSize:24 展開後のデータサイズ
|
||||
//
|
||||
//・ツリーテーブル
|
||||
// u8 treeSize ツリーテーブルサイズ/2 - 1
|
||||
// TreeNodeData nodeRoot ルートノード
|
||||
//
|
||||
// TreeNodeData nodeLeft ルート左ノード
|
||||
// TreeNodeData nodeRight ルート右ノード
|
||||
//
|
||||
// TreeNodeData nodeLeftLeft 左左ノード
|
||||
// TreeNodeData nodeLeftRight 左右ノード
|
||||
//
|
||||
// TreeNodeData nodeRightLeft 右左ノード
|
||||
// TreeNodeData nodeRightRight 右右ノード
|
||||
//
|
||||
// ・
|
||||
// ・
|
||||
//
|
||||
// この後に圧縮データ本体
|
||||
//
|
||||
//・TreeNodeData構造体
|
||||
// u8 nodeNextOffset:6 次ノードデータへのオフセット - 1(2Byte単位)
|
||||
// rightEndFlag:1 右ノード終了フラグ
|
||||
// leftEndzflag:1 左ノード終了フラグ
|
||||
// 終了フラグがセットされている場合
|
||||
// 次ノードにデータがある
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void UTL_UnCompHuffman(const void *srcp, void *destp);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ランレングス圧縮データ8bit展開
|
||||
//
|
||||
//・ランレングス圧縮データを展開し、8bit単位で書き込みます。
|
||||
//・ソースアドレス、デスティネーションアドレスともに、メインメモリを
|
||||
// 指定する場合はデータキャッシュを有効にする必要があります。
|
||||
//・VRAMに直接展開することはできません。
|
||||
//・圧縮データのサイズが4の倍数にならなかった場合は
|
||||
// 出来るだけ0で詰めて調整して下さい。
|
||||
//・ソースアドレスは4Byte境界に合わせて下さい。
|
||||
//
|
||||
//・引数:
|
||||
// void *srcp ソースアドレス
|
||||
// void *destp デスティネーションアドレス
|
||||
//
|
||||
//・データヘッダ
|
||||
// u32 :4 予約
|
||||
// compType:4 圧縮タイプ( = 3)
|
||||
// destSize:24 展開後のデータサイズ
|
||||
//
|
||||
//・フラグデータフォーマット
|
||||
// u8 length:7 展開データ長 - 1(無圧縮時)
|
||||
// 展開データ長 - 3(連続長3Byte以上時のみ圧縮)
|
||||
// flag:1 (0, 1) = (無圧縮データ, 圧縮データ)
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void UTL_UnCompRLByte(const void *srcp, void *destp);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ランレングス圧縮データ16bit展開
|
||||
//
|
||||
//・ランレングス圧縮データを展開し、16bit単位で書き込みます。
|
||||
//・データTCMやメインメモリにも展開できますが、UTL_UnCompRLByte()
|
||||
// より低速です。
|
||||
//・ソースアドレスにメインメモリを指定する場合は
|
||||
// データキャッシュを有効にする必要があります。
|
||||
//・圧縮データのサイズが4の倍数にならなかった場合は
|
||||
// 出来るだけ0で詰めて調整して下さい。
|
||||
//・ソースアドレスは4Byte境界に合わせて下さい。
|
||||
//
|
||||
//・引数:
|
||||
// void *srcp ソースアドレス
|
||||
// void *destp デスティネーションアドレス
|
||||
//
|
||||
//・データヘッダ
|
||||
// u32 :4 予約
|
||||
// compType:4 圧縮タイプ( = 3)
|
||||
// destSize:24 展開後のデータサイズ
|
||||
//
|
||||
//・フラグデータフォーマット
|
||||
// u8 length:7 展開データ長 - 1(無圧縮時)
|
||||
// 展開データ長 - 3(連続長3Byte以上時のみ圧縮)
|
||||
// flag:1 (0, 1) = (無圧縮データ, 圧縮データ)
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void UTL_UnCompRLShort(const void *srcp, void *destp);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_UTL_H
|
||||
|
||||
112
trunk/IrisMainp/include/IrisUTL_Arm.s
Normal file
112
trunk/IrisMainp/include/IrisUTL_Arm.s
Normal file
@ -0,0 +1,112 @@
|
||||
;=====================================================================
|
||||
; IrisUTL_Arm.s
|
||||
; ユーティリティライブラリ(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
;=====================================================================
|
||||
IF :DEF: _IRIS_UTL_H
|
||||
ELSE
|
||||
_IRIS_UTL_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisTargetArm.s
|
||||
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; クリア & コピー
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU 16bitクリア
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_CpuClear16
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU 16bitコピー
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_CpuCopy16
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU 32bitクリア
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_CpuClear32
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU 32bitコピー
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_CpuCopy32
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU 高速クリア
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_CpuClearFast
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU 高速コピー
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_CpuCopyFast
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データのスワップ(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_SwapWord
|
||||
EXTERN UTL_SwapByte
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; 圧縮データ展開
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; Bit圧縮データ展開
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_UnPackBits
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; LZ77圧縮データ8bit展開
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_UnCompLZ77Byte
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; LZ77圧縮データ16bit展開
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_UnCompLZ77Short
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ハフマン圧縮データ展開
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_UnCompHuffman
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ランレングス圧縮データ8bit展開
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_UnCompRLByte
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ランレングス圧縮データ16bit展開
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN UTL_UnCompRLShort
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_UTL_H
|
||||
|
||||
|
||||
|
||||
END
|
||||
|
||||
105
trunk/IrisMainp/include/IrisUTL_Mw.s
Normal file
105
trunk/IrisMainp/include/IrisUTL_Mw.s
Normal file
@ -0,0 +1,105 @@
|
||||
;=====================================================================
|
||||
; IrisUTL_Mw.s
|
||||
; ユーティリティライブラリ(MWASMARM用)
|
||||
;
|
||||
; Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
;=====================================================================
|
||||
#ifndef _IRIS_UTL_H
|
||||
#define _IRIS_UTL_H
|
||||
|
||||
|
||||
.INCLUDE IrisTarget.h
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; クリア & コピー
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU 16bitクリア
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_CpuClear16
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU 16bitコピー
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_CpuCopy16
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU 32bitクリア
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_CpuClear32
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU 32bitコピー
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_CpuCopy32
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU 高速クリア
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_CpuClearFast
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; CPU 高速コピー
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_CpuCopyFast
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; データのスワップ(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_SwapWord
|
||||
.EXTERN UTL_SwapByte
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; 圧縮データ展開
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; Bit圧縮データ展開
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_UnPackBits
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; LZ77圧縮データ8bit展開
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_UnCompLZ77Byte
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; LZ77圧縮データ16bit展開
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_UnCompLZ77Short
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ハフマン圧縮データ展開
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_UnCompHuffman
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ランレングス圧縮データ8bit展開
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_UnCompRLByte
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ランレングス圧縮データ16bit展開
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
.EXTERN UTL_UnCompRLShort
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_UTL_H
|
||||
241
trunk/IrisMainp/include/IrisVEC.h
Normal file
241
trunk/IrisMainp/include/IrisVEC.h
Normal file
@ -0,0 +1,241 @@
|
||||
//======================================================================
|
||||
// IrisVEC.h
|
||||
// ベクトルライブラリ
|
||||
//
|
||||
// Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_VEC_H
|
||||
#define _IRIS_VEC_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisTarget.h>
|
||||
#include <IrisTypes.h>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトルのコピー
|
||||
//
|
||||
//・各ベクトル間でサイズに合わせてコピーします。
|
||||
//・VEC_AlignPoint2Vec10() / VEC10_AlignPoint2Vec() は16bitベクトルと
|
||||
// 10bitベクトル間での固定小数点位置の調整も行います。
|
||||
//
|
||||
//・引数:
|
||||
// srcp 転送元ベクトルのポインタ
|
||||
// dstp 転送先ベクトルバッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void VEC_Copy2Vec10(const Vec *srcp, Vec10 *dstp);
|
||||
void VEC_Copy2Vec32(const Vec *srcp, Vec32 *dstp);
|
||||
void VEC32_Copy2Vec(const Vec32 *srcp, Vec *dstp);
|
||||
|
||||
void VEC_AlignPoint2Vec10(const Vec *srcp, Vec10 *dstp);
|
||||
void VEC10_AlignPoint2Vec(const Vec10 *srcp, Vec *dstp);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトルの内積
|
||||
//
|
||||
//・2つのベクトルの内積を求めます。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1ベクトルのポインタ
|
||||
// b 第2ベクトルのポインタ
|
||||
//
|
||||
//・戻り値:内積
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 VEC_DotProduct( const Vec *a, const Vec *b);
|
||||
s32 VEC32_DotProduct( const Vec32 *a, const Vec32 *b);
|
||||
s32 VEC32_DotProductFast(const Vec32 *a, const Vec32 *b);
|
||||
s32 VEC32VEC_DotProduct( const Vec32 *a, const Vec *b);
|
||||
#define VEC2D_DotProduct(ax, ay, bx, by) (((ax) * (bx) + (ay) * (by)) >>V_SFT)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトルの外積
|
||||
//
|
||||
//・2つのベクトルの外積ベクトルを求め、axbが指すベクトルへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1ベクトルのポインタ
|
||||
// b 第2ベクトルのポインタ
|
||||
// axb 外積ベクトル格納バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void VEC_CrossProduct( Vec *a, Vec *b, Vec *axb);
|
||||
void VEC32_CrossProduct( Vec32 *a, Vec32 *b, Vec32 *axb);
|
||||
void VEC32_CrossProductFast(Vec32 *a, Vec32 *b, Vec32 *axb);
|
||||
#define VEC2D_CrossProduct(ax, ay, bx, by) (((ax) * (by) - (ay) * (bx)) >>V_SFT)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトルの正規化
|
||||
//
|
||||
//・srcpが指すベクトルを正規化してdstpが指すベクトルへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// srcp 未正規化ベクトルのポインタ
|
||||
// dstp 正規化ベクトル格納バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※通常版は平方根演算器と除算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void VEC_Normalize( Vec *srcp, Vec *dstp);
|
||||
void VEC32_Normalize( Vec32 *srcp, Vec32 *dstp);
|
||||
void VEC32_Normalize2Vec(Vec32 *srcp, Vec *dstp);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトルの加算
|
||||
//
|
||||
//・2つのベクトルを加算した結果をa_bが指すベクトルへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1ベクトルのポインタ
|
||||
// b 第2ベクトルのポインタ
|
||||
// a_b 加算後のベクトル格納バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void VEC_Add(Vec *a, Vec *b, Vec *ab);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトルの減算
|
||||
//
|
||||
//・2つのベクトルを減算した結果をa_bが指すベクトルへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1ベクトルのポインタ
|
||||
// b 第2ベクトルのポインタ
|
||||
// a_b 減算後のベクトル格納バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void VEC_Sub(Vec *a, Vec *b, Vec *a_b);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトルのスケーリング
|
||||
//
|
||||
//・srcpが指すベクトルをスケーリングした結果をdstpが指すベクトルへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// srcp スケーリング前のベクトルのポインタ
|
||||
// dstp スケーリング後のベクトル格納バッファのポインタ
|
||||
// scale スケーリングパラメータ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void VEC_Scale(Vec *srcp, Vec *dstp, s32 scale);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトルの反転
|
||||
//
|
||||
//・srcpが指すベクトルを反転した結果をdstpが指すベクトルへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// srcp 反転前のベクトルのポインタ
|
||||
// dstp 反転後のベクトル格納バッファのポインタ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void VEC_Reverse(const Vec *srcp, Vec *dstp);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトルの大きさ
|
||||
//
|
||||
//・ベクトルの大きさを求めます。
|
||||
//
|
||||
//・引数:
|
||||
// v 入力ベクトルのポインタ
|
||||
//
|
||||
//・戻り値:大きさ
|
||||
//
|
||||
//※平方根演算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
u32 VEC_Magnitude(const Vec *v);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトルの大きさの2乗
|
||||
//
|
||||
//・ベクトルの大きさの2乗を求めます。
|
||||
//
|
||||
//・引数:
|
||||
// v 入力ベクトルのポインタ
|
||||
//
|
||||
//・戻り値:大きさの2乗
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
u32 VEC_SquareMagnitude(const Vec *v);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトル間の距離
|
||||
//
|
||||
//・ベクトル間の距離を求めます。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1ベクトルのポインタ
|
||||
// b 第2ベクトルのポインタ
|
||||
//
|
||||
//・戻り値:距離
|
||||
//
|
||||
//※平方根演算器を使用するため、TCM上で実行したとしても
|
||||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||||
// ストールしてしまいます。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
u32 VEC_Distance(const Vec *a, const Vec *b);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトル間の距離の2乗
|
||||
//
|
||||
//・ベクトル間の距離の2乗を求めます。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1ベクトルのポインタ
|
||||
// b 第2ベクトルのポインタ
|
||||
//
|
||||
//・戻り値:距離の2乗
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
u32 VEC_SquareDistance(const Vec *a, const Vec *b);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ベクトルの線形補間
|
||||
//
|
||||
//・2つのベクトルを線形補間した結果をdが指すベクトルへ格納します。
|
||||
//
|
||||
//・引数:
|
||||
// a 第1ベクトルのポインタ
|
||||
// b 第2ベクトルのポインタ
|
||||
// d 補間ベクトル格納バッファのポインタ
|
||||
// t 補間パラメータ
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void VEC_Lerp(Vec *a, Vec *b, Vec *d, s32 t);
|
||||
void VEC32_Lerp(Vec32 *a, Vec32 *b, Vec32 *d, s32 t);
|
||||
void VEC32_LerpFast(Vec32 *a, Vec32 *b, Vec32 *d, s32 t);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_VEC_H
|
||||
424
trunk/IrisMainp/include/private/IrisCardDefine.h
Normal file
424
trunk/IrisMainp/include/private/IrisCardDefine.h
Normal file
@ -0,0 +1,424 @@
|
||||
//====================================================================
|
||||
// IrisCardDefine.h
|
||||
// IRIS カード定数
|
||||
//
|
||||
// Copyright (C) 2003,2004 NINTENDO Co.,Ltd.
|
||||
//====================================================================
|
||||
#ifndef _IRIS_CARD_DEFINE_H
|
||||
#define _IRIS_CARD_DEFINE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// カードアクセス・コントロールレジスタ構造体
|
||||
typedef struct {
|
||||
u16 latency1:13; // レイテンシ1のサイクル数
|
||||
u16 dataScramble_on:1; // データスクランブル ON
|
||||
u16 scrambleUnit_on:1; // スクランブル回路 ON
|
||||
u16 initScramblePN:1; // スクランブルPNデータ初期化
|
||||
|
||||
u16 latency2:6; // レイテンシ2のサイクル数
|
||||
u16 cmdScramble_on:1; // コマンドスクランブル ON
|
||||
u16 dataReady:1; // データ レディ
|
||||
|
||||
u16 pages:3; // ページ数
|
||||
u16 clockType:1; // クロックタイプ(150ns/240ns)
|
||||
u16 clockInLatency:1; // レイテンシ期間にクロック供給
|
||||
u16 reset:1; // リセット信号
|
||||
u16 accessMode:1; // アクセスモード
|
||||
u16 start:1; // スタート
|
||||
} CardCnt;
|
||||
|
||||
|
||||
// カードコントロール・パラメータ構造体
|
||||
typedef struct {
|
||||
u32 dmaNo; // DMA番号
|
||||
u32 cardCnt; // カードコントロール
|
||||
u32 op[2]; // コマンド
|
||||
} CardCtrlParam;
|
||||
|
||||
|
||||
// カード非同期読み込み関数型宣言
|
||||
typedef void (* ReadCardAsyncFuncp)(void *romp, void *ramp, s32 size, CardCtrlParam *paramp);
|
||||
|
||||
// カード割り込み関数型宣言
|
||||
typedef void (* CardIntrFuncp)(void);
|
||||
|
||||
// カード割り込みワーク構造体
|
||||
typedef struct {
|
||||
u8 *romp; // ROMアドレス
|
||||
u8 *ramp; // RAMアドレス
|
||||
s32 restSize; // 残りサイズ
|
||||
s32 blockSize; // ブロックサイズ
|
||||
CardCtrlParam param; // カードアクセス・パラメータ構造体
|
||||
ReadCardAsyncFuncp AsyncFuncp; // カード読み込み関数
|
||||
// u32 pad; // 予約
|
||||
} CardIntrWork;
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードDMA
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define DmaReadCard(dmaNo, destp) \
|
||||
\
|
||||
DmaSet(dmaNo, REG_CARD_DATA, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_CARD | \
|
||||
DMA_SRC_FIX | DMA_DEST_INC | \
|
||||
DMA_CONTINUOUS_ON | \
|
||||
DMA_32BIT_BUS | (1)))
|
||||
|
||||
#define DmaWriteCard(dmaNo, srcp) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, REG_CARD_DATA, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_CARD | \
|
||||
DMA_SRC_INC | DMA_DEST_FIX | \
|
||||
DMA_CONTINUOUS_ON | \
|
||||
DMA_32BIT_BUS | (1)))
|
||||
|
||||
//・カード-メモリ間のDMA転送を行います。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードのデータ転送はレディか?
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define IsCardDataReady() \
|
||||
\
|
||||
(*(vu32 *)REG_CARDCNT & CARD_DATA_READY)
|
||||
|
||||
//・カードのデータ転送はレディかどうかを返します。
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードデータ待ち
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define WaitCardData() \
|
||||
{ \
|
||||
while (!IsCardDataReady()) ; \
|
||||
}
|
||||
|
||||
//・カードデータ転送の終了を待ちます。
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードはビジーか?
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define IsCardBusy() \
|
||||
\
|
||||
(*(vu32 *)REG_CARDCNT & CARD_START)
|
||||
|
||||
//・カードがビジーかどうかを返します。
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カード待ち
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define WaitCard() \
|
||||
{ \
|
||||
while (IsCardBusy()) ; \
|
||||
}
|
||||
|
||||
//・カードの終了を待ちます。
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// コントロールパラメータ獲得(NORMALモード)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GetCardCnt4Normal() \
|
||||
\
|
||||
(GetCardCnt4Game() & CARD_SCRAMBLE_CLEAR_MASK)
|
||||
|
||||
//・NORMALモードのコントロールパラメータを獲得します。
|
||||
//・スクランブルの設定はクリアします。
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// コントロールパラメータ獲得(SECUREモード)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GetCardCnt4Secure() \
|
||||
\
|
||||
(*(vu32 *)MROMCNT_SECURE_BUF & (CARD_CLOCK_TYPE | CARD_LATENCY_MASK))
|
||||
|
||||
//・SECUREモードのコントロールパラメータを獲得します。
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// コントロールパラメータ獲得(GAMEモード)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GetCardCnt4Game() \
|
||||
\
|
||||
(*(vu32 *)MROMCNT_GAME_BUF)
|
||||
|
||||
//・GAMEモードのコントロールパラメータを獲得します。
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// コントロールパラメータ セット(NORMALモード)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SetCardCnt4Normal(param) \
|
||||
\
|
||||
(*(vu32 *)MROMCNT_GAME_BUF = param)
|
||||
|
||||
//・GAMEモードのコントロールパラメータをセットします。
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// コントロールパラメータ セット(SECUREモード)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SetCardCnt4Secure(param) \
|
||||
\
|
||||
(*(vu32 *)MROMCNT_SECURE_BUF = param)
|
||||
|
||||
//・SECUREモードのコントロールパラメータをセットします。
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// コントロールパラメータ セット(GAMEモード)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SetCardCnt4Game(param) \
|
||||
\
|
||||
(*(vu32 *)MROMCNT_GAME_BUF = param)
|
||||
|
||||
//・GAMEモードのコントロールパラメータをセットします。
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// レイテンシ2をレイテンシ1へ加算
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define AddLatency2ToLatency1(param) \
|
||||
\
|
||||
( (((param) & CARD_LATENCY2_CYCLES_MASK) \
|
||||
>> CARD_LATENCY2_CYCLES_SHIFT) \
|
||||
+ ((param) & ~CARD_LATENCY2_CYCLES_MASK) \
|
||||
)
|
||||
|
||||
//・カードの終了を待ちます。
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ROMエリア・マップ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define MROM_SECURE_AREA 0x4000 // SECUREエリア
|
||||
#define MROM_GAME_AREA 0x8000 // GAMEエリア
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ROMエリア・サイズ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define MROM_SEGMENT_SIZE 0x1000 // セグメントサイズ
|
||||
#define MROM_SECURE_SIZE 0x4000 // SECUREエリアサイズ
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メモリ・マップ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define MROMCNT_GAME_BUF (ROM_HEADER_BUF + 0x60) // GAMEモード・コントロールデータ
|
||||
#define MROMCNT_SECURE_BUF (ROM_HEADER_BUF + 0x64) // SECUREモード・コントロールデータ
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// レジスタ・アドレス
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define REG_CARDMST_SPI_CNT (REG_BASE + 0x1a0) // カードマスター&SPIコントロール
|
||||
|
||||
#define REG_CARD_MASTER_CNT (REG_BASE + 0x1a1) // カードマスターコントロール
|
||||
|
||||
#define REG_CARD_SPI_CNT (REG_BASE + 0x1a0) // カードSPIコントロール
|
||||
#define REG_CARD_SPI_DATA (REG_BASE + 0x1a2) // データ
|
||||
|
||||
#define REG_CARDCNT (REG_BASE + 0x1a4) // カードコントロール
|
||||
#define REG_CARD_CMD (REG_BASE + 0x1a8) // コマンド設定
|
||||
#define REG_CARD_DATA (REG_BASE + 0x100010) // データ
|
||||
|
||||
#define REG_CARD_PN_INIT (REG_BASE + 0x1b0) // カードPNデータ初期値
|
||||
#define REG_CARD_PNA_INIT_L (REG_BASE + 0x1b0)
|
||||
#define REG_CARD_PNB_INIT_L (REG_BASE + 0x1b4)
|
||||
#define REG_CARD_PNA_INIT_H (REG_BASE + 0x1b8)
|
||||
#define REG_CARD_PNB_INIT_H (REG_BASE + 0x1ba)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カード マスターコントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CARDMST_SEL_DEVICE 0x20 // デバイス選択
|
||||
#define CARDMST_SEL_ROM 0x00 // マスクROM/3Dメモリ選択
|
||||
#define CARDMST_SEL_SPI 0x20 // SPI選択
|
||||
|
||||
#define CARDMST_IF_ENABLE 0x40 // 割り込み要求 許可
|
||||
#define CARDMST_ENABLE 0x80 // カードイネーブル
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードSPI コントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CARDSPI_SCK_MASK 0x03 // シフトクロック数
|
||||
|
||||
#define CARDSPI_SCK_SHIFT 0
|
||||
|
||||
#define CARDSPI_SCK_4M 0x00 // シフトクロック 4MHz選択
|
||||
#define CARDSPI_SCK_2M 0x01 // 2MHz選択
|
||||
#define CARDSPI_SCK_1M 0x02 // 1MHz選択
|
||||
#define CARDSPI_SCK_524K 0x03 // 524KHz選択
|
||||
|
||||
#define CARDSPI_INV_CS 0x40 // 通信終了時に/CSダウン維持
|
||||
#define CARDSPI_BUSY 0x80 // ビジー
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードアクセス コントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CARD_LATENCY1_CYCLES_MASK 0x00001fff // レイテンシ1のサイクル数
|
||||
#define CARD_LATENCY2_CYCLES_MASK 0x003f0000 // レイテンシ2のサイクル数
|
||||
#define CARD_LATENCY_MASK 0x003f1fff // 上記を合わせたマスク
|
||||
#define CARD_PAGE_COUNT_MASK 0x07000000 // ページ数
|
||||
|
||||
#define CARD_LATENCY1_CYCLES_SHIFT 0
|
||||
#define CARD_LATENCY2_CYCLES_SHIFT 16
|
||||
#define CARD_PAGE_COUNT_SHIFT 24
|
||||
|
||||
// スクランブルフラグ群のセット
|
||||
#define CARD_SCRAMBLE_SET_MASK ( CARD_SCRAMBLE_UNIT_ON | CARD_DATA_SCRAMBLE_ON \
|
||||
| CARD_CMD_SCRAMBLE_ON)
|
||||
// スクランブルフラグ群のクリア
|
||||
#define CARD_SCRAMBLE_CLEAR_MASK ( ~(CARD_INIT_SCRAMBLE_PN \
|
||||
| CARD_SCRAMBLE_SET_MASK \
|
||||
| CARD_CLOCK_IN_LATENCY \
|
||||
| CARD_WRITE_MODE))
|
||||
|
||||
#define CARD_DATA_SCRAMBLE_ON 0x00002000 // データスクランブル ON
|
||||
#define CARD_SCRAMBLE_UNIT_ON 0x00004000 // スクランブル回路 ON
|
||||
#define CARD_INIT_SCRAMBLE_PN 0x00008000 // スクランブルPNデータ初期化
|
||||
#define CARD_CMD_SCRAMBLE_ON 0x00400000 // コマンドスクランブル ON
|
||||
|
||||
#define CARD_DATA_READY 0x00800000 // データ レディ
|
||||
|
||||
#define CARD_0_PAGE 0x00000000 // 0ページ
|
||||
#define CARD_1_PAGE 0x01000000 // 1ページ
|
||||
#define CARD_2_PAGES 0x02000000 // 2ページ
|
||||
#define CARD_4_PAGES 0x03000000 // 4ページ
|
||||
#define CARD_8_PAGES 0x04000000 // 8ページ
|
||||
#define CARD_16_PAGES 0x05000000 // 16ページ
|
||||
#define CARD_32_PAGES 0x06000000 // 32ページ
|
||||
#define CARD_STATUS 0x07000000 // ステータスリード
|
||||
|
||||
#define CARD_CLOCK_TYPE 0x08000000 // クロック タイプ
|
||||
#define CARD_CLOCK_150NS 0x00000000 // クロックサイクル 150ns
|
||||
#define CARD_CLOCK_240NS 0x08000000 // 240ns
|
||||
#define CARD_CLOCK_IN_LATENCY 0x10000000 // レイテンシ期間にクロック供給
|
||||
#define CARD_RESET_LO 0x00000000 // リセット信号レベル Lo
|
||||
#define CARD_RESET_HI 0x20000000 // Hi
|
||||
#define CARD_ACCESS_MODE 0x40000000 // アクセス モード
|
||||
#define CARD_READ_MODE 0x00000000 // リードモード
|
||||
#define CARD_WRITE_MODE 0x40000000 // ライトモード
|
||||
#define CARD_START 0x80000000 // スタート
|
||||
|
||||
// 構造体メンバ用定数
|
||||
|
||||
#define ST_CARD_0_PAGE 0 // 0ページ
|
||||
#define ST_CARD_1_PAGE 1 // 1ページ
|
||||
#define ST_CARD_2_PAGES 2 // 2ページ
|
||||
#define ST_CARD_4_PAGES 3 // 4ページ
|
||||
#define ST_CARD_8_PAGES 4 // 8ページ
|
||||
#define ST_CARD_16_PAGES 5 // 16ページ
|
||||
#define ST_CARD_32_PAGES 6 // 32ページ
|
||||
#define ST_CARD_STATUS 7 // ステータスリード
|
||||
|
||||
#define ST_CARD_CLOCK_150NS 0 // クロックサイクル 150ns
|
||||
#define ST_CARD_CLOCK_240NS 1 // 240ns
|
||||
|
||||
#define ST_CARD_READ_MODE 0 // リードモード
|
||||
#define ST_CARD_WRITE_MODE 1 // ライトモード
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// マスクROMコマンド
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// NORMALモード
|
||||
|
||||
#define MROMOP_N_OP_MASK 0xff000000 // コマンドマスク
|
||||
|
||||
#define MROMOP_N_READ_ID 0x90000000 // ID読み込み
|
||||
#define MROMOP_N_READ_PAGES 0x00000000 // ページ群読み込み
|
||||
#define MROMOP_N_LOAD_TABLE 0x9f000000 // フラッシュメモリ・テーブル設定
|
||||
#define MROMOP_N_CHANGE_MODE 0x3c000000 // SECUREモードへ遷移
|
||||
|
||||
#define MROMOP_N_READ_ID_PAD_L 0xffffffff
|
||||
#define MROMOP_N_READ_ID_PAD_H 0x00ffffff
|
||||
#define MROMOP_N_READ_PAGES_PAD_L 0xffffffff
|
||||
#define MROMOP_N_READ_PAGES_PAD_H 0x00ffffff
|
||||
#define MROMOP_N_READ_PAGES_ADDR_MASK 0x000ffffe
|
||||
#define MROMOP_N_CHANGE_SECURE_PAD_L 0xf00000ff
|
||||
#define MROMOP_N_CHANGE_SECURE_PAD_H 0x00000000
|
||||
|
||||
#define MROMOP_N_VAE_MASK_H 0x00ffffff
|
||||
|
||||
#define MROMOP_N_VBI_SHIFT_L 8
|
||||
|
||||
// SECUREモード
|
||||
|
||||
#define MROM_S_LATENCY1_CYCLES_MIN 0x00008f8 // レイテンシ1の最少サイクル数
|
||||
#define MROM_S_LATENCY2_CYCLES_MIN 0x0000018 // レイテンシ2の最少サイクル数
|
||||
|
||||
#define MROMOP_S_OP_MASK 0xf0000000 // コマンドマスク
|
||||
|
||||
#define MROMOP_S_READ_ID 0x10000000 // ID読み込み
|
||||
#define MROMOP_S_READ_SEGMENT 0x20000000 // 暗号セグメント読み込み
|
||||
#define MROMOP_S_PNG_ON 0x40000000 // PNジェネレータ ON
|
||||
#define MROMOP_S_PNG_OFF 0x60000000 // PNジェネレータ OFF
|
||||
#define MROMOP_S_CHANGE_MODE 0xa0000000 // GAMEモードへ遷移
|
||||
|
||||
#define MROMOP_S_VA_MASK_L 0xfff00000
|
||||
#define MROMOP_S_VA_MASK_H 0x00000fff
|
||||
#define MROMOP_S_VB_MASK_L 0x000fffff
|
||||
#define MROMOP_S_VC_MASK_H 0x0ffff000
|
||||
#define MROMOP_S_VD_MASK_L 0xfff00000
|
||||
#define MROMOP_S_VD_MASK_H 0x00000fff
|
||||
|
||||
#define MROMOP_S_VA_SHIFT_L 20
|
||||
#define MROMOP_S_VA_SHIFT_H 12
|
||||
#define MROMOP_S_VC_SHIFT_H 12
|
||||
#define MROMOP_S_VD_SHIFT_L 20
|
||||
#define MROMOP_S_VD_SHIFT_H 12
|
||||
|
||||
// GAMEモード
|
||||
|
||||
#define MROMOP_G_OP_MASK 0xff000000 // コマンドマスク
|
||||
|
||||
#define MROMOP_G_READ_ID 0xb8000000 // ID読み込み
|
||||
#define MROMOP_G_READ_PAGE 0xb7000000 // ページ読み込み
|
||||
|
||||
#define MROMOP_G_READ_PAGE_PAD_L 0x00ffffff
|
||||
#define MROMOP_G_READ_PAGE_PAD_H 0x00f00000
|
||||
#define MROMOP_G_READ_PAGE_MASK_L 0x00ffffff
|
||||
#define MROMOP_G_READ_PAGE_MASK_H 0xfffffffe
|
||||
#define MROMOP_G_READ_PAGE_ADDR_MASK 0x000ffffe
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_CARD_DEFINE_H
|
||||
190
trunk/IrisMainp/include/private/IrisCardDefineArm.s
Normal file
190
trunk/IrisMainp/include/private/IrisCardDefineArm.s
Normal file
@ -0,0 +1,190 @@
|
||||
;=======================================================================
|
||||
; IrisCardDefineArm.s
|
||||
; IRIS カード定数(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2003,2004 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
IF :DEF: _IRIS_CARD_DEFINE_H
|
||||
ELSE
|
||||
_IRIS_CARD_DEFINE_H * 1
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; メモリ・マップ
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
REG_CARDMST_SPI_CNT * (REG_BASE + 0x1a0) ; カードマスター&SPIコントロール
|
||||
|
||||
REG_CARD_MASTER_CNT * (REG_BASE + 0x1a1) ; カードマスターコントロール
|
||||
|
||||
REG_CARD_SPI_CNT * (REG_BASE + 0x1a0) ; カードSPIコントロール
|
||||
REG_CARD_SPI_DATA * (REG_BASE + 0x1a2) ; データ
|
||||
|
||||
REG_CARDCNT * (REG_BASE + 0x1a4) ; カードコントロール
|
||||
REG_CARD_CMD * (REG_BASE + 0x1a8) ; コマンド設定
|
||||
REG_CARD_DATA * (REG_BASE + 0x100010) ; データ
|
||||
|
||||
REG_CARD_PN_INIT * (REG_BASE + 0x1b0) ; カードPNデータ初期値
|
||||
REG_CARD_PNA_INIT_L * (REG_BASE + 0x1b0)
|
||||
REG_CARD_PNB_INIT_L * (REG_BASE + 0x1b4)
|
||||
REG_CARD_PNA_INIT_H * (REG_BASE + 0x1b8)
|
||||
REG_CARD_PNB_INIT_H * (REG_BASE + 0x1ba)
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; カード マスターコントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
CARDMST_SEL_DEVICE * 0x20 ; デバイス選択
|
||||
CARDMST_SEL_ROM * 0x00 ; マスクROM/3Dメモリ選択
|
||||
CARDMST_SEL_SPI * 0x20 ; SPI選択
|
||||
|
||||
CARDMST_IF_ENABLE * 0x40 ; 割り込み要求 許可
|
||||
CARDMST_ENABLE * 0x80 ; カードイネーブル
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; カードSPI コントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
CARD_SPI_SCK_MASK * 0x03 ; シフトクロック数
|
||||
|
||||
CARD_SPI_SCK_SHIFT * 0
|
||||
|
||||
CARD_SPI_SCK_4M * 0x00 ; シフトクロック 4MHz選択
|
||||
CARD_SPI_SCK_2M * 0x01 ; 2MHz選択
|
||||
CARD_SPI_SCK_1M * 0x02 ; 1MHz選択
|
||||
CARD_SPI_SCK_524K * 0x03 ; 524KHz選択
|
||||
|
||||
CARD_SPI_INV_CS * 0x40 ; 通信終了時に/CSダウン維持
|
||||
CARD_SPI_BUSY * 0x80 ; ビジー
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; カード コントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
CARD_LATENCY1_CYCLES_MASK * 0x00001fff ; レイテンシ1のサイクル数
|
||||
CARD_LATENCY2_CYCLES_MASK * 0x003f0000 ; レイテンシ2のサイクル数
|
||||
CARD_PAGE_COUNT_MASK * 0x07000000 ; ページ数
|
||||
|
||||
CARD_LATENCY1_CYCLES_SHIFT * 0
|
||||
CARD_LATENCY2_CYCLES_SHIFT * 16
|
||||
CARD_PAGE_COUNT_SHIFT * 24
|
||||
|
||||
CARD_DATA_SCRAMBLE_ON * 0x00002000 ; データスクランブル ON
|
||||
CARD_SCRAMBLE_UNIT_ON * 0x00004000 ; スクランブル回路 ON
|
||||
CARD_INIT_SCRAMBLE_PN * 0x00008000 ; スクランブルPNデータ初期化
|
||||
|
||||
CARD_CMD_SCRAMBLE_ON * 0x00400000 ; コマンドスクランブル ON
|
||||
CARD_DATA_READY * 0x00800000 ; データ レディ
|
||||
|
||||
CARD_0_PAGE * 0x00000000 ; 0ページ
|
||||
CARD_1_PAGE * 0x01000000 ; 1ページ
|
||||
CARD_2_PAGES * 0x02000000 ; 2ページ
|
||||
CARD_4_PAGES * 0x03000000 ; 4ページ
|
||||
CARD_8_PAGES * 0x04000000 ; 8ページ
|
||||
CARD_16_PAGES * 0x05000000 ; 16ページ
|
||||
CARD_32_PAGES * 0x06000000 ; 32ページ
|
||||
CARD_STATUS * 0x07000000 ; ステータスリード
|
||||
|
||||
CARD_CLOCK_TYPE * 0x08000000 ; クロック タイプ
|
||||
CARD_CLOCK_150NS * 0x00000000 ; クロックサイクル 150ns
|
||||
CARD_CLOCK_240NS * 0x08000000 ; 240ns
|
||||
CARD_CLOCK_IN_LATENCY * 0x10000000 ; レイテンシ期間にクロック供給
|
||||
CARD_RESET_LO * 0x00000000 ; リセット信号レベル Lo
|
||||
CARD_RESET_HI * 0x20000000 ; Hi
|
||||
CARD_ACCESS_MODE * 0x40000000 ; アクセス モード
|
||||
CARD_READ_MODE * 0x00000000 ; リードモード
|
||||
CARD_WRITE_MODE * 0x40000000 ; ライトモード
|
||||
CARD_START * 0x80000000 ; スタート
|
||||
|
||||
; 構造体メンバ用定数
|
||||
|
||||
ST_CARD_0_PAGE * 0 ; 0ページ
|
||||
ST_CARD_1_PAGE * 1 ; 1ページ
|
||||
ST_CARD_2_PAGES * 2 ; 2ページ
|
||||
ST_CARD_4_PAGES * 3 ; 4ページ
|
||||
ST_CARD_8_PAGES * 4 ; 8ページ
|
||||
ST_CARD_16_PAGES * 5 ; 16ページ
|
||||
ST_CARD_32_PAGES * 6 ; 32ページ
|
||||
ST_CARD_STATUS * 7 ; ステータスリード
|
||||
|
||||
ST_CARD_CLOCK_150NS * 0 ; クロックサイクル 150ns
|
||||
ST_CARD_CLOCK_240NS * 1 ; 240ns
|
||||
|
||||
ST_CARD_READ_MODE * 0 ; リードモード
|
||||
ST_CARD_WRITE_MODE * 1 ; ライトモード
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; マスクROMコマンド
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
; NORMALモード
|
||||
|
||||
MROMOP_N_READ_ID * 0x90000000 ; ID読み込み
|
||||
MROMOP_N_READ_HEADER * 0x00000000 ; ヘッダセグメント読み込み
|
||||
MROMOP_N_CHANGE_SECURE * 0x3c000000 ; SECUREモードへ遷移
|
||||
|
||||
MROMOP_N_READ_ID_PAD_L * 0xffffffff
|
||||
MROMOP_N_READ_ID_PAD_H * 0x00ffffff
|
||||
MROMOP_N_READ_HEADER_PAD_L * 0xffffffff
|
||||
MROMOP_N_READ_HEADER_PAD_H * 0x00ffffff
|
||||
MROMOP_N_CHANGE_SECURE_PAD_L * 0xf00000ff
|
||||
MROMOP_N_CHANGE_SECURE_PAD_H * 0x00000000
|
||||
|
||||
; SECUREモード
|
||||
|
||||
MROMOP_S_READ_ID * 0x10000000 ; ID読み込み
|
||||
MROMOP_S_READ_SEGMENT * 0x20000000 ; 暗号セグメント読み込み
|
||||
MROMOP_S_PNG_ON * 0x40000000 ; PNジェネレータ ON
|
||||
MROMOP_S_CHANGE_GAME * 0xa0000000 ; GAMEモードへ遷移
|
||||
|
||||
MROMOP_S_READ_ID_PAD_L * 0x00000000
|
||||
MROMOP_S_READ_ID_PAD_H * 0x0ffff000
|
||||
MROMOP_S_PNG_ON_PAD_L * 0x00000000
|
||||
MROMOP_S_PNG_ON_PAD_H * 0x0ffff000
|
||||
MROMOP_S_CHANGE_GAME_PAD_L * 0xffffffff
|
||||
MROMOP_S_CHANGE_GAME_PAD_H * 0x0fffffff
|
||||
|
||||
; GAMEモード
|
||||
|
||||
MROMOP_G_READ_PAGE * 0xb7000000 ; ページ読み込み
|
||||
|
||||
MROMOP_G_READ_PAGE_PAD_L * 0x00ffffff
|
||||
MROMOP_G_READ_PAGE_PAD_H * 0x00f00000
|
||||
MROMOP_G_READ_PAGE_MASK_L * 0x00ffffff
|
||||
MROMOP_G_READ_PAGE_MASK_H * 0xfffffffe
|
||||
MROMOP_G_READ_PAGE_ADDR_MASK * 0x000ffffe
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; マスクROMコマンド
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
; NORMALモード
|
||||
|
||||
MEM3DOP_N_READ_ID * 0x90000000 ; ID読み込み
|
||||
MEM3DOP_N_READ_PAGE * 0x00000000 ; ページ読み込み
|
||||
MEM3DOP_N_WRITE_PAGE * 0x10000000 ; ページ書き込み
|
||||
MEM3DOP_N_INPUT_SERIAL * 0x80000000 ; シリアルデータ入力
|
||||
MEM3DOP_N_READ_STAT * 0x70000000 ; ステータス読み込み
|
||||
|
||||
MEM3DOP_N_READ_ID_PAD_L * 0xffffffff
|
||||
MEM3DOP_N_READ_ID_PAD_H * 0x00ffffff
|
||||
MEM3DOP_N_READ_PAGE_PAD_L * 0x00000000
|
||||
MEM3DOP_N_READ_PAGE_PAD_H * 0x00ffffff
|
||||
MEM3DOP_N_WRITE_PAGE_PAD_L * 0xffffffff
|
||||
MEM3DOP_N_WRITE_PAGE_PAD_H * 0x00ffffff
|
||||
MEM3DOP_N_INPUT_SERIAL_PAD_L * 0x00000000
|
||||
MEM3DOP_N_INPUT_SERIAL_PAD_H * 0x00ffffff
|
||||
MEM3DOP_N_READ_STAT_PAD_L * 0xffffffff
|
||||
MEM3DOP_N_READ_STAT_PAD_H * 0x00ffffff
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_CARD_DEFINE_H
|
||||
|
||||
END
|
||||
|
||||
55
trunk/IrisMainp/include/private/IrisMainMemeoryDefine.h
Normal file
55
trunk/IrisMainp/include/private/IrisMainMemeoryDefine.h
Normal file
@ -0,0 +1,55 @@
|
||||
//====================================================================
|
||||
// IrisMainMemeoryDefine.h
|
||||
// IRIS メインメモリ定数
|
||||
//
|
||||
// Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
//====================================================================
|
||||
#ifndef _IRIS_MMEM_DEFINE_H
|
||||
#define _IRIS_MMEM_DEFINE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メインメモリ コマンド
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// 4サイクル目のデータ
|
||||
|
||||
#define MMEMD4_PARTIAL_REFRESH_NONE 0x0003 // パーシャルリフレッシュ無し
|
||||
#define MMEMD4_BURST_CONTINUOUS 0x001c // 連続バースト(224バイト)
|
||||
#define MMEMD4_BURST_MODE 0x0000 // バーストモード
|
||||
#define MMEMD4_PAGE_MODE 0x0020 // ページモード
|
||||
#define MMEMD4_SB1 0xffc0 // 1固定
|
||||
|
||||
// 5サイクル目のデータ
|
||||
|
||||
#define MMEMD5_1ST_R4_W3 0x0002 // 1stR/W = 4/3
|
||||
#define MMEMD5_BURST_WRITE 0x0000 // バーストライト
|
||||
#define MMEMD5_CLOCK_TRIGGER_UP 0x0100 // クロック立上り
|
||||
#define MMEMD5_BURST_LINER 0x0200 // バーストリニア・シーケンス
|
||||
#define MMEMD5_SB1 0xe430 // 1固定
|
||||
|
||||
// 6サイクル目のアドレス
|
||||
|
||||
#define MMEMP_SB1 0x004003fe // 1固定
|
||||
#define MMEMP_CLOCK_TRIGGER_UP 0x00000400 // クロック立上り
|
||||
#define MMEMP_BURST_WRITE 0x00000000 // バーストライト
|
||||
#define MMEMP_BURST_LINER 0x00001000 // バーストリニア・シーケンス
|
||||
#define MMEMP_1ST_R4_W3 0x00004000 // 1stR/W = 4/3
|
||||
#define MMEMP_BURST_MODE 0x00000000 // バーストモード
|
||||
#define MMEMP_PAGE_MODE 0x00010000 // ページモード
|
||||
#define MMEMP_BURST_CONTINUOUS 0x000e0000 // 連続バースト(224バイト)
|
||||
#define MMEMP_PARTIAL_REFRESH_NONE 0x00300000 // パーシャルリフレッシュ無し
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_MMEM_DEFINE_H
|
||||
49
trunk/IrisMainp/include/private/IrisMainMemoryDefineArm.s
Normal file
49
trunk/IrisMainp/include/private/IrisMainMemoryDefineArm.s
Normal file
@ -0,0 +1,49 @@
|
||||
;=======================================================================
|
||||
; IrisMainMemoryDefineArm.s
|
||||
; IRIS メインメモリ定数(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
IF :DEF: _IRIS_MMEM_DEFINE_H
|
||||
ELSE
|
||||
_IRIS_MMEM_DEFINE_H * 1
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; メインメモリ コマンド
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
; 4サイクル目のデータ
|
||||
|
||||
MMEMD4_PARTIAL_REFRESH_NONE * 0x0003 ; パーシャルリフレッシュ無し
|
||||
MMEMD4_BURST_CONTINUOUS * 0x001c ; 連続バースト(224バイト)
|
||||
MMEMD4_BURST_MODE * 0x0000 ; バーストモード
|
||||
MMEMD4_PAGE_MODE * 0x0020 ; ページモード
|
||||
MMEMD4_SB1 * 0xffc0 ; 1固定
|
||||
|
||||
; 5サイクル目のデータ
|
||||
|
||||
MMEMD5_1ST_R4_W3 * 0x0002 ; 1stR/W = 4/3
|
||||
MMEMD5_BURST_WRITE * 0x0000 ; バーストライト
|
||||
MMEMD5_CLOCK_TRIGGER_UP * 0x0100 ; クロック立上り
|
||||
MMEMD5_BURST_LINER * 0x0200 ; バーストリニア・シーケンス
|
||||
MMEMD5_SB1 * 0xe430 ; 1固定
|
||||
|
||||
; 6サイクル目のアドレス
|
||||
|
||||
MMEMP_SB1 * 0x004003fe ; 1固定
|
||||
MMEMP_CLOCK_TRIGGER_UP * 0x00000400 ; クロック立上り
|
||||
MMEMP_BURST_WRITE * 0x00000000 ; バーストライト
|
||||
MMEMP_BURST_LINER * 0x00001000 ; バーストリニア・シーケンス
|
||||
MMEMP_1ST_R4_W3 * 0x00004000 ; 1stR/W = 4/3
|
||||
MMEMP_BURST_MODE * 0x00000000 ; バーストモード
|
||||
MMEMP_PAGE_MODE * 0x00010000 ; ページモード
|
||||
MMEMP_BURST_CONTINUOUS * 0x000e0000 ; 連続バースト(224バイト)
|
||||
MMEMP_PARTIAL_REFRESH_NONE * 0x00300000 ; パーシャルリフレッシュ無し
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_MMEM_DEFINE_H
|
||||
|
||||
END
|
||||
|
||||
158
trunk/IrisSubp/IrisSubpMon/Blowfish.c
Normal file
158
trunk/IrisSubp/IrisSubpMon/Blowfish.c
Normal file
@ -0,0 +1,158 @@
|
||||
//*******************************************************************
|
||||
// IRIS-SUBPƒ‚ƒjƒ^ƒvƒ<76>ƒOƒ‰ƒ€ BlowfishŠÖ<C5A0>”
|
||||
//*******************************************************************
|
||||
#include "Blowfish.h"
|
||||
|
||||
#define MAXKEYBYTES 56 /* 448 bits */
|
||||
#define N 16
|
||||
|
||||
|
||||
//BLOWFISH_CTX blowfishCardTable;
|
||||
//BLOWFISH_CTX blowfishEepromTable;
|
||||
|
||||
|
||||
static unsigned int F(const BLOWFISH_CTX *ctx, unsigned int x);
|
||||
|
||||
|
||||
void InitBlowfish(BLOWFISH_CTX *ctx, const unsigned char *key, int keyLen)
|
||||
{
|
||||
int i, j, k;
|
||||
unsigned int data, datal, datar;
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
j = 0;
|
||||
for (i = 0; i < N + 2; ++i) {
|
||||
data = 0x00000000;
|
||||
for (k = 0; k < 4; ++k) {
|
||||
data = (data << 8) | key[j];
|
||||
j = j + 1;
|
||||
if (j >= keyLen)
|
||||
j = 0;
|
||||
}
|
||||
ctx->P[i] = ctx->P[i] ^ data;
|
||||
}
|
||||
|
||||
datal = 0x00000000;
|
||||
datar = 0x00000000;
|
||||
|
||||
for (i = 0; i < N + 2; i += 2) {
|
||||
EncryptByBlowfish(ctx, &datal, &datar);
|
||||
ctx->P[i] = datal;
|
||||
ctx->P[i + 1] = datar;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; ++i) {
|
||||
for (j = 0; j < 256; j += 2) {
|
||||
EncryptByBlowfish(ctx, &datal, &datar);
|
||||
ctx->S[i][j] = datal;
|
||||
ctx->S[i][j + 1] = datar;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
}
|
||||
|
||||
|
||||
void EncryptByBlowfish(const BLOWFISH_CTX *ctx, unsigned int *xl, unsigned int *xr)
|
||||
{
|
||||
unsigned int Xl;
|
||||
unsigned int Xr;
|
||||
unsigned int temp;
|
||||
int i;
|
||||
|
||||
#if !defined(DISABLE_SECURE_CODE) & !defined(DISABLE_ENCRYPT)
|
||||
|
||||
Xl = *xl;
|
||||
Xr = *xr;
|
||||
|
||||
for (i = 0; i < N; ++i) {
|
||||
Xl = Xl ^ ctx->P[i];
|
||||
Xr = F(ctx, Xl) ^ Xr;
|
||||
|
||||
temp = Xl;
|
||||
|
||||
Xl = Xr;
|
||||
Xr = temp;
|
||||
}
|
||||
|
||||
temp = Xl;
|
||||
Xl = Xr;
|
||||
Xr = temp;
|
||||
|
||||
Xr = Xr ^ ctx->P[N];
|
||||
Xl = Xl ^ ctx->P[N + 1];
|
||||
|
||||
*xl = Xl;
|
||||
*xr = Xr;
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
}
|
||||
|
||||
void DecryptByBlowfish(const BLOWFISH_CTX *ctx, unsigned int *xl, unsigned int *xr)
|
||||
{
|
||||
unsigned int Xl;
|
||||
unsigned int Xr;
|
||||
unsigned int temp;
|
||||
int i;
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
Xl = *xl;
|
||||
Xr = *xr;
|
||||
|
||||
for (i = N + 1; i > 1; --i) {
|
||||
Xl = Xl ^ ctx->P[i];
|
||||
Xr = F(ctx, Xl) ^ Xr;
|
||||
|
||||
/* Exchange Xl and Xr */
|
||||
temp = Xl;
|
||||
Xl = Xr;
|
||||
Xr = temp;
|
||||
}
|
||||
|
||||
/* Exchange Xl and Xr */
|
||||
temp = Xl;
|
||||
Xl = Xr;
|
||||
Xr = temp;
|
||||
|
||||
Xr = Xr ^ ctx->P[1];
|
||||
Xl = Xl ^ ctx->P[0];
|
||||
|
||||
*xl = Xl;
|
||||
*xr = Xr;
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
}
|
||||
|
||||
|
||||
unsigned int F(const BLOWFISH_CTX *ctx, unsigned int x) {
|
||||
unsigned int a, b, c, d;
|
||||
int y;
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
d = x & 0x00FF;
|
||||
x >>= 8;
|
||||
|
||||
c = x & 0x00FF;
|
||||
x >>= 8;
|
||||
|
||||
b = x & 0x00FF;
|
||||
x >>= 8;
|
||||
|
||||
a = x & 0x00FF;
|
||||
|
||||
y = ctx->S[0][a] + ctx->S[1][b];
|
||||
|
||||
y = y ^ ctx->S[2][c];
|
||||
y = y + ctx->S[3][d];
|
||||
|
||||
return y;
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
}
|
||||
44
trunk/IrisSubp/IrisSubpMon/Blowfish.h
Normal file
44
trunk/IrisSubp/IrisSubpMon/Blowfish.h
Normal file
@ -0,0 +1,44 @@
|
||||
//======================================================================
|
||||
// IRIS-SUBPモニタプログラム Blowfish関数
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SUBP_BLOWFISH_H
|
||||
#define _IRIS_SUBP_BLOWFISH_H
|
||||
|
||||
#include "IrisSubpMonTarget.h"
|
||||
|
||||
|
||||
typedef struct {
|
||||
unsigned int P[16 + 2];
|
||||
unsigned int S[4][256];
|
||||
} BLOWFISH_CTX;
|
||||
|
||||
|
||||
void InitBlowfish(BLOWFISH_CTX *ctx, const unsigned char *key, int keyLen);
|
||||
void EncryptByBlowfish(const BLOWFISH_CTX *ctx, unsigned int *xl, unsigned int *xr);
|
||||
void DecryptByBlowfish(const BLOWFISH_CTX *ctx, unsigned int *xl, unsigned int *xr);
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
void InitBlowfishFook(BLOWFISH_CTX *ctx, const unsigned char *key, int keyLen);
|
||||
void EncryptByBlowfishFook0(const BLOWFISH_CTX *ctx, unsigned int *xl, unsigned int *xr);
|
||||
void EncryptByBlowfishFook1(const BLOWFISH_CTX *ctx, unsigned int *x);
|
||||
void EncryptByBlowfishFook2(const BLOWFISH_CTX *ctx, unsigned int *x);
|
||||
void DecryptByBlowfishFook(const BLOWFISH_CTX *ctx, unsigned int *x);
|
||||
#else
|
||||
#define InitBlowfishFook() InitBlowfish()
|
||||
#define EncryptByBlowfishFook0(ctx, xl, xr) EncryptByBlowfish(ctx, xl, xr)
|
||||
#define EncryptByBlowfishFook1(ctx, x) EncryptByBlowfish(ctx, &(x)[1], &(x)[0])
|
||||
#define EncryptByBlowfishFook2(ctx, x) EncryptByBlowfish(ctx, &(x)[2], &(x)[1])
|
||||
#define DecryptByBlowfishFook(ctx, x) DecryptByBlowfish(ctx, &(x)[1], &(x)[0])
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
|
||||
#ifndef ENABLE_TEST_BLOWFISH
|
||||
|
||||
extern const BLOWFISH_CTX blowfishInitTable; // 初期化テーブル
|
||||
#else
|
||||
extern const BLOWFISH_CTX blowfishTestTable; // (テスト版)
|
||||
|
||||
#endif // ENABLE_TEST_BLOWFISH
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_SUBP_BLOWFISH_H
|
||||
277
trunk/IrisSubp/IrisSubpMon/BlowfishInitTable.s
Normal file
277
trunk/IrisSubp/IrisSubpMon/BlowfishInitTable.s
Normal file
@ -0,0 +1,277 @@
|
||||
;********************************************************************
|
||||
; Blowfishイニシャルキーテーブル
|
||||
;********************************************************************
|
||||
ALIGN
|
||||
GLOBAL blowfishInitTable
|
||||
blowfishInitTable
|
||||
|
||||
DCD 0x5f20d599, 0xb9f54457, 0xd9a4196e, 0x945a6a9e
|
||||
DCD 0xebf1aed8, 0x3ae27541, 0x32d08293, 0xd531ee33
|
||||
DCD 0x9a6157cc, 0x1ba20637, 0xf5723979, 0xbef6ae55
|
||||
DCD 0xfb691b5f, 0xe9f19de5, 0xa1d92cce, 0xe605325e
|
||||
DCD 0xcffed3fe, 0x0d0462d4
|
||||
|
||||
DCD 0xb7ecf58b, 0xbb79602b, 0x0d319512, 0x2bda3f6e
|
||||
DCD 0xf1f08488, 0x257e123d, 0xbbf12245, 0x061a0624
|
||||
DCD 0x28dfad11, 0x3481648b, 0x2933eb2b, 0xbdf2aa99
|
||||
DCD 0x9d95149c, 0x8cf5f79f, 0x29a19772, 0xcf5fd19d
|
||||
DCD 0x1a074d66, 0x4b4ad3de, 0xa3a7c985, 0x3a059517
|
||||
DCD 0xbf0a493d, 0xa28b890a, 0xdd49824a, 0x0bf19027
|
||||
DCD 0x6a1cebe9, 0x05457683, 0x617081ba, 0xde4b3f17
|
||||
DCD 0x39abcfae, 0x563af257, 0x8aad1148, 0x3f45e140
|
||||
DCD 0x54029bfa, 0xfb93a6ca, 0x6ffe4def, 0x9c87d8a3
|
||||
DCD 0x48d5ba08, 0xfd2d8d6a, 0x74f8156e, 0x8b52bebd
|
||||
DCD 0x9e8a2218, 0x073774fb, 0x4a6c361b, 0x6242ba19
|
||||
DCD 0x109179b9, 0x9665677b, 0xe82302fe, 0x778c99ee
|
||||
DCD 0x64865c3e, 0x86786d4d, 0xe2654fa5, 0x5adfb21e
|
||||
DCD 0x087ed00a, 0xac71b014, 0x1c83dbbd, 0x62a1d7b9
|
||||
DCD 0x7c63c6cd, 0xe6c36952, 0x12ce75bf, 0x04215d44
|
||||
DCD 0x3cd3fbfa, 0xd4631138, 0x49418595, 0x08f20946
|
||||
DCD 0x1fdc1143, 0x6d15c076, 0x70633c1f, 0x6c8087ea
|
||||
DCD 0x8b63bdc3, 0x372137c2, 0x2309eedc, 0x4d6a372e
|
||||
DCD 0x50f79073, 0x921cac30, 0x91231004, 0xaa07d24f
|
||||
DCD 0x9a4f3e68, 0x6a6064c9, 0xf32114c8, 0x124122d6
|
||||
DCD 0xe6cf2444, 0x0ddd568a, 0x85e14d53, 0x5a528c1e
|
||||
DCD 0xc284199c, 0x6ff15703, 0x58be00e3, 0xd5ed4cf6
|
||||
DCD 0x1f9c6421, 0x3c0355be, 0xaaffdc4a, 0x5de0dac9
|
||||
DCD 0xdee6bf5e, 0xf8b1d8f5, 0xb9b336ff, 0xdb956762
|
||||
DCD 0xed375f31, 0x9967704c, 0x3118b590, 0x99993d6c
|
||||
DCD 0xd3da42e4, 0xa0134225, 0x6c70d7ae, 0xc7cf55b1
|
||||
DCD 0x43d546d7, 0x443d1761, 0x8533e928, 0x93a2d0d5
|
||||
DCD 0x1f1225aa, 0x460bc5fb, 0x567697f5, 0x87bea645
|
||||
DCD 0xe86b94b1, 0x9933feb1, 0x6c3e1fae, 0x091d7139
|
||||
DCD 0xe4379000, 0x74753e10, 0x3b838cff, 0xf9b0f1b0
|
||||
DCD 0x42470501, 0xacd6f195, 0x9ee6387e, 0x3f267495
|
||||
DCD 0x185068b4, 0xb43043d0, 0x68e34b4c, 0xb64de5bf
|
||||
DCD 0xa00a8b95, 0x77322574, 0x2cf7a1cf, 0x5a1371d8
|
||||
DCD 0x51c9eaab, 0xefee0de8, 0x197e93e9, 0x38431ea7
|
||||
DCD 0xa12c1681, 0xcc73e348, 0xd36c2129, 0xd9a0ce5d
|
||||
DCD 0xa0437161, 0x64b51315, 0x192acf92, 0xa5b7addc
|
||||
DCD 0xf865869f, 0xfbe79f1a, 0x13b8fdf7, 0x6fdb276c
|
||||
DCD 0xf71c35df, 0x9b5b2c8d, 0x6438ab12, 0x31decc06
|
||||
DCD 0x11754ee8, 0xeafae364, 0xc25434eb, 0xeb343fad
|
||||
DCD 0x267d2c93, 0xf3569d36, 0xb3f6e15a, 0x9e4a6398
|
||||
DCD 0x9ae48332, 0x907d6084, 0xee0e132e, 0xa2364b93
|
||||
DCD 0x3816ec85, 0x020688e8, 0x3aa0f0bf, 0x9a6ad7ed
|
||||
DCD 0xcf57e173, 0xdcb844f8, 0xd159232e, 0x715295df
|
||||
DCD 0x4ba06199, 0x786e7fd5, 0x30c5a9ba, 0x328640d3
|
||||
DCD 0x9c0c329d, 0x2f02b737, 0xa99854ba, 0xc90413c4
|
||||
DCD 0xe7c8be8d, 0x2e50975d, 0x5922d693, 0x22bc270c
|
||||
DCD 0x20a7e092, 0x7f6f930f, 0xb5d39f4c, 0x740b2aa6
|
||||
DCD 0x107d4967, 0xc5d1cb26, 0x8ce77186, 0x5be99ca0
|
||||
DCD 0x01f61ab2, 0x5e9e8cee, 0xdb1af283, 0x84eae5e6
|
||||
DCD 0x7cd27659, 0x49a58df6, 0x16c24836, 0xa383bb52
|
||||
DCD 0x0c07b974, 0x2861ff3b, 0xe4e961e1, 0xaa156eef
|
||||
DCD 0x5de8ba4e, 0x32bb9605, 0x72fbb056, 0xc80e0f52
|
||||
DCD 0x76652542, 0xdef2af89, 0x01f02710, 0x97a7744b
|
||||
DCD 0x5426d507, 0x821f0954, 0x307d860a, 0x26b30e39
|
||||
DCD 0xbb570b9b, 0xaf310636, 0xd9fc79fd, 0x0c2b1030
|
||||
DCD 0xd79be1b3, 0xef5fdc7b, 0x4513f8d2, 0xbd75474d
|
||||
DCD 0x7e3c9646, 0xb53ef375, 0x3b9ac567, 0x6b295bb0
|
||||
DCD 0xc85b80de, 0x31b10515, 0xdd49ceb6, 0xaeb584ad
|
||||
DCD 0x3167dc60, 0x4efe3034, 0xa62f80bd, 0x213963bf
|
||||
DCD 0x7f35d986, 0x05226816, 0x2690e954, 0x516c078c
|
||||
DCD 0xd75531a4, 0x3ea80709, 0xc166532e, 0xc47bf2f8
|
||||
DCD 0xf1cf58f2, 0xe7a2c587, 0x87308f27, 0x6264a058
|
||||
DCD 0x88b91823, 0xc4cefa7c, 0x17adae98, 0xf35b4acc
|
||||
DCD 0x56d548e9, 0xc8f20dd3, 0xdb8c7392, 0xac562fd7
|
||||
|
||||
DCD 0x6992f981, 0xf632c64d, 0x218dc0e6, 0x618076e2
|
||||
DCD 0x6cdcbc11, 0x6919af93, 0xb9bfd09b, 0x67029f31
|
||||
DCD 0x83ee51a3, 0x0c7b2206, 0x404249ab, 0x7d01d5b8
|
||||
DCD 0x55f75ece, 0x99c53953, 0x9f87d846, 0xb464f7ba
|
||||
DCD 0xa1fa9ae3, 0x1068906d, 0x548aca30, 0xc3609fa7
|
||||
DCD 0x0d6bf519, 0xe698517a, 0xb4514398, 0x4fe935d6
|
||||
DCD 0x7b0fdfc3, 0xbd5c2fd6, 0x1961153a, 0xaacb4bf1
|
||||
DCD 0xc9646ddc, 0x561ec6d3, 0x504c38ef, 0xcc758671
|
||||
DCD 0xe94e0d0d, 0x5d06f628, 0xd3aa1b70, 0x39a8cf45
|
||||
DCD 0x2ea695ac, 0xd422e4b4, 0x5f37a874, 0xcc047a48
|
||||
DCD 0xd8404ca5, 0x0828b428, 0x52721c0d, 0x477df041
|
||||
DCD 0x4e533a19, 0x6b628458, 0x818ab593, 0xdc0d4e21
|
||||
DCD 0xc6a23fb4, 0x402bc9fc, 0xe90438da, 0x6b865a5e
|
||||
DCD 0x8525220c, 0x7c8d1168, 0x55951d92, 0xbb8eab4d
|
||||
DCD 0xb7e6a6da, 0x5a32b651, 0x05dd4105, 0x50560a2a
|
||||
DCD 0xcc471791, 0xb57ee6c9, 0x73db4a61, 0x33c85167
|
||||
DCD 0x746edaf5, 0x37c3542e, 0x08af6d0d, 0x5f8a15e8
|
||||
DCD 0xcd2159e2, 0x060cdea8, 0x5f6b775a, 0x3e6518db
|
||||
DCD 0x78de50c8, 0xb382b8e0, 0x32724e5d, 0x34c14f07
|
||||
DCD 0xb796ba23, 0x28a44e67, 0xeb62341e, 0xe9706a2d
|
||||
DCD 0x70c4422f, 0x9c315a4e, 0x28475bf9, 0x6f71daaa
|
||||
DCD 0x78b31f38, 0x1c6b92c4, 0x9a35f69e, 0xbf0e4db7
|
||||
DCD 0x412918cc, 0x5d354803, 0xc62bd055, 0x605caf29
|
||||
DCD 0x5e8e6974, 0xbdd47c9b, 0x7d64447b, 0x695d923f
|
||||
DCD 0x4b001fb6, 0xcf3583d4, 0x174e647e, 0x2ed58dae
|
||||
DCD 0x4e12289a, 0x08492b2e, 0x46c6ae5c, 0x6141ae85
|
||||
DCD 0xd2826f1e, 0x1f163751, 0xa459f60b, 0xaf5aca9a
|
||||
DCD 0x8b33d40d, 0x84f16320, 0xcfcb5c80, 0xd3b9b408
|
||||
DCD 0x62bd0516, 0x569b3183, 0xba9f9851, 0xb2aa5bb2
|
||||
DCD 0xb52c6b22, 0x63fa48d4, 0xfa585f2b, 0x0964fa61
|
||||
DCD 0xb8e038bb, 0xa860929d, 0x0e6f670d, 0x010df537
|
||||
DCD 0xd477c29f, 0x73f1ecfe, 0x7de03930, 0xe49861f5
|
||||
DCD 0x0455282c, 0x2fdb5556, 0x58e5ec6b, 0x8064b606
|
||||
DCD 0x4e1a2a6a, 0xc4d80f5b, 0x19522e0a, 0x30f562d9
|
||||
DCD 0x7b8cbe48, 0xa29b384f, 0xd3c9afc3, 0x4162c1c7
|
||||
DCD 0x2161b986, 0x4f996f57, 0x7bcebac1, 0x5e4d3bb5
|
||||
DCD 0x57448b8a, 0x705f135f, 0x47295b6d, 0xece238dc
|
||||
DCD 0x12655504, 0x4317e82a, 0x2add8ee1, 0xf794e2b3
|
||||
DCD 0xe65c6e09, 0x6df88aeb, 0x48544989, 0xbfad2ff5
|
||||
DCD 0xca4b94ea, 0x828739fc, 0xf2018a5f, 0x71e6f275
|
||||
DCD 0xde42d8d6, 0x281d2df1, 0xa37e88a6, 0x301d47a0
|
||||
DCD 0xdf71a3d9, 0x01cb1c49, 0xf2b136f8, 0x5d5822f0
|
||||
DCD 0xa0bd6b45, 0x4288b2bb, 0xce288cc7, 0x6390e893
|
||||
DCD 0x897c9008, 0xb77df53c, 0x554f2d04, 0x7efd1651
|
||||
DCD 0xc1bee879, 0xf8d412f2, 0x230584b4, 0x2bd2cca0
|
||||
DCD 0xadabe1fd, 0x6c55d10d, 0x4d944123, 0x054f3777
|
||||
DCD 0x17bf0c28, 0x6c6712b3, 0xf75ac38c, 0x6d2a8441
|
||||
DCD 0x271294d0, 0x9cedb42c, 0x8247ec4d, 0xb967d597
|
||||
DCD 0x55c09d1b, 0x8ee57e07, 0x3ee7a8e2, 0x3a0ee412
|
||||
DCD 0x3455452a, 0x5a2df9a2, 0x7c52ab1b, 0x555f1083
|
||||
DCD 0x435af1d2, 0xa4a7c62b, 0xe8951589, 0xf89d4bb4
|
||||
DCD 0x609fe375, 0xe6d65b78, 0x21e6440d, 0x2247bd06
|
||||
DCD 0xad00a453, 0x8513438d, 0xfcaaf739, 0xed7baf38
|
||||
DCD 0x542be4fc, 0xfc4c9850, 0xdff78085, 0xe122803c
|
||||
DCD 0x24deda94, 0x397ab0c6, 0xa10fdc38, 0x6ff9f4a7
|
||||
DCD 0x8b571863, 0x2e2a4184, 0xd9f253d4, 0xddd00f00
|
||||
DCD 0xa6196e99, 0x5becd00a, 0xc0ab2458, 0xec6506cb
|
||||
DCD 0x9438131a, 0x2f03670a, 0x77e3f73f, 0xc6337744
|
||||
DCD 0xe3d03914, 0x7908a2c0, 0x579940bb, 0x90010b41
|
||||
DCD 0x48cce1cd, 0xafb3db67, 0x4cf37488, 0xb1728f82
|
||||
DCD 0xc42923b5, 0xfc196c12, 0x9ca4468e, 0x876525c4
|
||||
DCD 0x8abe6dd3, 0x38031193, 0xf32b83ed, 0xea93a446
|
||||
DCD 0x1d85533b, 0x08f1d4ce, 0xfced2783, 0xbc181a9b
|
||||
DCD 0xdcae8bf9, 0x3850ab24, 0x104b72e9, 0x467b1722
|
||||
|
||||
DCD 0x6459ab5d, 0xf8ae40f3, 0xf9c8e5bb, 0x554e0326
|
||||
DCD 0xfeebeb7d, 0xe0e639f7, 0x2ebe110a, 0xed98ff28
|
||||
DCD 0x5642c9c0, 0x00fdc342, 0xa287aff6, 0x323f015b
|
||||
DCD 0x9a954792, 0x3d32a572, 0x9bd06bae, 0x9249d207
|
||||
DCD 0xfa4a78e3, 0xf27d06a1, 0x7477cf41, 0x0cb21404
|
||||
DCD 0x16648486, 0xa151bbd5, 0xd1f16fe5, 0x5ff7e2f2
|
||||
DCD 0xb84d2058, 0xddcfc757, 0x76bed8c5, 0x7e5ff63d
|
||||
DCD 0x888b2ae7, 0x3f381b24, 0x7723410e, 0xd44bf0f5
|
||||
DCD 0xa4fa1f0c, 0xcf5f800b, 0xdae0f645, 0x5359342f
|
||||
DCD 0x523c20fb, 0xb5355e62, 0x608bfe62, 0x5a86e363
|
||||
DCD 0xd16e1a15, 0x32bc4547, 0x3867ebb4, 0x336ee4ab
|
||||
DCD 0xa3edb53a, 0x4ee067ad, 0x62ee9541, 0x1d267162
|
||||
DCD 0x3062ef31, 0xac82d7af, 0x0405dcc2, 0xbf0797f5
|
||||
DCD 0x07235911, 0xe80264c0, 0xaf3ee597, 0xa659ac18
|
||||
DCD 0x90334a8b, 0x9c7c6e1c, 0x3c4c7e20, 0xbb64613e
|
||||
DCD 0x7e7c6bc5, 0x4cc59f3e, 0xf573ea9f, 0x4cc089d7
|
||||
DCD 0x2df4fbf4, 0x511b14ec, 0xc812c1d5, 0x4a0bdf10
|
||||
DCD 0x93bc9c8b, 0x3e3e6a45, 0xbaa9c17d, 0x07b4c1cd
|
||||
DCD 0x8668e1e4, 0x386db243, 0x5c0cfbf3, 0xde713766
|
||||
DCD 0xa06eef56, 0xa7654010, 0xbed0f798, 0x3637c80e
|
||||
DCD 0x7cca10ec, 0x1e84ab9c, 0x02761705, 0xaa524f1c
|
||||
DCD 0xa0c6c15f, 0x04d8b956, 0xa74d4484, 0x60ded859
|
||||
DCD 0x050e38e6, 0x3be1038f, 0x3304816d, 0xce0b306f
|
||||
DCD 0x33210569, 0x89bb26fb, 0x87aeb67d, 0xe007517e
|
||||
DCD 0x0a96f7ac, 0x5cc4f96b, 0x4744e41d, 0xe3fa5eb8
|
||||
DCD 0x42558478, 0xf75e484b, 0x8635477d, 0x05432b1d
|
||||
DCD 0xb88aec03, 0x763c061e, 0x431a480c, 0xed8ab7a7
|
||||
DCD 0x43c6131e, 0xdbef10ee, 0x833cfbec, 0xef4495b2
|
||||
DCD 0x4e5154d8, 0x1d44112d, 0x1e5936fb, 0xc3c1347a
|
||||
DCD 0x610057ca, 0x16a567ea, 0x55d0559b, 0x36d97fe1
|
||||
DCD 0xae7640d2, 0xb0ce01dc, 0xcbd5837a, 0x6bec9820
|
||||
DCD 0x349272c1, 0x375782f3, 0x36328a62, 0xae43900c
|
||||
DCD 0x789b5cae, 0x0265138e, 0xc17168fd, 0xa031b0fe
|
||||
DCD 0xc3b08224, 0xa76979b1, 0xd0ebd2f5, 0xdc32c082
|
||||
DCD 0x3c26c79e, 0xc1988d6d, 0xd0d422bb, 0x3eec330f
|
||||
DCD 0xdce1ccb9, 0x36774c6a, 0xbff91c14, 0x5f289f81
|
||||
DCD 0x29328571, 0xc4487590, 0xd8ce4ab3, 0x2f148f44
|
||||
DCD 0xef5740fd, 0xd97508aa, 0x6ed6d146, 0xc31f5532
|
||||
DCD 0x1f84fe18, 0xffd584fc, 0x481b5e71, 0x0e9586c3
|
||||
DCD 0xd3270828, 0x7b718338, 0x5463804c, 0xacb0569a
|
||||
DCD 0x31ca80cf, 0xf3feef09, 0x7e24afbe, 0x3f53fea6
|
||||
DCD 0x334a8dc2, 0xa622d168, 0xea7bad66, 0xb043b6de
|
||||
DCD 0x009525a1, 0x46753fa3, 0xec441114, 0x92bc95d7
|
||||
DCD 0x16a94ff0, 0x60976253, 0xf1410f2a, 0xeebe2471
|
||||
DCD 0xcd087f94, 0x85b39360, 0x3f00075b, 0x83280fd8
|
||||
DCD 0x9f69d19a, 0xc32edad1, 0xb9a20190, 0x662a4e6b
|
||||
DCD 0xa6aeda9d, 0x68d32aea, 0x9c0c0c2f, 0xed4a8cd2
|
||||
DCD 0x65579ee2, 0xa387099d, 0x5d32c4b4, 0x2b32d4c9
|
||||
DCD 0x1e71e0b1, 0x90e64d64, 0x401ee371, 0x84f37ded
|
||||
DCD 0x78c8ed0e, 0x71c0ae76, 0x05bb7227, 0xfb6402ea
|
||||
DCD 0xb56b48f3, 0xed3f9342, 0xd253139f, 0xec2afef7
|
||||
DCD 0xdb25471d, 0xc686913c, 0xfd11f08e, 0xf7367423
|
||||
DCD 0x7a9ef5a4, 0x4450537e, 0xd3ca47d4, 0xe66d38eb
|
||||
DCD 0x7f9471d9, 0x4b69c64a, 0xea52f411, 0xb08afe22
|
||||
DCD 0x598b6736, 0x2a80e6e8, 0x130465eb, 0x9edcecee
|
||||
DCD 0x05ecb15f, 0x9fe6596a, 0x896b595e, 0xca1af7bf
|
||||
DCD 0x6a5bf944, 0xe4038571, 0x70e06229, 0xcfc4416f
|
||||
DCD 0xe3ccb1b2, 0xa807a67e, 0x847fe787, 0x4b52db93
|
||||
DCD 0xdd7eec6c, 0x104824d4, 0x60049f69, 0x1848e674
|
||||
DCD 0xb92ce4f3, 0x7a502e4f, 0x6954d4df, 0xf3a78b2b
|
||||
DCD 0xf31fffce, 0x3901263e, 0x89849517, 0x4b4cf0b0
|
||||
DCD 0xc49f9182, 0xa59dac4b, 0x2517af74, 0xd332cac9
|
||||
DCD 0x848a89bc, 0xae0dcc89, 0x9cdba27c, 0xee91786a
|
||||
DCD 0x4e5d76ea, 0x69f56087, 0x02d46715, 0x3648afcf
|
||||
|
||||
DCD 0x6fbfea07, 0x8f062d66, 0xf9fe9ac4, 0x758790f6
|
||||
DCD 0x0fadf7b8, 0x3d5a1076, 0xb32eb059, 0xcc2c35c7
|
||||
DCD 0xcb2b5670, 0xc59637e3, 0x8a1b462f, 0x88c74622
|
||||
DCD 0x983226a7, 0x2286df61, 0x2f1cf48a, 0xaa09a187
|
||||
DCD 0xd3aea9cc, 0x1c4500bd, 0x8687549a, 0xffef8752
|
||||
DCD 0x8fa18f1e, 0x355c89c1, 0x3a2dda1b, 0xc2b2162c
|
||||
DCD 0x78e256f1, 0x97636bc1, 0xc98f56c5, 0xaa2c7f32
|
||||
DCD 0xaca8a6af, 0x88229120, 0x8b60e4de, 0x25424bf9
|
||||
DCD 0x9c7fe31a, 0x3a89192c, 0x36d4057e, 0xc25869cc
|
||||
DCD 0x2f8b32c1, 0x7aeb8590, 0xa1a55039, 0x66c59227
|
||||
DCD 0x584f20b0, 0x4383557e, 0x9ce2452b, 0x9012d8e4
|
||||
DCD 0x5683162c, 0xb3037916, 0x18612dad, 0x371f131a
|
||||
DCD 0x739ce1e2, 0xfdd5807b, 0xfc87512d, 0x1fd7aa7b
|
||||
DCD 0xaf8e7a2c, 0xcdbb8df4, 0x727c1195, 0xe26fee0b
|
||||
DCD 0x37deafb9, 0x8d8cde83, 0xb7670562, 0x568dc696
|
||||
DCD 0x62d70db6, 0x3646d6ba, 0xe6c88ebd, 0x106c2aea
|
||||
DCD 0x5b6bff14, 0x463c82fa, 0x464330b1, 0x9b7d8a51
|
||||
DCD 0x79833e92, 0xb25d555b, 0x90ce5e6c, 0x98538e62
|
||||
DCD 0xe56d0dc9, 0xc5cd572d, 0xe1ba5781, 0x728fb8e8
|
||||
DCD 0xdc134fe5, 0x15719dea, 0x8811b210, 0x7fd409d5
|
||||
DCD 0x2c7f655b, 0x114c383b, 0xfb8d5068, 0xbf59b09e
|
||||
DCD 0x4a898094, 0x12181ac5, 0x4ad15389, 0x8ce82910
|
||||
DCD 0xeab6ec1c, 0x8b17c746, 0xa8311525, 0xb1436ba2
|
||||
DCD 0x0bdbe29d, 0x11b09b87, 0xd2710e04, 0x82897729
|
||||
DCD 0x7f41660a, 0xff480b1d, 0xfd24bb72, 0x9ba148c2
|
||||
DCD 0xce7f7bfe, 0xd986db88, 0xb01c3b85, 0x0733a8dc
|
||||
DCD 0xe32e51bf, 0x97009a0e, 0x97c0061e, 0xb6d89d43
|
||||
DCD 0x6786c445, 0x88f8005f, 0x9e52a49a, 0x838aaac7
|
||||
DCD 0x18c5ec75, 0x2fc3ceae, 0x18f92b1a, 0xf51aaeff
|
||||
DCD 0x33b50b53, 0xe8fda751, 0x64a2e1a8, 0x431722b6
|
||||
DCD 0xd80acc80, 0x40ba3bae, 0x4a92d9d7, 0x1004df89
|
||||
DCD 0x2b189bee, 0x8a69776a, 0xb9f9f468, 0x6e1521a2
|
||||
DCD 0x033b1ee6, 0x609b3062, 0x9b257e41, 0x52c58f9e
|
||||
DCD 0xc2f80810, 0x1121a169, 0x795e3788, 0x10ff6635
|
||||
DCD 0xed6e1842, 0x1c6bb697, 0x6de5364e, 0xbfe4b47d
|
||||
DCD 0x05e0b920, 0xb8d5693a, 0xe0dcd5e3, 0x3e53acb9
|
||||
DCD 0xad57a407, 0x1848ff77, 0x49ac2a76, 0x75478e2a
|
||||
DCD 0x63679f6d, 0x398c3530, 0x6fd53905, 0xad5b3a64
|
||||
DCD 0x82bb0bca, 0xb1459952, 0x99363693, 0x442013af
|
||||
DCD 0x4402d836, 0x85923909, 0x974a4aff, 0xd763a687
|
||||
DCD 0x24b5b5c7, 0x6fb40fed, 0x1452580c, 0xd37ba6d9
|
||||
DCD 0x5838bc79, 0x843bbda1, 0x061ad806, 0xeaa86bfd
|
||||
DCD 0x0428694b, 0x9982ad37, 0x851b0efb, 0x735da8bd
|
||||
DCD 0x7558dccd, 0x6c63be0a, 0xe44ce748, 0x60042b30
|
||||
DCD 0xdad815b9, 0x8f758186, 0x1c8dd496, 0x7c85705d
|
||||
DCD 0xd57b671c, 0xcea66708, 0x70660a4b, 0xd463e5b7
|
||||
DCD 0xea828a5b, 0xe2ca6710, 0x8517eff4, 0x8a5f2a2f
|
||||
DCD 0x6af88297, 0xea1034d6, 0x3c5cc9eb, 0x46f849e1
|
||||
DCD 0xf6bddeeb, 0xaaf192a9, 0xb018a0a6, 0x1f0fd33a
|
||||
DCD 0x31ff6ff3, 0xd3444345, 0x88f79a50, 0xcec19609
|
||||
DCD 0x2cf2cc76, 0x82adba2c, 0x84188f77, 0x9c07d2c0
|
||||
DCD 0x4e839036, 0x434fa50b, 0x78ab043e, 0x09fbd64f
|
||||
DCD 0xda902401, 0x613a3c6f, 0x4a697f0d, 0x02302beb
|
||||
DCD 0x84e0dbb4, 0x35d7eca9, 0x857d37bf, 0x4ea9ce58
|
||||
DCD 0xa8c780e4, 0x486730d3, 0x2faf29eb, 0xa7b46a74
|
||||
DCD 0x923f0f3f, 0xaccaf3af, 0x94d94baf, 0x81ca43c0
|
||||
DCD 0xa1482f0d, 0xd2d527b0, 0x85054bef, 0x934ddea3
|
||||
DCD 0xbbf03c30, 0x27308f4a, 0x3ee3eb4c, 0x2f9aed64
|
||||
DCD 0xf082f13b, 0x7fcff4ba, 0xe1b0cb40, 0x57aabc7f
|
||||
DCD 0xf274c9d3, 0x220d43fa, 0x4e77f4d0, 0x7085d793
|
||||
DCD 0xb6bf991f, 0x30f135de, 0xf0715ea7, 0x7b2d016b
|
||||
DCD 0x5333f064, 0xf388390a, 0x6ba63a6b, 0x432fd235
|
||||
DCD 0xb5fd02cd, 0xaa5bbce9, 0x7e19a4d8, 0x81945d0e
|
||||
DCD 0xad776f9e, 0x93740ed6, 0x18c4e796, 0x19f5ad5f
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
277
trunk/IrisSubp/IrisSubpMon/BlowfishTestTable.s
Normal file
277
trunk/IrisSubp/IrisSubpMon/BlowfishTestTable.s
Normal file
@ -0,0 +1,277 @@
|
||||
;********************************************************************
|
||||
; Blowfishイニシャルキーテーブル(テスト版)
|
||||
;********************************************************************
|
||||
ALIGN
|
||||
GLOBAL blowfishTestTable
|
||||
blowfishTestTable
|
||||
|
||||
DCD 0x4a46f6a1, 0xf887db81, 0xf4376b4f, 0x0b9eec26
|
||||
DCD 0xb9df846e, 0x8ca411c1, 0x2c5a135c, 0xa06b7bcb
|
||||
DCD 0xcd61fedf, 0x2728b095, 0xbe22b311, 0x44d1e898
|
||||
DCD 0x5b703b54, 0x97114577, 0x67d8960a, 0x929b96b9
|
||||
DCD 0x2c7f8c34, 0x4b04fa76
|
||||
|
||||
DCD 0xcd70865b, 0x26359533, 0xd19a41fa, 0x9e597e8c
|
||||
DCD 0xf25b08ce, 0x60707b7f, 0x815c245a, 0x6eceba71
|
||||
DCD 0xc0094824, 0x100efe30, 0x40c1dc72, 0x05edd815
|
||||
DCD 0xac17dade, 0x60a21e58, 0xc55d4536, 0x04b0b435
|
||||
DCD 0xc9c03c65, 0xe2e9f11c, 0x93138f3c, 0xe2e96c96
|
||||
DCD 0xd6b44360, 0x19a848df, 0xd5440bb1, 0x876e76cc
|
||||
DCD 0x23b378fb, 0xff73b479, 0x460612a3, 0x723d8f73
|
||||
DCD 0x0dfc89a4, 0xc89ab0a0, 0x463daaed, 0xed802868
|
||||
DCD 0x2b88b026, 0x0ee4f376, 0xa2f569a7, 0xd02df1f9
|
||||
DCD 0x67613e5d, 0xdde56443, 0x8178f731, 0xb35a8e3d
|
||||
DCD 0xeb680e97, 0x1e32a8d0, 0x16f5b8bb, 0xd9046a54
|
||||
DCD 0x30ba0b86, 0x20174d9a, 0x5b290549, 0x84c41a0e
|
||||
DCD 0xd4096d8c, 0x704a3aa1, 0xe145c9d1, 0xa557a14b
|
||||
DCD 0xbadd2621, 0xb4755e78, 0xa6c57d89, 0x82ccbd36
|
||||
DCD 0x7527df4d, 0x0474cbe9, 0x8ccd8a8e, 0xe5f4ab84
|
||||
DCD 0xc0eca098, 0xbb97e24b, 0x49380d6b, 0xae9d53e1
|
||||
DCD 0x20d2a135, 0x2a4f2089, 0x959e535e, 0xc7150f35
|
||||
DCD 0x0008ddae, 0x1abab9e0, 0x05562aba, 0x8f1d9865
|
||||
DCD 0x62aecea4, 0x1ab41a12, 0x15ad25e3, 0xbeafc96e
|
||||
DCD 0x7d803c6a, 0x6de25cb8, 0xe64ad0a0, 0x9c5f8879
|
||||
DCD 0x42711a43, 0x2cc470f3, 0xf6addba3, 0xaac39e41
|
||||
DCD 0xf8e91246, 0x90980bb6, 0xb33de41c, 0x24d79b08
|
||||
DCD 0x6cd084e9, 0x080eb68c, 0x84136558, 0x77d4244c
|
||||
DCD 0x5d201fd9, 0xb2e5682d, 0x1880302d, 0xd5f3fa99
|
||||
DCD 0x71a11d92, 0xc9e2af1a, 0xe1c804df, 0x2d9ebee7
|
||||
DCD 0x2da9625e, 0x94deb7fd, 0xeded6198, 0x4dd61935
|
||||
DCD 0xe67443b1, 0x5213e1e7, 0x6dfdf6fd, 0x6ad71b6c
|
||||
DCD 0x37adc8cd, 0x41c84096, 0xc884ceec, 0xa30f33a8
|
||||
DCD 0x7b900d16, 0x48b35ad1, 0x505d9f32, 0x412dc939
|
||||
DCD 0xb95d16fb, 0x3b28e381, 0xc1857465, 0x5c0470dd
|
||||
DCD 0x7fb288d0, 0x6bd0408a, 0x22c39383, 0xe4aed9f3
|
||||
DCD 0x238879e3, 0xf26e0a21, 0x09a95ff2, 0x0252fd6f
|
||||
DCD 0x8c289f17, 0x2253bda4, 0xe79513ad, 0x3cdd8b4c
|
||||
DCD 0xaa950b46, 0x50fd411f, 0x63c15e69, 0x9ec1ae90
|
||||
DCD 0xf863ef11, 0x6f1a151f, 0xcdbe12cf, 0xaa3d8581
|
||||
DCD 0xe48181f3, 0xa52210bd, 0x93cbc5e0, 0xe61ebf37
|
||||
DCD 0x3eaea1f8, 0x2c606c99, 0xeef82ba8, 0xc17805ec
|
||||
DCD 0x8784bc41, 0x390bf39f, 0x585375a4, 0x70775e27
|
||||
DCD 0x55fbe67f, 0xf9af439a, 0x79ab3c2d, 0xa1e1e581
|
||||
DCD 0x68d87ed9, 0x184a0883, 0x9d88d137, 0xc629bf0f
|
||||
DCD 0xee2c4d1e, 0x0f6fe232, 0xc8f6889a, 0xa4495c00
|
||||
DCD 0x2e3f71c6, 0x57a072a1, 0x1ef48739, 0x17447c8e
|
||||
DCD 0x6848f422, 0xb49fe027, 0x4499dbd5, 0x1fdf5795
|
||||
DCD 0xf58b1677, 0x1ba20506, 0xfb7fddd1, 0x62410693
|
||||
DCD 0x9ebb6e66, 0x9f0daa55, 0xe693a20b, 0x0ada8b21
|
||||
DCD 0x4f17b80b, 0xdd7868b3, 0x5164e1d8, 0x9cd2f619
|
||||
DCD 0xd7811039, 0x82086954, 0xdf5cc03b, 0x1a99e593
|
||||
DCD 0x791ddf2a, 0x7dd4d3ea, 0x6f162c9d, 0x8be468fc
|
||||
DCD 0x9f6e7e0e, 0x07feb9d2, 0xa8c95922, 0x116d0ddb
|
||||
DCD 0x219a6a8a, 0x300e9420, 0xc0cd3072, 0xef4d9f56
|
||||
DCD 0x3c7695a5, 0x211f7b11, 0x3e40fd95, 0x21b15d2f
|
||||
DCD 0xdaa08678, 0xd76e836a, 0x3e3f0411, 0x67dc241b
|
||||
DCD 0xdf591603, 0x1d0cd5cf, 0x8719d73a, 0xff55f428
|
||||
DCD 0x31ba5a0a, 0x69086166, 0x34ef91f8, 0xb3bd5965
|
||||
DCD 0x862c239e, 0xa526a80f, 0x92ede2e0, 0x049b5692
|
||||
DCD 0xca83d0a0, 0x7de4b866, 0x3bc1e5a0, 0xf47004be
|
||||
DCD 0x70fb397c, 0x57bf0226, 0x6c9323eb, 0x651ae032
|
||||
DCD 0xece995af, 0x612a9926, 0x33ae9b95, 0xc92956e2
|
||||
DCD 0xd34d588b, 0x8ee12ef1, 0xa8de650f, 0x90ca4a5e
|
||||
DCD 0xec40eee8, 0x83ad7c85, 0x19eacbe7, 0x500cc9fd
|
||||
DCD 0xb7a08ab5, 0xedb22f62, 0xafdeabf1, 0x3d146b41
|
||||
DCD 0xb1db523e, 0xf2c0e966, 0x06ab4d5f, 0x505ee648
|
||||
DCD 0x1f71c0a1, 0x43c12324, 0x730091ce, 0xddf551c5
|
||||
DCD 0x474a1a43, 0x422ea2c0, 0x5ee96481, 0x35e08c56
|
||||
|
||||
DCD 0x1d3820aa, 0xd6726c1f, 0x45b00ccc, 0xa85491ca
|
||||
DCD 0xa3fd6ed3, 0xa89695fe, 0xc12beb97, 0x7eff99cd
|
||||
DCD 0x5db0dc5b, 0xb26abce6, 0x036a4401, 0x5a8840c8
|
||||
DCD 0xdbce41a7, 0x343cb974, 0x9cc9afc2, 0x2d4e2c30
|
||||
DCD 0x0e8269f7, 0x8bff82ce, 0x9e518bd9, 0xf397ebef
|
||||
DCD 0xefd46c83, 0x22a93aad, 0x84c2b0a0, 0x28a26694
|
||||
DCD 0x3324e6f6, 0x40f4539c, 0xda3609d1, 0xa9483f55
|
||||
DCD 0xdf704dda, 0x1f735c0b, 0x45102ec9, 0x71543b90
|
||||
DCD 0x4884b455, 0x229cd00d, 0x87cafe2b, 0x46d87ac7
|
||||
DCD 0xa0ab6c3f, 0x2be31c52, 0xfd24f2f5, 0xede7b0e3
|
||||
DCD 0x55fbf4a3, 0x49c8da6f, 0xc2a0ea0a, 0x0d5a115c
|
||||
DCD 0x2053dc30, 0x19cd3500, 0xb0f0ec60, 0x05a77b19
|
||||
DCD 0xb2db158b, 0xa570bd7c, 0x2413b797, 0x05bed629
|
||||
DCD 0x0e1df7ac, 0x0958aa4d, 0x0e3817ea, 0x83bd43e5
|
||||
DCD 0x5fcb3f51, 0xb8f8f0bd, 0x7ebd6452, 0xe1ced5a8
|
||||
DCD 0xf812dee6, 0x3ba09c46, 0xa01890d7, 0x8eed8e02
|
||||
DCD 0x53c73145, 0x7db33d18, 0x661a69e8, 0x3ef4f086
|
||||
DCD 0x519b2c50, 0xbace6f68, 0xf20ff75a, 0x3c251f2f
|
||||
DCD 0x229282a9, 0x5b135571, 0x481a0a45, 0x92d30aeb
|
||||
DCD 0xc32c7cf0, 0xcf6f3df5, 0x8be85f42, 0x6336e724
|
||||
DCD 0xaa6596f5, 0x33314ef7, 0x9ac02115, 0xe26f0c5e
|
||||
DCD 0x0cbcc701, 0xcafa791d, 0xa727a01e, 0x21bd128e
|
||||
DCD 0x1f350c49, 0xd3571b57, 0xd249a9e8, 0xbd85c611
|
||||
DCD 0x0ba903d1, 0x8302bcca, 0xdc89ba64, 0x08369ad7
|
||||
DCD 0x4fe6ebb0, 0x288ba46a, 0xa5cf9b04, 0x2609f604
|
||||
DCD 0x5f3698d8, 0xe40fc850, 0x49091ccb, 0x669895a7
|
||||
DCD 0xb35e6e4f, 0x3bed2be9, 0x4f841603, 0x5bf6c70e
|
||||
DCD 0x331bc24d, 0x11d138cb, 0xc1ae0a88, 0xfb985b54
|
||||
DCD 0x54828ebb, 0x2c96da55, 0x0af13542, 0x0774b6c6
|
||||
DCD 0x95f451ee, 0xaf4b3b77, 0x2a201b3e, 0xb822dc0d
|
||||
DCD 0x337f018d, 0x9eb8c10b, 0x1b3e3a19, 0xbfe9d57f
|
||||
DCD 0x8ffc736f, 0xeae418cf, 0xddf160f2, 0x037f811f
|
||||
DCD 0xee569e70, 0x7f6b3748, 0xfac6caff, 0xe540f41f
|
||||
DCD 0x42bfe95a, 0x8a2f723a, 0xc90f3a17, 0xe2acbbdd
|
||||
DCD 0x84930a13, 0xd627355e, 0x880c18c3, 0x91571ba0
|
||||
DCD 0x175d17a1, 0xf9c3023f, 0xfe710233, 0x30d9d488
|
||||
DCD 0x5e8ff406, 0xb1bc7144, 0x040a57d3, 0x3f5f702b
|
||||
DCD 0xf1182cf2, 0xa48be70e, 0x2710b09c, 0x2a761426
|
||||
DCD 0xe6b53260, 0x739a5ff9, 0x44573814, 0x00028530
|
||||
DCD 0x6883b926, 0x73fbd408, 0xa9e78906, 0x3cc79185
|
||||
DCD 0x8d4d1263, 0xf7227cf9, 0x87a62ad2, 0xdc799673
|
||||
DCD 0xe79c8caa, 0x34fa9369, 0xe4153f43, 0x4bb9f688
|
||||
DCD 0xc05b5600, 0xa3de2e7f, 0xa775b317, 0x585e21c2
|
||||
DCD 0x02a74643, 0x23f530ad, 0x3df9978d, 0xafb60023
|
||||
DCD 0x8cecde2e, 0x3344866e, 0x1ad981dd, 0x4918b9f6
|
||||
DCD 0xf5d24a8d, 0xdcd691cc, 0x0d81647d, 0x1859de1c
|
||||
DCD 0x7dc54442, 0x8303fc99, 0xd91ae065, 0x52b2c9c0
|
||||
DCD 0x0522a188, 0xee129947, 0x322fde74, 0xd33da79f
|
||||
DCD 0x9b0b41ac, 0xd1f0e908, 0x382101b3, 0xee60afb3
|
||||
DCD 0xf294ea92, 0xfdf4e422, 0x4e2dd429, 0x53d4ca12
|
||||
DCD 0xf83d4d69, 0x7ca99fc0, 0xdc80b12c, 0x92ae95c2
|
||||
DCD 0x5b962ed7, 0x1e4c8e02, 0x9d2baf33, 0xbda48e6e
|
||||
DCD 0x1d966a9f, 0x9b154721, 0x14447bb2, 0x2584e6fa
|
||||
DCD 0x15a0e697, 0xe2df5c32, 0xef43dc6a, 0x09aa7d7d
|
||||
DCD 0x7c037cab, 0x2edbef6b, 0x276f3965, 0x9615325f
|
||||
DCD 0x95634ad3, 0x7d14b74c, 0xcece5e78, 0x41c4b17b
|
||||
DCD 0x5b8931b8, 0xa960ca71, 0xbf1bc3af, 0x2ef5cbcc
|
||||
DCD 0xee25cbca, 0xefd9e40b, 0x2d2af1f8, 0x2b504f79
|
||||
DCD 0x23950771, 0xc459a9b3, 0xeaff71c1, 0x07b920bb
|
||||
DCD 0x7597cc0a, 0xc6e5244c, 0x3c513083, 0x3601005f
|
||||
DCD 0x662b9a2c, 0xcd8cc1c1, 0x305dfcb2, 0xf3f6a575
|
||||
DCD 0x57776b82, 0xedf78348, 0x8b3ba524, 0xe0475039
|
||||
DCD 0x7417a999, 0x0169b153, 0x65f20fef, 0xfe102fe4
|
||||
DCD 0xfdd7b23c, 0x7b201dcf, 0x2d59863d, 0xd24178eb
|
||||
|
||||
DCD 0x7a760f23, 0x8241f550, 0xc64beabf, 0x3380cb8a
|
||||
DCD 0x114d08d8, 0x18f76bde, 0x6e5f6e2b, 0x3121c61c
|
||||
DCD 0x8fd633f4, 0xe7afdfbd, 0x0333db83, 0x84e70127
|
||||
DCD 0x48f3634d, 0x83d709dd, 0x79987ff7, 0x063b2c27
|
||||
DCD 0x843e416d, 0x65a378bb, 0x8ef8439a, 0xf789c3cc
|
||||
DCD 0x2e4b4121, 0xc245e44c, 0xff193556, 0x34a0be4e
|
||||
DCD 0x620dd47f, 0x586c3a17, 0xd20012da, 0x718cf285
|
||||
DCD 0xa7f8533a, 0xf6f5cf6c, 0x0be9b734, 0xd1935d5b
|
||||
DCD 0x2506bd64, 0x2bf60d6e, 0x15c804bf, 0x13a69ce5
|
||||
DCD 0x071ed428, 0x24e7b02a, 0xeb3db5e8, 0x82421988
|
||||
DCD 0x9a453028, 0x5d174bf1, 0x2da5c77e, 0x9c2e2e8f
|
||||
DCD 0x63f0f8fc, 0x2be1ed90, 0x77c1b78c, 0x6c578857
|
||||
DCD 0x4076ce06, 0xf81a6cb8, 0x5db92f12, 0x15ab7171
|
||||
DCD 0x6d4b870d, 0x99193327, 0x42073d13, 0xb70a19b6
|
||||
DCD 0x43851600, 0xb522889b, 0xe52278cf, 0x722ac563
|
||||
DCD 0xa624a83c, 0x41703498, 0x2d585fa1, 0xba4a5b3c
|
||||
DCD 0x2bfe1197, 0xff05182c, 0x8408bee2, 0x9f48121f
|
||||
DCD 0x7922b4d1, 0x6664bf5e, 0x2bd9f7f4, 0x51ea46eb
|
||||
DCD 0x7bc520da, 0xad8580f8, 0x51b13918, 0xa05cf186
|
||||
DCD 0x96a463af, 0x242f6690, 0xc4e30e72, 0x550a4738
|
||||
DCD 0x57cabf8b, 0x2f302a46, 0x03a705bc, 0x7eb63047
|
||||
DCD 0x62bf270e, 0x44fe74b7, 0x3ae4201b, 0x67e2b944
|
||||
DCD 0xadcdb554, 0x71462dea, 0x3f8181a8, 0xd6b5b988
|
||||
DCD 0x26bff131, 0xa0e01570, 0x5545ae12, 0x93f74add
|
||||
DCD 0xf8cb7682, 0x794f3bb2, 0xff80da2d, 0x49899941
|
||||
DCD 0x39d5801f, 0x07619fff, 0x15cdd0db, 0x1ffaa2ce
|
||||
DCD 0x42854b62, 0x7b9eaeba, 0x0255fce0, 0x5e021626
|
||||
DCD 0x94ba16b6, 0x23b8eabc, 0x60edf8a4, 0x722334f2
|
||||
DCD 0xe0e03074, 0xf24c6abe, 0x1ff5738b, 0x4b714d54
|
||||
DCD 0x124d3ed3, 0xcf61bdb0, 0xa3e510ea, 0xf0e89b3b
|
||||
DCD 0x7c0c4086, 0xb80a8f06, 0x5e7a1fcc, 0x0c944a7b
|
||||
DCD 0x834ca2f0, 0x0535d835, 0x2cb51685, 0xb0a1a73b
|
||||
DCD 0x650067f7, 0x8c0fe4f3, 0xb8f5cb4b, 0x1c56dacc
|
||||
DCD 0xd9f52c39, 0xa410e041, 0x577f4797, 0x062b486b
|
||||
DCD 0x53e8378d, 0x5fd38d55, 0x38918478, 0xfccb7ee7
|
||||
DCD 0xf09bfbb6, 0x65148bdd, 0xbbab0c9d, 0xf454c0e2
|
||||
DCD 0x4ff63ec2, 0x42a29ea1, 0xa0b28b20, 0x57ed9d13
|
||||
DCD 0x48450cd1, 0x299cb22e, 0x46ce322b, 0xa1de4d20
|
||||
DCD 0x23f03d35, 0xd769ebc3, 0x161343e6, 0x1d7de909
|
||||
DCD 0x721db01c, 0x6cdcfa43, 0x707d3751, 0xed0a30ee
|
||||
DCD 0xef6e149e, 0xdf4e330c, 0xbcc7f6a0, 0xf62e3ca5
|
||||
DCD 0x5056cbe9, 0xc2f1616f, 0x62499137, 0x95706c54
|
||||
DCD 0x5a7e91dc, 0xec659c3f, 0x5d7f4e62, 0x3d865b1e
|
||||
DCD 0x2f172b51, 0x109f5710, 0xbd80cafd, 0x9a5ce374
|
||||
DCD 0x7d967f96, 0x0918958c, 0x917b4c42, 0x79321830
|
||||
DCD 0x5b53f509, 0x8ced3e11, 0xa85e80ea, 0x83aa1888
|
||||
DCD 0x94706df1, 0x0e7ee640, 0xdc8dfa43, 0x839349da
|
||||
DCD 0xdf1086a1, 0x008ad8e7, 0x80e8aac0, 0x1463d245
|
||||
DCD 0x3f0a4a0b, 0x750054d3, 0x80cb5e28, 0x2410b552
|
||||
DCD 0x57137422, 0x26b9af08, 0x514ffdab, 0xc57564b4
|
||||
DCD 0x88ae77b9, 0x65a04a8d, 0xb754becd, 0x6fcd10dc
|
||||
DCD 0x3d8e1857, 0xa90d1232, 0xf34bd8f7, 0x13448440
|
||||
DCD 0x922e6998, 0x19cf7e25, 0xaa2918e1, 0x890b60b0
|
||||
DCD 0x7030ab18, 0x22417447, 0xe42da9a5, 0x86515844
|
||||
DCD 0x73087c5b, 0x6f4c50e9, 0x84cdfe3f, 0x0e9942f5
|
||||
DCD 0x398a2c77, 0xfc986c58, 0x9a9dec00, 0xd5ca4c52
|
||||
DCD 0x33394f6e, 0x1b71fd37, 0xeaa2f109, 0x1954de63
|
||||
DCD 0x4200de8e, 0x7d046b7c, 0x16d107fc, 0x1a8fcff2
|
||||
DCD 0x4b55ae3c, 0xbab53607, 0xb7cbb780, 0xe043c98e
|
||||
DCD 0xf87098e5, 0xe138e25d, 0x40ff8057, 0x86940083
|
||||
DCD 0x3ce76995, 0x4cb9d05f, 0x0f581907, 0x5e3dac5d
|
||||
DCD 0x83a2c1b9, 0xd4f1a3ce, 0x71cf27ea, 0xd997f122
|
||||
DCD 0xa655447e, 0x1b59d11f, 0xf458295c, 0x7f72b78c
|
||||
DCD 0xd496a483, 0x5ea9055c, 0xc0189738, 0x3db25255
|
||||
|
||||
DCD 0x2d111ffb, 0xa706e838, 0x251b91d9, 0x304c40ec
|
||||
DCD 0x4b3525be, 0x15f10969, 0x35fc8d6f, 0xcf87942c
|
||||
DCD 0xee977ca8, 0x3194a850, 0x54fee439, 0xe528af54
|
||||
DCD 0x25698e1e, 0x361b8f99, 0x7bbf7a35, 0xcf0ee45d
|
||||
DCD 0xe46f6833, 0x333e00c7, 0xe5c63a77, 0x72d7d30b
|
||||
DCD 0x0aa86fdc, 0x0375daba, 0x3a84ee54, 0x8d23cf64
|
||||
DCD 0xeb5ebdfa, 0x20f636d2, 0xd8991ab0, 0x16734342
|
||||
DCD 0x0980bb8b, 0x2341def2, 0xddee4deb, 0x618ea347
|
||||
DCD 0xe46bbeb0, 0x2ce56bc1, 0xd101ae6c, 0x935228ad
|
||||
DCD 0x56792ec0, 0x6d79fbc3, 0xaa98039a, 0xd5a8b85e
|
||||
DCD 0xac30ac15, 0xc8fca8ca, 0xf4e13bc5, 0xbcac4bcf
|
||||
DCD 0xb8027c04, 0x2deefacb, 0x75fcfebc, 0xe0b203b9
|
||||
DCD 0x7052e4c0, 0x232ab7f3, 0x190fac4b, 0xd1174bc3
|
||||
DCD 0xc54423fd, 0x8ec85ec4, 0x60c1f887, 0x6a67736a
|
||||
DCD 0xb4a4c3f1, 0x7d435e1e, 0x2598d0c9, 0x27092040
|
||||
DCD 0xaf74052a, 0xa289d174, 0x1e9101b2, 0x6d290e1b
|
||||
DCD 0xd8c66be8, 0x70b54fc4, 0x6a0d981d, 0x1649da16
|
||||
DCD 0xd8ab187f, 0x112dc8b9, 0x517c8ef2, 0xa0feaaa8
|
||||
DCD 0x01a95519, 0x5145c21e, 0x51628a1b, 0x3b13f266
|
||||
DCD 0x4ed13baa, 0xe34e1bf7, 0xe8e4c670, 0xa37acadc
|
||||
DCD 0xb21013d8, 0xbf469fee, 0xb149f1d2, 0x35eec167
|
||||
DCD 0xa5315b49, 0x724bcacb, 0xfc8bac25, 0x20b70168
|
||||
DCD 0xdb829cff, 0xa0c8d14a, 0x647a9274, 0x7e6449e0
|
||||
DCD 0xf3073316, 0xb3b91ab0, 0x1a712fb5, 0xaf92ca1e
|
||||
DCD 0xcfd46fbd, 0x74dabdf6, 0x1e8c192a, 0xabb6369d
|
||||
DCD 0x61bd95c7, 0x3346b2c2, 0x112ed78c, 0x734299cb
|
||||
DCD 0xadf16e9f, 0x90d9c452, 0x229e47ea, 0x07340abf
|
||||
DCD 0x7358eb8f, 0xb1ae7ea5, 0x41562eeb, 0xe0d58f71
|
||||
DCD 0x99be2884, 0x8a86e155, 0xa9da6d22, 0x73e0587e
|
||||
DCD 0xd4357f4a, 0xf704c44f, 0x23381b31, 0xc48a1dd5
|
||||
DCD 0x4ebe8b98, 0xa187266a, 0x45f66098, 0x13e71b79
|
||||
DCD 0x22f58514, 0x37386d82, 0xc8da6692, 0x133fce69
|
||||
DCD 0x1dd81184, 0x413479fe, 0xd5f19d9e, 0xc98a4fe7
|
||||
DCD 0x8e11080b, 0xe503d16b, 0xe418ad10, 0x0bd0a216
|
||||
DCD 0x10699750, 0x78381ca1, 0xfa59a938, 0xeaf9c653
|
||||
DCD 0xfb57fa86, 0x118a69c0, 0x71a8d96c, 0xfa90d4e6
|
||||
DCD 0x8f71c373, 0x219cd448, 0xdef7378b, 0x1091c20b
|
||||
DCD 0xf5c45ac2, 0xf6f453dc, 0x23f57355, 0x3ce4af40
|
||||
DCD 0x88728468, 0x394e5b9f, 0x8ccd2a2b, 0xb34c3c46
|
||||
DCD 0x1649945b, 0x1e26db73, 0xa28a1a19, 0x00299280
|
||||
DCD 0x5bc3153c, 0x5e57cbbc, 0x724e0efe, 0x33547d75
|
||||
DCD 0x975e83bf, 0x4007bccc, 0x5d618dd1, 0x4a736824
|
||||
DCD 0x04f8c27b, 0x0e85b5f5, 0xe1a2c7f3, 0x02ed2fb0
|
||||
DCD 0x8dbe2bef, 0xeddd7222, 0x36ec5780, 0xd5d28d5c
|
||||
DCD 0x725a076e, 0xea2026f0, 0xa2ddac96, 0x1a33a523
|
||||
DCD 0x02ea4733, 0xcb7dafc8, 0x4f48395b, 0xbb556441
|
||||
DCD 0x35ffdeb6, 0x10a3d7ae, 0x8bd12776, 0x05f1954e
|
||||
DCD 0x71eb73dd, 0x9d5fce77, 0x4fcb38c3, 0x2214fa74
|
||||
DCD 0xd5cbd35c, 0x22fa10c1, 0x9a093b77, 0xe77d9bec
|
||||
DCD 0xce1b6f8a, 0x7de7b617, 0xf628c408, 0x8075c24f
|
||||
DCD 0x8dc66e84, 0x0acabccf, 0x508e1667, 0x60860869
|
||||
DCD 0xe9124705, 0xb078f70f, 0xfa3a5d40, 0x4d879462
|
||||
DCD 0x92b0ceaf, 0xc43888af, 0x46788685, 0xee4a3f9f
|
||||
DCD 0xb349a574, 0x2ec7130f, 0x9474228e, 0x4e792129
|
||||
DCD 0x29dd3e46, 0x05cc67fa, 0x2adda55d, 0x86657225
|
||||
DCD 0x2e615073, 0x00bde29b, 0x724621fd, 0x93566aeb
|
||||
DCD 0x963a885e, 0xb54b452b, 0x888f81b4, 0x13482851
|
||||
DCD 0x18892eaa, 0xe005315d, 0xdec4faa1, 0xef014fe7
|
||||
DCD 0x7d4f14c6, 0x6932aee5, 0x4cfc1292, 0xeceac113
|
||||
DCD 0xa70c4070, 0x78f22a86, 0x34838e27, 0xa672b6cd
|
||||
DCD 0x185191c2, 0xcb5ce063, 0xe05e1497, 0x314cce8f
|
||||
DCD 0xbf0aeb87, 0x7636aee5, 0xf6793f41, 0x2d5416a6
|
||||
DCD 0xfb85d95f, 0x6b9394f8, 0xccb7bb64, 0x49573004
|
||||
DCD 0x7c00df3c, 0xb7b9e311, 0xb597eaad, 0x8234af78
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
239
trunk/IrisSubp/IrisSubpMon/IRIS-SUBPモニタ履歴.txt
Normal file
239
trunk/IrisSubp/IrisSubpMon/IRIS-SUBPモニタ履歴.txt
Normal file
@ -0,0 +1,239 @@
|
||||
IRIS-SUBPモニタプログラム変更履歴
|
||||
|
||||
V0.76
|
||||
・IPL2カートリッジブート・バージョン
|
||||
V0.75
|
||||
・カードバス切り換え実験バージョン
|
||||
V0.74
|
||||
・デバッガ4MB動作バージョン
|
||||
V0.73
|
||||
・カートリッジブート仕様
|
||||
V0.72
|
||||
・3Dメモリ擬似対応版
|
||||
V0.71
|
||||
・IPL2ブート実験版
|
||||
V0.70(TS040304提出バージョン / CRC16 0x5835)
|
||||
・IPL2ブート対応版
|
||||
・ARM7側をメインメモリへもブートできるように拡張
|
||||
・初期化シーケンス最適化
|
||||
・RTC読み込みをメモリ初期化直後へ移動
|
||||
・IPL2へ渡すタイマーをRTC読み込み直後に開始、セキュア処理完了後に停止(IPL2のRTC動作確認のマージンを稼ぐため)
|
||||
・メインメモリ先頭64KB初期化
|
||||
・IPL2 のメインメモリへのロード可能領域上限を32バイト下位へ移動
|
||||
・IPL2 の内部ワークRAM へのロード可能領域上限を32バイト下位へ移動
|
||||
・IPL2 の内部ワークRAM へのロード可能領域下限をセキュアワーク0x2200バイト上位へ移動
|
||||
・カードSECUREコマンドレイテンシ最小サイクル数定義(必ずGAMEモードへ遷移するため)
|
||||
・スクランブル乱数算出時のSP参照を vc_dummy から vd へ移動
|
||||
・enableReadSecure の条件へ !enableCardNormalOnly を追加
|
||||
・IPL2のCRC不一致時メインメモリ先頭64KBクリア条件を flashCrcError のみへ変更
|
||||
・圧縮システムコール・エラー時のTerminate処理 追加
|
||||
・サインテーブル縮小
|
||||
|
||||
V0.62
|
||||
・3Dメモリ擬似対応版
|
||||
V0.61
|
||||
・IPL2ブート実験版
|
||||
V0.60(TS提出バージョン / CRC16 0x4809)
|
||||
・IPL2ブート対応版
|
||||
|
||||
V0.59
|
||||
・IPL2ブート対応版
|
||||
V0.58
|
||||
・IPL2ブート実験版
|
||||
・RTC処理変更(ウェイト変更 30us → 6us)
|
||||
・IsMmem8MB() 変更
|
||||
・フラッシュARM7ロード制限拡張
|
||||
・InitReadFlash() 修正
|
||||
・SIOハンドシェイクデータをセキュアHI領域へ隠蔽
|
||||
・終了同期番号 4 → 3 変更
|
||||
V0.57
|
||||
・IPL2ブート対応版
|
||||
V0.56
|
||||
・IPL2ブート実験版
|
||||
・SVC_Div()/SVC_DivRem()/SVC_Sqrt() 追加
|
||||
・UC_*StreamFuncp() 引数変更
|
||||
・InitVA_VB_VD() の vc_dummy 計算式変更(SecureWork 移動のため)
|
||||
・enableReadSecure の条件に !rtcResetError を含める
|
||||
・enableCardNormal 時のデバッガ起動対応
|
||||
・SharedWork 構造体へ cardHeaderError メンバ追加
|
||||
・ChangeObjectTableFook() 内で ChangeObjectTable() への引数を与える
|
||||
・RTC 初期化バグ修正
|
||||
V0.55
|
||||
・IPL2ブート対応版
|
||||
V0.54
|
||||
・IPL2ブート実験版
|
||||
・TerminateFuncp の NULLポインタチェック
|
||||
・DecryptObjectFileFook()/ChangeObjectTableFook()
|
||||
/CopyBiosAreaFook()/CpuSetFast32Fook() 追加
|
||||
・フラッシュ CRC エラー時、SECURE領域クリア
|
||||
V0.53
|
||||
・カートリッジブート仕様
|
||||
・サインテーブル追加
|
||||
V0.52
|
||||
・IPL2ブート対応版
|
||||
V0.51
|
||||
・IPL2ブート実験版
|
||||
・UnCompLZ77Short()/UnCompHuffman32() の内部初期化関数への第3引数変更
|
||||
・システムコールの整理
|
||||
・暗号関数のフック関数群 追加(隠蔽化のため)
|
||||
・ARM7ユーザ最大ロードサイズ 32KB → 64KB
|
||||
・サウンドSINテーブル追加
|
||||
・サウンドボリュームテーブル更新
|
||||
V0.50
|
||||
・3Dメモリ擬似対応版
|
||||
V0.49
|
||||
・デバッガ通信実験版(フラッシュ書き込み無し)
|
||||
V0.48
|
||||
・デバッガ通信実験版(フラッシュ書き込み有り)
|
||||
・デバッガ・ロードチェック強化
|
||||
・SIO 通信データクリア処理の変更
|
||||
V0.47
|
||||
・IPL2ブート対応版
|
||||
V0.46
|
||||
・IPL2ブート実験版
|
||||
・暗号テーブル更新
|
||||
・カード・ロードパラメータチェック強化
|
||||
・SPI割り込み要求廃止
|
||||
V0.45
|
||||
・フラッシュヘッダのフォーマット変更
|
||||
・セキュリティ有りデバッガ通信
|
||||
V0.44
|
||||
・デバッガ通信実験版(フラッシュ書き込み無し)
|
||||
・SIO "ID" 文字列チェック追加
|
||||
V0.43
|
||||
・デバッガ通信実験版(フラッシュ書き込み有り)
|
||||
・CRC初期値 0 → 0xffff
|
||||
V0.42
|
||||
・デバッガ通信実験版(セキュリティ無し)
|
||||
・スクランブルの強制設定位置をSECUREエリア読み込みシーケンス部へ移動
|
||||
・SECURE領域のCRC計算時にRTCリセットエラーもチェック
|
||||
V0.41
|
||||
・IPL2ブート対応版
|
||||
V0.40
|
||||
・IPL2ブート実験版
|
||||
・IPL2サイズ制限削除
|
||||
・IPL2圧縮タイプチェック 4bit → 8bit
|
||||
・暗号化オブジェクト対応
|
||||
・デバッガモニタのADバスブート削除
|
||||
・デバッガモニタの有効範囲を拡張メモリ領域へ制限
|
||||
・デバッガとのSIOハンドシェイク暫定対応
|
||||
・SECUREモード・コントロール設定マクロ修正
|
||||
V0.39
|
||||
・2画面ブレッドボードでのカートリッジバスブート仕様
|
||||
V0.38
|
||||
・IPL2ブート対応版
|
||||
V0.37
|
||||
・IPL2ブート実験版の改良
|
||||
・NORMALモードのみ動作許可キー対応
|
||||
・PNG-OFF有効キー対応
|
||||
V0.36
|
||||
・IPL2実験用カードバス・ダウンロード
|
||||
V0.35
|
||||
・SECUREコマンドとフラッシュ読み込みの完全並列処理化(3Dメモリ・レイテンシ対策)
|
||||
・カードバス・フルダウンロード
|
||||
V0.34
|
||||
・3Dメモリ・50msレイテンシバグ修正
|
||||
V0.33
|
||||
・3DメモリSECUREモード対応
|
||||
・ROMヘッダフォーマット変更
|
||||
・フラッシュヘッダフォーマット変更
|
||||
・カードブート時 NINTENDO ロゴチェック → CRCデータチェック 変更
|
||||
・カードロード・バグ修正
|
||||
V0.32
|
||||
・カードブート時 NINTENDO 文字列チェック → ロゴチェック 変更
|
||||
・UsrSwi() 削除
|
||||
V0.31
|
||||
・サウンドチーム提出バージョン
|
||||
V0.30
|
||||
・カードバスSECUREコマンド発行手順のランダム化
|
||||
・IPL2用関数ポインタ取得システムコールの追加
|
||||
・IPL2用ブートシステムコールを繰り返し呼ぶ仕様へ変更
|
||||
・DISP_READY_CARD_4_IPL2 定義追加
|
||||
・カードバス・リセット処理をMAINP側へ移動
|
||||
・IPL2用ブートシステムコール追加
|
||||
V0.29
|
||||
・カード(カートリッジ)ヘッダチェック成功時にのみデバッガモニタ起動
|
||||
・PNA初期値テーブル修正
|
||||
・共有ワークを 4KB → 16KB 拡張
|
||||
・SPIシフトクロック 4Mbps 変更
|
||||
・CTRDG_PHI_OUT_* 修正
|
||||
・AGBモード時の表示期間待ち処理をMAINP側へ移動
|
||||
・DISABLE_AGB_MODE → DISP_AGB_HEADER_ERROR 変更
|
||||
V0.28(デバッガ専用)
|
||||
・MMEM_CHK_SIZE_[WRITE|READ]_BUF 移動 & MAINPと分離
|
||||
・3Mメモリ暫定セキュリティ仕様対応
|
||||
・デバッガモニタ・カートリッジブート時の読み込みサイズ修正(0x180 → 0x170)
|
||||
・例外発生時の FIQ 不許可バグの修正
|
||||
・カートリッジバスへAGBと同等信号の出力
|
||||
・AGBモードのROMヘッダチェック無効化定義の追加
|
||||
・AGBモード非対応時の無限ループ
|
||||
V0.27(デバッガ専用)
|
||||
・デバッガモニタブート情報エリアの移動(0x170 → 0x160)
|
||||
・BIOSプロテクションアドレス セット
|
||||
・JTAGイネーブル セット
|
||||
V0.26(デバッガ専用)
|
||||
・デバッガモニタブート情報エリアの移動(0x70 → 0x170)
|
||||
・デバッガモニタ・カードブート対応
|
||||
・カード関係セキュアコード一時排除
|
||||
・AGBモード一時排除
|
||||
V0.25
|
||||
・マスクROMブート対応(+ RTC 乱数初期化)
|
||||
・例外発生時の FIQ 不許可対応
|
||||
・AGBモード暫定対応
|
||||
V0.24
|
||||
・MAINPとの通信部分の変更
|
||||
・カードリセット 追加
|
||||
V0.23
|
||||
・スレッド対応を元に戻す
|
||||
・デバッガモニタブート情報エリアの移動(0x10 → 0x70)
|
||||
V0.22a
|
||||
・システムコールにて呼び出し元のスタックを使用するように変更(スレッド対応)
|
||||
V0.21
|
||||
・デバッガインタフェース実装
|
||||
・SVC_UnPackBits() バイトアクセス回避
|
||||
|
||||
V0.20(TEGボード配布バージョン)
|
||||
・割り込み処理、システムコール最適化
|
||||
・SVC_UsrSwi() システムコール追加
|
||||
|
||||
V0.17
|
||||
・システムコール群の整理
|
||||
V0.16
|
||||
・システムコールと割り込み処理呼び出しの高速化
|
||||
・スタックポインタの移動
|
||||
#・*CpuSet*() の転送サイズ有効範囲の拡張
|
||||
V0.15
|
||||
・SVC_WaitByLoop() 追加
|
||||
・SVC_WaitIntr() 高速化
|
||||
・SVC_WaitIntr() 内部で Halt 処理追加
|
||||
・SVC_CpuSetFast() バグ修正
|
||||
・SVC_ChangeSoundBias() を2ステップ → 1ステップ 変更
|
||||
・初期化時に無線のクロック出力を切らないように修正
|
||||
・コピー関数ソースアドレスチェック復活
|
||||
・ROMヘッダ領域コピー
|
||||
V0.14
|
||||
・カートリッジアクセスタイミング 10-6 変更
|
||||
・SVC_AccessCard() TEGボード暫定版の追加
|
||||
・SVC_CpuSetFast() の32Byteサイズ制限の解除
|
||||
V0.13
|
||||
・システムコールNo参照時のバイトアクセス修正
|
||||
V0.12
|
||||
・UICアクセス遅延 追加
|
||||
V0.11
|
||||
・TEG でのADバス・ダウンロードへ対応
|
||||
・ADバスへのアクセスタイミングをカードのSECUREモードに合わせる
|
||||
・SUBP-DMA では256KByteまでしか転送できないため CPU で 8MB まで転送できるように変更
|
||||
・サウンドバイアス設定
|
||||
V0.10
|
||||
・TEG で動作するように対応
|
||||
|
||||
V0.05(AD16BUSバージョンV0.01)
|
||||
・MAINP同期&ダウンロード実行
|
||||
|
||||
V0.02(メインBB対応)
|
||||
・Halt() 修正、Stop() 削除
|
||||
V0.01(サウンドBB対応)
|
||||
・AGBにあるサウンドと通信以外のシステムコールの実装
|
||||
・BB の仕様に合わせて内部ワークRAMイメージを未使用
|
||||
・RAM実行&プログラムコピー用に CpuFastSet() のソースチェック解除
|
||||
・キー入力があるまでユーザプログラムのロード待ち&この間ブラックアウト表示
|
||||
240
trunk/IrisSubp/IrisSubpMon/IrisMonSharedArea.h
Normal file
240
trunk/IrisSubp/IrisSubpMon/IrisMonSharedArea.h
Normal file
@ -0,0 +1,240 @@
|
||||
//======================================================================
|
||||
// IRISモニタプログラム共有領域定義
|
||||
//======================================================================
|
||||
#ifndef _IRIS_MON_SHARED_AREA_H
|
||||
#define _IRIS_MON_SHARED_AREA_H
|
||||
|
||||
|
||||
#include "IrisSubpMonTarget.h"
|
||||
#include <IrisCardDefine.h>
|
||||
|
||||
|
||||
typedef void (*IntrFuncp)(void);
|
||||
|
||||
|
||||
// ROMヘッダ・ブートパラメータ構造体
|
||||
typedef struct {
|
||||
u8 *romAddr; // ROMアドレス
|
||||
u8 *entryAddr; // エントリアドレス
|
||||
u8 *ramAddr; // RAMアドレス
|
||||
s32 romSize; // ROMサイズ
|
||||
} BootUsrParam;
|
||||
|
||||
// ROMヘッダ構造体
|
||||
typedef struct {
|
||||
s8 titleName[12]; // ソフトタイトル名
|
||||
u32 initialCode; // イニシャルコード
|
||||
|
||||
u16 makerCode; // メーカーコード
|
||||
u8 machineCode; // 本体コード
|
||||
u8 deviceType; // デバイスタイプ
|
||||
|
||||
u8 nonVerReserved[4]; // 予約(4バイト)
|
||||
u8 verDepReserved[4]; // 予約(バージョン依存、4バイト)
|
||||
u16 wirelessSerialNo; // 無線シリアルNo
|
||||
u16 softVersion:8; // ソフトバージョン
|
||||
|
||||
u16 compArm9BootArea:1; // ARM9ブートエリア圧縮フラグ
|
||||
u16 compArm7BootArea:1; // ARM7ブートエリア圧縮フラグ
|
||||
u16 :0;
|
||||
|
||||
BootUsrParam arm9; // ARM9ブートパラメータ
|
||||
BootUsrParam arm7; // ARM7ブートパラメータ
|
||||
|
||||
u32 fileSysReserved[8]; // ファイルシステム予約(32バイト)
|
||||
|
||||
CardCnt romCtrl4Game; // ROMコントロール情報(NORMAL & GAMEモード)
|
||||
CardCnt romCtrl4Secure; // (SECUREモード)
|
||||
u8 romCtrlReserved_l[4]; // 予約
|
||||
u16 secureCRC16; // セキュア領域CRC16bit
|
||||
u16 romTimerLatency; // タイマーレイテンシ((サイクル数/256) - 2、3Dメモリ用)
|
||||
u8 romReserved_h[8]; // 予約
|
||||
u32 romNormalModeKey[2]; // NORMALモード判定キー
|
||||
|
||||
u8 reserved[64]; // 予約領域(64バイト)
|
||||
|
||||
u16 nintendoLogo[0x9c/2]; // NINTENDOロゴ(156バイト)
|
||||
u16 ninLogoCRC16; // NINTENDOロゴCRC16
|
||||
u16 headerCRC16; // ヘッダCRC16
|
||||
|
||||
u8 *dbgRomAddr; // デバッガモニタROMアドレス
|
||||
s32 dbgRomSize; // デバッガモニタROMサイズ
|
||||
u8 *dbgArm9RamAddr; // デバッガモニタARM9-RAMアドレス
|
||||
u8 *dbgArm7RamAddr; // デバッガモニタARM7-RAMアドレス
|
||||
} RomHeader;
|
||||
|
||||
|
||||
// フラッシュメモリヘッダ構造体
|
||||
typedef struct {
|
||||
u32 macAddr_l; // MACアドレス Low
|
||||
u16 macAddr_h; // High
|
||||
u16 crc16; // CRC16bit
|
||||
u32 blowfishKey; // BLOWFISHキー
|
||||
u16 arm9RomOffset; // ARM9-フラッシュメモリオフセット
|
||||
u16 arm9RamInvOffset; // ARM9-RAM負オフセット
|
||||
|
||||
u16 arm7RomOffset; // ARM7-フラッシュメモリオフセット
|
||||
u16 arm7RamInvOffset; // ARM7-RAM負オフセット
|
||||
|
||||
u16 arm9RomAlign:3; // ARM9-フラッシュメモリオフセット境界
|
||||
u16 arm9RamAlign:3; // ARM9-RAMオフセット境界
|
||||
u16 arm7RomAlign:3; // ARM7-フラッシュメモリオフセット境界
|
||||
u16 arm7RamAlign:3; // ARM7-RAMオフセット境界
|
||||
u16 arm7PlaceMmem:1; // ARM7-RAMメインメモリ配置フラグ
|
||||
u16 :0; // 予約3bit
|
||||
|
||||
u16 rsv2Byte; // 予約
|
||||
|
||||
u32 unScrambleKey[2]; // スクランブル解除キー(8バイト)
|
||||
} FlashHeader;
|
||||
|
||||
|
||||
// セキュアワーク構造体
|
||||
typedef struct {
|
||||
u8 recvRtcBuf[8]; // RTCデータ受信バッファ(要4バイト境界)
|
||||
|
||||
u16 flashCrc16; // フラッシュメモリCRC16
|
||||
u16 flashCount; // フラッシュメモリ 8バイトカウント
|
||||
u32 flashBuf[2]; // フラッシュメモリ受信バッファ(要4バイト境界)
|
||||
u32 flashKeyBuf[3]; // フラッシュメモリキー・テンポラリバッファ
|
||||
u32 unScrambleKey[2]; // スクランブル解除キー(8バイト、MakeBlowfishTable() で算出)
|
||||
s16 isGenUnScrambleKey; // スクランブル解除キー生成完了(MakeBlowfishTable() で設定)
|
||||
|
||||
u32 va; // 下位24bit(24bit送信)
|
||||
u32 vb; // 中間20bit(+未定義4bit、VBI: 32bit送信)
|
||||
u32 vc_dummy; // 下位16bit(16bit送信)
|
||||
u32 vd; // 下位24bit(24bit送信)
|
||||
|
||||
CardCnt cardCntBak4Secure; // SECUREコマンドパラメータ・バックアップ
|
||||
s16 enableReadSecure; // SECURE領域リード・イネーブル(LoadSecure4Card() で設定)
|
||||
u32 cardNormalModeKey[2]; // NORMALモード判定キー(MakeBlowfishTable() で算出)
|
||||
u32 cardKeyBuf[3]; // カードキー・テンポラリバッファ
|
||||
s32 secureSize; // SECURE領域サイズ
|
||||
s16 sequenceNo4Secure; // シーケンス番号(SECURE用)
|
||||
s16 segmentTblShift; // セグメント番号テーブルシフト値(SECURE用)
|
||||
u8 *segmentTblp; // セグメントテーブルポインタ(SECURE用)
|
||||
s16 numSecureSegment; // SECUREセグメント数(SECURE用)
|
||||
s16 segmentOffset; // セグメントオフセット(SECURE用)
|
||||
s16 blockOffset; // ブロックオフセット(SECURE用)
|
||||
|
||||
CardCtrlParam paramBak; // カードパラメータ 暗号化前バックアップ(SECURE用)
|
||||
|
||||
#ifdef TEST_HUFFMAN
|
||||
|
||||
u8 huffTableBuf[512]; // ハフマンテーブルバッファ
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef TRACE_SECURE_OP
|
||||
|
||||
s16 traceSecureOp; // SECUREコマンドのトレース
|
||||
s16 traceOpCount;
|
||||
// カードパラメータ トレースメモリ(SECURE用)
|
||||
CardCtrlParam paramTrace[64];
|
||||
|
||||
#endif
|
||||
|
||||
BLOWFISH_CTX blowfishCardTable; // カード用Blowfishテーブル
|
||||
BLOWFISH_CTX blowfishFlashTable; // フラッシュメモリ用Blowfishテーブル
|
||||
|
||||
u8 bufEnd[4]; // セキュアワーク最終データ
|
||||
} SecureWork;
|
||||
|
||||
|
||||
// 共有ワーク構造体
|
||||
typedef struct {
|
||||
u32 nCardID; // NORMALカードID(LoadCardHeader() で取得)
|
||||
u32 sCardID; // SECUREカードID(CardTimerIntr4Secure() で取得)
|
||||
u16 cardHeaderCrc16; // カードヘッダCRC16(LoadCardHeader() で算出)
|
||||
u16 cardSecureCrc16; // カードSECURE領域CRC16(LoadSecure4Card() で算出)
|
||||
s16 cardHeaderError; // カードヘッダエラー(CheckCardHeader() で設定)
|
||||
s16 disableEncryptedCardData;// カードSECURE領域暗号化データ無効(DecryptObjectFile() で設定)
|
||||
|
||||
s16 cardSequenceNo; // カード読み込みシーケンス番号
|
||||
s16 enableCardNormalOnly; // カードNORMALモードのみ有効(LoadFlashDemo() で設定)
|
||||
|
||||
s16 isOnDebugger; // デバッガ上で動作中か
|
||||
s16 rtcError; // RTCエラー
|
||||
|
||||
u32 recvRtc[2]; // RTCステータス1&タイマーデータ(要4バイト境界)
|
||||
|
||||
u8 *flashArm9RamAddr; // フラッシュメモリARM9-RAMアドレス
|
||||
u8 *flashArm7RamAddr; // フラッシュメモリARM7-RAMアドレス
|
||||
s16 flashArm9HeaderError; // フラッシュメモリ・ARM9ヘッダエラー
|
||||
s16 flashArm7HeaderError; // ARM7ヘッダエラー
|
||||
s16 flashCrcError; // フラッシュメモリCRCエラー
|
||||
s16 flashReserved; // フラッシュメモリ予約領域
|
||||
FlashHeader flashHeader; // フラッシュメモリヘッダ
|
||||
|
||||
u16 sysromCrc16; // システムROMのCRC16
|
||||
} SharedWork;
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 共有ワーク領域のアドレス獲得
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GetSharedWorkAddr() \
|
||||
\
|
||||
((SharedWork *)0x027ff800)
|
||||
|
||||
//・共有ワーク領域のアドレスを獲得します。
|
||||
//・現在 2KB
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// セキュアワーク領域のアドレス獲得
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#if !defined(MOVE_TRACE_SECURE_BUF) && !defined(TEST_AGB_MODE)
|
||||
|
||||
#define GetSecureWorkAddr() \
|
||||
\
|
||||
((SecureWork *)0x037f8000)
|
||||
#else
|
||||
|
||||
#define GetSecureWorkAddr() \
|
||||
\
|
||||
((SecureWork *)0x0380d000)
|
||||
// ((SecureWork *)0x027fc000)
|
||||
|
||||
#endif
|
||||
|
||||
//・セキュアワーク領域のアドレスを獲得します。
|
||||
//・現在 9KB
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カード割り込みワーク領域のアドレス獲得
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GetCardIntrWorkAddr() \
|
||||
\
|
||||
((CardIntrWork *)0x0380fc00)
|
||||
// ((CardIntrWork *)0x027ff880)
|
||||
// ((CardIntrWork *)((u32 )GetSecureWorkAddr() + sizeof(SecureWork)))
|
||||
// (&GetSharedWorkAddr()->cardIntrWork)
|
||||
|
||||
//・カード割り込みワーク領域のアドレスを獲得します。
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// フラッシュメモリヘッダアドレス獲得
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GetFlashHeaderAddr() \
|
||||
\
|
||||
(&GetSharedWorkAddr()->flashHeader)
|
||||
|
||||
//・フラッシュメモリヘッダのアドレスを獲得します。
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// マスクROMヘッダアドレス獲得
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GetRomHeaderAddr() \
|
||||
\
|
||||
((RomHeader *)ROM_HEADER_BUF)
|
||||
|
||||
//・マスクROMのヘッダアドレスを獲得します。
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_MON_SHARED_AREA_H
|
||||
624
trunk/IrisSubp/IrisSubpMon/IrisSubpMon.c
Normal file
624
trunk/IrisSubp/IrisSubpMon/IrisSubpMon.c
Normal file
@ -0,0 +1,624 @@
|
||||
//*******************************************************************
|
||||
// IRIS-SUBPモニタプログラム
|
||||
//*******************************************************************
|
||||
#include "IrisSubpMon.h"
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メインルーチン
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
extern u8 SecureAreaEndp[];
|
||||
|
||||
CardIntrWork *cardIntrWorkp;
|
||||
RomHeader *romHeaderp;
|
||||
|
||||
void Iris2Agb(void);
|
||||
|
||||
s32 CalledFormIPL2(void);
|
||||
|
||||
s32 CheckCardHeader(void);
|
||||
s32 CheckCartridgeHeader(void);
|
||||
void LoadCardHeader(void);
|
||||
void LoadSecure4Card(void);
|
||||
|
||||
|
||||
#define CARD_DMA_NO 3
|
||||
|
||||
|
||||
void IrisSubpMonMain()
|
||||
{
|
||||
SharedWork *shwp = GetSharedWorkAddr();
|
||||
|
||||
NotifyMainpIntf(0); // ブート・ハンドシェイク
|
||||
|
||||
#ifdef NDEBUG
|
||||
|
||||
WaitMainpIntf(1);
|
||||
NotifyMainpIntf(1);
|
||||
|
||||
#endif // NDEBUG
|
||||
|
||||
InitReg(); // レジスタ初期化
|
||||
PreInitRam(); // メモリ初期化
|
||||
|
||||
WaitMainpIntf(2); // ARM9 初期化完了待ち(この後で上記レジスタ設定が有効になる)
|
||||
|
||||
*(vu32 *)REG_CARDCNT = CARD_RESET_HI; // カード スタート(リセットはMAINPで行っている、事前設定)
|
||||
*(vu8 *)REG_CARD_MASTER_CNT = CARDMST_SEL_ROM | CARDMST_ENABLE; // カードマスターイネーブル
|
||||
|
||||
PostInitRam(); // メモリ初期化(共用ワークRAMクリア、
|
||||
// カードリセットHI期間に含まれる)
|
||||
InitRtc(); // RTC初期化 & リード(共用ワークRAM使用、
|
||||
// カードリセットHI期間に含まれる)
|
||||
|
||||
*(u32 *)REG_TM0CNT = TMR_PRESCALER_256CK | TMR_ENABLE; // タイマー スタート
|
||||
*(u32 *)REG_TM1CNT = TMR_CONNECT | TMR_ENABLE;
|
||||
|
||||
sharedWorkp = GetSharedWorkAddr(); // 共有ワーク領域デバッグ用
|
||||
secureWorkp = GetSecureWorkAddr(); // セキュアワーク領域デバッグ用
|
||||
cardIntrWorkp = GetCardIntrWorkAddr(); // カード割り込みワーク領域
|
||||
romHeaderp = GetRomHeaderAddr(); // ROMヘッダ領域
|
||||
|
||||
shwp->sysromCrc16 = GetInvCRC16(NULL, BIOS_SIZE); // システムROMのCRC算出(メインメモリクリア完了後、
|
||||
// カードリセットHI期間に含まれる)
|
||||
NotifyMainpIntf(2); // 初期化完了の通知
|
||||
|
||||
intrTable[0] = CardIntr; // カード割り込み関数 セット
|
||||
|
||||
LoadCardHeader(); // カードヘッダ領域のロード
|
||||
|
||||
LoadFlashHeader(); // フラッシュメモリヘッダのロード
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
||||
WaitMainpIntf(15); // デバッグ通信
|
||||
|
||||
#endif // NDEBUG
|
||||
|
||||
LoadSecure4Card(); // カードセキュア領域(+FLASHデモ)のロード
|
||||
|
||||
*(vu16 *)REG_TM0CNT_H = 0; // タイマー停止
|
||||
*(vu16 *)REG_TM1CNT_H = 0;
|
||||
|
||||
#ifdef DISP_READY_CARD_4_IPL2
|
||||
|
||||
NotifyMainpIntf(9); // IPL2カード読み込み準備完了通知
|
||||
while(1) ;
|
||||
|
||||
#endif // DISP_READY_CARD_4_IPL2
|
||||
|
||||
#ifdef DISABLE_BOOT_IPL2
|
||||
|
||||
intrTable[0] = CardIntr; // カード割り込み関数 再セット
|
||||
|
||||
while (CalledFormIPL2() != -1) { // IPL2メモリ呼び出し部分
|
||||
WaitVBlank(1);
|
||||
}
|
||||
|
||||
#endif // DISABLE_BOOT_IPL2
|
||||
|
||||
*(vu32 *)REG_IME = 0; // IME クリア
|
||||
*(vu32 *)REG_IE = 0; // IE クリア
|
||||
*(vu32 *)REG_IF = -1; // IF クリア
|
||||
|
||||
NotifyMainpIntf(3); // ダウンロード完了の通知
|
||||
WaitMainpIntf(3);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ROMヘッダ領域のロード
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void LoadCardHeader(void)
|
||||
{
|
||||
SharedWork *shwp = GetSharedWorkAddr();
|
||||
RomHeader *rmhp = GetRomHeaderAddr();
|
||||
|
||||
*(vu8 *)REG_CARD_MASTER_CNT = CARDMST_SEL_ROM // カードマスターイネーブル
|
||||
| CARDMST_ENABLE | CARDMST_IF_ENABLE;
|
||||
|
||||
LoadCardTable(); // フラッシュメモリ・テーブル設定
|
||||
|
||||
ReadCardHeader(); // ROMヘッダ読み込み
|
||||
|
||||
shwp->cardHeaderCrc16 = GetInvCRC16((u16 *)rmhp, 0x15e); // ROMヘッダのCRC算出
|
||||
|
||||
// クロックタイプとレイテンシ設定以外 クリア
|
||||
SetCardCnt4Normal(GetCardCnt4Normal() & (CARD_CLOCK_TYPE | CARD_LATENCY_MASK));
|
||||
|
||||
shwp->nCardID = ReadCardID4Normal(); // カードID格納
|
||||
}
|
||||
|
||||
|
||||
#ifdef BOOT_FROM_CARTRIDGE
|
||||
|
||||
void LoadHeader4Cartridge(void)
|
||||
{
|
||||
*(vu32 *)REG_EXMEMCNT = CTRDG_AD16_1ST_10CYC | CTRDG_AD16_2ND_6CYC; // 10-6アクセス(メインメモリ/カード関係はリードオンリー)
|
||||
|
||||
CpuCopy16_32(CTRDG_AD16_BANK0, ROM_HEADER_BUF, 0x170, 32); // ROMヘッダ読み込み
|
||||
}
|
||||
|
||||
#endif // BOOT_FROM_CARTRIDGE
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カードヘッダのチェック
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define IS_EXIST_CARD_WORD 0xcf56 // 0x2e03
|
||||
|
||||
s32 CheckCardHeader(void)
|
||||
{
|
||||
SharedWork *shwp = GetSharedWorkAddr();
|
||||
RomHeader *rmhp = GetRomHeaderAddr();
|
||||
u32 retval;
|
||||
|
||||
*(vu16 *)(MAIN_MEM_EX_END - 0x4) = 1; // ヘッダ読み込み失敗フラグ 初期化
|
||||
shwp->cardHeaderError = 1;
|
||||
|
||||
if (shwp->cardHeaderCrc16 != rmhp->headerCRC16) return 1; // ROMヘッダのCRCチェック
|
||||
|
||||
if (rmhp->ninLogoCRC16 != IS_EXIST_CARD_WORD) return 1;
|
||||
|
||||
*(vu16 *)(MAIN_MEM_EX_END - 0x4) = 0; // ヘッダ読み込み成功フラグ セット
|
||||
shwp->cardHeaderError = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カートリッジヘッダのチェック
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#ifdef BOOT_FROM_CARTRIDGE
|
||||
|
||||
s32 CheckCartridgeHeader(void)
|
||||
{
|
||||
if ((*(u32 *)(ROM_HEADER_BUF + 0) != *(vu32 *)"NINT")
|
||||
|| (*(u32 *)(ROM_HEADER_BUF + 4) != *(vu32 *)"ENDO")) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
*(vu16 *)(MAIN_MEM_EX_END - 0x4) = 0; // ヘッダ読み込み成功フラグ セット
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif // BOOT_FROM_CARTRIDGE
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ROMセキュア領域のロード
|
||||
//----------------------------------------------------------------------
|
||||
extern u32 png_off_key[];
|
||||
|
||||
void LoadSecure4Card(void)
|
||||
{
|
||||
SharedWork *shwp = GetSharedWorkAddr();
|
||||
SecureWork *scwp = GetSecureWorkAddr();
|
||||
RomHeader *rmhp = GetRomHeaderAddr();
|
||||
FlashHeader *fhp = GetFlashHeaderAddr();
|
||||
u8 *loadStartp = (void *)((u32 )rmhp->arm9.romAddr & ~(MROM_SEGMENT_SIZE - 1));
|
||||
u8 *loadDestp = rmhp->arm9.ramAddr;
|
||||
s32 loadSize = rmhp->arm9.romSize;
|
||||
s32 secureSize = MROM_GAME_AREA - (s32 )loadStartp;
|
||||
|
||||
if (secureSize < 0) secureSize = 0; // SECURE領域サイズ補正
|
||||
scwp->secureSize = secureSize;
|
||||
|
||||
ClearMmemSecureArea(); // セキュリティのためメインメモリ先頭64KB事前クリア
|
||||
|
||||
InitSecureParamFook(); // SECUREモードパラメータ 初期化
|
||||
|
||||
if (!CheckCardHeader() // カード・ヘッダのチェック
|
||||
&& !shwp->enableCardNormalOnly // NORMALカード・チェック
|
||||
&& !shwp->rtcError // RTCエラーチェック
|
||||
&& (secureSize > 0) // アドレス情報のチェック
|
||||
&& ((loadStartp >= (u8 *)MROM_SECURE_AREA) && (loadStartp < (u8 *)MROM_GAME_AREA))
|
||||
&& ((loadDestp >= (u8 *)MAIN_MEM) && (loadDestp < (u8 *)MON_MMEM_LOAD_LIMIT)))
|
||||
scwp->enableReadSecure = 1; // SECURE領域リード・イネーブル
|
||||
|
||||
CheckDebugger(); // デバッガ起動チェック
|
||||
|
||||
// ARM9先頭16KBエリア転送
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
if (shwp->enableCardNormalOnly) { // NORMALカード使用時(SECURE領域は読まない)
|
||||
|
||||
LoadFlashDemo(); // FLASHデモプログラム読み込み
|
||||
|
||||
} else
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
if ((shwp->isOnDebugger == 1) && IsMmem8MB()) { // デバッガ起動時
|
||||
|
||||
if (scwp->enableReadSecure)
|
||||
SetCardIntr4Normal(loadStartp, loadDestp, secureSize); // NORMALモード読み込み
|
||||
|
||||
LoadFlashDemo(); // FLASHデモプログラム読み込み
|
||||
|
||||
if (scwp->enableReadSecure)
|
||||
WaitCardIntr(); // NORMALモード読み込み終了待ち
|
||||
|
||||
ChangeCardMode4Normal(); // GAMEモード遷移
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
} else { // SECUREカード使用時
|
||||
|
||||
ChangeCardMode4Normal(); // SECUREモード遷移
|
||||
|
||||
intrTable[0] = CardIntr4Secure; // カード割り込み関数 セット
|
||||
intrTable[1] = CardTimerIntr4Secure; // カードタイマー割り込み関数 セット
|
||||
|
||||
InitCardParam4Secure(); // SECUREコマンドパラメータ初期化
|
||||
SetCardIntr4Secure(loadStartp, loadDestp, secureSize); // SECUREモード読み込み
|
||||
|
||||
LoadFlashDemo(); // FLASHデモプログラム読み込み
|
||||
|
||||
WaitCardIntr(); // SECUREモード読み込み終了待ち
|
||||
TerminateCardParam4Secure(); // SECUREコマンドパラメータ復元
|
||||
|
||||
if ((scwp->unScrambleKey[0] != png_off_key[0]) // スクランブル解除キー無効時
|
||||
|| (scwp->unScrambleKey[1] != png_off_key[1])) {
|
||||
SetCardCnt4Game(GetCardCnt4Game() | CARD_SCRAMBLE_SET_MASK);// スクランブル強制設定
|
||||
}
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
}
|
||||
|
||||
if (scwp->enableReadSecure) // SECURE領域のCRC算出
|
||||
shwp->cardSecureCrc16 = GetInvCRC16((u16 *)loadDestp, secureSize);
|
||||
|
||||
DecryptObjectFileFook(); // 暗号化オブジェクトの復号
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
*(vu32 *)REG_BIOS_PROTECT_ADDR = (u32 )&SecureAreaEndp; // BIOSセキュリティアドレス セット
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
#ifndef TRACE_SECURE_OP
|
||||
|
||||
CpuClearFast32(0, GetSecureWorkAddr(), sizeof(SecureWork)); // セキュアワーク クリア
|
||||
|
||||
#endif // TRACE_SECURE_OP
|
||||
|
||||
if (shwp->flashCrcError) // IPL2のCRC不一致時、SECURE領域 クリア
|
||||
ClearMmemSecureArea();
|
||||
}
|
||||
|
||||
|
||||
#ifdef BOOT_FROM_CARTRIDGE
|
||||
|
||||
void LoadSecure4Cartridge(void)
|
||||
{
|
||||
LoadFlashDemo(); // FLASHデモプログラム読み込み
|
||||
|
||||
{ u32 loadStartp = *(u32 *)(ROM_HEADER_BUF + 0x20) | CTRDG_AD16_BANK0;
|
||||
u32 loadSize = *(u32 *)(ROM_HEADER_BUF + 0x2c) & (MAIN_MEM_SIZE - 1);
|
||||
u32 loadDestp = *(u32 *)(ROM_HEADER_BUF + 0x28);
|
||||
|
||||
while (!loadStartp || !loadDestp) ;
|
||||
|
||||
CpuCopy16_32(loadStartp, loadDestp, loadSize, 32); // ARM9実行イメージ読み込み
|
||||
}
|
||||
}
|
||||
|
||||
#endif // BOOT_FROM_CARTRIDGE
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// IPL2メモリ呼び出し部分
|
||||
//----------------------------------------------------------------------
|
||||
void LoadGame4Card(void);
|
||||
void LoadHeader4Cartridge(void);
|
||||
void LoadSecure4Cartridge(void);
|
||||
void LoadGame4Cartridge(void);
|
||||
void LoadDebugger(void);
|
||||
|
||||
#ifndef DISABLE_READ_CARD_4_IPL2
|
||||
|
||||
s32 CalledFormIPL2(void)
|
||||
{
|
||||
SharedWork *shwp = GetSharedWorkAddr();
|
||||
RomHeader *rmhp = GetRomHeaderAddr();
|
||||
s16 *sequenceNop = &shwp->cardSequenceNo;
|
||||
|
||||
if (*(vu8 *)REG_PAUSE & 1) return -2;
|
||||
|
||||
switch (*sequenceNop) {
|
||||
case 0: if (!shwp->cardHeaderError) { // カード・ヘッダのチェック
|
||||
u8 *arm9LoadStartp = rmhp->arm9.romAddr;
|
||||
u8 *arm9LoadDestp = rmhp->arm9.ramAddr;
|
||||
u8 *arm9LoadDestEndp;
|
||||
s32 arm9LoadSize = rmhp->arm9.romSize;
|
||||
s32 arm9SecureSize = (u8 *)MROM_GAME_AREA - arm9LoadStartp; // セキュリティ上 再計算
|
||||
|
||||
if (arm9SecureSize < 0) arm9SecureSize = 0;
|
||||
arm9LoadStartp += arm9SecureSize;
|
||||
arm9LoadDestp += arm9SecureSize;
|
||||
arm9LoadSize -= arm9SecureSize;
|
||||
|
||||
if ((arm9LoadDestp >= (u8 *)MAIN_MEM) && (arm9LoadDestp < (u8 *)MON_MMEM_LOAD_LIMIT)) {
|
||||
arm9LoadDestEndp = arm9LoadDestp + arm9LoadSize;
|
||||
if (arm9LoadDestEndp > (u8 *)MON_MMEM_LOAD_LIMIT)
|
||||
arm9LoadSize -= (arm9LoadDestEndp - (u8 *)MON_MMEM_LOAD_LIMIT);
|
||||
|
||||
if (arm9LoadSize > 0) { // GAMEモード読み込み
|
||||
SetCardIntr4Game(arm9LoadStartp, arm9LoadDestp, arm9LoadSize);
|
||||
*sequenceNop = 1;
|
||||
} else {
|
||||
*sequenceNop = 2;
|
||||
}
|
||||
} else {
|
||||
*sequenceNop = 2;
|
||||
}
|
||||
} else {
|
||||
*sequenceNop = 6;
|
||||
}
|
||||
break;
|
||||
case 1: if (*(vu32 *)INTR_CHECK_BUF & CARD_DATA_INTR_FLAG) {
|
||||
TerminateCardIntr();
|
||||
*sequenceNop = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
|
||||
#ifdef TEST_CARD_BY_MAINP
|
||||
NotifyMainpIntf(5); // カードバス切り換え検証の通知
|
||||
WaitMainpIntf(5);
|
||||
#endif // TEST_CARD_BY_MAINP
|
||||
|
||||
{ u8 *arm7LoadStartp = rmhp->arm7.romAddr;
|
||||
u8 *arm7LoadDestp = rmhp->arm7.ramAddr;
|
||||
u8 *arm7LoadDestEndp = NULL;
|
||||
s32 arm7LoadSize = rmhp->arm7.romSize;
|
||||
// 内部ワークRAM ロードサイズ調整
|
||||
if ((arm7LoadDestp >= (u8 *)CPU_WRAM) && (arm7LoadDestp < (u8 *)MON_WRAM_LOAD_LIMIT)) {
|
||||
arm7LoadDestEndp = arm7LoadDestp + arm7LoadSize;
|
||||
if (arm7LoadDestEndp > (u8 *)MON_WRAM_LOAD_LIMIT)
|
||||
arm7LoadSize -= (arm7LoadDestEndp - (u8 *)MON_WRAM_LOAD_LIMIT);
|
||||
}
|
||||
// メインメモリ ロードサイズ調整
|
||||
if ((arm7LoadDestp >= (u8 *)MAIN_MEM) && (arm7LoadDestp < (u8 *)MON_MMEM_LOAD_LIMIT)) {
|
||||
arm7LoadDestEndp = arm7LoadDestp + arm7LoadSize;
|
||||
if (arm7LoadDestEndp > (u8 *)MON_MMEM_LOAD_LIMIT)
|
||||
arm7LoadSize -= (arm7LoadDestEndp - (u8 *)MON_MMEM_LOAD_LIMIT);
|
||||
}
|
||||
|
||||
if (arm7LoadDestEndp) {
|
||||
if (arm7LoadSize > 0) { // ARM7実行イメージ読み込み
|
||||
SetCardIntr4Game(arm7LoadStartp, arm7LoadDestp, arm7LoadSize);
|
||||
*sequenceNop = 3;
|
||||
} else {
|
||||
*sequenceNop = 4;
|
||||
}
|
||||
} else {
|
||||
*sequenceNop = 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3: if (*(vu32 *)INTR_CHECK_BUF & CARD_DATA_INTR_FLAG) {
|
||||
TerminateCardIntr();
|
||||
*sequenceNop = 4;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
|
||||
#ifdef TEST_CARD_BY_MAINP
|
||||
NotifyMainpIntf(6); // カードバス切り換え検証の通知
|
||||
WaitMainpIntf(6);
|
||||
#endif // TEST_CARD_BY_MAINP
|
||||
|
||||
if ((shwp->isOnDebugger == 1) && IsMmem8MB()) {
|
||||
u8 *dbgLoadStartp = rmhp->dbgRomAddr;
|
||||
u8 *dbgLoadDestp = rmhp->dbgArm9RamAddr;
|
||||
u8 *dbgLoadDestEndp;
|
||||
s32 dbgLoadSize = rmhp->dbgRomSize;
|
||||
|
||||
if ((dbgLoadDestp >= (u8 *)MAIN_MEM_END) && (dbgLoadDestp < (u8 *)MON_DBG_LOAD_LIMIT)) {
|
||||
dbgLoadDestEndp = dbgLoadDestp + dbgLoadSize;
|
||||
if (dbgLoadDestEndp > (u8 *)MON_DBG_LOAD_LIMIT)
|
||||
dbgLoadSize -= (dbgLoadDestEndp - (u8 *)MON_DBG_LOAD_LIMIT);
|
||||
|
||||
if (dbgLoadSize > 0) { // デバッガモニタ読み込み
|
||||
(u32 )dbgLoadStartp &= 0x7fffffff; // アドレス修正
|
||||
SetCardIntr4Game(dbgLoadStartp, dbgLoadDestp, dbgLoadSize);
|
||||
*sequenceNop = 5;
|
||||
} else {
|
||||
*sequenceNop = 6;
|
||||
}
|
||||
} else {
|
||||
*sequenceNop = 6;
|
||||
}
|
||||
} else {
|
||||
*sequenceNop = 6;
|
||||
}
|
||||
break;
|
||||
case 5: if (*(vu32 *)INTR_CHECK_BUF & CARD_DATA_INTR_FLAG) {
|
||||
TerminateCardIntr();
|
||||
*sequenceNop = 6;
|
||||
}
|
||||
break;
|
||||
case 6: SetPauseCheckFlag(); // チェックフラグ セット
|
||||
*sequenceNop = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
return *sequenceNop;
|
||||
}
|
||||
|
||||
|
||||
#else // DISABLE_READ_CARD_4_IPL2
|
||||
|
||||
|
||||
s32 CalledFormIPL2(void)
|
||||
{
|
||||
SharedWork *shwp = GetSharedWorkAddr();
|
||||
s16 *sequenceNop = &shwp->cardSequenceNo;
|
||||
|
||||
if (!shwp->cardHeaderError) { // カード・ヘッダのチェック
|
||||
LoadGame4Card(); // カードゲーム領域
|
||||
} else {
|
||||
|
||||
#ifdef BOOT_FROM_CARTRIDGE
|
||||
|
||||
WaitVBlank(20); // UICアクセス遅延
|
||||
|
||||
LoadHeader4Cartridge(); // カートリッジ・ヘッダ領域のロード
|
||||
if (!CheckCartridgeHeader()) { // カートリッジ・ヘッダのチェック
|
||||
LoadSecure4Cartridge(); // カートリッジ・セキュア領域のロード
|
||||
LoadGame4Cartridge(); // カートリッジ・ゲーム領域
|
||||
} else {
|
||||
|
||||
#endif // BOOT_FROM_CARTRIDGE
|
||||
|
||||
#ifdef TEST_AGB_MODE
|
||||
|
||||
ReadNintendoLogo4AGB(); // AGBカートリッジのロゴ読み込み
|
||||
if (!CheckNintendoLogo(&NinLogoBak[36/2])) { //(u16 *)(CARTRIDGE + 4)))
|
||||
Iris2Agb(); // AGBモード遷移
|
||||
#ifdef DISP_AGB_HEADER_ERROR
|
||||
} else {
|
||||
NotifyMainpIntf(8); // AGBヘッダエラー通知
|
||||
WaitMainpIntf(8); // AGBヘッダエラー表示待ち
|
||||
Iris2Agb(); // AGBモード遷移
|
||||
#endif // DISP_AGB_HEADER_ERROR
|
||||
}
|
||||
#else
|
||||
while(1) ; // AGBモード非対応時 無限ループ
|
||||
|
||||
#endif // TEST_AGB_MODE
|
||||
|
||||
#ifdef BOOT_FROM_CARTRIDGE
|
||||
|
||||
}
|
||||
|
||||
#endif // BOOT_FROM_CARTRIDGE
|
||||
|
||||
}
|
||||
|
||||
// ReadNintendoLogo4AGB(); // AGBカートリッジのロゴ読み込み
|
||||
//(IRISモードでAGBカートリッジをアクセスできるようにするため)
|
||||
|
||||
// LoadDebugger(); // デバッガ領域
|
||||
|
||||
TerminateIntr(CARD_DATA_INTR_FLAG);
|
||||
|
||||
*sequenceNop = -1;
|
||||
|
||||
return *sequenceNop;
|
||||
}
|
||||
|
||||
#endif // DISABLE_READ_CARD_4_IPL2
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ROMイメージ後半のロード
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#ifdef DISABLE_READ_CARD_4_IPL2
|
||||
|
||||
void LoadGame4Card(void)
|
||||
{
|
||||
{ u8 *Arm9LoadStartp = *(u8 **)(ROM_HEADER_BUF + 0x20);
|
||||
u8 *Arm9LoadDestp = *(u8 **)(ROM_HEADER_BUF + 0x28);
|
||||
s32 Arm9LoadSize = *(s32 * )(ROM_HEADER_BUF + 0x2c) & (MAIN_MEM_SIZE - 1);
|
||||
s32 Arm9SecureSize = (u8 *)MROM_GAME_AREA - Arm9LoadStartp;
|
||||
|
||||
if (Arm9SecureSize < 0) Arm9SecureSize = 0;
|
||||
|
||||
SetCardIntr4Game(Arm9LoadStartp + Arm9SecureSize, // GAMEモード読み込み
|
||||
Arm9LoadDestp + Arm9SecureSize,
|
||||
Arm9LoadSize - Arm9SecureSize);
|
||||
WaitCardIntr();
|
||||
}
|
||||
|
||||
{ u8 *Arm7LoadStartp = *(u8 **)(ROM_HEADER_BUF + 0x30);
|
||||
u8 *Arm7LoadDestp = *(u8 **)(ROM_HEADER_BUF + 0x38);
|
||||
s32 Arm7LoadSize = *(s32 * )(ROM_HEADER_BUF + 0x3c) & (CPU_WRAM_SIZE - 1);
|
||||
|
||||
while (!Arm7LoadSize) ;
|
||||
|
||||
SetCardIntr4Game(Arm7LoadStartp, Arm7LoadDestp, Arm7LoadSize);// ARM7実行イメージ読み込み
|
||||
WaitCardIntr();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef BOOT_FROM_CARTRIDGE
|
||||
|
||||
void LoadGame4Cartridge(void)
|
||||
{
|
||||
{ u32 Arm7LoadStartp = *(u32 *)(ROM_HEADER_BUF + 0x30) | CTRDG_AD16_BANK0;
|
||||
u32 Arm7LoadSize = *(u32 *)(ROM_HEADER_BUF + 0x3c) & (MAIN_MEM_SIZE - 1);
|
||||
u32 Arm7LoadDestp = *(u32 *)(ROM_HEADER_BUF + 0x38);
|
||||
|
||||
while (!Arm7LoadStartp || !Arm7LoadDestp) ;
|
||||
|
||||
CpuCopy16_32(Arm7LoadStartp, Arm7LoadDestp, Arm7LoadSize, 32); // ARM7実行イメージ読み込み
|
||||
}
|
||||
}
|
||||
|
||||
#endif // BOOT_FROM_CARTRIDGE
|
||||
|
||||
#endif // DISABLE_READ_CARD_4_IPL2
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// デバッガモニタのロード
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#ifdef DISABLE_READ_CARD_4_IPL2
|
||||
|
||||
void LoadDebugger(void)
|
||||
{
|
||||
if (IsMmem8MB()) {
|
||||
u8 *DbgLoadStartp = *(u8 **)(ROM_HEADER_BUF + 0x160);
|
||||
u8 *DbgLoadDestp = *(u8 **)(ROM_HEADER_BUF + 0x168);
|
||||
s32 DbgLoadSize = *(u32 * )(ROM_HEADER_BUF + 0x164) & (MAIN_MEM_SIZE - 1);
|
||||
|
||||
if (DbgLoadSize > 0 && DbgLoadSize < (MAIN_MEM_SIZE - 512)) {
|
||||
|
||||
if ((s32 )DbgLoadStartp < 0) { // デバッガモニタ読み込み
|
||||
(u32 )DbgLoadStartp &= 0x7fffffff; // アドレス修正
|
||||
SetCardIntr4Game(DbgLoadStartp, DbgLoadDestp, DbgLoadSize);
|
||||
WaitCardIntr();
|
||||
} else {
|
||||
CpuCopy16_32(DbgLoadStartp, DbgLoadDestp, DbgLoadSize, 32);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif // DISABLE_READ_CARD_4_IPL2
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メインプロセッサ・インタフェース通知
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void NotifyMainpIntf(u32 param)
|
||||
{
|
||||
*(vu16 *)REG_MAINPINTF = param <<MAINP_SEND_STATUS_SHIFT;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メインプロセッサ・インタフェース受信待ち
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void WaitMainpIntf(u32 param)
|
||||
{
|
||||
while (RecvMainpIntf() != param) ;
|
||||
}
|
||||
|
||||
|
||||
20
trunk/IrisSubp/IrisSubpMon/IrisSubpMon.h
Normal file
20
trunk/IrisSubp/IrisSubpMon/IrisSubpMon.h
Normal file
@ -0,0 +1,20 @@
|
||||
//======================================================================
|
||||
// IRISサブプロセッサ・ヘッダファイル郡
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SUBP_MON_H
|
||||
#define _IRIS_SUBP_MON_H
|
||||
|
||||
|
||||
#include <IrisSubp.h>
|
||||
#include <IrisCardDefine.h>
|
||||
#include <IrisRtcDefine.h>
|
||||
#include <IrisSpiDefine.h>
|
||||
#include <IrisSioDefine.h>
|
||||
#include <IrisMainMemeoryDefine.h>
|
||||
#include "IrisSubpMonDefine.h"
|
||||
#include "IrisSubpMonMemeoryMap.h"
|
||||
#include "IrisSubpMonMacro.h"
|
||||
#include "IrisSubpMonSub.h"
|
||||
|
||||
|
||||
#endif /* _IRIS_SUBP_MON_H */
|
||||
BIN
trunk/IrisSubp/IrisSubpMon/IrisSubpMon.mcp
Normal file
BIN
trunk/IrisSubp/IrisSubpMon/IrisSubpMon.mcp
Normal file
Binary file not shown.
288
trunk/IrisSubp/IrisSubpMon/IrisSubpMon.ses
Normal file
288
trunk/IrisSubp/IrisSubpMon/IrisSubpMon.ses
Normal file
@ -0,0 +1,288 @@
|
||||
[CLI]
|
||||
dwParse=1
|
||||
dwEcho=1
|
||||
dwUpdate=1
|
||||
dwHistorySize=16
|
||||
dwInstructionSize=1
|
||||
dwMemBytes=32
|
||||
dwMemSize=0
|
||||
dwStepSize=0
|
||||
Format=hex
|
||||
FormatPar=-1
|
||||
dwLogFile=0
|
||||
dwRecordFile=0
|
||||
[Control]
|
||||
dwActiveTab=0
|
||||
[DebugEnvironment]
|
||||
biDebugEnvironment=EECEFEDDABAAAAAABAAAAAAADEKDMFAFCHPGHGCHBGNGACGEJGMGFGDHMFBECFNEMFNEFHMGEHJGNCJEDEFEMFNEFHMGEHJGNCJEDEFEOCEGMGMGAANEFHMGEHJGNCJEDEFEAADCFJBAAAAANEFFMEEFJENCJEDEFEPFEECFJEGFFECFADPFOEBENEFENDBECFNEHDEFEENEJENAKANEFFMEEFJENCJEDEFEPFDEPEOEOEFEDEEFJEPEOEPFOEBENEFENDNAKANEFFMEEFJENCJEDEFEPFDFFECFGFFECFPFMEPEDEBEEFJEPEOENDMGPGDGBGMGIGPGDHEHNAKANEFFMEEFJENCJEDEFEPFEEMEMEPFDFFEEFEFJEOEHEDFNDADNAKAEFBECFHEFEEFPFEEJECFNDDEKDMFAFCHPGHGCHBGNGACGEJGMGFGDHMFBECFNEMFNEFHMGEHJGNCJEDEFENAKANEFFMEEFJENCJEDEFEPFIEBEOEEEMEFECFCEBEDFFEBEEEEECFNDGEGEADADADADADADNAKANEFFMEEFJENCJEDEFEPFDEMEFEBEOEDEPEEEFEBEEEEECFNDADADADADADADFDADNAKAEFCFBEDEFEEEMEMEPFEFCFBEDEFEDEPEOEEFCFPEMEMEJEDFEFJEEFFENEADNDNAKAEFCFBEDEFEEEMEMEPFEFCFBEDEFEDEPEOEEFCFPEMEOEBENEFENDNAKADEPEOEEFCFPEMEMEFECFPFCFEEJEGFFECFDFJEPEOENDBDFDBDNAKANEFFMEEFJENCJEDEFEPFIFDFIEPEEFAFMEFFHEHEJEOEHEFEOEBECEMEFEEENDEFCFFFFENAKACEJFEFFEDFFEIFNDMEJGEHEHMGFGNAKANEFFMEEFJENCJEDEFEPFEFBEAFADPFAFPEDFJEEFJEPEOENDBDNAKADCDCDC
|
||||
[Docking]
|
||||
biBarID_0=AMAAAAAABJAAAAAAAMAAAAAAIEAAAAAAAMAAAAAAHOBAAAAAOPPPPPPPMBAAAAAAAAAAAAAAAAPBAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_4=AMAAAAAABJAAAAAAAOAAAAAABJAAAAAAMGAAAAAAAIAAAAAAHNCAAAAAJACAAAAAAAAAAAAAAAPIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_65539=LCCAAAAAKJBAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAAPGAAAAAANCCAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_1114115=AMAAAAAABJAAAAAABNCAAAAABJAAAAAAMGAAAAAAAIAAAAAAOPPPPPPPJACAAAAAAAAAAAAAAAPIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_65538=LMAAAAAAIGBAAAAAAMAAAAAAIEAAAAAAAMAAAAAAICAAAAAAKODAAAAABMAAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_1=AMAAAAAABJAAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAAOPPPPPPPCHBAAAAAAAAAAAAAAAPIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_65540=IMBAAAAADIBAAAAAILDAAAAAIEAAAAAAAMAAAAAAEMAAAAAAGPCAAAAAEDCAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biBarID_7=HIBAAAAABJAAAAAAJLDAAAAABJAAAAAAMGAAAAAAAIAAAAAAENBAAAAABHCAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
[Docking\OpenStates]
|
||||
biBarID_0=BAAAAAAA
|
||||
biBarID_4=BAAAAAAA
|
||||
biBarID_7=BAAAAAAA
|
||||
biBarID_65538=BAAAAAAA
|
||||
biBarID_65539=BAAAAAAA
|
||||
biBarID_1114115=BAAAAAAA
|
||||
biBarID_65540=BAAAAAAA
|
||||
[Images\Image_0]
|
||||
Filename=D:\IrisSubp\IrisSubpMon\IrisSubpMon_Data\ThumbRelease\IrisSubpMon.axf
|
||||
Processor=ARM7TDMI_1
|
||||
dwProfileState=0
|
||||
[Interface\AutoRefresh]
|
||||
dwEnabled=0
|
||||
dwInterval=100
|
||||
dwTerminateOnSuspend=0
|
||||
[Interface\Formatting]
|
||||
dwDecIsUser=0
|
||||
DecFormat=%d
|
||||
dwHexIsUser=0
|
||||
HexFormat=%0X
|
||||
dwFloatIsUser=0
|
||||
FloatFormat=%.7g
|
||||
dwDbleIsUser=0
|
||||
DbleFormat=%.10g
|
||||
dwQ15IsUser=0
|
||||
Q15Format=%.6g
|
||||
dwQ31IsUser=0
|
||||
Q31Format=%.12g
|
||||
dwArrayThreshold=16
|
||||
[Interface\General]
|
||||
dwTarget Connection=1
|
||||
dwReport All Warnings=0
|
||||
dwReport Exceptions=1
|
||||
[Interface\SessionFiles]
|
||||
dwReselect Target=1
|
||||
dwReload Images=0
|
||||
dwRun Config Script=0
|
||||
Config Script Name=D:\Iris\geometry\geometry.ses
|
||||
[Interface\Toolbars]
|
||||
dwTBFile=1
|
||||
dwTBSearch=1
|
||||
dwTBExecute=1
|
||||
dwTBSystemView=1
|
||||
dwTBProcView=1
|
||||
dwTBHelp=1
|
||||
[Interface\Views]
|
||||
biDefault Fixed Font=EPPPPPPPAAAAAAAAAAAAAAAAAAAAAAAAAJBAAAAAAAAAAAAADACABABBCIMGCICHACGJOLCJJKAAHHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
biDefault General Font=EPPPPPPPAAAAAAAAAAAAAAAAAAAAAAAAAJBAAAAAAAAAAAAADACABABBCIMGCICHACGJOLCJJKAACHJGGGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
dwTab Size=4
|
||||
dwInterleave=0
|
||||
dwShow Line Numbers=1
|
||||
dwShow Margin=1
|
||||
dwShow Tooltips=1
|
||||
dwInitViewState=0
|
||||
[MainWnd]
|
||||
biWndPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPFJAAAAAABHAAAAAAGFEAAAAAKEDAAAAA
|
||||
[Memory]
|
||||
dwActiveTab=0
|
||||
dwApplyToAllTabs=0
|
||||
[Memory\Tab_0]
|
||||
dwStartAddress=0
|
||||
Format=hex_noprefix_8
|
||||
dwFormatID=-1
|
||||
dwListBigEndian=0
|
||||
dwDisplayOffset=0
|
||||
dwPageSize=1024
|
||||
dwListSize=1
|
||||
dwTargetAccessSize=0
|
||||
dwAutoRefresh=1
|
||||
[Memory\Tab_1]
|
||||
dwStartAddress=0
|
||||
Format=hex_noprefix_8
|
||||
dwFormatID=-1
|
||||
dwListBigEndian=0
|
||||
dwDisplayOffset=0
|
||||
dwPageSize=1024
|
||||
dwListSize=1
|
||||
dwTargetAccessSize=0
|
||||
dwAutoRefresh=1
|
||||
[Memory\Tab_2]
|
||||
dwStartAddress=0
|
||||
Format=hex_noprefix_8
|
||||
dwFormatID=-1
|
||||
dwListBigEndian=0
|
||||
dwDisplayOffset=0
|
||||
dwPageSize=1024
|
||||
dwListSize=1
|
||||
dwTargetAccessSize=0
|
||||
dwAutoRefresh=1
|
||||
[Memory\Tab_3]
|
||||
dwStartAddress=0
|
||||
Format=hex_noprefix_8
|
||||
dwFormatID=-1
|
||||
dwListBigEndian=0
|
||||
dwDisplayOffset=0
|
||||
dwPageSize=1024
|
||||
dwListSize=1
|
||||
dwTargetAccessSize=0
|
||||
dwAutoRefresh=1
|
||||
[Memory1]
|
||||
dwActiveTab=1
|
||||
dwApplyToAllTabs=0
|
||||
[Memory1\Tab_0]
|
||||
dwStartAddress=58687488
|
||||
Format=hex_noprefix_32
|
||||
dwFormatID=-1
|
||||
dwListBigEndian=0
|
||||
dwDisplayOffset=0
|
||||
dwPageSize=1024
|
||||
dwListSize=4
|
||||
dwTargetAccessSize=0
|
||||
dwAutoRefresh=1
|
||||
[Memory1\Tab_1]
|
||||
dwStartAddress=58720256
|
||||
Format=hex_noprefix_32
|
||||
dwFormatID=-1
|
||||
dwListBigEndian=0
|
||||
dwDisplayOffset=0
|
||||
dwPageSize=1024
|
||||
dwListSize=4
|
||||
dwTargetAccessSize=0
|
||||
dwAutoRefresh=1
|
||||
[Memory1\Tab_2]
|
||||
dwStartAddress=41811968
|
||||
Format=hex_noprefix_32
|
||||
dwFormatID=-1
|
||||
dwListBigEndian=0
|
||||
dwDisplayOffset=0
|
||||
dwPageSize=1024
|
||||
dwListSize=4
|
||||
dwTargetAccessSize=0
|
||||
dwAutoRefresh=1
|
||||
[Memory1\Tab_3]
|
||||
dwStartAddress=67108864
|
||||
Format=hex_noprefix_32
|
||||
dwFormatID=-1
|
||||
dwListBigEndian=0
|
||||
dwDisplayOffset=0
|
||||
dwPageSize=1024
|
||||
dwListSize=4
|
||||
dwTargetAccessSize=0
|
||||
dwAutoRefresh=1
|
||||
[Output]
|
||||
dwActiveTab=0
|
||||
[ProcessorRegisters\ARM7TDMI_1]
|
||||
dwFormatID=-1
|
||||
dwRefresh=0
|
||||
[ProcessorRegisters\ARM7_1]
|
||||
dwFormatID=-1
|
||||
dwRefresh=1
|
||||
[ProcessorRegisters\ARM9_0]
|
||||
dwFormatID=-1
|
||||
dwRefresh=1
|
||||
[RecentFileList]
|
||||
dwFileCount=4
|
||||
[RecentImageList]
|
||||
File_1=D:\IrisSubp\IrisSubpMon\IrisSubpMon_Data\ThumbRelease\IrisSubpMon.axf
|
||||
File_2=D:\Iris\IrisMon\IrisMon_Data\ThumbRelease\IrisMon.axf
|
||||
File_3=D:\Iris\IrisMon\IrisMon_Data\ThumbDebugRel\IrisMon.axf
|
||||
File_4=D:\Iris\geometry\geometry_Data\ThumbDebugRel\geometry.axf
|
||||
dwFileCount=4
|
||||
[RecentSymbolsList]
|
||||
dwFileCount=4
|
||||
[Target\ARM7TDMI_1]
|
||||
dwMode=0
|
||||
dwCommsChannel=0
|
||||
dwArmSWI=1193046
|
||||
dwThumbSWI=171
|
||||
dwSHVector=8
|
||||
dwDCCSHVector=458752
|
||||
dwECVector=26
|
||||
dwTopOfMemory=524288
|
||||
dwTopOfMemoryExists=1
|
||||
[ToolBars\ToolBarID-Bar0]
|
||||
dwBarID=59419
|
||||
dwBars=12
|
||||
dwBar#0=0
|
||||
dwBar#1=171
|
||||
dwBar#2=173
|
||||
dwBar#3=175
|
||||
dwBar#4=179
|
||||
dwBar#5=177
|
||||
dwBar#6=128
|
||||
dwBar#7=65543
|
||||
dwBar#8=65538
|
||||
dwBar#9=65539
|
||||
dwBar#10=65540
|
||||
dwBar#11=0
|
||||
[ToolBars\ToolBarID-Bar1]
|
||||
dwBarID=59422
|
||||
dwBars=4
|
||||
dwBar#0=0
|
||||
dwBar#1=3
|
||||
dwBar#2=4
|
||||
dwBar#3=0
|
||||
[ToolBars\ToolBarID-Bar2]
|
||||
dwBarID=59423
|
||||
dwHorz=1
|
||||
dwFloating=1
|
||||
dwXPos=472
|
||||
dwYPos=644
|
||||
dwBars=3
|
||||
dwBar#0=0
|
||||
dwBar#1=7
|
||||
dwBar#2=0
|
||||
[ToolBars\ToolBarID-Bar3]
|
||||
dwBarID=59423
|
||||
dwHorz=1
|
||||
dwFloating=1
|
||||
dwXPos=1006
|
||||
dwYPos=212
|
||||
dwBars=3
|
||||
dwBar#0=0
|
||||
dwBar#1=2
|
||||
dwBar#2=0
|
||||
[ToolBars\ToolBarID-Bar4]
|
||||
dwBarID=59423
|
||||
dwHorz=1
|
||||
dwFloating=1
|
||||
dwXPos=115
|
||||
dwYPos=576
|
||||
dwBars=3
|
||||
dwBar#0=0
|
||||
dwBar#1=3
|
||||
dwBar#2=0
|
||||
[ToolBars\ToolBarID-Bar5]
|
||||
dwBarID=59423
|
||||
dwHorz=1
|
||||
dwFloating=1
|
||||
dwXPos=762
|
||||
dwYPos=583
|
||||
dwBars=3
|
||||
dwBar#0=0
|
||||
dwBar#1=4
|
||||
dwBar#2=0
|
||||
[ToolBars\ToolBarID-Summary]
|
||||
dwBars=6
|
||||
dwScreenCX=1280
|
||||
dwScreenCY=1024
|
||||
[Variables]
|
||||
dwActiveTab=1
|
||||
[Variables\Tab_0]
|
||||
dwFormatID=-1
|
||||
dwRefresh=1
|
||||
[Variables\Tab_1]
|
||||
dwFormatID=-1
|
||||
dwRefresh=1
|
||||
[Variables\Tab_2]
|
||||
dwFormatID=-1
|
||||
dwRefresh=1
|
||||
[Views]
|
||||
dwLastView=0
|
||||
[Views\View_0]
|
||||
UnitName=ARM7TDMI_1
|
||||
ImageName=D:\IrisSubp\IrisSubpMon\IrisSubpMon_Data\ThumbRelease\IrisSubpMon.axf
|
||||
dwDisassembly=0
|
||||
FileName=D:\IrisSubp\IrisSubpMon\IrisSubpMon.c
|
||||
dwMixedView=0
|
||||
dwShowMargin=1
|
||||
dwShowLineNumbers=1
|
||||
biWndPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPAAAAAAAAAAAAAAAAHFCAAAAAJEBAAAAA
|
||||
1137
trunk/IrisSubp/IrisSubpMon/IrisSubpMonCard.c
Normal file
1137
trunk/IrisSubp/IrisSubpMon/IrisSubpMonCard.c
Normal file
File diff suppressed because it is too large
Load Diff
47
trunk/IrisSubp/IrisSubpMon/IrisSubpMonDefine.h
Normal file
47
trunk/IrisSubp/IrisSubpMon/IrisSubpMonDefine.h
Normal file
@ -0,0 +1,47 @@
|
||||
//======================================================================
|
||||
// IRISサブプロセッサ・モニタプログラム用定義
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SUBP_MON_DEFINE_H
|
||||
#define _IRIS_SUBP_MON_DEFINE_H
|
||||
|
||||
|
||||
#include "IrisSubpMonTarget.h"
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMA割り当て
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define V_DMA_NO 2
|
||||
#define M_DMA_NO 3
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// モニタ専用SPIコントロール定義
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define MON_SPI_CONTINUOUS_ON 0x1800 // コンティニュアスモード ON
|
||||
#define MON_SPI_TARGET_FLASH 0x2100 // フラッシュメモリ選択
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// レジスタ&RAM リセット システムコール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define RESET_ALL_FLAGS 0xff // 全リセット
|
||||
|
||||
#define RESET_ALL_REG_FLAGS 0xe0 // 全レジスタ リセット
|
||||
|
||||
#define RESET_REG_FLAG 0x80 // レジスタ(下記以外)リセット
|
||||
#define RESET_REG_SOUND_FLAG 0x40 // サウンドレジスタ リセット
|
||||
#define RESET_REG_SIO_FLAG 0x20 // SIOレジスタ リセット
|
||||
|
||||
#define RESET_ALL_RAM_FLAGS 0x1f // 全RAM クリア
|
||||
|
||||
#define RESET_MMEM_FLAG 0x01 // メインメモリ クリア
|
||||
#define RESET_CPU_WRAM_FLAG 0x02 // CPU内部RAM クリア
|
||||
#define RESET_PLTT_FLAG 0x04 // パレット クリア
|
||||
#define RESET_VRAM_FLAG 0x08 // VRAM クリア
|
||||
#define RESET_OAM_FLAG 0x10 // OAM クリア
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_SUBP_MON_DEFINE_H
|
||||
37
trunk/IrisSubp/IrisSubpMon/IrisSubpMonDefineArm.s
Normal file
37
trunk/IrisSubp/IrisSubpMon/IrisSubpMonDefineArm.s
Normal file
@ -0,0 +1,37 @@
|
||||
;********************************************************************
|
||||
; IRIS-SUBPモニタプログラム用定義
|
||||
;********************************************************************
|
||||
|
||||
IF :DEF: _IRIS_SUBP_MON_DEFINE_H
|
||||
ELSE
|
||||
_IRIS_SUBP_MON_DEFINE_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisSubpMonTargetArm.s
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; レジスタ&RAM リセット システムコール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
RESET_ALL_FLAGS * 0xff ; 全リセット
|
||||
|
||||
RESET_ALL_REG_FLAGS * 0xe0 ; 全レジスタ リセット
|
||||
|
||||
RESET_REG_FLAG * 0x80 ; レジスタ(下記以外)リセット
|
||||
RESET_REG_SOUND_FLAG * 0x40 ; サウンドレジスタ リセット
|
||||
RESET_REG_SIO_FLAG * 0x20 ; SIOレジスタ リセット
|
||||
|
||||
RESET_ALL_RAM_FLAGS * 0x1f ; 全RAM クリア
|
||||
|
||||
RESET_MMEM_FLAG * 0x01 ; メインメモリ クリア
|
||||
RESET_CPU_WRAM_FLAG * 0x02 ; CPU内部RAM クリア
|
||||
RESET_PLTT_FLAG * 0x04 ; パレット クリア
|
||||
RESET_VRAM_FLAG * 0x08 ; VRAM クリア
|
||||
RESET_OAM_FLAG * 0x10 ; OAM クリア
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_SUBP_MON_DEFINE_H
|
||||
|
||||
END
|
||||
97
trunk/IrisSubp/IrisSubpMon/IrisSubpMonMacro.h
Normal file
97
trunk/IrisSubp/IrisSubpMon/IrisSubpMonMacro.h
Normal file
@ -0,0 +1,97 @@
|
||||
//======================================================================
|
||||
// IRISサブプロセッサ マクロ関数
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SUBP_MON_MACRO_H
|
||||
#define _IRIS_SUBP_MON_MACRO_H
|
||||
|
||||
|
||||
#include <IrisSubpTypes.h>
|
||||
#include "IrisSubpMonTarget.h"
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CRC16bit(初期値 0xffff) 算出
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GetInvCRC16(datap, size) \
|
||||
\
|
||||
GetCRC16(0xffff, datap, size)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メインプロセッサ・インタフェース受信
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define RecvMainpIntf() \
|
||||
\
|
||||
((*(vMainpIntf *)REG_MAINPINTF).recvStatus)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU クリア
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuClear16_32(data, destp, size, bit) \
|
||||
{ \
|
||||
u##bit tmp = (vu##bit )(data); \
|
||||
CpuSet16_32((u8 *)&(tmp), (u8 *)(destp), ( \
|
||||
DMA_SRC_FIX | \
|
||||
DMA_##bit##BIT_BUS | (size)/((bit)/8))); \
|
||||
}
|
||||
|
||||
#define CpuArrayClear16_32( data, destp, bit) \
|
||||
CpuClear16_32( data, destp, sizeof(destp), bit)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuCopy16_32(srcp, destp, size, bit) \
|
||||
\
|
||||
CpuSet16_32((u8 *)(srcp), (u8 *)(destp), ( \
|
||||
DMA_SRC_INC | \
|
||||
DMA_##bit##BIT_BUS | (size)/((bit)/8)))
|
||||
|
||||
#define CpuArrayCopy16_32( srcp, destp, bit) \
|
||||
CpuCopy16_32( srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 高速クリア(32Byte単位)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuClearFast32(data, destp, size) \
|
||||
{ \
|
||||
u32 tmp = (vu32 )(data); \
|
||||
CpuSetFast32((u8 *)&(tmp), (u8 *)(destp), ( \
|
||||
DMA_SRC_FIX | (size)/(32/8))); \
|
||||
}
|
||||
|
||||
#define CpuArrayFastClear32( data, destp) \
|
||||
CpuFastClear32( data, destp, sizeof(destp))
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 高速コピー(32Byte単位)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuCopyFast32(srcp, destp, size) \
|
||||
\
|
||||
CpuSetFast32((u8 *)(srcp), (u8 *)(destp), ( \
|
||||
DMA_SRC_INC | (size)/(32/8)))
|
||||
|
||||
#define CpuCopyFast32Fook(srcp, destp, size) \
|
||||
\
|
||||
CpuSetFast32Fook((u8 *)(srcp), (u8 *)(destp), ( \
|
||||
DMA_SRC_INC | (size)/(32/8)))
|
||||
|
||||
#define CpuArrayFastCopy32( srcp, destp) \
|
||||
CpuFastCopy32( srcp, destp, sizeof(srcp))
|
||||
|
||||
#define CpuArrayFastCopy32Fook( srcp, destp) \
|
||||
CpuFastCopy32Fook( srcp, destp, sizeof(srcp))
|
||||
|
||||
|
||||
|
||||
#endif /* _IRIS_SUBP_MON_MACRO_H */
|
||||
73
trunk/IrisSubp/IrisSubpMon/IrisSubpMonMemeoryMap.h
Normal file
73
trunk/IrisSubp/IrisSubpMon/IrisSubpMonMemeoryMap.h
Normal file
@ -0,0 +1,73 @@
|
||||
//======================================================================
|
||||
// IRIS-SUBPメモリマップ定義
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SUBP_MON_MEMORY_MAP_H
|
||||
#define _IRIS_SUBP_MON_MEMORY_MAP_H
|
||||
|
||||
|
||||
#include "IrisSubpMonTarget.h"
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メモリ・マップ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define MON_CPU_WRAM CPU_WRAM // CPU内部ワークRAM
|
||||
#define MON_CPU_WRAM_END (MON_CPU_WRAM + 0x18000)
|
||||
|
||||
#ifdef ENABLE_DEBUGGER_ON_4MB
|
||||
#define MON_MMEM_LOAD_LIMIT (MAIN_MEM_END - (0x100000 + MROM_PAGE_SIZE - 1))
|
||||
#else
|
||||
#define MON_MMEM_LOAD_LIMIT (MAIN_MEM_END - (0x40000 + MROM_PAGE_SIZE - 1))
|
||||
#endif
|
||||
#define MON_WRAM_LOAD_LIMIT (MON_CPU_WRAM_END - (0x8000 + MROM_PAGE_SIZE - 1))
|
||||
#define MON_DBG_LOAD_LIMIT (MAIN_MEM_EX_END - (0x40000 + MROM_PAGE_SIZE - 1))
|
||||
|
||||
#define FLH_MMEM_LOAD_LIMIT (MAIN_MEM_EX_END - (0x1000 + 0x20)) // LZで17バイト余分に展開する場合への対応
|
||||
#define FLH_WRAM_LOAD_BASE (MON_CPU_WRAM + 0x2200) // セキュアワーク領域の保護
|
||||
#define FLH_WRAM_LOAD_LIMIT (MON_CPU_WRAM_END - (0x400 + 0x20)) // LZで17バイト余分に展開する場合への対応
|
||||
|
||||
#define PNA_INDEX (ROM_HEADER_BUF + 0x12) // PNAテーブル・インデックス
|
||||
|
||||
#define MMEM_CHK_SIZE_READ_BUF (MAIN_MEM_END - 0x6) // メインメモリ・サイズチェック書き込みバッファ
|
||||
#define MMEM_CHK_SIZE_WRITE_BUF (MAIN_MEM_EX_END - 0x6) // 読み込みバッファ
|
||||
|
||||
#define AGB_ROM_HEADER 0x08000004 // AGB-ROM内登録データ
|
||||
|
||||
#define MON_NINLOGO (AGB_ROM_HEADER + 0x0 ) // NINTENDOロゴ・データ
|
||||
#define MON_FIQ_FLAG (AGB_ROM_HEADER + 0x9c - 4) // FIQフラグ
|
||||
#define MON_KEY_GROUP_NO (AGB_ROM_HEADER + 0x9e - 4) // キーグループNo
|
||||
#define MON_SOFT_NAME (AGB_ROM_HEADER + 0xa0 - 4) // ソフト名
|
||||
#define MON_COMPLEMENT (AGB_ROM_HEADER + 0xbd - 4) // 補数チェック・データ
|
||||
|
||||
#define AGB_DACS_KEY_REG0 0x09fe2000 - 32 // DACSキーレジスタ
|
||||
#define AGB_DACS_KEY_REG1 0x0a000000 - 32
|
||||
|
||||
#define REG_PAUSE (REG_BASE + 0x300) // PAUSE
|
||||
#define REG_BIOS_PROTECT_ADDR (REG_BASE + 0x308) // BIOSプロテクトアドレス
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メモリ・サイズ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define BIOS_SIZE 0x4000 // システムROM
|
||||
|
||||
#define ROM_HEADER_SIZE (0xc0 - 4 + OFFSET_MON_NINLOGO) // ROM内登録データ
|
||||
#define MON_NINLOGO_SIZE (MON_SOFT_NAME - MON_NINLOGO) // NINTENDOロゴ・データ
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 登録データ・オフセット
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define OFFSET_MON_NINLOGO (MON_NINLOGO - MON_NINLOGO) // NINTENDOロゴ・データ
|
||||
#define OFFSET_MON_FIQ_FLAG (MON_FIQ_FLAG - MON_NINLOGO) // FIQフラグ
|
||||
#define OFFSET_MON_KEY_GROUP_NO (MON_KEY_GROUP_NO - MON_NINLOGO) // キーグループNo
|
||||
#define OFFSET_MON_SOFT_NAME (MON_SOFT_NAME - MON_NINLOGO) // ソフト名
|
||||
#define OFFSET_MON_COMPLEMENT (MON_COMPLEMENT - MON_NINLOGO) // 補数チェック・データ
|
||||
|
||||
#define OFFSET_REG_PAUSE 0x300 // PAUSE
|
||||
|
||||
|
||||
#endif // _IRIS_SUBP_MON_MEMORY_MAP_H
|
||||
74
trunk/IrisSubp/IrisSubpMon/IrisSubpMonMemoryMapArm.s
Normal file
74
trunk/IrisSubp/IrisSubpMon/IrisSubpMonMemoryMapArm.s
Normal file
@ -0,0 +1,74 @@
|
||||
;********************************************************************
|
||||
; IRIS-SUBPモニタプログラム用定義
|
||||
;********************************************************************
|
||||
|
||||
IF :DEF: _IRIS_SUBP_MON_MEMORY_MAP_H
|
||||
ELSE
|
||||
_IRIS_SUBP_MON_MEMORY_MAP_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisSubpMonTargetArm.s
|
||||
INCLUDE IrisMainMemoryDefineArm.s
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; メモリ・マップ
|
||||
;--------------------------------------------------------------------
|
||||
|
||||
IMG_CPU_WRAM * 0x03000000 ; CPU内部ワークRAM
|
||||
IMG_CPU_WRAM_END * (IMG_CPU_WRAM + 0x01000000)
|
||||
IMG_WRAM * MAIN_MEM ; ワークRAM全体
|
||||
IMG_WRAM_END * IMG_CPU_WRAM_END
|
||||
IMG_USR_BUF * MAIN_MEM ; ユーザ領域
|
||||
IMG_USR_BUF_END * (IMG_CPU_WRAM_END - 4*32)
|
||||
IMG_SYS_BUF * (IMG_CPU_WRAM_END - 4*32) ;システム領域
|
||||
IMG_SYS_BUF_END * IMG_CPU_WRAM_END
|
||||
IMG_FIQ_VECTOR_BUF * (IMG_CPU_WRAM_END - 4*5 ) ; FIQ割り込み分岐アドレス
|
||||
IMG_INTR_VECTOR_BUF * (IMG_CPU_WRAM_END - 4*1 ) ; 割り込み分岐アドレス
|
||||
|
||||
ROM_HEADER * 0x08000004 ; ROM内登録データ
|
||||
|
||||
MON_NINLOGO * (ROM_HEADER + 0x0 ) ; NINTENDOロゴ・データ
|
||||
MON_FIQ_FLAG * (ROM_HEADER + 0x9c - 4) ; FIQフラグ
|
||||
MON_KEY_GROUP_NO * (ROM_HEADER + 0x9e - 4) ; キーグループNo
|
||||
MON_SOFT_NAME * (ROM_HEADER + 0xa0 - 4) ; ソフト名
|
||||
MON_COMPLEMENT * (ROM_HEADER + 0xbd - 4) ; 補数チェック・データ
|
||||
|
||||
ICE_ROM0 * 0x09fe2000 ; ICE ROM
|
||||
ICE_ROM0_END * 0x09fe4000
|
||||
ICE_ROM1 * 0x09ffc000
|
||||
ICE_ROM1_END * 0x09ffe000
|
||||
|
||||
DACS_KEY_REG0 * 0x09fe2000 - 32 ; DACSキーレジスタ
|
||||
DACS_KEY_REG1 * 0x0a000000 - 32
|
||||
|
||||
REG_PAUSE * (REG_BASE + 0x300) ; PAUSE
|
||||
REG_OBJ_CENTER * (REG_BASE + 0x410) ; OBJ中心位置
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; メモリ・サイズ
|
||||
;--------------------------------------------------------------------
|
||||
|
||||
ROM_HEADER_SIZE * (0xc0 - 4 + OFFSET_MON_NINLOGO) ; ROM内登録データ
|
||||
MON_NINLOGO_SIZE * (MON_SOFT_NAME - MON_NINLOGO) ; NINTENDOロゴ・データ
|
||||
|
||||
ICE_ROM_SIZE * 0x2000 ; ICE ROM
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; 登録データ・オフセット
|
||||
;--------------------------------------------------------------------
|
||||
|
||||
OFFSET_MON_NINLOGO * (MON_NINLOGO - MON_NINLOGO) ; NINTENDOロゴ・データ
|
||||
OFFSET_MON_FIQ_FLAG * (MON_FIQ_FLAG - MON_NINLOGO) ; FIQフラグ
|
||||
OFFSET_MON_KEY_GROUP_NO * (MON_KEY_GROUP_NO - MON_NINLOGO) ; キーグループNo
|
||||
OFFSET_MON_SOFT_NAME * (MON_SOFT_NAME - MON_NINLOGO) ; ソフト名
|
||||
OFFSET_MON_COMPLEMENT * (MON_COMPLEMENT - MON_NINLOGO) ; 補数チェック・データ
|
||||
|
||||
OFFSET_REG_PAUSE * 0x300 ; PAUSE
|
||||
|
||||
|
||||
ENDIF ; _IRIS_SUBP_MON_MEMORY_MAP_H
|
||||
|
||||
END
|
||||
180
trunk/IrisSubp/IrisSubpMon/IrisSubpMonRtc.c
Normal file
180
trunk/IrisSubp/IrisSubpMon/IrisSubpMonRtc.c
Normal file
@ -0,0 +1,180 @@
|
||||
//*******************************************************************
|
||||
// IRIS-SUBPモニタプログラム RTC関数
|
||||
//*******************************************************************
|
||||
#include "IrisSubpMon.h"
|
||||
|
||||
|
||||
|
||||
|
||||
//--------------------- グローバル 変数 -------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
//======================================================================
|
||||
// RTC初期化 & リード(共用ワークRAM使用)
|
||||
//======================================================================
|
||||
|
||||
void InitRtc(void)
|
||||
{
|
||||
SharedWork *shwp = GetSharedWorkAddr();
|
||||
SecureWork *scwp = GetSecureWorkAddr();
|
||||
u8 rtcInitBuf[8];
|
||||
u8 rtcSendIPL2Buf[8];
|
||||
|
||||
rtcInitBuf[0] = ReadRtcStatus1(); // RTCステータス1 チェック
|
||||
SendRtcOp(RTCOP_READ | RTCOP_YEAR | RTCOP_FIX_BITS); // RTC(年:月:日:曜日:時:分:秒)読み込み
|
||||
RecvRtcDataBuf(&rtcInitBuf[1], 7);
|
||||
|
||||
if (rtcInitBuf[0] & (RTCSTAT1_RESET_REQUEST | RTCSTAT1_BATTERY_DOWN)) {
|
||||
rtcInitBuf[0] |= RTCSTAT1_RESET; // RTCリセット要求&パワーダウン対応
|
||||
|
||||
SendRtcOp(RTCOP_WRITE | RTCOP_STAT1 | RTCOP_FIX_BITS);
|
||||
SendRtcDataBuf(&rtcInitBuf[0], 1);
|
||||
}
|
||||
|
||||
rtcSendIPL2Buf[0] = rtcInitBuf[0]; // RTCステータス1 コピー
|
||||
SendRtcOp(RTCOP_READ | RTCOP_YEAR | RTCOP_FIX_BITS); // RTC(年:月:日:曜日:時:分:秒)読み込み
|
||||
RecvRtcDataBuf(&rtcSendIPL2Buf[1], 7);
|
||||
// RTCエラーチェック(ステータス1 & 月データ)
|
||||
if ((ReadRtcStatus1() & (RTCSTAT1_RESET_REQUEST | RTCSTAT1_RESET))
|
||||
|| !rtcSendIPL2Buf[2])
|
||||
shwp->rtcError = 1;
|
||||
// RTCリードデータ IPL2 へ通知
|
||||
CpuCopyFast32(&rtcSendIPL2Buf, &shwp->recvRtc, sizeof(rtcSendIPL2Buf));
|
||||
|
||||
// RTC初期データ セキュアワークへコピー
|
||||
CpuCopyFast32(&rtcInitBuf, &scwp->recvRtcBuf, sizeof(rtcInitBuf));
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// R1レジスタ・アクセスウェイト
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
__inline void WaitRtcFor5us(void)
|
||||
{
|
||||
WaitByLoop(200/4);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// コマンド送信
|
||||
//----------------------------------------------------------------------
|
||||
void SendRtcData(u32 data);
|
||||
u8 RecvRtcData(void);
|
||||
|
||||
void SendRtcOp(u32 op)
|
||||
{
|
||||
int i;
|
||||
|
||||
*(vu8 *)REG_R1_CNT = 1 // クロックHI
|
||||
| R1_RTC_DATA_DIR_OUT
|
||||
| R1_RTC_SCK;
|
||||
|
||||
WaitRtcFor5us();
|
||||
|
||||
*(vu8 *)REG_R1_CNT = 1 // チップイネーブル
|
||||
| R1_RTC_DATA_DIR_OUT
|
||||
| R1_RTC_CS | R1_RTC_SCK;
|
||||
|
||||
WaitRtcFor5us();
|
||||
|
||||
SendRtcData(op);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データ送信(1Byte)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void SendRtcData(u32 data)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; i<8; i++) {
|
||||
u32 dataBit = (data >>7) & R1_RTC_DATA_BIT;
|
||||
|
||||
*(vu8 *)REG_R1_CNT = dataBit
|
||||
| R1_RTC_DATA_DIR_OUT
|
||||
| R1_RTC_CS;
|
||||
WaitRtcFor5us();
|
||||
|
||||
*(vu8 *)REG_R1_CNT = dataBit
|
||||
| R1_RTC_DATA_DIR_OUT
|
||||
| R1_RTC_CS | R1_RTC_SCK;
|
||||
WaitRtcFor5us();
|
||||
|
||||
data <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データバッファ送信
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void SendRtcDataBuf(u8 *srcp, s32 count)
|
||||
{
|
||||
u8 *srcEndp = srcp + count;
|
||||
|
||||
while (srcp < srcEndp) {
|
||||
SendRtcData(*srcp++);
|
||||
}
|
||||
|
||||
*(vu8 *)REG_R1_CNT = R1_RTC_DATA_DIR_IN // チップディセーブル
|
||||
| R1_RTC_SCK;
|
||||
WaitRtcFor5us();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データバッファ受信
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void RecvRtcDataBuf(u8 *destp, s32 count)
|
||||
{
|
||||
u8 *destEndp = destp + count;
|
||||
|
||||
while (destp < destEndp) {
|
||||
u8 data = 0;
|
||||
int i;
|
||||
|
||||
for (i=0; i<8; i++) {
|
||||
*(vu8 *)REG_R1_CNT = R1_RTC_DATA_DIR_IN
|
||||
| R1_RTC_CS;
|
||||
|
||||
WaitRtcFor5us();
|
||||
|
||||
*(vu8 *)REG_R1_CNT = R1_RTC_DATA_DIR_IN
|
||||
| R1_RTC_CS | R1_RTC_SCK;
|
||||
WaitRtcFor5us();
|
||||
|
||||
data |= (*(vu8 *)REG_R1_CNT & R1_RTC_DATA_BIT) <<i;
|
||||
}
|
||||
*destp++ = data;
|
||||
}
|
||||
|
||||
*(vu8 *)REG_R1_CNT = R1_RTC_DATA_DIR_IN // チップディセーブル
|
||||
| R1_RTC_SCK;
|
||||
WaitRtcFor5us();
|
||||
}
|
||||
|
||||
|
||||
//======================================================================
|
||||
// RTCステータス読み込み
|
||||
//======================================================================
|
||||
|
||||
u8 ReadRtcStatusBase(u32 op)
|
||||
{
|
||||
u8 status;
|
||||
|
||||
SendRtcOp(op |RTCOP_READ | RTCOP_FIX_BITS); // RTCステータス チェック
|
||||
RecvRtcDataBuf(&status, 1);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
u8 ReadRtcStatus1(void)
|
||||
{
|
||||
return ReadRtcStatusBase(RTCOP_STAT1);
|
||||
}
|
||||
|
||||
450
trunk/IrisSubp/IrisSubpMon/IrisSubpMonSpi.c
Normal file
450
trunk/IrisSubp/IrisSubpMon/IrisSubpMonSpi.c
Normal file
@ -0,0 +1,450 @@
|
||||
//*******************************************************************
|
||||
// IRIS-SUBPモニタプログラム FLASH関数
|
||||
//*******************************************************************
|
||||
#include "IrisSubpMon.h"
|
||||
|
||||
|
||||
|
||||
|
||||
//--------------------- グローバル 変数 -------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
//======================================================================
|
||||
// フラッシュメモリヘッダのロード
|
||||
//======================================================================
|
||||
extern u8 flashTestHeader[];
|
||||
extern u8 arm9ipl2[];
|
||||
extern u8 arm9ipl2_end[];
|
||||
extern u8 arm7ipl2[];
|
||||
extern u8 arm7ipl2_end[];
|
||||
|
||||
|
||||
void LoadFlashHeader(void)
|
||||
{
|
||||
|
||||
#ifndef DISABLE_FLASH
|
||||
|
||||
FlashHeader *fhp = GetFlashHeaderAddr();
|
||||
|
||||
#ifdef ENABLE_WRITE_FLASH
|
||||
|
||||
WriteFlash((void *)flashTestHeader, NULL, FLH_PAGE_SIZE);
|
||||
|
||||
#endif // ENABLE_WRITE_FLASH
|
||||
|
||||
ReadFlash(NULL, (u32 *)fhp, sizeof(FlashHeader));
|
||||
|
||||
#endif // DISABLE_FLASH
|
||||
|
||||
#ifdef ENABLE_WRITE_FLASH
|
||||
|
||||
LoadFlashDemo();
|
||||
|
||||
#endif // ENABLE_WRITE_FLASH
|
||||
|
||||
}
|
||||
|
||||
|
||||
//======================================================================
|
||||
// フラッシュメモリデモのロード
|
||||
//======================================================================
|
||||
|
||||
void LoadFlashDemo(void)
|
||||
{
|
||||
|
||||
#if !defined(DISABLE_FLASH)
|
||||
|
||||
#ifndef ENABLE_TEST_BLOWFISH
|
||||
|
||||
const BLOWFISH_CTX *blowfishInitTablep = &blowfishInitTable;
|
||||
#else
|
||||
const BLOWFISH_CTX *blowfishInitTablep = &blowfishTestTable;
|
||||
|
||||
#endif // ENABLE_TEST_BLOWFISH
|
||||
|
||||
SharedWork *shwp = GetSharedWorkAddr();
|
||||
SecureWork *scwp = GetSecureWorkAddr();
|
||||
FlashHeader *fhp = GetFlashHeaderAddr();
|
||||
|
||||
// Blowfish 初期化
|
||||
|
||||
MakeBlowfishFlashTable(&scwp->blowfishFlashTable, &fhp->blowfishKey, scwp->flashKeyBuf);
|
||||
|
||||
// デモ読み込み
|
||||
|
||||
{ u8 *srcp = (void *) ( fhp->arm9RomOffset * (4 << fhp->arm9RomAlign));
|
||||
u8 *destp = (void *)((-fhp->arm9RamInvOffset * (4 << fhp->arm9RamAlign)) + MAIN_MEM_EX_END);
|
||||
s32 size;
|
||||
u16 crc16;
|
||||
static const UC_InternalFuncp ucif = {InitReadFlash, TerminateReadFlash,
|
||||
|
||||
#ifndef TEST_HUFFMAN
|
||||
ReadByte4SucureFlash, NULL, NULL};
|
||||
#else
|
||||
ReadByte4SucureFlash, NULL, ReadWord4SucureFlash};
|
||||
#endif // TEST_HUFFMAN
|
||||
|
||||
#ifdef ENABLE_WRITE_FLASH
|
||||
|
||||
WriteFlash((void *)arm9ipl2, (u32 *)srcp, arm9ipl2_end - arm9ipl2);
|
||||
|
||||
#endif // ENABLE_WRITE_FLASH
|
||||
|
||||
shwp->flashArm9RamAddr = destp;
|
||||
|
||||
size = UnCompLZ77Short((u8 *)srcp, (u16 *)destp, &ucif, &ucif);
|
||||
if (size > 0)
|
||||
scwp->flashCrc16 = GetInvCRC16((u16 *)destp, size);
|
||||
else shwp->flashArm9HeaderError = size;
|
||||
|
||||
|
||||
srcp = (void *)( fhp->arm7RomOffset * (4 << fhp->arm7RomAlign));
|
||||
destp = (void *)(-fhp->arm7RamInvOffset * (4 << fhp->arm7RamAlign));
|
||||
if (!fhp->arm7PlaceMmem) (u8 *)destp += MON_CPU_WRAM_END;
|
||||
else (u8 *)destp += MAIN_MEM_EX_END;
|
||||
shwp->flashArm7RamAddr = destp;
|
||||
|
||||
#ifdef ENABLE_WRITE_FLASH
|
||||
|
||||
WriteFlash((void *)arm7ipl2, (u32 *)srcp, arm7ipl2_end - arm7ipl2);
|
||||
|
||||
#endif // ENABLE_WRITE_FLASH
|
||||
|
||||
#ifndef TEST_HUFFMAN
|
||||
|
||||
size = UnCompLZ77Short((u8 *)srcp, (u16 *)destp, &ucif, &ucif);
|
||||
// size = UnCompRLShort((u8 *)srcp, (u16 *)destp, &ucif, &ucif);
|
||||
#else
|
||||
size = UnCompHuffman32((u8 *)srcp, (u32 *)destp, scwp->huffTableBuf, &ucif);
|
||||
|
||||
#endif // TEST_HUFFMAN
|
||||
|
||||
if (size > 0)
|
||||
scwp->flashCrc16 = GetCRC16(scwp->flashCrc16, (u16 *)destp, size);
|
||||
else shwp->flashArm7HeaderError = size;
|
||||
|
||||
if (fhp->crc16 != scwp->flashCrc16) shwp->flashCrcError = 1;
|
||||
}
|
||||
|
||||
#endif // DISABLE_FLASH
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//======================================================================
|
||||
// サブルーチン群
|
||||
//======================================================================
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// FLASHアクセスウェイト
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
__inline void WaitFlashFor300ns(void)
|
||||
{
|
||||
WaitByLoop(12/4);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データ送信(1Byte)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void SendSpiData(u32 target, u32 data, u32 continueFlag)
|
||||
{
|
||||
u16 spiCntData = target
|
||||
| (MON_SPI_CONTINUOUS_ON * continueFlag)
|
||||
| SPI_ENABLE;
|
||||
|
||||
WaitSpi();
|
||||
|
||||
*(vu16 *)REG_SPICNT = spiCntData;
|
||||
*(vu8 *)REG_SPIDATA = data;
|
||||
}
|
||||
|
||||
__inline void SendFlashData(u32 data, u32 continueFlag)
|
||||
{
|
||||
SendSpiData(MON_SPI_TARGET_FLASH | SPI_SCK_4M, data, continueFlag);
|
||||
|
||||
if (!continueFlag) WaitFlashFor300ns();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データ受信(1Byte)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
u8 RecvSpiData(u32 target, u32 continueFlag)
|
||||
{
|
||||
u16 spiCntData = target
|
||||
| (MON_SPI_CONTINUOUS_ON * continueFlag)
|
||||
| SPI_ENABLE;
|
||||
|
||||
WaitSpi();
|
||||
|
||||
*(vu16 *)REG_SPICNT = spiCntData;
|
||||
*(vu16 *)REG_SPIDATA = spiCntData; // ダミーデータ書き込み
|
||||
|
||||
WaitSpi();
|
||||
|
||||
return *(vu8 *)REG_SPIDATA;
|
||||
}
|
||||
|
||||
u8 RecvFlashData(u32 continueFlag)
|
||||
{
|
||||
u8 data;
|
||||
|
||||
data = RecvSpiData(MON_SPI_TARGET_FLASH | SPI_SCK_4M, continueFlag);
|
||||
|
||||
if (!continueFlag) WaitFlashFor300ns();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データ送信(4Byte単位)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void SendSpiDataBuf(u32 target, u32 *ramp, s32 size)
|
||||
{
|
||||
u32 *ramEndp = ramp + size/4;
|
||||
int i, ii;
|
||||
|
||||
WaitSpi();
|
||||
|
||||
while (ramp < ramEndp) {
|
||||
u32 dataTmp = *ramp++;
|
||||
u32 continueFlag = 1;
|
||||
|
||||
for (i=0; i<4; i++) {
|
||||
if ((ramp >= ramEndp) && (i == 3)) // 最終アドレス対応
|
||||
continueFlag = 0;
|
||||
|
||||
SendSpiData(target, dataTmp, continueFlag);
|
||||
dataTmp >>= 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
__inline void SendFlashDataBuf(u32 *ramp, s32 size)
|
||||
{
|
||||
SendSpiDataBuf(MON_SPI_TARGET_FLASH | SPI_SCK_4M, ramp, size);
|
||||
|
||||
WaitFlashFor300ns();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データ受信(4Byte単位)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void RecvSpiDataBuf(u32 target, u32 *ramp, s32 size, u32 nEndFlag)
|
||||
{
|
||||
u32 *ramEndp = ramp + size/4;
|
||||
int i, ii;
|
||||
|
||||
WaitSpi();
|
||||
|
||||
while (ramp < ramEndp) {
|
||||
u32 dataTmp = 0;
|
||||
u32 continueFlag = 1;
|
||||
|
||||
for (i=0; i<4; i++) {
|
||||
if ((ramp >= ramEndp - 1) && (i == 3)) // 最終アドレス対応
|
||||
continueFlag = nEndFlag;
|
||||
|
||||
dataTmp |= RecvSpiData(target, continueFlag) <<(i*8);
|
||||
}
|
||||
*ramp++ = dataTmp;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
__inline void RecvFlashDataBuf(u32 *ramp, s32 size, u32 nEndFlag)
|
||||
{
|
||||
RecvSpiDataBuf(MON_SPI_TARGET_FLASH | SPI_SCK_4M, ramp, size, nEndFlag);
|
||||
|
||||
WaitFlashFor300ns();
|
||||
}
|
||||
|
||||
|
||||
//======================================================================
|
||||
// FLASHステータス読み込み
|
||||
//======================================================================
|
||||
|
||||
u8 ReadFlashStatus(void)
|
||||
{
|
||||
SendFlashData(FLHOP_STAT, 1);
|
||||
|
||||
return RecvFlashData(0);
|
||||
}
|
||||
|
||||
//======================================================================
|
||||
// FLASHデータ読み込み
|
||||
//======================================================================
|
||||
|
||||
void ReadFlash(const u8 *flashp, u32 *ramp, s32 size)
|
||||
{
|
||||
u32 *ramEndp = ramp + size/4;
|
||||
|
||||
InitReadFlash(flashp, NULL, NULL); // 初期化(アドレス送信)
|
||||
|
||||
RecvFlashDataBuf(ramp, size, 1);
|
||||
|
||||
TerminateReadFlash(NULL); // 終了ダミー読み込み
|
||||
}
|
||||
|
||||
s32 InitReadFlash(const u8 *flashp, void *ramp, const void *paramp)
|
||||
{
|
||||
SecureWork *scwp = GetSecureWorkAddr();
|
||||
s32 retval = 0;
|
||||
int i;
|
||||
|
||||
scwp->flashCount = 0; // 8バイト読み込みカウンタ クリア
|
||||
|
||||
|
||||
#ifdef ENABLE_WRITE_FLASH
|
||||
|
||||
while (ReadFlashStatus() & FLHSTAT_WRITING) ; // 書き込み完了待ち
|
||||
|
||||
#endif // ENABLE_WRITE_FLASH
|
||||
|
||||
SendFlashData(FLHOP_READ, 1);
|
||||
|
||||
for (i=3; --i>=0; )
|
||||
SendFlashData(((u32 )flashp) >>(i*8), 1);
|
||||
|
||||
if (paramp) {
|
||||
u8 *ramEndp;
|
||||
s32 size;
|
||||
|
||||
for (i=0; i<8*4; i+=8) {
|
||||
retval |= ReadByte4SucureFlash(NULL) <<i;
|
||||
}
|
||||
|
||||
if ((retval & 0xff) != 0x10) return -1;
|
||||
size = retval >>8;
|
||||
if (size < 0) return -2;
|
||||
|
||||
if (!((ramp >= (void *)MAIN_MEM) && (ramp < (void *)FLH_MMEM_LOAD_LIMIT))
|
||||
&& !((ramp >= (void *)CPU_WRAM) && (ramp < (void *)FLH_WRAM_LOAD_LIMIT)))
|
||||
return -3;
|
||||
|
||||
ramEndp = (u8 *)ramp + size;
|
||||
// メインメモリ ロードサイズ調整
|
||||
if ((ramp >= (void *)MAIN_MEM) && (ramp < (void *)FLH_MMEM_LOAD_LIMIT)) {
|
||||
if (ramEndp > (u8 *)FLH_MMEM_LOAD_LIMIT)
|
||||
size -= (ramEndp - (u8 *)FLH_MMEM_LOAD_LIMIT);
|
||||
}
|
||||
// 内部ワークRAM ロードサイズ調整
|
||||
if ((ramp >= (void *)FLH_WRAM_LOAD_BASE) && (ramp < (void *)FLH_WRAM_LOAD_LIMIT)) {
|
||||
if (ramEndp > (u8 *)FLH_WRAM_LOAD_LIMIT)
|
||||
size -= (ramEndp - (u8 *)FLH_WRAM_LOAD_LIMIT);
|
||||
}
|
||||
retval = (size <<8) | (retval & 0xff);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
s32 TerminateReadFlash(const u8 *flashp)
|
||||
{
|
||||
RecvFlashData(0); // 終了ダミー読み込み
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u8 ReadByte4SucureFlash(const u8 *flashp)
|
||||
{
|
||||
SecureWork *scwp = GetSecureWorkAddr();
|
||||
u8 retval;
|
||||
|
||||
if (!scwp->flashCount) { RecvFlashDataBuf(scwp->flashBuf, 8, 1);
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
DecryptByBlowfishFook(&scwp->blowfishFlashTable, scwp->flashBuf);
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
}
|
||||
|
||||
retval = ((u8 *)(scwp->flashBuf))[scwp->flashCount++];
|
||||
scwp->flashCount &= 0x7;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
#ifdef TEST_HUFFMAN
|
||||
|
||||
u32 ReadWord4SucureFlash(const u8 *flashp)
|
||||
{
|
||||
SecureWork *scwp = GetSecureWorkAddr();
|
||||
u32 retval;
|
||||
|
||||
if (!scwp->flashCount) { RecvFlashDataBuf(scwp->flashBuf, 8, 1);
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
DecryptByBlowfishFook(&scwp->blowfishFlashTable, scwp->flashBuf);
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
}
|
||||
|
||||
retval = ((u32 *)(scwp->flashBuf))[scwp->flashCount/4];
|
||||
scwp->flashCount += 4;
|
||||
scwp->flashCount &= 0x7;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
#endif // TRACE_SECURE_OP
|
||||
|
||||
|
||||
//======================================================================
|
||||
// FLASHデータ書き込み
|
||||
//======================================================================
|
||||
|
||||
#if defined(ENABLE_WRITE_FLASH) || defined(ENABLE_WRITE_YOSHIOKA)
|
||||
|
||||
void WriteFlashPage(u32 *ramp, u32 *flashp, s32 size)
|
||||
{
|
||||
int i;
|
||||
|
||||
while (ReadFlashStatus() & FLHSTAT_WRITING) ; // 書き込み完了待ち
|
||||
|
||||
SendFlashData(FLHOP_WRITE_ENABLE, 0); // 書き込みイネーブル
|
||||
|
||||
|
||||
SendFlashData(FLHOP_WRITE_PAGE, 1);
|
||||
|
||||
for (i=3; --i>=0; )
|
||||
SendFlashData(((u32 )flashp) >>(i*8), 1);
|
||||
|
||||
SendFlashDataBuf(ramp, size);
|
||||
|
||||
|
||||
while (ReadFlashStatus() & FLHSTAT_WRITING) ; // 書き込み完了待ち
|
||||
|
||||
SendFlashData(FLHOP_WRITE_DISABLE, 0); // 書き込みディセーブル
|
||||
}
|
||||
|
||||
void WriteFlash(u32 *ramp, u32 *flashp, s32 size)
|
||||
{
|
||||
u32 *ramEndp = ramp + size/4;
|
||||
s32 restSize;
|
||||
int i;
|
||||
|
||||
while (ramp < ramEndp) {
|
||||
WriteFlashPage(ramp, flashp, FLH_PAGE_SIZE);
|
||||
ramp += FLH_PAGE_SIZE/4;
|
||||
flashp += FLH_PAGE_SIZE/4;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // ENABLE_WRITE_FLASH || ENABLE_WRITE_YOSHIOKA
|
||||
|
||||
|
||||
|
||||
723
trunk/IrisSubp/IrisSubpMon/IrisSubpMonSub.c
Normal file
723
trunk/IrisSubp/IrisSubpMon/IrisSubpMonSub.c
Normal file
@ -0,0 +1,723 @@
|
||||
//*******************************************************************
|
||||
// IRIS-SUBPモニタプログラム サブルーチン
|
||||
//*******************************************************************
|
||||
#include "IrisSubpMon.h"
|
||||
|
||||
|
||||
|
||||
|
||||
//--------------------- グローバル 変数 -------------------------------
|
||||
|
||||
SharedWork *sharedWorkp; // 共有ワークポインタ
|
||||
SecureWork *secureWorkp; // セキュア情報ワークポインタ
|
||||
|
||||
IntrFuncp intrTable[4]; // 割り込みテーブル
|
||||
|
||||
u32 CharTmpBuf[0x200/4];
|
||||
u16 NinLogoBak[256/2];
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// レジスタ初期化
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void InitReg(void)
|
||||
{
|
||||
*(vu32 *)REG_IME = 0; // IME クリア
|
||||
*(vu32 *)REG_IE = 0; // IE クリア
|
||||
*(vu32 *)REG_IF = -1; // IF クリア
|
||||
|
||||
#ifdef BOOT_FROM_CARTRIDGE
|
||||
|
||||
*(vu16 *)REG_POWCNT = POW_SOUND_ON; // サウンドON
|
||||
ChangeSoundBias16(1, 8) ; // サウンドバイアス セット
|
||||
|
||||
#endif // BOOT_FROM_CARTRIDGE
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メモリ初期化
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void PreInitRam(void)
|
||||
{
|
||||
CpuClearFast32(0, CPU_WRAM_END - 0x4000, 0x4000 - 512); // ARM7用ワーク領域 後半16KBクリア
|
||||
}
|
||||
|
||||
void PostInitRam(void)
|
||||
{
|
||||
CpuClearFast32(0, CPU_WRAM, 0x4000); // ARM7用ワーク領域 前半16KBクリア
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メインメモリSECURE領域(先頭64KB) クリア
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void ClearMmemSecureArea(void)
|
||||
{
|
||||
CpuClearFast32(0, MAIN_MEM, MROM_SECURE_SIZE * 4);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CRC16bit 算出
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
const u16 crc16_table[16] = {
|
||||
0x0000, 0xCC01, 0xD801, 0x1400,
|
||||
0xF001, 0x3C00, 0x2800, 0xE401,
|
||||
0xA001, 0x6C00, 0x7800, 0xB401,
|
||||
0x5000, 0x9C01, 0x8801, 0x4400
|
||||
};
|
||||
|
||||
u16 GetCRC16(u32 start, u16 *datap, u32 size)
|
||||
{
|
||||
u16 *dataEndp = datap + size/2;
|
||||
u16 data16;
|
||||
u32 shift = 0;
|
||||
u16 r1, total = start;
|
||||
|
||||
while(datap < dataEndp) {
|
||||
if (!shift) data16 = *datap;
|
||||
|
||||
// 4bit単位
|
||||
r1 = crc16_table[total & 0xf];
|
||||
total = (total >>4);
|
||||
total = total ^ r1 ^ crc16_table[(data16 >>shift) & 0xf];
|
||||
|
||||
shift += 4;
|
||||
if (shift >= 0x10) {
|
||||
shift = 0;
|
||||
datap++;
|
||||
}
|
||||
}
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メインメモリ 拡張チェック
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
const u16 mmemSizeCheckTable[] = {0x56a9, 0x695a, 0xa695, 0x96a5};
|
||||
|
||||
s32 IsMmem8MB(void)
|
||||
{
|
||||
u32 mmemExFlag = 0;
|
||||
int i;
|
||||
|
||||
#ifdef ENABLE_DEBUGGER_ON_4MB
|
||||
|
||||
return 1;
|
||||
|
||||
#endif // ENABLE_DEBUGGER_ON_4MB
|
||||
|
||||
for (i=0; i<4; i++) {
|
||||
*(vu16 *)MMEM_CHK_SIZE_WRITE_BUF = mmemSizeCheckTable[i];
|
||||
if (*(vu16 *)MMEM_CHK_SIZE_READ_BUF != mmemSizeCheckTable[i]) mmemExFlag++;
|
||||
}
|
||||
*(vu16 *)MMEM_CHK_SIZE_WRITE_BUF = 0;
|
||||
|
||||
return (mmemExFlag >= 3);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// デバッガ上か?
|
||||
//----------------------------------------------------------------------
|
||||
extern u16 sio_handshake_data[];
|
||||
extern u16 sio_send_code;
|
||||
extern u16 sio_recv_code;
|
||||
extern u16 sio_add_code;
|
||||
|
||||
#define SIO_SEND_CODE 0x4e54
|
||||
#define SIO_RECV_CODE 0x4944
|
||||
#define SIO_ADD_CODE 0x524f
|
||||
#define SYSROM_VERSION 0x0100
|
||||
|
||||
void SendSioData(u32 data) // SIOデータ送信
|
||||
{
|
||||
*(vu32 *)REG_SIODATA32 = data;
|
||||
|
||||
StartSio();
|
||||
WaitSio();
|
||||
|
||||
WaitByLoop(0x8000/4); // 0.97ms待ち
|
||||
while (!IsSioSendEnable()) ;
|
||||
}
|
||||
|
||||
s32 CheckSioData(u32 data, u32 checkMask) // SIO戻り値チェック
|
||||
{
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
if ((*(vu32 *)REG_SIODATA32 & checkMask)
|
||||
!= ((((data + sio_add_code) & 0xffff) | (~data & 0xffff0000)) & checkMask))
|
||||
return 0;
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void CheckDebugger(void)
|
||||
{
|
||||
SharedWork *shwp = GetSharedWorkAddr();
|
||||
u32 sioData[2];
|
||||
int i;
|
||||
|
||||
shwp->isOnDebugger = 0;
|
||||
|
||||
if (!IsMmem8MB()) return; // メインメモリが 4MB ならデバッガではない
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
sioData[0] = shwp->recvRtc[0] | 0x80000000;
|
||||
sioData[1] = shwp->recvRtc[1] | 0x80000000;
|
||||
|
||||
*(vu16 *)REG_RCNT = R_SIO_MASTER_MODE; // SIOハンドシェイク
|
||||
*(vu16 *)REG_SIOCNT = SIO_32BIT_MODE | SIO_IN_SCK_256K;
|
||||
|
||||
if (!IsSioSendEnable()) {
|
||||
return; // 初めに SI が Low で無ければデバッガではない
|
||||
} else {
|
||||
*(vu16 *)REG_SIOCNT |= SIO_SCK_IN; // 応答が正しくなければデバッガではない
|
||||
|
||||
SendSioData((sio_send_code <<16) | SYSROM_VERSION);
|
||||
if (!CheckSioData((~sio_recv_code <<16), 0xffff0000)) return;
|
||||
SendSioData(sioData[1]);
|
||||
SendSioData(sioData[0]);
|
||||
if (!CheckSioData(sioData[1], -1)) return;
|
||||
SendSioData(sioData[1]);
|
||||
if (!CheckSioData(sioData[0], -1)) return;
|
||||
}
|
||||
|
||||
*(vu32 *)REG_SIODATA32 = 0;
|
||||
*(vu32 *)REG_SIOCNT = 0;
|
||||
|
||||
shwp->isOnDebugger = 1;
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Blowfishテーブル生成
|
||||
//----------------------------------------------------------------------
|
||||
void InitBlowfishKeyAnaTableFook(BLOWFISH_CTX *tableBufp, u32 *keyBufp, u32 keyLen);
|
||||
u32 ChangeEncryptKey1(u32 key);
|
||||
u32 ChangeEncryptKey2(u32 key);
|
||||
u32 ChangeEncryptKey3(u32 key);
|
||||
u32 ChangeEncryptKey4(u32 key);
|
||||
|
||||
void MakeBlowfishTable(BLOWFISH_CTX *tableBufp, const u32 *keyp, u32 *keyBufp, u32 keyLen)
|
||||
{
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
#ifndef ENABLE_TEST_BLOWFISH
|
||||
|
||||
const BLOWFISH_CTX *blowfishInitTablep = &blowfishInitTable;
|
||||
#else
|
||||
const BLOWFISH_CTX *blowfishInitTablep = &blowfishTestTable;
|
||||
|
||||
#endif // ENABLE_TEST_BLOWFISH
|
||||
|
||||
u32 keyBuf[3];
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
||||
*(u32 *)REG_TM2CNT = TMR_PRESCALER_256CK | TMR_ENABLE; // タイマー スタート
|
||||
|
||||
#endif // NDEBUG
|
||||
|
||||
CopyBiosAreaFook(blowfishInitTablep, tableBufp, sizeof(BLOWFISH_CTX));
|
||||
|
||||
keyBufp[0] = *keyp;
|
||||
keyBufp[1] = ChangeEncryptKey1(*keyp);
|
||||
keyBufp[2] = ChangeEncryptKey2(*keyp);
|
||||
|
||||
InitBlowfishKeyAnaTableFook(tableBufp, keyBufp, keyLen);
|
||||
|
||||
{ SecureWork *scwp = GetSecureWorkAddr();
|
||||
RomHeader *rmhp = GetRomHeaderAddr();
|
||||
FlashHeader *fhp = GetFlashHeaderAddr();
|
||||
u32 *blowfishedKeyp;
|
||||
|
||||
|
||||
if (keyLen == 8) {
|
||||
*(u64 *)scwp->cardNormalModeKey = *(u64 *)rmhp->romNormalModeKey;
|
||||
|
||||
blowfishedKeyp = scwp->cardNormalModeKey;
|
||||
} else {
|
||||
*(u64 *)scwp->unScrambleKey = *(u64 *)fhp->unScrambleKey;
|
||||
|
||||
blowfishedKeyp = scwp->unScrambleKey;
|
||||
}
|
||||
|
||||
DecryptByBlowfishFook(tableBufp, blowfishedKeyp);
|
||||
if (keyLen > 8)
|
||||
scwp->isGenUnScrambleKey = 1;
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
||||
*(u16 *)REG_TM2CNT_H = 0;
|
||||
|
||||
#endif // NDEBUG
|
||||
|
||||
InitBlowfishKeyAnaTableFook(tableBufp, keyBufp, keyLen);
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Blowfishキー&テーブル単位初期化
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void InitBlowfishKeyAnaTable(BLOWFISH_CTX *tableBufp, u32 *keyBufp, u32 keyLen)
|
||||
{
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
EncryptByBlowfishFook2(tableBufp, keyBufp); // EncryptByBlowfish(tableBufp, &keyBufp[2], &keyBufp[1]);
|
||||
EncryptByBlowfishFook1(tableBufp, keyBufp); // EncryptByBlowfish(tableBufp, &keyBufp[1], &keyBufp[0]);
|
||||
InitBlowfishFook(tableBufp, (u8 *)keyBufp, keyLen);
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 暗号化オブジェクトの復号
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
extern const u32 encrypt_object_key[];
|
||||
#else
|
||||
const u32 encrypt_object_key[2] = {0x01234567, 0x89abcdef};
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
|
||||
#define UNDEF_CODE 0xe7ffdeff
|
||||
#define ENCRYPT_DEF_SIZE 0x800
|
||||
|
||||
void DecryptObjectFile(void)
|
||||
{
|
||||
SharedWork *shwp = GetSharedWorkAddr();
|
||||
SecureWork *scwp = GetSecureWorkAddr();
|
||||
RomHeader *rmhp = GetRomHeaderAddr();
|
||||
BLOWFISH_CTX *tableBufp = &scwp->blowfishCardTable;
|
||||
u32 *encBufp = (u32 *)&scwp->blowfishFlashTable;
|
||||
u32 *encDestp = (u32 *)rmhp->arm9.ramAddr;
|
||||
s32 size = scwp->secureSize;
|
||||
s32 restSize;
|
||||
|
||||
if (size > ENCRYPT_DEF_SIZE) size = ENCRYPT_DEF_SIZE;
|
||||
restSize = size;
|
||||
|
||||
if (scwp->enableReadSecure) {
|
||||
CpuCopyFast32Fook(encDestp, encBufp, size); // 暗号化オブジェクト 退避
|
||||
DecryptByBlowfishFook(tableBufp, encBufp); // 暗号化オブジェクトヘッダ プリ復号
|
||||
}
|
||||
|
||||
ChangeObjectTableFook(); // Blowfishテーブル変換
|
||||
|
||||
if (scwp->enableReadSecure) {
|
||||
DecryptByBlowfishFook(tableBufp, encBufp); // 暗号化オブジェクトヘッダ ポスト復号
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
if ((encBufp[0] == encrypt_object_key[0]) // 暗号化オブジェクト有効時
|
||||
&& (encBufp[1] == encrypt_object_key[1])) {
|
||||
u32 *bufp = encBufp;
|
||||
|
||||
bufp[0] = UNDEF_CODE;
|
||||
bufp[1] = UNDEF_CODE;
|
||||
while ((restSize -= 8) > 0) {
|
||||
bufp += 2; // 復号処理
|
||||
DecryptByBlowfishFook(tableBufp, bufp);
|
||||
}
|
||||
} else
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
{
|
||||
CpuClearFast32(UNDEF_CODE, encBufp, size); // 未定義コードでクリア
|
||||
shwp->disableEncryptedCardData = 1; // 暗号化オブジェクト無効 通知
|
||||
}
|
||||
|
||||
CpuCopyFast32Fook(encBufp, encDestp, size); // 暗号化オブジェクト 復帰
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 暗号化オブジェクト用Blowfishテーブル変換
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void ChangeObjectTable(u32 keyLen)
|
||||
{
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
|
||||
SecureWork *scwp = GetSecureWorkAddr();
|
||||
BLOWFISH_CTX *tableBufp = &scwp->blowfishCardTable;
|
||||
u32 *keyBufp = scwp->cardKeyBuf;
|
||||
|
||||
keyBufp[1] = ChangeEncryptKey3(keyBufp[1]);
|
||||
keyBufp[2] = ChangeEncryptKey4(keyBufp[2]);
|
||||
|
||||
InitBlowfishKeyAnaTableFook(tableBufp, keyBufp, keyLen);
|
||||
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ハフマンデータ展開(32Bit→32Bit)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define TREE_END 0x80
|
||||
|
||||
s32 UnCompHuffman32(const u8 *srcp, u32 *destp, u8 *tableBufp, const UC_InternalFuncp *ifp)
|
||||
{
|
||||
u8 *treep;// = (u8 *)srcp + 4;
|
||||
s32 treeSize;// = (*treep + 1) * 2;
|
||||
u32 treeCheck;
|
||||
u32 treeShift;
|
||||
u32 srcTmp;
|
||||
u32 destTmp = 0;
|
||||
u32 destTmpCount = 0;
|
||||
s32 srcCount;
|
||||
s32 error;
|
||||
int i;
|
||||
|
||||
s32 header = ifp->InitFuncp(srcp, destp, tableBufp); // 初期化(アドレス送信)
|
||||
s32 size = header >>8;
|
||||
s32 destCount = size;
|
||||
s32 dataBit = header & 0x0f;
|
||||
u32 destTmpDataNum = 4 + (dataBit & 0x7);
|
||||
u32 destTopShift = 32 - dataBit;
|
||||
|
||||
if (header < 0) { size = header;
|
||||
goto terminate;
|
||||
}
|
||||
|
||||
srcp += 3;
|
||||
tableBufp[0] = ifp->ByteStreamFuncp(++srcp);
|
||||
treeSize = (tableBufp[0] + 1) * 2;
|
||||
|
||||
for (i=1; i<treeSize; i++)
|
||||
tableBufp[i] = ifp->ByteStreamFuncp(++srcp);
|
||||
srcp++;
|
||||
|
||||
treep = tableBufp + 1;
|
||||
while (destCount > 0) {
|
||||
srcCount = 32;
|
||||
srcTmp = ifp->WordStreamFuncp(srcp);
|
||||
srcp += 4;
|
||||
while (--srcCount >= 0) {
|
||||
treeShift = (srcTmp >> 31) & 0x1;
|
||||
treeCheck = *treep;
|
||||
treeCheck <<= treeShift;
|
||||
treep = (u8 *)((((u32 )treep>>1) <<1) + (((*treep & 0x3f)+1) <<1) + treeShift);
|
||||
if (treeCheck & TREE_END) {
|
||||
destTmp >>= dataBit;
|
||||
destTmp |= *treep << destTopShift;
|
||||
treep = tableBufp + 1;
|
||||
if (++destTmpCount == destTmpDataNum) {
|
||||
*destp++ = destTmp;
|
||||
destCount -= 4;
|
||||
destTmpCount = 0;
|
||||
}
|
||||
}
|
||||
if (destCount <= 0) break;
|
||||
srcTmp <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
terminate:
|
||||
if (ifp->TerminateFuncp) { // 終了ダミー読み込み
|
||||
if ((error = ifp->TerminateFuncp(srcp)) < 0) return error;
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// LZバイトデータ展開(8Bit→16Bit)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 UnCompLZ77Short(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp)
|
||||
{
|
||||
u32 destTmp = 0;
|
||||
u32 flags;
|
||||
s32 offset;
|
||||
s32 offset0_8;
|
||||
s32 length;
|
||||
u32 shift = 0;
|
||||
u8 src;
|
||||
s32 error;
|
||||
int i;
|
||||
|
||||
s32 header = ifp->InitFuncp(srcp, destp, paramp); // 初期化(アドレス送信)
|
||||
s32 size = header >>8;
|
||||
s32 destCount = size;
|
||||
|
||||
if (header < 0) { size = header;
|
||||
goto terminate;
|
||||
}
|
||||
|
||||
srcp += 3;
|
||||
while (destCount > 0) {
|
||||
flags = ifp->ByteStreamFuncp(++srcp);
|
||||
for (i=8; --i>=0; ) {
|
||||
if (!(flags & 0x80)){ destTmp |= ifp->ByteStreamFuncp(++srcp) <<shift;
|
||||
destCount--;
|
||||
if (!(shift ^= 8)){
|
||||
*destp = destTmp;
|
||||
destp++;
|
||||
destTmp = 0;
|
||||
}
|
||||
} else { length = ((src = ifp->ByteStreamFuncp(++srcp)) >>4) + 3;
|
||||
offset = ( src & 0x0f) << 8;
|
||||
offset = (offset | ifp->ByteStreamFuncp(++srcp)) + 1;
|
||||
offset0_8 = (8 - shift) ^ ((offset & 1) <<3);
|
||||
destCount -= length;
|
||||
while (--length >= 0) { offset0_8 ^= 8;
|
||||
destTmp |= (destp[-((offset + ((8 - shift) >>3)) >>1)]
|
||||
& (0xff <<offset0_8)) >>offset0_8 <<shift;
|
||||
if (!(shift ^= 8)){
|
||||
*destp = destTmp;
|
||||
destp++;
|
||||
destTmp = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (destCount <= 0) break;
|
||||
flags <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
terminate:
|
||||
if (ifp->TerminateFuncp) { // 終了ダミー読み込み
|
||||
if ((error = ifp->TerminateFuncp(++srcp)) < 0) return error;
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ランレングスデータ展開(8Bit→16Bit)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 UnCompRLShort(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp)
|
||||
{
|
||||
s32 srcTmp;
|
||||
s32 destTmp = 0;
|
||||
u32 flags;
|
||||
s32 offset;
|
||||
s32 length;
|
||||
u32 shift = 0;
|
||||
s32 error;
|
||||
|
||||
s32 header = ifp->InitFuncp(srcp, destp, paramp); // 初期化(アドレス送信)
|
||||
s32 size = header >>8;
|
||||
s32 destCount = size;
|
||||
|
||||
if (header < 0) { size = header;
|
||||
goto terminate;
|
||||
}
|
||||
|
||||
srcp += 3;
|
||||
while (destCount > 0) {
|
||||
flags = ifp->ByteStreamFuncp(++srcp);
|
||||
length = flags & 0x7f;
|
||||
if (!(flags & 0x80)) { length++;
|
||||
destCount -= length;
|
||||
while (--length >= 0){ destTmp |= ifp->ByteStreamFuncp(++srcp) << shift;
|
||||
if (!(shift ^= 8)){ *destp++ = destTmp;
|
||||
destTmp = 0;
|
||||
}
|
||||
}
|
||||
} else { length += 3;
|
||||
destCount -= length;
|
||||
srcTmp = ifp->ByteStreamFuncp(++srcp);
|
||||
while (--length >= 0){ destTmp |= srcTmp << shift;
|
||||
if (!(shift ^= 8)){ *destp++ = destTmp;
|
||||
destTmp = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
terminate:
|
||||
if (ifp->TerminateFuncp) { // 終了ダミー読み込み
|
||||
if ((error = ifp->TerminateFuncp(++srcp)) < 0) return error;
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// サウンドテーブルデータ取得
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
extern s16 snd_sin_table[];
|
||||
extern u16 snd_ptable[];
|
||||
extern u8 snd_vtable[];
|
||||
extern u8 snd_data_start[];
|
||||
extern u8 snd_data_end[];
|
||||
|
||||
static s32 CheckSoundTablep(void *tablep)
|
||||
{
|
||||
if ((tablep < (void *)snd_data_start) || (tablep >= (void *)snd_data_end))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 GetSoundSinTable(s32 index)
|
||||
{
|
||||
s16 *tablep = &snd_sin_table[index];
|
||||
s32 retval;
|
||||
|
||||
if ((retval = CheckSoundTablep(tablep)) != 0) return retval;
|
||||
|
||||
return *tablep;
|
||||
}
|
||||
|
||||
u32 GetSoundPitchTable(s32 index)
|
||||
{
|
||||
u16 *tablep = &snd_ptable[index];
|
||||
s32 retval;
|
||||
|
||||
if ((retval = CheckSoundTablep(tablep)) != 0) return retval;
|
||||
|
||||
return *tablep;
|
||||
}
|
||||
|
||||
u32 GetSoundVolumeTable(s32 index)
|
||||
{
|
||||
u8 *tablep = &snd_vtable[index];
|
||||
s32 retval;
|
||||
|
||||
if ((retval = CheckSoundTablep(tablep)) != 0) return retval;
|
||||
|
||||
return *tablep;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 割り込み終了処理
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void TerminateIntr(u32 inrtFlags)
|
||||
{
|
||||
u32 bakIE = *(vu32 *)REG_IME;
|
||||
|
||||
*(vu32 *)REG_IME = 0;
|
||||
*(vu32 *)REG_IE &= ~inrtFlags;
|
||||
*(vu32 *)REG_IF = inrtFlags;
|
||||
*(vu32 *)REG_IME = bakIE;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Vブランク待ち
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#ifdef BOOT_FROM_CARTRIDGE
|
||||
|
||||
void WaitVBlank(s32 count)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; i<count; i++) {
|
||||
while (((vDispStat *)REG_DISPSTAT)->blankingV == 1) ;
|
||||
while (((vDispStat *)REG_DISPSTAT)->blankingV != 1) ;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // BOOT_FROM_CARTRIDGE
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// NINTENDOロゴチェック
|
||||
//----------------------------------------------------------------------
|
||||
extern const u16 Nin_Char_Diff_Huff[];
|
||||
|
||||
#ifdef TEST_AGB_MODE
|
||||
|
||||
u8 CheckNintendoLogo(u16 *datap)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; i<OFFSET_MON_SOFT_NAME/2; i++) {
|
||||
u16 cmpMask = 0xffff;
|
||||
if ( i == OFFSET_MON_FIQ_FLAG/2) cmpMask = 0x84 ^ 0xffff;
|
||||
else if (i == OFFSET_MON_KEY_GROUP_NO/2) cmpMask = 0x03 ^ 0xffff;
|
||||
|
||||
if ((datap[i] & cmpMask) != Nin_Char_Diff_Huff[i]) return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif // TEST_AGB_MODE
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// AGBのNINTENDOロゴ読み込み
|
||||
//----------------------------------------------------------------------
|
||||
void key_unlock__nin_logo_copy(void);
|
||||
|
||||
#ifdef TEST_AGB_MODE
|
||||
|
||||
void ReadNintendoLogo4AGB(void)
|
||||
{
|
||||
u8 *srcp;
|
||||
|
||||
if (*(u8 *)(CARTRIDGE + 0xb4) & 0x80) srcp = (u8 *)AGB_DACS_KEY_REG0;
|
||||
else srcp = (u8 *)AGB_DACS_KEY_REG1;
|
||||
|
||||
CpuCopy16_32(srcp, CharTmpBuf, 2*10, 16); // セキュリティ解除 前処理
|
||||
key_unlock__nin_logo_copy(); // DACSセキュリティ解除 & ロゴ コピー
|
||||
}
|
||||
|
||||
#endif // TEST_AGB_MODE
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// AGBモード遷移
|
||||
//----------------------------------------------------------------------
|
||||
void SetPause2Agb(void);
|
||||
|
||||
#ifdef TEST_AGB_MODE
|
||||
|
||||
void Iris2Agb(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
*(vu32 *)REG_IME = 0;
|
||||
|
||||
*(vu16 *)REG_POWCNT = 0; // サウンドOFF
|
||||
|
||||
NotifyMainpIntf(7); // モード遷移通知
|
||||
WaitMainpIntf(7);
|
||||
|
||||
WaitByLoop(4096/4); // ARM9 ホールト待ち
|
||||
|
||||
SetPause2Agb();
|
||||
}
|
||||
|
||||
#endif // TEST_AGB_MODE
|
||||
172
trunk/IrisSubp/IrisSubpMon/IrisSubpMonSub.h
Normal file
172
trunk/IrisSubp/IrisSubpMon/IrisSubpMonSub.h
Normal file
@ -0,0 +1,172 @@
|
||||
//======================================================================
|
||||
// IRISモニタプログラム サブルーチン
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SUBP_MON_SUB_H
|
||||
#define _IRIS_SUBP_MON_SUB_H
|
||||
|
||||
#include "IrisSubpMonTarget.h"
|
||||
#include <IrisSubp.h>
|
||||
#include "Blowfish.h"
|
||||
#include "IrisSubpMonMacro.h"
|
||||
#include "IrisMonSharedArea.h"
|
||||
|
||||
|
||||
//--------------------- グローバル 変数 -------------------------------
|
||||
|
||||
extern SharedWork *sharedWorkp; // 共有ワークポインタ
|
||||
extern SecureWork *secureWorkp; // セキュア情報ワークポインタ
|
||||
|
||||
extern IntrFuncp intrTable[4];
|
||||
|
||||
extern u32 CharTmpBuf[0x200/4];
|
||||
extern u16 NinLogoBak[256/2];
|
||||
|
||||
|
||||
//--------------------- 汎用サブルーチン -------------------------------
|
||||
|
||||
|
||||
void NotifyMainpIntf(u32 param);
|
||||
void WaitMainpIntf(u32 param);
|
||||
void WaitVBlank(s32 count);
|
||||
s32 IsMmem8MB(void);
|
||||
s32 IsOnDebugger(void);
|
||||
void CheckDebugger(void);
|
||||
|
||||
void InitRtc(void);
|
||||
u8 ReadRtcStatus1(void);
|
||||
u8 ReadRtcStatus2(void);
|
||||
void SendRtcOp(u32 op);
|
||||
void SendRtcDataBuf(u8 *srcp, s32 count);
|
||||
void RecvRtcDataBuf(u8 *datap, s32 count);
|
||||
|
||||
void LoadFlashHeader(void);
|
||||
void LoadFlashDemo(void);
|
||||
|
||||
u8 ReadFlashStatus(void);
|
||||
void ReadFlash(const u8 *eepromp, u32 *ramp, s32 size);
|
||||
void WriteFlash(u32 *ramp, u32 *eepromp, s32 size);
|
||||
|
||||
// 圧縮展開関数型宣言
|
||||
typedef s32 (* UC_InitFuncp)(const u8 *devicep, void *ramp, const void *paramp);
|
||||
typedef s32 (* UC_TerminateFuncp)(const u8 *devicep);
|
||||
typedef u8 (* UC_ByteStreamFuncp)(const u8 *devicep);
|
||||
typedef u16 (* UC_ShortStreamFuncp)(const u8 *devicep);
|
||||
typedef u32 (* UC_WordStreamFuncp)(const u8 *devicep);
|
||||
|
||||
// 圧縮展開関数指定
|
||||
typedef struct {
|
||||
UC_InitFuncp InitFuncp; // 初期化関数
|
||||
UC_TerminateFuncp TerminateFuncp; // 終了関数
|
||||
UC_ByteStreamFuncp ByteStreamFuncp; // バイトストリーム読み込み関数
|
||||
UC_ShortStreamFuncp ShortStreamFuncp; // ハーフワードストリーム読み込み関数
|
||||
UC_WordStreamFuncp WordStreamFuncp; // ワードストリーム読み込み関数
|
||||
} UC_InternalFuncp;
|
||||
|
||||
s32 InitReadFlash(const u8 *flashp, void *ramp, const void *paramp);
|
||||
s32 TerminateReadFlash(const u8 *flashp);
|
||||
u8 ReadByte4SucureFlash(const u8 *flashp);
|
||||
u32 ReadWord4SucureFlash(const u8 *flashp);
|
||||
|
||||
|
||||
#ifndef DISABLE_SECURE_CODE
|
||||
void InitSecureParamFook(void);
|
||||
void MakeBlowfishCardTable( BLOWFISH_CTX *tableBufp, const u32 *keyp, u32 *keyBufp);
|
||||
void MakeBlowfishFlashTable(BLOWFISH_CTX *tableBufp, const u32 *keyp, u32 *keyBufp);
|
||||
void DecryptObjectFileFook(void);
|
||||
void ChangeObjectTableFook(void);
|
||||
void CopyBiosAreaFook(const void *srcp, void *destp, s32 size);
|
||||
void CpuSetFast32Fook(const void *srcp, void *destp, u32 dmaCntData);
|
||||
#else
|
||||
void InitSecureParam(void);
|
||||
void MakeBlowfishTable(BLOWFISH_CTX *tableBufp, const u32 *keyp, u32 *keyBufp, u32 keyLen);
|
||||
void DecryptObjectFile(void);
|
||||
void ChangeObjectTable(u32 keyLen);
|
||||
void CopyBiosArea(const void *srcp, void *destp, s32 size);
|
||||
void CpuSetFast32(const void *srcp, void *destp, u32 dmaCntData);
|
||||
#define InitSecureParamFook() InitSecureParam()
|
||||
#define MakeBlowfishCardTable( tableBufp, keyp, keyBufp) MakeBlowfishTable( tableBufp, keyp, keyBufp, 8)
|
||||
#define MakeBlowfishFlashTable(tableBufp, keyp, keyBufp) MakeBlowfishTable( tableBufp, keyp, keyBufp, 12)
|
||||
#define DecryptObjectFileFook() DecryptObjectFile()
|
||||
#define ChangeObjectTableFook() ChangeObjectTable(8)
|
||||
#define CopyBiosAreaFook(srcp, destp, size) CopyBiosArea(srcp, destp, size)
|
||||
#define CpuSetFast32Fook(srcp, destp, dmaCntData) CpuSetFast32(srcp, destp, dmaCntData)
|
||||
#endif // DISABLE_SECURE_CODE
|
||||
|
||||
|
||||
void InitCardParam4Secure(void);
|
||||
void TerminateCardParam4Secure(void);
|
||||
void InitCardOpBlowfish(void);
|
||||
void InitCardPN_Intf(void);
|
||||
void InitVA_VB_VD(void);
|
||||
void LoadCardTable(void);
|
||||
void ReadCardHeader(void);
|
||||
void Encrypt2SetTimer4Secure(CardCtrlParam *paramp);
|
||||
void TraceCardCnt(u32 cardCnt);
|
||||
void SendCardPNG_ON(void);
|
||||
void SendCardPNG_OFF(void);
|
||||
void ReadCardAsync(void *romp, void *ramp, s32 size, CardCtrlParam *paramp);
|
||||
void ReadCardAsync4Normal(void *romp, void *ramp, s32 size, CardCtrlParam *paramp);
|
||||
void ReadCardAsync4Secure(void *romp, CardCtrlParam *paramp);
|
||||
void ReadCardAsync4Game(void *romp, void *ramp, s32 size, CardCtrlParam *paramp);
|
||||
void ReadCard4Game(void *romp, void *ramp, s32 size, u32 cntParam);
|
||||
|
||||
void SetCardIntr(void *romp, void *ramp, s32 size, CardIntrWork *ciwp);
|
||||
void SetCardIntr4Normal(void *romp, void *ramp, s32 size);
|
||||
void SetCardIntr4Secure(void *romp, void *ramp, s32 size);
|
||||
void SetCardIntr4Game(void *romp, void *ramp, s32 size);
|
||||
void CardTimerIntr4Secure(void);
|
||||
void CardIntr(void);
|
||||
void CardIntr4Secure(void);
|
||||
void EnableCardIntr(void);
|
||||
void TerminateCardIntr(void);
|
||||
void WaitCardIntr(void);
|
||||
|
||||
u32 ReadCardID4Normal(void);
|
||||
void ReadCardID4Secure(void);
|
||||
void ChangeCardMode4Normal(void);
|
||||
void ChangeCardMode4Secure(void);
|
||||
|
||||
s32 GetBlockSizeFromCardCnt(CardCnt *paramp);
|
||||
void WaitCardDma(u32 dmaNo);
|
||||
void SetVAE(CardCtrlParam *paramp);
|
||||
void SetVBI(CardCtrlParam *paramp);
|
||||
void SetVA(CardCtrlParam *paramp);
|
||||
void SetVB(CardCtrlParam *paramp);
|
||||
void OverWriteTestVB(CardCtrlParam *paramp);
|
||||
void SetDummyVC(CardCtrlParam *paramp);
|
||||
void SetVD(CardCtrlParam *paramp);
|
||||
|
||||
|
||||
void PreInitRam(void);
|
||||
void PostInitRam(void);
|
||||
void ClearMmemSecureArea(void);
|
||||
void InitReg(void);
|
||||
void CopyBiosArea(const void *srcp, void *destp, s32 size);
|
||||
u8 CheckAgbRomHeader(void *datap);
|
||||
void ReadNintendoLogo4AGB(void);
|
||||
u8 CheckNintendoLogo(u16 *datap);
|
||||
|
||||
|
||||
void SetPauseCheckFlag(void);
|
||||
u16 GetCRC16(u32 start, u16 *datap, u32 length);
|
||||
|
||||
void WaitIntr(u32 InitIfClear, u32 IfFlags);
|
||||
void WaitVBlankIntr(void);
|
||||
void TerminateIntr(u32 inrtFlags);
|
||||
void WaitByLoop(s32 count);
|
||||
|
||||
void CpuSet16_32(const void *srcp, void *destp, u32 dmaCntData);
|
||||
void CpuSetFast32(const void *srcp, void *destp, u32 dmaCntData);
|
||||
|
||||
void UnPackBits32(const u8 *srcp, u32 *destp, const UnPackBitsParam *UnPackBitsParamp);
|
||||
void UnCompRLByte( u8 *srcp, u8 *destp);
|
||||
s32 UnCompRLShort(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp);
|
||||
void UnCompLZ77Byte( u8 *Srcp, u8 *Destp);
|
||||
s32 UnCompLZ77Short(const u8 *srcp, u16 *destp, const void *paramp, const UC_InternalFuncp *ifp);
|
||||
s32 UnCompHuffman32(const u8 *srcp, u32 *destp, u8 *tableBufp, const UC_InternalFuncp *ifp);
|
||||
|
||||
void ChangeSoundBias16(u32 UpDown, u32 stepLoops);
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_SUBP_MON_SUB_H
|
||||
53
trunk/IrisSubp/IrisSubpMon/IrisSubpMonTarget.h
Normal file
53
trunk/IrisSubp/IrisSubpMon/IrisSubpMonTarget.h
Normal file
@ -0,0 +1,53 @@
|
||||
//======================================================================
|
||||
// IRISサブプロセッサ・モニタプログラム用定義
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SUBP_MON_TARGET_H
|
||||
#define _IRIS_SUBP_MON_TARGET_H
|
||||
|
||||
|
||||
#include <IrisSubpTarget.h>
|
||||
|
||||
|
||||
//#define BB_MON // ブレッドボード専用定義への切り換え
|
||||
//#define TEG_MON // TEGボード専用定義への切り換え
|
||||
#define TS_MON // TS専用定義への切り換え
|
||||
|
||||
|
||||
#define NDEBUG
|
||||
|
||||
|
||||
//#define DISABLE_SECURE_CODE // セキュアコード無効化
|
||||
|
||||
//#define BOOT_FROM_CARTRIDGE // カートリッジ・ブート
|
||||
|
||||
//#define DISABLE_ENCRYPT // 暗号化無効化
|
||||
|
||||
//#define DISABLE_BOOT_IPL2 // IPL2ブート無効化
|
||||
|
||||
//#define DISP_READY_CARD_4_IPL2 // IPL2カード読み込み準備完了表示
|
||||
|
||||
//#define DISABLE_READ_CARD_4_IPL2 // IPL2カード読み込み無効化
|
||||
|
||||
//#define ENABLE_DEBUGGER_ON_4MB // デバッガ BB2動作確認
|
||||
|
||||
//#define TEST_HUFFMAN // ハフマンコード・テスト
|
||||
|
||||
//#define TEST_AGB_MODE // AGBモード・テスト
|
||||
|
||||
//#define DISP_AGB_HEADER_ERROR // AGBヘッダエラー表示
|
||||
|
||||
//#define ENABLE_WRITE_FLASH // FLASHデータ書き込み
|
||||
|
||||
//#define DISABLE_FLASH // FLASH処理無効化
|
||||
|
||||
//#define TRACE_SECURE_OP // SECUREコマンドのトレース
|
||||
|
||||
//#define MOVE_TRACE_SECURE_BUF // SECUREコマンドのトレース領域の移動
|
||||
|
||||
//#define ENABLE_TEST_BLOWFISH // Blowfish テスト版
|
||||
|
||||
//#define TEST_CARD_BY_MAINP // メインプロセッサでのカードアクセス・テスト
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_SUBP_MON_TARGET_H
|
||||
36
trunk/IrisSubp/IrisSubpMon/IrisSubpMonTargetArm.s
Normal file
36
trunk/IrisSubp/IrisSubpMon/IrisSubpMonTargetArm.s
Normal file
@ -0,0 +1,36 @@
|
||||
;=======================================================================
|
||||
; IrisSubpMonTargetArm.s
|
||||
; IRISターゲット選択(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
IF :DEF: _IRIS_SUBP_MON_TARGET_H
|
||||
ELSE
|
||||
_IRIS_SUBP_MON_TARGET_H * 1
|
||||
|
||||
INCLUDE IrisSubpTargetArm.s
|
||||
|
||||
|
||||
; BB_MON * 1 ; ブレッドボード専用定義への切り換え
|
||||
; TEG_MON * 1 ; TEGボード専用定義への切り換え
|
||||
TS_MON * 1 ; TS専用定義への切り換え
|
||||
|
||||
|
||||
; DISABLE_SECURE_CODE * 1 ; セキュアコード無効化
|
||||
|
||||
; CHECK_PROT_ADDR * 1 ; プロテクションアドレスレジスタのチェック
|
||||
|
||||
; DISABLE_BOOT_IPL2 * 1 ; IPL2ブート無効化
|
||||
|
||||
; TEST_AGB_MODE ; AGBモード・テスト
|
||||
|
||||
; ENABLE_WRITE_FLASH * 1 ; FLASHデータ書き込み
|
||||
|
||||
; ENABLE_TEST_BLOWFISH * 1 ; Blowfish テスト版
|
||||
|
||||
; DISABLE_ENTRY_OF_ROM_HEADER * 1 ; ROMヘッダのエントリ情報無効化(TEG用)
|
||||
|
||||
|
||||
ENDIF ; _IRIS_SUBP_MON_TARGET_H
|
||||
|
||||
END
|
||||
25
trunk/IrisSubp/IrisSubpMon/NintendoLogoData.s
Normal file
25
trunk/IrisSubp/IrisSubpMon/NintendoLogoData.s
Normal file
@ -0,0 +1,25 @@
|
||||
;********************************************************************
|
||||
; NINTENDOƒ<4F>ƒSƒf<C692>[ƒ^
|
||||
;********************************************************************
|
||||
|
||||
AREA Init, CODE, READONLY
|
||||
|
||||
ALIGN
|
||||
GLOBAL Nin_Char_Diff_Huff
|
||||
Nin_Char_Diff_Huff
|
||||
|
||||
DCB 0x24,0xff,0xae,0x51,0x69,0x9a,0xa2,0x21,0x3d,0x84,0x82,0x0a,0x84,0xe4,0x09,0xad
|
||||
DCB 0x11,0x24,0x8b,0x98,0xc0,0x81,0x7f,0x21,0xa3,0x52,0xbe,0x19,0x93,0x09,0xce,0x20
|
||||
DCB 0x10,0x46,0x4a,0x4a,0xf8,0x27,0x31,0xec,0x58,0xc7,0xe8,0x33,0x82,0xe3,0xce,0xbf
|
||||
DCB 0x85,0xf4,0xdf,0x94,0xce,0x4b,0x09,0xc1,0x94,0x56,0x8a,0xc0,0x13,0x72,0xa7,0xfc
|
||||
DCB 0x9f,0x84,0x4d,0x73,0xa3,0xca,0x9a,0x61,0x58,0x97,0xa3,0x27,0xfc,0x03,0x98,0x76
|
||||
DCB 0x23,0x1d,0xc7,0x61,0x03,0x04,0xae,0x56,0xbf,0x38,0x84,0x00,0x40,0xa7,0x0e,0xfd
|
||||
DCB 0xff,0x52,0xfe,0x03,0x6f,0x95,0x30,0xf1,0x97,0xfb,0xc0,0x85,0x60,0xd6,0x80,0x25
|
||||
DCB 0xa9,0x63,0xbe,0x03,0x01,0x4e,0x38,0xe2,0xf9,0xa2,0x34,0xff,0xbb,0x3e,0x03,0x44
|
||||
DCB 0x78,0x00,0x90,0xcb,0x88,0x11,0x3a,0x94,0x65,0xc0,0x7c,0x63,0x87,0xf0,0x3c,0xaf
|
||||
DCB 0xd6,0x25,0xe4,0x8b,0x38,0x0a,0xac,0x72,0x21,0xd4,0xf8,0x07,0x56,0xcf,0x00,0x00
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
35
trunk/IrisSubp/IrisSubpMon/SndDataArm.s
Normal file
35
trunk/IrisSubp/IrisSubpMon/SndDataArm.s
Normal file
@ -0,0 +1,35 @@
|
||||
;********************************************************************
|
||||
; IRIS-SUBPモニタプログラム サウンドテーブルデータ
|
||||
;********************************************************************
|
||||
|
||||
AREA SoundData, DATA, READONLY
|
||||
|
||||
INCLUDE IrisSubpDefineArm.s
|
||||
INCLUDE IrisSubpMemoryMapArm.s
|
||||
|
||||
INCLUDE IrisSubpMonDefineArm.s
|
||||
INCLUDE IrisSubpMonMemoryMapArm.s
|
||||
|
||||
|
||||
;====================================================================
|
||||
; サウンドテーブルデータ
|
||||
;====================================================================
|
||||
GLOBAL snd_sin_table
|
||||
GLOBAL snd_ptable
|
||||
GLOBAL snd_vtable
|
||||
GLOBAL snd_data_start
|
||||
GLOBAL snd_data_end
|
||||
|
||||
snd_data_start
|
||||
snd_ptable
|
||||
INCBIN snd_ptable.bin
|
||||
snd_vtable
|
||||
INCBIN snd_vtable.bin
|
||||
snd_sin_table
|
||||
INCBIN snd_sinetable.bin
|
||||
snd_data_end
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
370
trunk/IrisSubp/IrisSubpMon/crt0Arm.s
Normal file
370
trunk/IrisSubp/IrisSubpMon/crt0Arm.s
Normal file
@ -0,0 +1,370 @@
|
||||
;********************************************************************
|
||||
; IRIS-SUBPモニタプログラム スタートアップルーチン
|
||||
;********************************************************************
|
||||
|
||||
AREA Init, CODE, READONLY
|
||||
|
||||
INCLUDE IrisSubpDefineArm.s
|
||||
INCLUDE IrisSubpMemoryMapArm.s
|
||||
|
||||
INCLUDE IrisSubpMonDefineArm.s
|
||||
INCLUDE IrisSubpMonMemoryMapArm.s
|
||||
|
||||
|
||||
ENTRY
|
||||
;====================================================================
|
||||
; 割り込み領域
|
||||
;====================================================================
|
||||
EXTERN start_handler
|
||||
EXTERN swi_handler
|
||||
EXTERN irq_handler
|
||||
EXTERN fiq_handler
|
||||
CODE32
|
||||
start_v b start_m ; NULLポインタ位置のコードを不変にするため
|
||||
undef_v b fiq_handler
|
||||
swi_v b swi_handler
|
||||
code_abort_v b fiq_handler
|
||||
data_abort_v b fiq_handler
|
||||
reserve_v b fiq_handler
|
||||
irq_v b irq_handler
|
||||
fiq_v b fiq_handler
|
||||
|
||||
start_m b start_handler
|
||||
|
||||
|
||||
IF :DEF: DISABLE_SECURE_CODE
|
||||
ELSE
|
||||
|
||||
; PNデータ
|
||||
|
||||
GLOBAL default_pnB_l
|
||||
GLOBAL default_pnB_h
|
||||
GLOBAL default_pnA_l_0_table
|
||||
GLOBAL default_pnA_l_1
|
||||
default_pnB_l
|
||||
DCD 0x879b9b05
|
||||
default_pnB_h
|
||||
DCB 0x5c
|
||||
default_pnA_l_1
|
||||
DCB 0x60
|
||||
default_pnA_l_0_table
|
||||
DCB 0xe8, 0x4d, 0x5a, 0xb1, 0x17, 0x8f
|
||||
|
||||
|
||||
; Blowfishデータ
|
||||
|
||||
IF :DEF: ENABLE_TEST_BLOWFISH
|
||||
|
||||
INCLUDE BlowfishTestTable.s
|
||||
ELSE
|
||||
INCLUDE BlowfishInitTable.s
|
||||
|
||||
ENDIF ; ENABLE_TEST_BLOWFISH
|
||||
|
||||
|
||||
GLOBAL segmentIndexTable4Secure
|
||||
segmentIndexTable4Secure
|
||||
DCB 4_0132, 4_0213, 4_0231, 4_0312 ; - 4_0123, 4_0321
|
||||
DCB 4_1023, 4_1203, 4_1302, 4_1320 ; - 4_1032, 4_1230
|
||||
DCB 4_2103, 4_2130, 4_2301, 4_2310 ; - 4_2013, 4_2031
|
||||
DCB 4_3012, 4_3021, 4_3120, 4_3201 ; - 4_3102, 4_3210
|
||||
|
||||
GLOBAL normal_mode_key
|
||||
normal_mode_key
|
||||
DCB "NmMdOnly"
|
||||
|
||||
GLOBAL png_off_key
|
||||
png_off_key
|
||||
DCB "enPngOFF"
|
||||
|
||||
GLOBAL encrypt_object_key
|
||||
encrypt_object_key
|
||||
DCB "encryObj"
|
||||
|
||||
|
||||
; SIOハンドシェイクデータ
|
||||
|
||||
ALIGN
|
||||
GLOBAL sio_send_code
|
||||
GLOBAL sio_recv_code
|
||||
GLOBAL sio_add_code
|
||||
sio_send_code
|
||||
DCW 0x4e54
|
||||
sio_recv_code
|
||||
DCW 0x4944
|
||||
sio_add_code
|
||||
DCW 0x524f
|
||||
|
||||
|
||||
ENDIF ; DISABLE_SECURE_CODE
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; 暗号キー変換(r0=暗号キー)
|
||||
;--------------------------------------------------------------------
|
||||
|
||||
IF :DEF: DISABLE_SECURE_CODE
|
||||
ELSE
|
||||
|
||||
GLOBAL ChangeEncryptKey1
|
||||
GLOBAL ChangeEncryptKey2
|
||||
GLOBAL ChangeEncryptKey3
|
||||
GLOBAL ChangeEncryptKey4
|
||||
ALIGN
|
||||
CODE32
|
||||
ChangeEncryptKey1
|
||||
mov r0, r0, lsr #1
|
||||
b CheckLR2Return
|
||||
|
||||
ChangeEncryptKey2
|
||||
mov r0, r0, lsl #1
|
||||
b CheckLR2Return
|
||||
|
||||
ChangeEncryptKey3
|
||||
mov r0, r0, lsl #1
|
||||
b CheckLR2Return
|
||||
|
||||
ChangeEncryptKey4
|
||||
mov r0, r0, lsr #1
|
||||
b CheckLR2Return
|
||||
|
||||
CheckLR2Return
|
||||
tst lr, #0xff000000
|
||||
|
||||
movne r0, #0
|
||||
movne lr, #4
|
||||
bx lr
|
||||
|
||||
ENDIF ; DISABLE_SECURE_CODE
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; 暗号処理フック関数群
|
||||
;--------------------------------------------------------------------
|
||||
|
||||
IF :DEF: DISABLE_SECURE_CODE
|
||||
ELSE
|
||||
|
||||
EXTERN InitSecureParam
|
||||
EXTERN MakeBlowfishTable
|
||||
EXTERN InitBlowfishKeyAnaTable
|
||||
EXTERN InitBlowfish
|
||||
EXTERN EncryptByBlowfish
|
||||
EXTERN DecryptByBlowfish
|
||||
EXTERN DecryptObjectFile
|
||||
EXTERN ChangeObjectTable
|
||||
EXTERN CopyBiosArea
|
||||
EXTERN CpuSetFast32
|
||||
GLOBAL InitSecureParamFook
|
||||
GLOBAL MakeBlowfishCardTable
|
||||
GLOBAL MakeBlowfishFlashTable
|
||||
GLOBAL InitBlowfishKeyAnaTableFook
|
||||
GLOBAL InitBlowfishFook
|
||||
GLOBAL EncryptByBlowfishFook0
|
||||
GLOBAL EncryptByBlowfishFook1
|
||||
GLOBAL EncryptByBlowfishFook2
|
||||
GLOBAL DecryptByBlowfishFook
|
||||
GLOBAL DecryptObjectFileFook
|
||||
GLOBAL ChangeObjectTableFook
|
||||
GLOBAL CopyBiosAreaFook
|
||||
GLOBAL CpuSetFast32Fook
|
||||
ALIGN
|
||||
CODE32
|
||||
InitSecureParamFook
|
||||
ldr r12, =InitSecureParam
|
||||
b CheckLR2CallR12
|
||||
|
||||
MakeBlowfishCardTable
|
||||
mov r3, #8
|
||||
ldr r12, =MakeBlowfishTable
|
||||
b CheckLR2CallR12
|
||||
|
||||
MakeBlowfishFlashTable
|
||||
mov r3, #12
|
||||
ldr r12, =MakeBlowfishTable
|
||||
b CheckLR2CallR12
|
||||
|
||||
InitBlowfishKeyAnaTableFook
|
||||
ldr r12, =InitBlowfishKeyAnaTable
|
||||
b CheckLR2CallR12
|
||||
|
||||
InitBlowfishFook
|
||||
ldr r12, =InitBlowfish
|
||||
b CheckLR2CallR12
|
||||
|
||||
EncryptByBlowfishFook0
|
||||
ldr r12, =EncryptByBlowfish
|
||||
b CheckLR2CallR12
|
||||
|
||||
EncryptByBlowfishFook1
|
||||
mov r2, r1
|
||||
add r1, r1, #4
|
||||
ldr r12, =EncryptByBlowfish
|
||||
b CheckLR2CallR12
|
||||
|
||||
EncryptByBlowfishFook2
|
||||
add r2, r1, #4
|
||||
add r1, r1, #8
|
||||
ldr r12, =EncryptByBlowfish
|
||||
b CheckLR2CallR12
|
||||
|
||||
DecryptByBlowfishFook
|
||||
mov r2, r1
|
||||
add r1, r1, #4
|
||||
ldr r12, =DecryptByBlowfish
|
||||
b CheckLR2CallR12
|
||||
|
||||
DecryptObjectFileFook
|
||||
ldr r12, =DecryptObjectFile
|
||||
b CheckLR2CallR12
|
||||
|
||||
ChangeObjectTableFook
|
||||
mov r0, #8
|
||||
ldr r12, =ChangeObjectTable
|
||||
b CheckLR2CallR12
|
||||
|
||||
CopyBiosAreaFook
|
||||
ldr r12, =CopyBiosArea
|
||||
b CheckLR2CallR12
|
||||
|
||||
CpuSetFast32Fook
|
||||
ldr r12, =CpuSetFast32
|
||||
b CheckLR2CallR12
|
||||
|
||||
CheckLR2CallR12
|
||||
tst lr, #0xff000000
|
||||
bxeq r12
|
||||
|
||||
mov r12,#0
|
||||
mov r3, #0
|
||||
mov r2, #0
|
||||
mov r1, #0
|
||||
mov r0, #0
|
||||
mov lr, #4
|
||||
bx lr
|
||||
|
||||
|
||||
ENDIF ; DISABLE_SECURE_CODE
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; IPL2呼び出し関数ポインタ獲得
|
||||
;--------------------------------------------------------------------
|
||||
EXTERN CalledFormIPL2
|
||||
EXTERN CardIntr
|
||||
GLOBAL GetFuncp4IPL2
|
||||
CODE16
|
||||
GetFuncp4IPL2
|
||||
ldr r2, eor_code
|
||||
ldr r0, =CalledFormIPL2
|
||||
ldr r1, =CardIntr
|
||||
ldr r3, =SetPause2Agb
|
||||
eor r3, r3, r0
|
||||
eor r0, r0, r1
|
||||
eor r1, r1, r2
|
||||
bx lr
|
||||
|
||||
ALIGN
|
||||
eor_code
|
||||
DCB "I2\0\0" ; EORコード
|
||||
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; チェックフラグ セット
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL SetPauseCheckFlag
|
||||
CODE16
|
||||
SetPauseCheckFlag
|
||||
mov r1, #1
|
||||
ldr r2, =REG_PAUSE
|
||||
strb r1, [r2, #0]
|
||||
bx lr
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; AGBモード遷移
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL SetPause2Agb
|
||||
ALIGN
|
||||
CODE32
|
||||
SetPause2Agb mov r2, #0x40
|
||||
b SetPauseHi
|
||||
;--------------------------------------------------------------------
|
||||
; HALT
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL Halt
|
||||
CODE32
|
||||
Halt mov r2, #0x80
|
||||
b SetPauseHi
|
||||
;--------------------------------------------------------------------
|
||||
; STOP
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL Stop
|
||||
GLOBAL SetPauseHi
|
||||
CODE32
|
||||
Stop mov r2, #0xc0
|
||||
SetPauseHi mov r12, #REG_BASE
|
||||
strb r2, [r12, #OFFSET_REG_PAUSE + 1]
|
||||
nop
|
||||
nop
|
||||
bx lr
|
||||
|
||||
LTORG ; 上記のリテラルプールを隠す
|
||||
|
||||
|
||||
GLOBAL SecureAreaEndp
|
||||
SecureAreaEndp
|
||||
|
||||
|
||||
IF :DEF: ENABLE_WRITE_FLASH
|
||||
|
||||
GLOBAL flashTestHeader
|
||||
flashTestHeader
|
||||
DCD 0 ; MACアドレス Low
|
||||
DCW 0 ; High
|
||||
DCW 0xc401 ; CRC16bit
|
||||
DCB "MACP" ; Blowfishキーデータ
|
||||
DCW 0x100/8 ; ARM9-FLASHオフセット
|
||||
DCW 0x20000/8 ; ARM9-RAM負オフセット
|
||||
|
||||
DCW 0x10000/8 ; ARM7-FLASHオフセット
|
||||
DCW 0x8000/8 ; ARM7-RAM負オフセット
|
||||
DCW 8_01111 ; 境界2bit x 4 & ARM7-ARM配置フラグ & 予約7bit
|
||||
DCW 0 ; 予約2Byte
|
||||
|
||||
DCD 0 ; 0x9e0d35bd ; スクランブル解除キー(8バイト)
|
||||
DCD 0 ; 0x2560ac91
|
||||
|
||||
|
||||
GLOBAL arm9ipl2
|
||||
GLOBAL arm9ipl2_end
|
||||
ALIGN
|
||||
arm9ipl2
|
||||
|
||||
IF :DEF: DISABLE_SECURE_CODE
|
||||
|
||||
INCBIN ipl2_test.lz
|
||||
ELSE
|
||||
INCBIN ipl2_test.ipl2
|
||||
|
||||
ENDIF ; DISABLE_SECURE_CODE
|
||||
|
||||
arm9ipl2_end
|
||||
GLOBAL arm7ipl2
|
||||
GLOBAL arm7ipl2_end
|
||||
ALIGN
|
||||
arm7ipl2
|
||||
IF :DEF: DISABLE_SECURE_CODE
|
||||
|
||||
INCBIN subp_ipl2_test.lz
|
||||
ELSE
|
||||
INCBIN subp_ipl2_test.ipl2
|
||||
|
||||
ENDIF ; DISABLE_SECURE_CODE
|
||||
arm7ipl2_end
|
||||
|
||||
ENDIF ; ENABLE_WRITE_FLASH
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
725
trunk/IrisSubp/IrisSubpMon/crt0subArmCommon.s
Normal file
725
trunk/IrisSubp/IrisSubpMon/crt0subArmCommon.s
Normal file
@ -0,0 +1,725 @@
|
||||
;********************************************************************
|
||||
; IRIS-SUBPモニタプログラム サブルーチン群
|
||||
;********************************************************************
|
||||
|
||||
AREA IrisSubpCrt0Sub, CODE, READONLY
|
||||
|
||||
INCLUDE IrisSubpDefineArm.s
|
||||
INCLUDE IrisSubpMemoryMapArm.s
|
||||
|
||||
INCLUDE IrisSubpMonDefineArm.s
|
||||
INCLUDE IrisSubpMonMemoryMapArm.s
|
||||
|
||||
MON_ONLY
|
||||
NDEBUG2
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; 割り込み分岐処理
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL intr_main
|
||||
EXTERN intrTable
|
||||
ALIGN
|
||||
CODE32
|
||||
intr_main
|
||||
mov r12, #REG_BASE ; IE/IF チェック
|
||||
add r3, r12, #OFFSET_REG_IE ; r3: REG_IE
|
||||
ldmia r3, {r1-r2}
|
||||
and r1, r1, r2 ; r1: IE & IF
|
||||
mov r2, #0
|
||||
ands r0, r1, #CARD_DATA_INTR_FLAG ; カードデータ転送終了 割り込み
|
||||
bne jump_intr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #TIMER3_INTR_FLAG ; カードタイマー 割り込み
|
||||
bne jump_intr
|
||||
add r2, r2, #4
|
||||
ands r0, r1, #V_BLANK_INTR_FLAG ; Vブランク 割り込み
|
||||
jump_intr
|
||||
str r0, [r3, #REG_IF - REG_IE] ; IF クリア
|
||||
ldr r1, =intrTable ; ユーザIRQ処理へジャンプ
|
||||
add r1, r1, r2
|
||||
ldr r0, [r1]
|
||||
bx r0
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ループ待ち(r0=loopCount)
|
||||
;-----------------------------------------------------------------------
|
||||
GLOBAL WaitByLoop
|
||||
ALIGN
|
||||
CODE16
|
||||
WaitByLoop
|
||||
sub r0, #1
|
||||
bgt WaitByLoop
|
||||
|
||||
bx lr
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
;- Vブランク割り込みウェイト -
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL WaitVBlankIntr
|
||||
ALIGN
|
||||
CODE32
|
||||
WaitVBlankIntr mov r0, #1
|
||||
mov r1, #V_BLANK_INTR_FLAG
|
||||
;--------------------------------------------------------------------
|
||||
; 割り込みウェイト(r0=initCheckClear, r1=intrFlag)
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL WaitIntr
|
||||
CODE32
|
||||
WaitIntr stmfd sp!, {lr}
|
||||
|
||||
cmp r0, #0
|
||||
blne WaitIntr_sub ; IfCheck クリア
|
||||
|
||||
0
|
||||
mov lr, #0x80
|
||||
strb lr, [r12,#REG_PAUSE+1 - REG_BASE] ; SVC_Halt() REG_PAUSE = 0x80
|
||||
nop
|
||||
nop
|
||||
bl WaitIntr_sub
|
||||
beq %b0 ; while (!(IfCheck & IfFlags))
|
||||
|
||||
ldmfd sp!, {lr}
|
||||
bx lr
|
||||
|
||||
WaitIntr_sub
|
||||
IF :DEF: BB_MON
|
||||
ldr r12,=CPU_WRAM_END
|
||||
ELSE
|
||||
mov r12,#REG_BASE ; r12: #REG_BASE
|
||||
ENDIF
|
||||
str r12,[r12,#REG_IME - REG_BASE] ; IME = 0
|
||||
|
||||
ldr r2, [r12, #INTR_CHECK_BUF - CPU_WRAM_END]
|
||||
ands r0, r1, r2 ; IfCheck 判定
|
||||
eorne r2, r2, r0 ; IfCheck クリア
|
||||
strne r2, [r12, #INTR_CHECK_BUF - CPU_WRAM_END]
|
||||
|
||||
mov r0, #1
|
||||
str r0, [r12,#REG_IME - REG_BASE] ; IME = 1
|
||||
|
||||
bx lr
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; サウンドBIAS 変更 (r0=up_down, r1=stepLoops)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL ChangeSoundBias16
|
||||
CODE16
|
||||
ChangeSoundBias16
|
||||
|
||||
1 mov r2, #2 ; r12: 0x200
|
||||
lsl r2, #8
|
||||
mov r12, r2
|
||||
|
||||
ldr r3, =REG_SOUNDBIAS ; r3: soundBiasp = REG_SOUNDBIAS
|
||||
ldrh r2, [r3, #0] ; r2: *soundBiasp
|
||||
ldr r3, =REG_SOUNDBIAS
|
||||
cmp r0, #0 ; if (up_down)
|
||||
beq %f2
|
||||
|
||||
cmp r2, r12 ; if (*soundBiasp >= 0x200) break;
|
||||
bge %f5
|
||||
|
||||
add r2, #1 ; *soundBiasp += 1
|
||||
b %f3
|
||||
|
||||
2 cmp r2, #0 ; if (*soundBiasp <= 0) break;
|
||||
ble %f5
|
||||
|
||||
sub r2, #1 ; *soundBiasp -= 1
|
||||
|
||||
3 strh r2, [r3, #0]
|
||||
|
||||
mov r2, r1 ; for (i=stepLoops; --i>=0; ) ;
|
||||
|
||||
4 sub r2,#1
|
||||
bpl %b4
|
||||
b %b1
|
||||
|
||||
5 bx lr
|
||||
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; BIOS領域専用コピー (r0=srcp, r1=destp, r2=size)
|
||||
;--------------------------------------------------------------------
|
||||
EXTERN SecureAreaEndp
|
||||
GLOBAL CopyBiosArea
|
||||
|
||||
CopyBiosArea
|
||||
add r2, r1
|
||||
1
|
||||
ldr r3, =SecureAreaEndp
|
||||
cmp r0, r3
|
||||
bge %b2
|
||||
|
||||
ldmia r0!, {r3} ; *((vu32 *)(destp))++ = *((vu32 *)(srcp))++
|
||||
stmia r1!, {r3}
|
||||
cmp r1, r2
|
||||
blt %b1
|
||||
|
||||
2 mov pc, lr
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; セキュリティ・キー解除 & Nintendoロゴ コピー
|
||||
;--------------------------------------------------------------------
|
||||
IF :DEF: TEST_AGB_MODE
|
||||
KEY_START_BLOCK_NO * 3 ; キー・スタート ブロックNo
|
||||
EXTERN NinLogoBak
|
||||
; EXTERN NinLogoCopy
|
||||
EXTERN DacsCheck
|
||||
GLOBAL key_unlock__nin_logo_copy
|
||||
CODE16
|
||||
key_unlock__nin_logo_copy
|
||||
push {r3, r4-r6, lr}
|
||||
mov r6, #0x8 ; r6: ROM_BANK0
|
||||
lsl r6, #24
|
||||
mov r5, #MON_KEY_GROUP_NO - CARTRIDGE
|
||||
add r5, r6 ; r5: MON_KEY_GROUP_NO
|
||||
sub r0, r5, #1 ; r4: キー No オフセット 算出
|
||||
mov r1, #27 ; Srcp=MON_KEY_GROUP_NO-1,Count=27
|
||||
bl GetKeyNo
|
||||
; mov r0, #2 ; ダミー キー No
|
||||
mov r4, #2*6
|
||||
mul r4, r0
|
||||
ldrb r3, [r5] ; r3: キーグループ No(0-3) * 48
|
||||
; lsl r3, #32-2 ;(r2: キーグループ オフセット固定 ダミー読み込み)
|
||||
; lsr r3, #32-2
|
||||
; mov r2, #2*6*4
|
||||
; mul r2, r3
|
||||
; add r4, r2 ; r4: キー No 算出 (キーグループ オフセット加算無し)
|
||||
adr r5, key_addr ; r5: キー・アドレス
|
||||
add r5, r4
|
||||
mov r4, #0
|
||||
nin_copy mov r0, r4
|
||||
bl NinLogoCopy ; Nintendoロゴ コピー (20*10Byte)
|
||||
cmp r4, #KEY_START_BLOCK_NO
|
||||
blt key_unlock_end
|
||||
cmp r4, #KEY_START_BLOCK_NO + 6
|
||||
bge key_unlock_end
|
||||
key_unlock ldrh r1, [r5] ; r1: キー・アドレス 読み込み
|
||||
lsl r1, #1
|
||||
orr r1, r6
|
||||
ldrh r0, [r1]
|
||||
add r5, #2
|
||||
key_unlock_end add r4, #1
|
||||
cmp r4, #11
|
||||
bne nin_copy
|
||||
|
||||
pop {r3, r4-r6, pc}
|
||||
|
||||
INCLUDE crt0KeyAddr.s
|
||||
|
||||
ENDIF
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; キーNo 算出 (r0=Srcp, r1=Count → r0=KeyNo:2)
|
||||
;--------------------------------------------------------------------
|
||||
IF :DEF: TEST_AGB_MODE
|
||||
GLOBAL GetKeyNo
|
||||
CODE16
|
||||
GetKeyNo push {r4, r5, lr}
|
||||
mov r4, #3 ; r4: Ror
|
||||
mov r3, #0 ; r3: KeyNo
|
||||
GetKeyNo_10 ldrb r2, [r0, #0] ; r2: *Srcp
|
||||
ror r3, r4
|
||||
mov r5, #4 ; r5: RorCount
|
||||
GetKeyNo_20 eor r3, r2
|
||||
lsl r2, #8
|
||||
sub r5, #1 ; while (--RorCount > 0)
|
||||
bgt GetKeyNo_20
|
||||
add r0, #1
|
||||
sub r1, #1 ; while (--Count > 0)
|
||||
bgt GetKeyNo_10
|
||||
mov r0, r3
|
||||
lsl r0, #32-5
|
||||
lsr r0, #32-2
|
||||
pop {r4, r5, pc}
|
||||
ENDIF
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; NINTENDOロゴ コピー (r0=BlockNo)
|
||||
;--------------------------------------------------------------------
|
||||
IF :DEF: TEST_AGB_MODE
|
||||
GLOBAL NinLogoCopy
|
||||
CODE16
|
||||
NinLogoCopy push {r4, lr}
|
||||
mov r4, #20 ; r4: BlockOffset = BlockNo * 20
|
||||
mul r4, r0
|
||||
mov r3, #0x8 ; r3: ROM_BANK0
|
||||
lsl r3, #24
|
||||
|
||||
add r0, r3, #4 ; r0: &((u8 *)ROM_BANK0)[BlockOffset + OFFSET_MON_NINLOGO]
|
||||
add r0, r4
|
||||
ldr r1, =NinLogoBak+36 ; r1: &NinLogoBak[BlockOffset + 36]
|
||||
add r1, r4
|
||||
mov r2, #10 ; r2: 0x0000000A (16bit転送10回)
|
||||
bl CpuSet16_32 ; CpuCopy16_32()
|
||||
pop {r4, pc}
|
||||
ENDIF
|
||||
|
||||
|
||||
LTORG
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; 汎用符号付き割り算(r0/r1→r0',r0%r1→r1',|r0'|→r3')
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL DivS32
|
||||
ALIGN
|
||||
CODE32
|
||||
DivS32 ands r3, r1, #0x80000000 ; r1: 除数の絶対値
|
||||
rsbmi r1, r1, #0
|
||||
eors r12,r3, r0, asr #32 ; r12: d31=結果の符合,d30=被除数の符号
|
||||
rsbcs r0, r0, #0 ; r0: 被除数の絶対値
|
||||
movs r2, r1 ; r2: コントロール・ビット
|
||||
; beq devide_by_zero
|
||||
|
||||
divide_just_l cmp r2, r0, lsr #1
|
||||
movls r2, r2, lsl #1
|
||||
blo divide_just_l
|
||||
|
||||
divide_div_l cmp r0, r2 ; 減算できるかチェック
|
||||
adc r3, r3, r3 ; r3*2 + キャリー
|
||||
subcs r0, r0, r2 ; 減算可能なら減算
|
||||
teq r2, r1 ; 終了チェック
|
||||
movne r2, r2, lsr #1 ; 終了でなければ2で割り再チェック
|
||||
bne divide_div_l
|
||||
mov r1, r0
|
||||
mov r0, r3
|
||||
|
||||
movs r12,r12,lsl #1
|
||||
rsbcs r0, r0, #0
|
||||
rsbmi r1, r1, #0
|
||||
|
||||
bx lr
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; 平方根算出(r0=param)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL SqrtU32
|
||||
ALIGN
|
||||
CODE32
|
||||
SqrtU32 stmfd sp!, {r4}
|
||||
|
||||
mov r12,r0 ; r12: ParamBak
|
||||
mov r1, #1
|
||||
|
||||
1 cmp r0, r1
|
||||
movhi r0, r0, lsr #1
|
||||
movhi r1, r1, lsl #1
|
||||
bhi %b1
|
||||
|
||||
2 mov r0, r12 ; r0: 被除数
|
||||
mov r4, r1 ; r1: 除数
|
||||
mov r3, #0 ; r3: 商
|
||||
mov r2, r1 ; r2: コントロール・ビット
|
||||
|
||||
3 cmp r2, r0, lsr #1
|
||||
movls r2, r2, lsl #1
|
||||
blo %b3
|
||||
|
||||
4 cmp r0, r2 ; 減算できるかチェック
|
||||
adc r3, r3, r3 ; r3*2 + キャリー
|
||||
subcs r0, r0, r2 ; 減算可能なら減算
|
||||
teq r2, r1 ; 終了チェック
|
||||
movne r2, r2, lsr #1 ; 終了でなければ2で割り再チェック
|
||||
bne %b4
|
||||
|
||||
add r1, r1, r3
|
||||
movs r1, r1, lsr #1
|
||||
cmp r1, r4
|
||||
bcc %b2
|
||||
|
||||
mov r0, r4
|
||||
ldmfd sp!, {r4}
|
||||
bx lr
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; CPU セット (r0=srcp, r1=destp, r2=dmaCntData)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL CpuSet16_32
|
||||
CODE16
|
||||
CpuSet16_32 push {r4, r5, lr}
|
||||
|
||||
lsl r4, r2, #11 ; r4: size = (dmaCntData & 0x1fffff)*4
|
||||
lsr r4, #11-2
|
||||
|
||||
bl CheckSrcp16_32 ; ソースアドレス チェック
|
||||
IF :DEF: CHECK_PROT_ADDR
|
||||
ELSE
|
||||
beq %f6
|
||||
ENDIF
|
||||
|
||||
0 mov r5, #0 ; r5: i = 0
|
||||
|
||||
lsr r3, r2, #27 ; if ((dmaCntData) & DMA_32BIT_BUS)
|
||||
bcc %f3
|
||||
|
||||
add r5, r1, r4 ; r5: destEndp = destp + size
|
||||
|
||||
lsr r3, r2, #25 ; if ((dmaCntData) & DMA_SRC_FIX)
|
||||
bcc %f2
|
||||
|
||||
ldmia r0!, {r3}
|
||||
1 cmp r1, r5 ; while (destp < destEndp)
|
||||
bge %f6
|
||||
stmia r1!, {r3} ; *((vu32 *)(destp))++ = *((vu32 *)(srcp))
|
||||
b %b1
|
||||
|
||||
2 cmp r1, r5 ; while (destp < destEndp)
|
||||
bge %f6
|
||||
ldmia r0!, {r3} ; *((vu32 *)(destp))++ = *((vu32 *)(srcp))++
|
||||
stmia r1!, {r3}
|
||||
b %b2
|
||||
|
||||
3 lsr r4, #1
|
||||
|
||||
lsr r3, r2, #25 ; if ((dmaCntData) & DMA_SRC_FIX)
|
||||
bcc %f5
|
||||
|
||||
ldrh r3, [r0, #0]
|
||||
4 cmp r5, r4 ; for ( ; i<count; i++)
|
||||
bge %f6
|
||||
strh r3, [r1, r5] ; ((vu16 *)(destp))[i] = ((vu16 *)(srcp))[0]
|
||||
add r5, #2
|
||||
b %b4
|
||||
|
||||
5 cmp r5, r4 ; for ( ; i<count; i++)
|
||||
bge %f6
|
||||
ldrh r3, [r0, r5] ; ((vu16 *)(destp))[i] = ((vu16 *)(srcp))[i]
|
||||
strh r3, [r1, r5]
|
||||
add r5, #2
|
||||
b %b5
|
||||
|
||||
6 pop {r4, r5}
|
||||
pop {r3}
|
||||
bx r3
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; ソースアドレス チェック 16bitインタフェース(r4=size → r12)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL CheckSrcp16_32
|
||||
CODE16
|
||||
CheckSrcp16_32 adr r3, CheckSrcp
|
||||
mov r12,r4
|
||||
bx r3
|
||||
;--------------------------------------------------------------------
|
||||
; ソースアドレス チェック (r0=srcp,r12=size → Zフラグ)
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL CheckSrcp
|
||||
ALIGN
|
||||
CODE32
|
||||
CheckSrcp cmp r12, #0 ; if (!size)
|
||||
beq CheckSrcp_End
|
||||
|
||||
bic r12, r12,#0xfe000000
|
||||
add r12, r0, r12 ; r12: srcEndp = srcp + size
|
||||
|
||||
tst r0, #0x0e000000 ; srcp チェック
|
||||
tstne r12,#0x0e000000 ; srcEndp チェック
|
||||
|
||||
CheckSrcp_End bx lr
|
||||
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; CPU 高速セット(32Byte) (r0=srcp, r1=destp, r2=dmaCntData)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL CpuSetFast32_T
|
||||
GLOBAL CpuSetFast32
|
||||
CODE16
|
||||
CpuSetFast32_T mov r3, pc
|
||||
bx r3
|
||||
ALIGN
|
||||
CODE32
|
||||
CpuSetFast32 stmfd sp!, {r4-r10, lr}
|
||||
|
||||
mov r10, r2, lsl #11 ; r10: count = (dmaCntData & 0x1fffff)*4
|
||||
|
||||
movs r12, r10, lsr #11-2 ; r12: size = count * 4
|
||||
bl CheckSrcp ; ソースアドレス チェック
|
||||
IF :DEF: CHECK_PROT_ADDR
|
||||
ELSE
|
||||
beq %f5
|
||||
ENDIF
|
||||
|
||||
add lr, r1, r10, lsr #11-2 ; lr: destEndp = destp + size
|
||||
mov r10, r10, lsr #11+3 ; r10: blockEndp = srcp + size/32*32
|
||||
add r10, r1, r10,lsl #3
|
||||
|
||||
0 movs r2, r2, lsr #25 ; if ((dmaCntData) & DMA_SRC_FIX)
|
||||
bcc %f3
|
||||
|
||||
ldr r2, [r0, #0]
|
||||
mov r3, r2
|
||||
mov r4, r2
|
||||
mov r5, r2
|
||||
mov r6, r2
|
||||
mov r7, r2
|
||||
mov r8, r2
|
||||
mov r9, r2
|
||||
1 cmp r1, r10 ; while (destp < destEndp)
|
||||
stmltia r1!, {r2-r9} ; *((vu32 *)(destp++)) = *((vu32 *)(srcp))
|
||||
blt %b1
|
||||
2 cmp r1, lr
|
||||
stmltia r1!, {r2}
|
||||
blt %b2
|
||||
b %f5
|
||||
|
||||
3 cmp r1, r10 ; while (destp < destEndp)
|
||||
ldmltia r0!, {r2-r9} ; *((vu32 *)(destp)++) = *((vu32 *)(srcp)++)
|
||||
stmltia r1!, {r2-r9}
|
||||
blt %b3
|
||||
4 cmp r1, lr
|
||||
ldmltia r0!, {r2}
|
||||
stmltia r1!, {r2}
|
||||
blt %b4
|
||||
|
||||
5 ldmfd sp!, {r4-r10, lr}
|
||||
bx lr
|
||||
; ENDIF
|
||||
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; Bit圧縮データ展開 (r0=srcp, r1=destp, r2=unPackBitsParamp)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL UnPackBits32
|
||||
ALIGN
|
||||
CODE32
|
||||
UnPackBits32
|
||||
stmfd sp!, {r4-r11, lr}
|
||||
sub sp, sp, #4
|
||||
|
||||
ldrh r7, [r2, #0] ; r7: srcNum = unPackBitsParamp->srcNum
|
||||
|
||||
movs r12, r7 ; r12: srcCount
|
||||
bl CheckSrcp ; ソースアドレス チェック
|
||||
beq %f6
|
||||
|
||||
0 ldrb r6, [r2, #2] ; r6: srcBitNum = unPackBitsParamp->srcBitNum
|
||||
rsb r10, r6, #8 ; r10: srcBitNumInv = 8 - srcBitNum
|
||||
mov r14, #0 ; r14: destBak = 0
|
||||
ldr r11, [r2, #4] ; r8: destOffset0_On
|
||||
mov r8, r11, lsr #31 ; = unPackBitsParamp->destOffset0_On
|
||||
ldr r11,[r2, #4] ; destOffset = unPackBitsParamp->destOffset
|
||||
mov r11,r11, lsl #1
|
||||
mov r11,r11, lsr #1
|
||||
str r11,[sp, #0]
|
||||
ldrb r2, [r2, #3] ; r2: destBitNum = unPackBitsParamp->destBitNum
|
||||
mov r3, #0 ; r3: destBitCount = 0
|
||||
|
||||
1 subs r7, r7, #1 ; while (--srcNum >= 0)
|
||||
blt %f6
|
||||
|
||||
mov r11, #0xff ; r5: srcMask = 0xff >> srcBitNumInv
|
||||
mov r5, r11, asr r10
|
||||
ldrb r9, [r0], #1 ; r9: srcTmp = *srcp++
|
||||
mov r4, #0 ; r4: srcBitCount = 0
|
||||
|
||||
2 cmp r4, #8 ; while (srcBitCount < 8)
|
||||
bge %b1
|
||||
|
||||
and r11, r9, r5 ; r12: destTmp = ((srcTmp&srcMask) >>srcBitCount)
|
||||
movs r12, r11, lsr r4
|
||||
cmpeq r8, #0
|
||||
beq %f4
|
||||
|
||||
3 ldr r11, [sp, #0] ; destTmp += destOffset
|
||||
add r12, r12, r11
|
||||
4 orr r14, r14, r12, lsl r3 ; destBak |= destTmp << destBitCount
|
||||
add r3, r3, r2 ; destBitCount += destBitNum
|
||||
|
||||
cmp r3, #0x20 ; if (destBitCount >= 32)
|
||||
blt %f5
|
||||
|
||||
str r14, [r1], #4 ; *destp++ = destBak
|
||||
mov r14, #0 ; destBak = 0
|
||||
mov r3, #0 ; destBitCount = 0
|
||||
|
||||
5 mov r5, r5, lsl r6 ; srcMask <<= srcBitNum
|
||||
add r4, r4, r6 ; srcBitCount += srcBitNum
|
||||
b %b2
|
||||
|
||||
6 add sp, sp, #4
|
||||
ldmfd sp!, {r4-r11, lr}
|
||||
bx lr
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; LZ77データ展開(8Bit→8Bit)(r0=srcp, r1=destp)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL UnCompLZ77Byte
|
||||
ALIGN
|
||||
CODE32
|
||||
UnCompLZ77Byte
|
||||
stmfd sp!, {r4-r6, lr}
|
||||
|
||||
ldr r5, [r0], #4 ; r2: destCount = *(u32 *)srcp >> 8
|
||||
mov r2, r5, lsr #8 ; r0: srcp += 4
|
||||
|
||||
movs r12, r2 ; r12: srcCount
|
||||
bl CheckSrcp ; ソースアドレス チェック
|
||||
beq %f6
|
||||
|
||||
1 cmp r2, #0 ; while (destCount > 0)
|
||||
ble %f6
|
||||
|
||||
ldrb r14, [r0], #1 ; r14: flags = *srcp++
|
||||
mov r4, #8 ; for (i=8; --i>=0; )
|
||||
2 subs r4, r4, #1
|
||||
blt %b1
|
||||
|
||||
tst r14, #0x80 ; if (!(flags & 0x80))
|
||||
bne %f3
|
||||
|
||||
ldrb r6, [r0], #1 ; *srcp++
|
||||
strb r6, [r1], #1 ; r1: *destp++
|
||||
sub r2, r2, #1 ; destCount--
|
||||
b %f5
|
||||
|
||||
3 ldrb r5, [r0, #0] ; r3: length = (*srcp >> 4) + 3
|
||||
mov r6, #3
|
||||
add r3, r6, r5, asr #4
|
||||
ldrb r6, [r0], #1 ; r12: offset = (*srcp++ & 0x0f) << 8
|
||||
and r5, r6, #0xf
|
||||
mov r12,r5, lsl #8
|
||||
ldrb r6, [r0], #1 ; offset = (offset | *srcp++) + 1
|
||||
orr r5, r6, r12
|
||||
add r12, r5, #1
|
||||
sub r2, r2, r3 ; destCount -= length
|
||||
|
||||
4 ldrb r5, [r1, -r12] ; *destp++ = destp[-offset]
|
||||
strb r5, [r1], #1
|
||||
subs r3, r3, #1 ; while (--length > 0)
|
||||
bgt %b4
|
||||
|
||||
5 cmp r2, #0 ; if (destCount <= 0) break;
|
||||
movgt r14, r14, lsl #1 ; flags <<= 1
|
||||
bgt %b2
|
||||
b %b1
|
||||
|
||||
6 ldmfd sp!, {r4-r6, lr}
|
||||
bx lr
|
||||
; ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; ランレングスデータ展開(8Bit→8Bit)(r0=srcp, r1=destp)
|
||||
;--------------------------------------------------------------------
|
||||
; IF :DEF: SYSCALL_ASM
|
||||
GLOBAL UnCompRLByte
|
||||
CODE16
|
||||
UnCompRLByte
|
||||
push {r4-r7, lr}
|
||||
|
||||
ldmia r0!, {r3} ; r7: destCount = *(u32 *)srcp >> 8
|
||||
lsr r7, r3, #8 ; r0: srcp += 4
|
||||
|
||||
mov r4, r7 ; r4: count
|
||||
bl CheckSrcp16_32 ; ソースアドレス チェック
|
||||
beq %f5
|
||||
|
||||
1 cmp r7, #0 ; while (destCount > 0)
|
||||
ble %f5
|
||||
|
||||
ldrb r4, [r0, #0] ; r4: flags = *srcp++
|
||||
add r0, #1
|
||||
lsl r2, r4, #25 ; r2: length = flags & 0x7f
|
||||
lsr r2, #25
|
||||
lsr r3, r4, #8 ; if (!(flags & 0x80))
|
||||
bcs %f3
|
||||
|
||||
add r2, #1 ; length++
|
||||
sub r7, r2 ; destCount -= length
|
||||
2 ldrb r3, [r0, #0] ; *destp++ = *srcp++
|
||||
strb r3, [r1, #0]
|
||||
add r0, #1
|
||||
add r1, #1
|
||||
sub r2, r2, #1 ; while (--length > 0)
|
||||
bgt %b2
|
||||
b %b1
|
||||
|
||||
3 add r2, #3 ; length += 3
|
||||
sub r7, r2 ; destCount -= length
|
||||
ldrb r5, [r0, #0] ; srcTmp = *srcp++
|
||||
add r0, #1
|
||||
4 strb r5, [r1, #0] ; *destp++ = srcTmp
|
||||
add r1, #1
|
||||
sub r2, r2, #1 ; while (--length > 0)
|
||||
bgt %b4
|
||||
b %b1
|
||||
|
||||
5 pop {r4-r7}
|
||||
pop {r0}
|
||||
; ENDIF
|
||||
;--------------------------------------------------------------------
|
||||
; r0レジスタによるルーチン呼び出し
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL __call_via_r0
|
||||
CODE16
|
||||
__call_via_r0 bx r0
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; r1レジスタによるルーチン呼び出し
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL __call_via_r1
|
||||
CODE16
|
||||
__call_via_r1 bx r1
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; r2レジスタによるルーチン呼び出し
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL __call_via_r2
|
||||
CODE16
|
||||
__call_via_r2 bx r2
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; r3レジスタによるルーチン呼び出し
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL __call_via_r3
|
||||
CODE16
|
||||
__call_via_r3 bx r3
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; r4レジスタによるルーチン呼び出し
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL __call_via_r4
|
||||
CODE16
|
||||
__call_via_r4 bx r4
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; r5レジスタによるルーチン呼び出し
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL __call_via_r5
|
||||
CODE16
|
||||
__call_via_r5 bx r5
|
||||
|
||||
|
||||
|
||||
END
|
||||
|
||||
336
trunk/IrisSubp/IrisSubpMon/crt0subExceptions.s
Normal file
336
trunk/IrisSubp/IrisSubpMon/crt0subExceptions.s
Normal file
@ -0,0 +1,336 @@
|
||||
;********************************************************************
|
||||
; IRIS-SUBPモニタ例外ハンドラ
|
||||
;********************************************************************
|
||||
|
||||
AREA Init, CODE, READONLY
|
||||
INCLUDE IrisSubpDefineArm.s
|
||||
INCLUDE IrisSubpMemoryMapArm.s
|
||||
|
||||
INCLUDE IrisSubpMonDefineArm.s
|
||||
INCLUDE IrisSubpMonMemoryMapArm.s
|
||||
|
||||
|
||||
;====================================================================
|
||||
; 例外ハンドラ群
|
||||
;====================================================================
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; デバッガモニタへジャンプ
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL fiq_handler
|
||||
CODE32
|
||||
fiq_handler
|
||||
mrs sp, cpsr ; IRQ/FIQ不許可
|
||||
orr sp, sp, #PSR_IRQ_DISABLE | PSR_FIQ_DISABLE
|
||||
msr cpsr_cxsf, sp
|
||||
|
||||
ldr sp, fiq_sp ; SP のセット
|
||||
add sp, sp, #1
|
||||
|
||||
fiq_m stmfd sp!, {r12, lr} ; レジスタ の退避(合計3ワード)
|
||||
mrs lr, spsr
|
||||
stmfd sp!, {lr}
|
||||
|
||||
bic r12, sp, #1 ; デバッガ処理へジャンプ
|
||||
ldr r12, [r12, #12]
|
||||
adr lr, fiq_return
|
||||
cmp r12, #0
|
||||
bxne r12
|
||||
;--------------------------------------------------------------------
|
||||
; デバッガモニタからの復帰
|
||||
;--------------------------------------------------------------------
|
||||
CODE32
|
||||
fiq_return
|
||||
ldmfd sp!, {lr} ; レジスタ の復帰
|
||||
msr spsr_sxcf, lr
|
||||
ldmfd sp!, {r12, lr}
|
||||
subs pc, lr, #4
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; 初期化
|
||||
;--------------------------------------------------------------------
|
||||
EXTERN IrisSubpMonMain
|
||||
EXTERN intr_main
|
||||
GLOBAL start_handler
|
||||
CODE32
|
||||
start_handler
|
||||
cmp lr, #0 ; fiq_return => pc = -4 対策
|
||||
moveq lr, #4
|
||||
|
||||
mov r12, #REG_BASE ; モニタ/ユーザ チェック
|
||||
ldrb r12, [r12, #OFFSET_REG_PAUSE]
|
||||
teq r12, #1
|
||||
|
||||
mrseq r12, cpsr ; IRQ/FIQ不許可
|
||||
orreq r12, r12, #PSR_IRQ_DISABLE | PSR_FIQ_DISABLE
|
||||
msreq cpsr_cxsf, r12
|
||||
ldreq sp, fiq_sp ; SP のセット
|
||||
beq fiq_m ; デバッガモニタへジャンプ
|
||||
|
||||
restart_v mov r0, #0xc0 | PSR_SYS_MODE ; システムモードへ切り換え & IRQ/FIQ不許可
|
||||
msr cpsr_cxsf, r0
|
||||
|
||||
mov r4, #REG_BASE ; IME リセット
|
||||
strb r4, [r4, #OFFSET_REG_IME]
|
||||
|
||||
bl bankreg_init_stack_clear ; バンクレジスタ リセット & スタック領域 クリア
|
||||
ldr r0, =intr_main ; 割り込みアドレスのセット
|
||||
str r0, [r4, #INTR_VECTOR_BUF - CPU_WRAM_END]
|
||||
; str r0, [sp, #0x100-4]
|
||||
|
||||
ldr r0, =IrisSubpMonMain ; Cルーチン処理
|
||||
adr lr, main_return
|
||||
bx r0
|
||||
|
||||
main_return
|
||||
bl terminate_mon ; モニタ終了処理
|
||||
|
||||
ldr r12, =MAIN_MEM_EX_END ; ユーザ・エントリポイント 獲得
|
||||
|
||||
IF :DEF: DISABLE_ENTRY_OF_ROM_HEADER
|
||||
ldr lr, [r12, #-(0x200 - 0x38)] ; rmhp->arm7->ramAddr
|
||||
ELSE
|
||||
ldr lr, [r12, #-(0x200 - 0x34)] ; rmhp->arm7->entryAddr
|
||||
ENDIF
|
||||
|
||||
IF :DEF: DISABLE_BOOT_IPL2
|
||||
|
||||
ldrh r0, [r12, #-4] ; ROMヘッダ チェック
|
||||
cmp r0, #1
|
||||
0 beq %b0 ; ROMヘッダ不整合時
|
||||
sub r12, r12, #0x800
|
||||
ldrh r0, [r12, #0x14] ; デバッガチェック
|
||||
add r12, r12, #0x800
|
||||
cmp r0, #1 ; if (!shwp->isOnDebugger)
|
||||
mov r0, #0
|
||||
ldreq r12, [r12, #-(0x200 - 0x16c)]; デバッガエントリポイント 獲得
|
||||
; cmpeq r12, #0 ; rmhp->dbgArm7RamAddr
|
||||
; cmpeq r12, #-1
|
||||
bxeq r12
|
||||
|
||||
IF :DEF: IRIS_BB
|
||||
0 b %b0 ; ブレッドボード開発用
|
||||
ENDIF
|
||||
mov r0, #0
|
||||
bx lr
|
||||
|
||||
ELSE
|
||||
sub r12, r12, #0x800
|
||||
ldrh r0, [r12, #0x2c] ; IPL2・CRCチェック
|
||||
cmp r0, #0 ; if (!shwp->flashCrcError)
|
||||
0 bne %b0
|
||||
|
||||
ldr r12, [r12, #0x24] ; IPL2・エントリポイント 獲得
|
||||
cmp r12, #0 ; shwp->flashArm7RamAddr
|
||||
0 beq %b0
|
||||
bx r12
|
||||
|
||||
ENDIF
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; ソフトリセット
|
||||
;--------------------------------------------------------------------
|
||||
CODE32
|
||||
soft_reset
|
||||
bl terminate_mon ; 終了処理
|
||||
|
||||
ldr r12, =MAIN_MEM_EX_END ; ユーザ・エントリポイント 獲得
|
||||
ldr lr, [r12, #-(0x200 - 0x34)]
|
||||
mov r12, #0
|
||||
bx lr
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; モニタプログラム終了処理
|
||||
;--------------------------------------------------------------------
|
||||
CODE32
|
||||
terminate_mon
|
||||
mov r12, lr
|
||||
|
||||
mov r0, #PSR_SYS_MODE ; IRQ/FIQ許可
|
||||
msr cpsr_cxsf, r0
|
||||
|
||||
bl bankreg_init_stack_clear ; バンクレジスタ リセット & スタック領域 クリア
|
||||
|
||||
ldmea r4, {r0-r11} ; 汎用レジスタ クリア
|
||||
|
||||
bx r12
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; バンクレジスタ リセット & スタック領域 クリア
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL bankreg_init_stack_clear
|
||||
CODE32
|
||||
bankreg_init_stack_clear
|
||||
mov r0, #0xc0 | PSR_SVC_MODE ; SVCモードへ切り換え & IRQ/FIQ不許可
|
||||
msr cpsr_cxsf, r0
|
||||
ldr sp, svc_sp ; SP のセット
|
||||
mov lr, #0
|
||||
msr spsr_csxf, lr
|
||||
mov r0, #0xc0 | PSR_IRQ_MODE ; IRQモードへ切り換え & IRQ/FIQ不許可
|
||||
msr cpsr_cxsf, r0
|
||||
ldr sp, irq_sp ; SP のセット
|
||||
mov lr, #0
|
||||
msr spsr_cxsf, lr
|
||||
mov r0, #0x40 | PSR_SYS_MODE ; システムモードへ切り換え & IRQ許可/FIQ不許可
|
||||
msr cpsr_cxsf, r0
|
||||
ldr sp, usr_sp ; SP のセット
|
||||
|
||||
stack_clear
|
||||
IF :DEF: BB_MON
|
||||
ldr r4, =CPU_WRAM_END
|
||||
ELSE
|
||||
mov r4, #REG_BASE ; r4: REG_BASE
|
||||
ENDIF ; BB_MON
|
||||
adr r0, stack_clear_10 + 1
|
||||
bx r0
|
||||
CODE16
|
||||
stack_clear_10 mov r0, #0
|
||||
ldr r1, =-4*128
|
||||
1 str r0, [r4, r1]
|
||||
add r1, #4
|
||||
blt %b1
|
||||
bx lr
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; IRQ処理へジャンプ
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL irq_handler
|
||||
ALIGN
|
||||
CODE32
|
||||
irq_handler
|
||||
stmfd sp!, {r0-r3,r12,lr} ; レジスタ の退避(6ワード)
|
||||
; ldr r0, =CPU_WRAM_END
|
||||
mov r0, #REG_BASE
|
||||
adr lr, irq_return
|
||||
ldr pc, [r0, #-4] ; 32bitコードでジャンプ
|
||||
; ldr r1, [r0, #-4] ; 32bitコードでジャンプ
|
||||
; bx r1
|
||||
;--------------------------------------------------------------------
|
||||
; IRQからの復帰
|
||||
;--------------------------------------------------------------------
|
||||
CODE32
|
||||
irq_return ldmfd sp!, {r0-r3,r12,lr} ; レジスタ の復帰
|
||||
subs pc, lr, #4
|
||||
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
; システムコールへジャンプ
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL swi_handler
|
||||
CODE32
|
||||
swi_handler
|
||||
stmfd sp!, {r11, r12, lr} ; SVCモード レジスタ退避
|
||||
ldrh r12, [lr, #-2] ; システムコールNo 取得(ハーフワードアクセス対応/サウンドBB時)
|
||||
and r12, r12, #0xff
|
||||
adr r11, sys_table ; システムコール・アドレス 取得
|
||||
ldr r12, [r11, r12, lsl #2]
|
||||
mrs r11, spsr ; SVCモード SPSR退避(合計4ワード)
|
||||
stmfd sp!, {r11}
|
||||
and r11, r11, #PSR_IRQ_DISABLE ; IRQ許可状態 コピー
|
||||
orr r11, r11, #PSR_SYS_MODE ; システムモードへ切り換え & FIQ許可
|
||||
msr cpsr_cxsf,r11
|
||||
|
||||
stmfd sp!, {r2, lr} ; システムモード レジスタ退避(2ワード)
|
||||
adr lr, swi_return
|
||||
bx r12 ; コードの切換とジャンプ
|
||||
;--------------------------------------------------------------------
|
||||
;- システムコールからの復帰 18c -
|
||||
;--------------------------------------------------------------------
|
||||
GLOBAL swi_return
|
||||
CODE32
|
||||
swi_return ldmfd sp!, {r2, lr} ; システムモード レジスタ復帰
|
||||
mov r12, #0xc0 | PSR_SVC_MODE ; SVCモードへ切り換え
|
||||
msr cpsr_cxsf, r12 ; & IRQ/FIQ不許可
|
||||
|
||||
ldmfd sp!, {r11} ; SVCモード レジスタ復帰
|
||||
msr spsr_cxsf, r11
|
||||
ldmfd sp!, {r11, r12, lr}
|
||||
movs pc, lr
|
||||
|
||||
|
||||
|
||||
;====================================================================
|
||||
; アドレステーブル
|
||||
;====================================================================
|
||||
ALIGN
|
||||
usr_sp DCD CPU_WRAM_END - 0x100
|
||||
irq_sp DCD CPU_WRAM_END - 0x50
|
||||
svc_sp
|
||||
fiq_sp DCD CPU_WRAM_END - 0x24
|
||||
|
||||
EXTERN AccessCard
|
||||
|
||||
EXTERN WaitByLoop
|
||||
EXTERN WaitIntr
|
||||
EXTERN WaitVBlankIntr
|
||||
EXTERN Halt
|
||||
EXTERN Stop
|
||||
EXTERN SetPauseHi
|
||||
|
||||
EXTERN ChangeSoundBias16
|
||||
EXTERN IsMmem8MB
|
||||
EXTERN GetCRC16
|
||||
|
||||
EXTERN DivS32
|
||||
EXTERN SqrtU32
|
||||
|
||||
EXTERN CpuSet16_32
|
||||
EXTERN CpuSetFast32
|
||||
EXTERN UnPackBits32
|
||||
EXTERN UnCompLZ77Byte
|
||||
EXTERN UnCompLZ77Short
|
||||
EXTERN UnCompHuffman32
|
||||
EXTERN UnCompRLByte
|
||||
EXTERN UnCompRLShort
|
||||
|
||||
EXTERN GetSoundSinTable
|
||||
EXTERN GetSoundPitchTable
|
||||
EXTERN GetSoundVolumeTable
|
||||
|
||||
EXTERN GetFuncp4IPL2
|
||||
sys_table
|
||||
DCD soft_reset ; 0
|
||||
DCD 0 ; 1
|
||||
|
||||
DCD 0 ; 2
|
||||
DCD WaitByLoop ; 3
|
||||
DCD WaitIntr ; 4
|
||||
DCD WaitVBlankIntr ; 5
|
||||
DCD Halt ; 6
|
||||
DCD Stop ; 7
|
||||
DCD ChangeSoundBias16 ; 8
|
||||
|
||||
DCD DivS32 ; 9
|
||||
DCD 0 ; 10
|
||||
DCD CpuSet16_32 ; 11
|
||||
DCD CpuSetFast32 ; 12
|
||||
DCD SqrtU32 ; 13
|
||||
DCD GetCRC16 ; 14
|
||||
DCD IsMmem8MB ; 15
|
||||
DCD UnPackBits32 ; 16
|
||||
DCD UnCompLZ77Byte ; 17
|
||||
DCD UnCompLZ77Short ; 18
|
||||
DCD UnCompHuffman32 ; 19
|
||||
DCD UnCompRLByte ; 20
|
||||
DCD UnCompRLShort ; 21
|
||||
DCD 0 ; 22
|
||||
DCD 0 ; 23
|
||||
DCD 0 ; 24
|
||||
|
||||
DCD 0 ; 25
|
||||
DCD GetSoundSinTable ; 26
|
||||
DCD GetSoundPitchTable ; 27
|
||||
DCD GetSoundVolumeTable ; 28
|
||||
|
||||
DCD GetFuncp4IPL2 ; 29
|
||||
DCD 0 ; 30
|
||||
DCD SetPauseHi ; 31
|
||||
|
||||
END
|
||||
|
||||
|
||||
BIN
trunk/IrisSubp/IrisSubpMon/snd_ptable.bin
Normal file
BIN
trunk/IrisSubp/IrisSubpMon/snd_ptable.bin
Normal file
Binary file not shown.
BIN
trunk/IrisSubp/IrisSubpMon/snd_sinetable.bin
Normal file
BIN
trunk/IrisSubp/IrisSubpMon/snd_sinetable.bin
Normal file
Binary file not shown.
BIN
trunk/IrisSubp/IrisSubpMon/snd_vtable.bin
Normal file
BIN
trunk/IrisSubp/IrisSubpMon/snd_vtable.bin
Normal file
Binary file not shown.
28
trunk/IrisSubp/include/IrisSubp.h
Normal file
28
trunk/IrisSubp/include/IrisSubp.h
Normal file
@ -0,0 +1,28 @@
|
||||
//======================================================================
|
||||
// IrisSubp.h
|
||||
// IRISサブプロセッサ 標準ヘッダファイル群
|
||||
//
|
||||
// Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SUBP_H
|
||||
#define _IRIS_SUBP_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisSubpTypes.h>
|
||||
#include <IrisSubpDefine.h>
|
||||
#include <IrisSubpMemoryMap.h>
|
||||
#include <IrisSubpMacro.h>
|
||||
#include <IrisSubpSystemCall.h>
|
||||
#include <IrisSubpUTL.h>
|
||||
#include <IrisSubpOS.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_SUBP_H
|
||||
522
trunk/IrisSubp/include/IrisSubpDefine.h
Normal file
522
trunk/IrisSubp/include/IrisSubpDefine.h
Normal file
@ -0,0 +1,522 @@
|
||||
//======================================================================
|
||||
// IrisSubpDefine.h
|
||||
// IRISサブプロセッサ 標準定数
|
||||
//
|
||||
// Copyright (C) 2002-2004 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SUBP_DEFINE_H
|
||||
#define _IRIS_SUBP_DEFINE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisSubpTarget.h>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 定数
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SYSTEM_CLOCK 33513982 // システムクロック
|
||||
|
||||
#define MAINP 0 // メインプロセッサ
|
||||
#define SUBP 1 // サブプロセッサ
|
||||
|
||||
|
||||
#define ON 1
|
||||
#define OFF 0
|
||||
#define ENABLE 1
|
||||
#define DISABLE 0
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
|
||||
|
||||
//**********************************************************************
|
||||
// IRISサブプロセッサレジスタ・コントロールビット
|
||||
//**********************************************************************
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// プログラムステータスレジスタ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define PSR_CPU_MODE_MASK 0x1f // CPUモード
|
||||
|
||||
#define PSR_USER_MODE 0x10 // ユーザ
|
||||
#define PSR_FIQ_MODE 0x11 // FIQ
|
||||
#define PSR_IRQ_MODE 0x12 // IRQ
|
||||
#define PSR_SVC_MODE 0x13 // スーパバイザ
|
||||
#define PSR_ABORT_MODE 0x17 // アボート(プリフェッチ/データ)
|
||||
#define PSR_UNDEF_MODE 0x1b // 未定義命令
|
||||
#define PSR_SYS_MODE 0x1f // システム
|
||||
|
||||
#define PSR_THUMB_STATE 0x20 // THUMBステート
|
||||
#define PSR_FIQ_DISABLE 0x40 // FIQ不許可
|
||||
#define PSR_IRQ_DISABLE 0x80 // IRQ不許可
|
||||
#define PSR_IRQ_FIQ_DISABLE 0xc0 // IRQ&FIQ不許可
|
||||
|
||||
#define PSR_V_FLAG 0x10000000 // オーバーフロー
|
||||
#define PSR_C_FLAG 0x20000000 // キャリー/ボロー/拡張
|
||||
#define PSR_Z_FLAG 0x40000000 // ゼロ
|
||||
#define PSR_N_FLAG 0x80000000 // 負/未満
|
||||
|
||||
// 構造体メンバ用定数
|
||||
|
||||
#define ST_PSR_USER_MODE 0x10 // ユーザ
|
||||
#define ST_PSR_FIQ_MODE 0x11 // FIQ
|
||||
#define ST_PSR_IRQ_MODE 0x12 // IRQ
|
||||
#define ST_PSR_SVC_MODE 0x13 // スーパバイザ
|
||||
#define ST_PSR_ABORT_MODE 0x17 // アボート(プリフェッチ/データ)
|
||||
#define ST_PSR_UNDEF_MODE 0x1b // 未定義命令
|
||||
#define ST_PSR_SYS_MODE 0x1f // システム
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 割り込み要求/許可フラグ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define V_BLANK_INTR_FLAG 0x00000001 // Vブランク割り込み
|
||||
#define H_BLANK_INTR_FLAG 0x00000002 // Hブランク割り込み
|
||||
#define V_COUNT_INTR_FLAG 0x00000004 // Vカウンタ一致割り込み
|
||||
#define TIMER0_INTR_FLAG 0x00000008 // タイマー0割り込み
|
||||
#define TIMER1_INTR_FLAG 0x00000010 // タイマー1割り込み
|
||||
#define TIMER2_INTR_FLAG 0x00000020 // タイマー2割り込み
|
||||
#define TIMER3_INTR_FLAG 0x00000040 // タイマー3割り込み
|
||||
#define SIO_INTR_FLAG 0x00000080 // シリアル通信割り込み
|
||||
#define DMA0_INTR_FLAG 0x00000100 // DMA0割り込み
|
||||
#define DMA1_INTR_FLAG 0x00000200 // DMA1割り込み
|
||||
#define DMA2_INTR_FLAG 0x00000400 // DMA2割り込み
|
||||
#define DMA3_INTR_FLAG 0x00000800 // DMA3割り込み
|
||||
#define KEY_INTR_FLAG 0x00001000 // キー割り込み
|
||||
#define CARTRIDGE_INTR_FLAG 0x00002000 // カートリッジ割り込み
|
||||
|
||||
#define MAINP_INTR_FLAG 0x00010000 // メインプロセッサ割り込み
|
||||
#define MPFIFO_SEND_INTR_FLAG 0x00020000 // メインプロセッサ間送信FIFOエンプティ割り込み
|
||||
#define MPFIFO_RECV_INTR_FLAG 0x00040000 // メインプロセッサ間受信FIFOノットエンプティ割り込み
|
||||
#define CARD_DATA_INTR_FLAG 0x00080000 // カードデータ転送終了割り込み
|
||||
#define CARD_IREQ_INTR_FLAG 0x00100000 // カードIREQ割り込み
|
||||
#define PMIC_RTC_INTR_FLAG 0x00400000 // パワーマネージメントIC割り込み 又は RTC割り込み
|
||||
#define SPI_INTR_FLAG 0x00800000 // SPI割り込み
|
||||
#define WIRELESS_INTR_FLAG 0x01000000 // 無線通信割り込み
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メインプロセッサ インタフェース
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define MAINP_RECV_STATUS_MASK 0x000f // 受信ステータス
|
||||
#define MAINP_SEND_STATUS_MASK 0x0f00 // 送信ステータス
|
||||
|
||||
#define MAINP_RECV_STATUS_SHIFT 0
|
||||
#define MAINP_SEND_STATUS_SHIFT 8
|
||||
|
||||
#define MAINP_SEND_IF 0x2000 // 割り込み要求送信
|
||||
#define MAINP_RECV_IF_ENABLE 0x4000 // 割り込み要求受信 許可
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メイン通信プロセッサFIFO コントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define MPFIFO_SEND_EMPTY 0x0001 // 送信FIFO エンプティ
|
||||
#define MPFIFO_SEND_FULL 0x0002 // フル
|
||||
#define MPFIFO_SEND_IF_ENABLE 0x0004 // 割り込み要求 許可
|
||||
#define MPFIFO_SEND_CLEAR 0x0008 // クリア
|
||||
#define MPFIFO_RECV_EMPTY 0x0100 // 受信FIFO エンプティ
|
||||
#define MPFIFO_RECV_FULL 0x0200 // フル
|
||||
#define MPFIFO_RECV_IF_ENABLE 0x0400 // 割り込み要求 許可
|
||||
#define MPFIFO_ENABLE 0x8000 // I/OプロセッサFIFO イネーブル
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// パワーコントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define POW_SOUND_ON 0x0001 // サウンド ON
|
||||
#define POW_WIRELESS_ON 0x0002 // 無線通信 ON
|
||||
#define POW_ALL_ON 0x0003 // 全部 ON
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// VRAM ステータス
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define VRAM_MAINP_ALL 0x00 // VRAM-C・D → メインプロセッサ
|
||||
#define VRAM_MAINP_D_SUBP_C 0x01 // D → メインプロセッサ
|
||||
// C → サブプロセッサ
|
||||
#define VRAM_MAINP_C_SUBP_D 0x02 // C → メインプロセッサ
|
||||
// D → サブプロセッサ
|
||||
#define VRAM_SUBP_ALL 0x03 // C・D → サブプロセッサ
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 内部ワークRAM ステータス
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define WRAM_MAINP_ALL 0x00 // 共有内部ワークRAMブロック0・1 → メインプロセッサ
|
||||
#define WRAM_MAINP_B1_SUBP_B0 0x01 // ブロック1 → メインプロセッサ
|
||||
// ブロック0 → サブプロセッサ
|
||||
#define WRAM_MAINP_B0_SUBP_B1 0x02 // ブロック0 → メインプロセッサ
|
||||
// ブロック1 → サブプロセッサ
|
||||
#define WRAM_SUBP_ALL 0x03 // ブロック0・1 → サブプロセッサ
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 表示ステータス
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define DPSTAT_V_SET_LO_MASK 0xff00 // Vカウンタ比較値設定
|
||||
#define DPSTAT_V_SET_D8 0x0080 // Vカウンタ比較値設定8ビット目
|
||||
|
||||
#define DPSTAT_V_SET_LO_SHIFT 8
|
||||
|
||||
#define DPSTAT_V_BLANK 0x0001 // Vブランク期間中
|
||||
#define DPSTAT_H_BLANK 0x0002 // Hブランク期間中
|
||||
#define DPSTAT_V_COUNT 0x0004 // Vカウンタ一致中
|
||||
#define DPSTAT_V_BLANK_IF_ENABLE 0x0008 // Vブランク割り込み要求 許可
|
||||
#define DPSTAT_H_BLANK_IF_ENABLE 0x0010 // Hブランク割り込み要求 許可
|
||||
#define DPSTAT_V_COUNT_IF_ENABLE 0x0020 // Vカウンタ一致割り込み要求 許可
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// サウンドマスタ コントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SOUND_VOLUME_MASK 0x007f // マスタ出力レベル
|
||||
|
||||
#define SOUND_VOLUME_SHIFT 0
|
||||
|
||||
#define SOUND_LOUT_MIXER 0x0000 // L側最終段出力 ミキサー
|
||||
#define SOUND_LOUT_CH1 0x0100 // チャンネル1
|
||||
#define SOUND_LOUT_CH3 0x0200 // チャンネル3
|
||||
#define SOUND_LOUT_CH1_CH3 0x0300 // チャンネル1+3
|
||||
#define SOUND_ROUT_MIXER 0x0000 // R側最終段出力 ミキサー
|
||||
#define SOUND_ROUT_CH1 0x0400 // チャンネル1
|
||||
#define SOUND_ROUT_CH3 0x0800 // チャンネル3
|
||||
#define SOUND_ROUT_CH1_CH3 0x0C00 // チャンネル1+3
|
||||
#define SOUND_CH1_MIXOFF 0x1000 // チャンネル1・ミックス OFF
|
||||
#define SOUND_CH1_MIX 0x0000 // ON
|
||||
#define SOUND_CH3_MIXOFF 0x2000 // チャンネル3・ミックス OFF
|
||||
#define SOUND_CH3_MIX 0x0000 // ON
|
||||
#define SOUND_MIC_MIXOFF 0x0000 // マイク・ミックス OFF
|
||||
#define SOUND_MIC_MIX 0x4000 // ON
|
||||
#define SOUND_ENABLE 0x8000 // イネーブル
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// サウンドチャンネル コントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SOUND_CHAN_VOLUME_MASK 0x000000ff // 出力レベル
|
||||
#define SOUND_SHIFT_MASK 0x00000300 // データシフト量
|
||||
#define SOUND_PANPOT_MASK 0x00ff0000 // パンポット
|
||||
#define SOUND_DUTY_MASK 0x07000000 // デューティ
|
||||
#define SOUND_PEPEAT_TYPE_MASK 0x18000000 // リピート方法
|
||||
#define SOUND_FORMAT_MASK 0x60000000 // フォーマット
|
||||
|
||||
#define SOUND_CHAN_VOLUME_SHIFT 0
|
||||
#define SOUND_SHIFT_SHIFT 8
|
||||
#define SOUND_PANPOT_SHIFT 16
|
||||
#define SOUND_DUTY_SHIFT 24
|
||||
#define SOUND_PEPEAT_TYPE_SHIFT 27
|
||||
#define SOUND_FORMAT_SHIFT 29
|
||||
|
||||
#define SOUND_OUTPUT_HOLD 0x00008000 // ディセーブル時の出力保持
|
||||
|
||||
#define SOUND_DUTY_1_8 0x00000000 // デューティ 1/8
|
||||
#define SOUND_DUTY_2_8 0x01000000 // 2/8
|
||||
#define SOUND_DUTY_3_8 0x02000000 // 3/8
|
||||
#define SOUND_DUTY_4_8 0x03000000 // 4/8
|
||||
#define SOUND_DUTY_5_8 0x04000000 // 5/8
|
||||
#define SOUND_DUTY_6_8 0x05000000 // 6/8
|
||||
#define SOUND_DUTY_7_8 0x06000000 // 7/8
|
||||
#define SOUND_DUTY_XX 0x07000000 // 設定禁止
|
||||
|
||||
#define SOUND_LINEAR 0x00000000 // リニア再生
|
||||
#define SOUND_REPEAT 0x08000000 // リピート再生
|
||||
#define SOUND_1SHOT 0x10000000 // 1ショット再生
|
||||
|
||||
#define SOUND_PCM8 0x00000000 // PCM8bit
|
||||
#define SOUND_PCM16 0x20000000 // PCM16bit
|
||||
#define SOUND_ADPCM 0x40000000 // ADPCM
|
||||
#define SOUND_PSG_NOISE 0x60000000 // PSG(8~13)または ノイズ(14~15)
|
||||
|
||||
#define SOUND_CHAN_ENABLE 0x80000000 // イネーブル
|
||||
|
||||
// 構造体メンバ用定数
|
||||
|
||||
#define ST_SOUND_PCM8 0 // PCM8bit
|
||||
#define ST_SOUND_PCM16 1 // PCM16bit
|
||||
#define ST_SOUND_ADPCM 2 // ADPCM
|
||||
#define ST_SOUND_PSG_NOISE 3 // PSG(8~13)または ノイズ(14~15)
|
||||
|
||||
#define ST_SOUND_DUTY_1_8 0 // デューティ 1/8
|
||||
#define ST_SOUND_DUTY_2_8 1 // 2/8
|
||||
#define ST_SOUND_DUTY_3_8 2 // 3/8
|
||||
#define ST_SOUND_DUTY_4_8 3 // 4/8
|
||||
#define ST_SOUND_DUTY_5_8 4 // 5/8
|
||||
#define ST_SOUND_DUTY_6_8 5 // 6/8
|
||||
#define ST_SOUND_DUTY_7_8 6 // 7/8
|
||||
#define ST_SOUND_DUTY_XX 7 // 設定禁止
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// サウンドキャプチャ コントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SNDCAP_PREMIXING_ON 0x01 // ミキサー前合成 ON
|
||||
#define SNDCAP_SRC 0x02 // キャプチャ元選択
|
||||
#define SNDCAP_MIXER 0x00 // ミキサー出力データをキャプチャ
|
||||
#define SNDCAP_CHAN 0x02 // 単一チャンネルをキャプチャ
|
||||
#define SNDCAP_REPEAT_OFF 0x04 // リピート OFF
|
||||
#define SNDCAP_FORMAT 0x08 // キャプチャフォーマット
|
||||
#define SNDCAP_PCM16 0x00 // 16bitPCM
|
||||
#define SNDCAP_PCM8 0x08 // 8bitPCM
|
||||
#define SNDCAP_ENABLE 0x80 // イネーブル
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// SPIコントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SPI_SCK_MASK 0x0003 // シフトクロック
|
||||
#ifdef IRIS_TS
|
||||
#define SPI_TARGET_MASK 0x0300 // 通信ターゲット指定
|
||||
#else
|
||||
#define SPI_TARGET_MASK 0x2000
|
||||
#endif
|
||||
|
||||
#define SPI_SCK_SHIFT 0
|
||||
|
||||
#define SPI_SCK_4M 0x0000 // シフトクロック 4MHz選択
|
||||
#define SPI_SCK_2M 0x0001 // 2MHz
|
||||
#define SPI_SCK_1M 0x0002 // 1MHz
|
||||
#define SPI_SCK_524K 0x0003 // 524KHz
|
||||
|
||||
#define SPI_BUSY 0x0080 // ビジー
|
||||
#define SPI_8BIT_MODE 0x0000 // 8ビットモード
|
||||
#ifdef IRIS_TS
|
||||
#define SPI_16BIT_MODE 0x0400 // 16ビットモード
|
||||
#define SPI_CONTINUOUS_ON 0x0800 // コンティニュアスモード ON
|
||||
#define SPI_TARGET_PMIC 0x0000 // PMIC選択
|
||||
#define SPI_TARGET_FLASH 0x0100 // フラッシュメモリ選択
|
||||
#define SPI_TARGET_TOUCHPANEL 0x0200 // タッチパネル選択
|
||||
#else
|
||||
#define SPI_CONTINUOUS_ON 0x1000 // コンティニュアスモード ON
|
||||
#define SPI_TARGET_PMIC 0x0000 // PMIC選択
|
||||
#define SPI_TARGET_FLASH 0x2000 // フラッシュメモリ選択
|
||||
#endif
|
||||
#define SPI_IF_ENABLE 0x4000 // 割り込み要求 許可
|
||||
#define SPI_ENABLE 0x8000 // SPI許可
|
||||
|
||||
// 構造体メンバ用定数
|
||||
|
||||
#define ST_SPI_SCK_4M 0 // シフトクロック 4MHz選択
|
||||
#define ST_SPI_SCK_2M 1 // 2MHz
|
||||
#define ST_SPI_SCK_1M 2 // 1MHz
|
||||
#define ST_SPI_SCK_524K 3 // 524KHz
|
||||
|
||||
#ifdef IRIS_TS
|
||||
#define ST_SPI_TARGET_PMIC 0 // PMIC選択
|
||||
#define ST_SPI_TARGET_FLASH 1 // フラッシュメモリ選択
|
||||
#define ST_SPI_TARGET_TOUCHPANEL 2 // タッチパネル選択
|
||||
#else
|
||||
#define ST_SPI_TARGET_PMIC 0 // PMIC選択
|
||||
#define ST_SPI_TARGET_FLASH 1 // フラッシュメモリ選択
|
||||
#endif
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 汎用入出力コントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define R_SIO_MODE_MASTER_MASK 0xc000 // SIOモード・マスタ
|
||||
|
||||
#define R_SIO_MODE_MASTER_SHIFT 14
|
||||
|
||||
#define R_SIO_MASTER_MODE 0x0000 // SIOマスタ・モード
|
||||
#define R_DIRECT_MODE 0x8000 // 汎用入出力通信モード
|
||||
|
||||
#define R_SC 0x0001 // データ
|
||||
#define R_SD 0x0002
|
||||
#define R_SI 0x0004
|
||||
#define R_SO 0x0008
|
||||
#define R_SC_I_O 0x0010 // I/O選択
|
||||
#define R_SD_I_O 0x0020
|
||||
#define R_SI_I_O 0x0040
|
||||
#define R_SO_I_O 0x0080
|
||||
#define R_SC_IN 0x0000 // 入力設定
|
||||
#define R_SD_IN 0x0000
|
||||
#define R_SI_IN 0x0000
|
||||
#define R_SO_IN 0x0000
|
||||
#define R_SC_OUT 0x0010 // 出力設定
|
||||
#define R_SD_OUT 0x0020
|
||||
#define R_SI_OUT 0x0040
|
||||
#define R_SO_OUT 0x0080
|
||||
#define R_IF_ENABLE 0x0100 // 割り込み要求 許可
|
||||
|
||||
// 構造体メンバ用定数
|
||||
|
||||
#define ST_R_SIO_MASTER_MODE 0 // SIOマスタ・モード
|
||||
#define ST_R_DIRECT_MODE 2 // 汎用入出力通信モード
|
||||
|
||||
#define ST_R_IN 0 // 入力選択
|
||||
#define ST_R_OUT 1 // 出力選択
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMAコントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define DMA_TIMMING_MASK 0x30000000 // 開始タイミング
|
||||
#define DMA_COUNT_MASK 0x0000ffff // 転送数
|
||||
|
||||
#define DMA_TIMMING_SHIFT 30
|
||||
#define DMA_COUNT_SHIFT 0
|
||||
|
||||
#define DMA_ENABLE 0x80000000 // DMA許可
|
||||
#define DMA_IF_ENABLE 0x40000000 // 割り込み要求 許可
|
||||
#define DMA_TIMMING_IMM 0x00000000 // 直ちに起動
|
||||
#define DMA_TIMMING_V_BLANK 0x10000000 // Vブランク起動
|
||||
#define DMA_TIMMING_CARD 0x20000000 // カード
|
||||
#define DMA_TIMMING_WIRELESS 0x30000000 // 無線通信
|
||||
#define DMA_TIMMING_CARTRIDGE 0x30000000 // カートリッジ
|
||||
#define DMA_16BIT_BUS 0x00000000 // バスサイズ16Bit選択
|
||||
#define DMA_32BIT_BUS 0x04000000 // バスサイズ32Bit選択
|
||||
#define DMA_CONTINUOUS_ON 0x02000000 // コンティニュアスモード ON
|
||||
#define DMA_SRC_INC 0x00000000 // 転送元 インクリメント 選択
|
||||
#define DMA_SRC_DEC 0x00800000 // 転送元 デクリメント 選択
|
||||
#define DMA_SRC_FIX 0x01000000 // 転送元 固定 選択
|
||||
#define DMA_DEST_INC 0x00000000 // 転送先 インクリメント 選択
|
||||
#define DMA_DEST_DEC 0x00200000 // 転送先 デクリメント 選択
|
||||
#define DMA_DEST_FIX 0x00400000 // 転送先 固定 選択
|
||||
#define DMA_DEST_RELOAD 0x00600000 // 転送先 インクリメント/リロード 選択
|
||||
|
||||
// 構造体メンバ用定数
|
||||
|
||||
#define ST_DMA_TIMMING_IMM 0 // 直ちに起動
|
||||
#define ST_DMA_TIMMING_V_BLANK 1 // Vブランク起動
|
||||
#define ST_DMA_TIMMING_CARD 2 // カード
|
||||
#define ST_DMA_TIMMING_CARTRIDGE 3 // カートリッジ
|
||||
#define ST_DMA_16BIT_BUS 0 // バスサイズ16bit選択
|
||||
#define ST_DMA_32BIT_BUS 1 // バスサイズ32bit選択
|
||||
#define ST_DMA_INC 0 // アドレス・インクリメント 選択
|
||||
#define ST_DMA_DEC 1 // アドレス・デクリメント 選択
|
||||
#define ST_DMA_FIX 2 // アドレス固定 選択
|
||||
#define ST_DMA_RELOAD 3 // アドレス・インクリメント/リロード 選択
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// タイマー コントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define TMR_PRESCALER_MASK 0x00030000 // プリスケーラ クロック
|
||||
|
||||
#define TMR_PRESCALER_SHIFT 16
|
||||
|
||||
#define TMR_PRESCALER_1CK 0x00000000 // プリスケーラ 1分周
|
||||
#define TMR_PRESCALER_64CK 0x00010000 // 64分周
|
||||
#define TMR_PRESCALER_256CK 0x00020000 // 256分周
|
||||
#define TMR_PRESCALER_1024CK 0x00030000 // 1024分周
|
||||
#define TMR_CONNECT 0x00040000 // 下位タイマー接続
|
||||
#define TMR_IF_ENABLE 0x00400000 // 割り込み要求 許可
|
||||
#define TMR_ENABLE 0x00800000 // タイマー起動
|
||||
|
||||
// 構造体メンバ用定数
|
||||
|
||||
#define ST_TMR_PRESCALER_1CK 0 // プリスケーラ 1分周
|
||||
#define ST_TMR_PRESCALER_64CK 1 // 64分周
|
||||
#define ST_TMR_PRESCALER_256CK 2 // 256分周
|
||||
#define ST_TMR_PRESCALER_1024CK 3 // 1024分周
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// キー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define BUTTON_MASK 0x030f // ボタン
|
||||
#define PLUS_KEY_MASK 0x00f0 // 十字キー
|
||||
#define ALL_KEY_MASK 0x03ff // 全てのキー
|
||||
|
||||
#define A_BUTTON 0x0001 // Aボタン
|
||||
#define B_BUTTON 0x0002 // Bボタン
|
||||
#define SELECT_BUTTON 0x0004 // セレクトボタン
|
||||
#define START_BUTTON 0x0008 // スタートボタン
|
||||
#define R_KEY 0x0010 // 右ボタン
|
||||
#define L_KEY 0x0020 // 左ボタン
|
||||
#define U_KEY 0x0040 // 上ボタン
|
||||
#define D_KEY 0x0080 // 下ボタン
|
||||
#define R_BUTTON 0x0100 // Rボタン
|
||||
#define L_BUTTON 0x0200 // Lボタン
|
||||
#define KEY_IF_ENABLE 0x4000 // 割り込み要求 許可
|
||||
#define KEY_OR_INTR 0x0000 // 通常キー割り込み
|
||||
#define KEY_AND_INTR 0x8000 // ANDキー割り込み
|
||||
|
||||
// 構造体メンバ用定数
|
||||
|
||||
#define ST_KEY_OR_INTR 0 // 通常キー割り込み
|
||||
#define ST_KEY_AND_INTR 1 // ANDキー割り込み
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 外部メモリ コントロール
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CTRDG_DT8_10CYC 0x0000 // カートリッジ 8bitデータバス 10サイクル
|
||||
#define CTRDG_DT8_8CYC 0x0001 // 8サイクル
|
||||
#define CTRDG_DT8_6CYC 0x0002 // 6サイクル
|
||||
#define CTRDG_DT8_18CYC 0x0003 // 18サイクル
|
||||
#define CTRDG_AD16_1ST_10CYC 0x0000 // カートリッジ AD16バス 1st 10サイクル
|
||||
#define CTRDG_AD16_1ST_8CYC 0x0004 // 8サイクル
|
||||
#define CTRDG_AD16_1ST_6CYC 0x0008 // 6サイクル
|
||||
#define CTRDG_AD16_1ST_18CYC 0x000c // 18サイクル
|
||||
#define CTRDG_AD16_2ND_6CYC 0x0000 // 2nd 6サイクル
|
||||
#define CTRDG_AD16_2ND_4CYC 0x0010 // 4サイクル
|
||||
|
||||
#define CTRDG_PHI_OUT_NONE 0x0000 // φ端子出力クロック Lo固定
|
||||
#define CTRDG_PHI_OUT_4MCK 0x0020 // 4MHz
|
||||
#define CTRDG_PHI_OUT_8MCK 0x0040 // 8MHz
|
||||
#define CTRDG_PHI_OUT_16MCK 0x0060 // 16MHz
|
||||
|
||||
#define CTRDG_ACCESS 0x0080 // カートリッジアクセス権
|
||||
#define CTRDG_ACCESS_MAINP 0x0000 // メインプロセッサ
|
||||
#define CTRDG_ACCESS_SUBP 0x0080 // サブプロセッサ
|
||||
|
||||
#define CARD_ACCESS 0x0800 // カードアクセス権
|
||||
#define CARD_ACCESS_MAINP 0x0000 // メインプロセッサ
|
||||
#define CARD_ACCESS_SUBP 0x0800 // サブプロセッサ
|
||||
|
||||
#define MMEM_CE2_OUT 0x2000 // CE2信号確認
|
||||
|
||||
#define MMEM_INTF 0x4000 // メインメモリインタフェース(TEGでは常にセットして同期モードにする)
|
||||
#define MMEM_INTF_ASYNC 0x0000 // 非同期モード
|
||||
#define MMEM_INTF_SYNC 0x4000 // 同期モード
|
||||
|
||||
#define MMEM_PRIORITY 0x8000 // メインメモリ優先権
|
||||
#define MMEM_PRIORITY_MAINP 0x0000 // メインプロセッサ
|
||||
#define MMEM_PRIORITY_SUBP 0x8000 // サブプロセッサ
|
||||
|
||||
// 構造体メンバ用定数
|
||||
|
||||
#define ST_CTRDG_DT8_10CYC 0 // カートリッジ 8bitデータバス 10サイクル
|
||||
#define ST_CTRDG_DT8_8CYC 1 // 8サイクル
|
||||
#define ST_CTRDG_DT8_6CYC 2 // 6サイクル
|
||||
#define ST_CTRDG_DT8_18CYC 3 // 18サイクル
|
||||
#define ST_CTRDG_AD16_1ST_10CYC 0 // カートリッジ AD16バス 1st 10サイクル
|
||||
#define ST_CTRDG_AD16_1ST_8CYC 1 // 8サイクル
|
||||
#define ST_CTRDG_AD16_1ST_6CYC 2 // 6サイクル
|
||||
#define ST_CTRDG_AD16_1ST_18CYC 3 // 18サイクル
|
||||
#define ST_CTRDG_AD16_2ND_6CYC 0 // 2nd 6サイクル
|
||||
#define ST_CTRDG_AD16_2ND_4CYC 1 // 4サイクル
|
||||
|
||||
#define ST_CTRDG_PHI_OUT_NONE 0 // φ端子出力クロック Lo固定
|
||||
#define ST_CTRDG_PHI_OUT_4MCK 1 // 4MHz
|
||||
#define ST_CTRDG_PHI_OUT_8MCK 2 // 8MHz
|
||||
#define ST_CTRDG_PHI_OUT_16MCK 3 // 16MHz
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_SUBP_DEFINE_H
|
||||
513
trunk/IrisSubp/include/IrisSubpDefineArm.s
Normal file
513
trunk/IrisSubp/include/IrisSubpDefineArm.s
Normal file
@ -0,0 +1,513 @@
|
||||
;=======================================================================
|
||||
; IrisSubpDefineArm.s
|
||||
; IRISサブプロセッサ 標準定数(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2002-2004 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
IF :DEF: _IRIS_SUBP_DEFINE_H
|
||||
ELSE
|
||||
_IRIS_SUBP_DEFINE_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisSubpTargetArm.s
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 定数
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
SYSTEM_CLOCK * 33513982 ; システムクロック
|
||||
|
||||
MAINP * 0 ; メインプロセッサ
|
||||
SUBP * 1 ; サブプロセッサ
|
||||
|
||||
|
||||
ON * 1
|
||||
OFF * 0
|
||||
ENABLE * 1
|
||||
DISABLE * 0
|
||||
TRUE * 1
|
||||
FALSE * 0
|
||||
|
||||
|
||||
;***********************************************************************
|
||||
; IRIS-IOPレジスタ・コントロールビット
|
||||
;***********************************************************************
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プログラムステータスレジスタ
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
PSR_CPU_MODE_MASK * 0x1f ; CPUモード
|
||||
|
||||
PSR_USER_MODE * 0x10 ; ユーザ
|
||||
PSR_FIQ_MODE * 0x11 ; FIQ
|
||||
PSR_IRQ_MODE * 0x12 ; IRQ
|
||||
PSR_SVC_MODE * 0x13 ; スーパバイザ
|
||||
PSR_ABORT_MODE * 0x17 ; アボート(プリフェッチ/データ)
|
||||
PSR_UNDEF_MODE * 0x1b ; 未定義命令
|
||||
PSR_SYS_MODE * 0x1f ; システム
|
||||
|
||||
PSR_THUMB_STATE * 0x20 ; THUMBステート
|
||||
PSR_FIQ_DISABLE * 0x40 ; FIQ不許可
|
||||
PSR_IRQ_DISABLE * 0x80 ; IRQ不許可
|
||||
PSR_IRQ_FIQ_DISABLE * 0xc0 ; IRQ&FIQ不許可
|
||||
|
||||
PSR_V_FLAG * 0x10000000 ; オーバーフロー
|
||||
PSR_C_FLAG * 0x20000000 ; キャリー/ボロー/拡張
|
||||
PSR_Z_FLAG * 0x40000000 ; ゼロ
|
||||
PSR_N_FLAG * 0x80000000 ; 負/未満
|
||||
|
||||
; 構造体メンバ用定数
|
||||
|
||||
ST_PSR_USER_MODE * 0x10 ; ユーザ
|
||||
ST_PSR_FIQ_MODE * 0x11 ; FIQ
|
||||
ST_PSR_IRQ_MODE * 0x12 ; IRQ
|
||||
ST_PSR_SVC_MODE * 0x13 ; スーパバイザ
|
||||
ST_PSR_ABORT_MODE * 0x17 ; アボート(プリフェッチ/データ)
|
||||
ST_PSR_UNDEF_MODE * 0x1b ; 未定義命令
|
||||
ST_PSR_SYS_MODE * 0x1f ; システム
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 割り込み要求/許可フラグ
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
V_BLANK_INTR_FLAG * 0x00000001 ; Vブランク割り込み
|
||||
H_BLANK_INTR_FLAG * 0x00000002 ; Hブランク割り込み
|
||||
V_COUNT_INTR_FLAG * 0x00000004 ; Vカウンタ一致割り込み
|
||||
TIMER0_INTR_FLAG * 0x00000008 ; タイマー0割り込み
|
||||
TIMER1_INTR_FLAG * 0x00000010 ; タイマー1割り込み
|
||||
TIMER2_INTR_FLAG * 0x00000020 ; タイマー2割り込み
|
||||
TIMER3_INTR_FLAG * 0x00000040 ; タイマー3割り込み
|
||||
SIO_INTR_FLAG * 0x00000080 ; シリアル通信割り込み
|
||||
DMA0_INTR_FLAG * 0x00000100 ; DMA0割り込み
|
||||
DMA1_INTR_FLAG * 0x00000200 ; DMA1割り込み
|
||||
DMA2_INTR_FLAG * 0x00000400 ; DMA2割り込み
|
||||
DMA3_INTR_FLAG * 0x00000800 ; DMA3割り込み
|
||||
KEY_INTR_FLAG * 0x00001000 ; キー割り込み
|
||||
CARTRIDGE_INTR_FLAG * 0x00002000 ; カートリッジ割り込み
|
||||
|
||||
MAINP_INTR_FLAG * 0x00010000 ; メインプロセッサ割り込み
|
||||
MPFIFO_SEND_INTR_FLAG * 0x00020000 ; メインプロセッサ間送信FIFOエンプティ割り込み
|
||||
MPFIFO_RECV_INTR_FLAG * 0x00040000 ; メインプロセッサ間受信FIFOノットエンプティ割り込み
|
||||
CARD_DATA_INTR_FLAG * 0x00080000 ; カードデータ転送終了割り込み
|
||||
CARD_IREQ_INTR_FLAG * 0x00100000 ; カードIREQ割り込み
|
||||
PMIC_RTC_INTR_FLAG * 0x00400000 ; パワーマネージメントIC割り込み 又は RTC割り込み
|
||||
SPI_INTR_FLAG * 0x00800000 ; SPI割り込み
|
||||
WIRELESS_INTR_FLAG * 0x01000000 ; 無線通信割り込み
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; メインプロセッサ インタフェース
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
MAINP_RECV_STATUS_MASK * 0x000f ; 受信ステータス
|
||||
MAINP_SEND_STATUS_MASK * 0x0f00 ; 送信ステータス
|
||||
|
||||
MAINP_RECV_STATUS_SHIFT * 0
|
||||
MAINP_SEND_STATUS_SHIFT * 8
|
||||
|
||||
MAINP_SEND_IF * 0x2000 ; 割り込み要求送信
|
||||
MAINP_RECV_IF_ENABLE * 0x4000 ; 割り込み要求受信 許可
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; メインプロセッサ通信FIFO コントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
MPFIFO_SEND_EMPTY * 0x0001 ; 送信FIFO エンプティ
|
||||
MPFIFO_SEND_FULL * 0x0002 ; フル
|
||||
MPFIFO_SEND_IF_ENABLE * 0x0004 ; 割り込み要求 許可
|
||||
MPFIFO_SEND_CLEAR * 0x0008 ; クリア
|
||||
MPFIFO_RECV_EMPTY * 0x0100 ; 受信FIFO エンプティ
|
||||
MPFIFO_RECV_FULL * 0x0200 ; フル
|
||||
MPFIFO_RECV_IF_ENABLE * 0x0400 ; 割り込み要求 許可
|
||||
MPFIFO_ENABLE * 0x8000 ; I/OプロセッサFIFO イネーブル
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; パワーコントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
POW_SOUND_ON * 0x0001 ; サウンド ON
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; VRAM ステータス
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
VRAM_MAINP_ALL * 0x00 ; VRAM-C・D → メインプロセッサ
|
||||
VRAM_MAINP_D_SUBP_C * 0x01 ; D → メインプロセッサ
|
||||
; C → サブプロセッサ
|
||||
VRAM_MAINP_C_SUBP_D * 0x02 ; C → メインプロセッサ
|
||||
; D → サブプロセッサ
|
||||
VRAM_SUBP_ALL * 0x03 ; C・D → サブプロセッサ
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 内部ワークRAM ステータス
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
WRAM_MAINP_ALL * 0x00 ; 共有内部ワークRAMブロック0・1 → メインプロセッサ
|
||||
WRAM_MAINP_B1_SUBP_B0 * 0x01 ; ブロック1 → メインプロセッサ
|
||||
; ブロック0 → サブプロセッサ
|
||||
WRAM_MAINP_B0_SUBP_B1 * 0x02 ; ブロック0 → メインプロセッサ
|
||||
; ブロック1 → サブプロセッサ
|
||||
WRAM_SUBP_ALL * 0x03 ; ブロック0・1 → サブプロセッサ
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 表示ステータス
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
DPSTAT_V_SET_LO_MASK * 0xff00 ; Vカウンタ比較値設定
|
||||
DPSTAT_V_SET_D8 * 0x0080 ; Vカウンタ比較値設定8ビット目
|
||||
|
||||
DPSTAT_V_SET_LO_SHIFT * 8
|
||||
|
||||
DPSTAT_V_BLANK * 0x0001 ; Vブランク期間中
|
||||
DPSTAT_H_BLANK * 0x0002 ; Hブランク期間中
|
||||
DPSTAT_V_COUNT * 0x0004 ; Vカウンタ一致中
|
||||
DPSTAT_V_BLANK_IF_ENABLE * 0x0008 ; Vブランク割り込み要求 許可
|
||||
DPSTAT_H_BLANK_IF_ENABLE * 0x0010 ; Hブランク割り込み要求 許可
|
||||
DPSTAT_V_COUNT_IF_ENABLE * 0x0020 ; Vカウンタ一致割り込み要求 許可
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; サウンドマスタ コントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
SOUND_VOLUME_MASK * 0x007f ; マスタ出力レベル
|
||||
|
||||
SOUND_VOLUME_SHIFT * 0
|
||||
|
||||
SOUND_LOUT_MIXER * 0x0000 ; L側最終段出力 ミキサー
|
||||
SOUND_LOUT_CH1 * 0x0100 ; チャンネル1
|
||||
SOUND_LOUT_CH3 * 0x0200 ; チャンネル3
|
||||
SOUND_LOUT_CH1_CH3 * 0x0300 ; チャンネル1+3
|
||||
SOUND_ROUT_MIXER * 0x0000 ; R側最終段出力 ミキサー
|
||||
SOUND_ROUT_CH1 * 0x0400 ; チャンネル1
|
||||
SOUND_ROUT_CH3 * 0x0800 ; チャンネル3
|
||||
SOUND_ROUT_CH1_CH3 * 0x0C00 ; チャンネル1+3
|
||||
SOUND_CH1_MIXOFF * 0x1000 ; チャンネル1・ミックス OFF
|
||||
SOUND_CH1_MIX * 0x0000 ; ON
|
||||
SOUND_CH3_MIXOFF * 0x2000 ; チャンネル3・ミックス OFF
|
||||
SOUND_CH3_MIX * 0x0000 ; ON
|
||||
SOUND_ENABLE * 0x8000 ; イネーブル
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; サウンドチャンネル コントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
SOUND_CHAN_VOLUME_MASK * 0x000000ff ; 出力レベル
|
||||
SOUND_SHIFT_MASK * 0x00000300 ; データシフト量
|
||||
SOUND_PANPOT_MASK * 0x00ff0000 ; パンポット
|
||||
SOUND_DUTY_MASK * 0x07000000 ; デューティ
|
||||
SOUND_PEPEAT_TYPE_MASK * 0x18000000 ; リピート方法
|
||||
SOUND_FORMAT_MASK * 0x60000000 ; フォーマット
|
||||
|
||||
SOUND_CHAN_VOLUME_SHIFT * 0
|
||||
SOUND_SHIFT_SHIFT * 8
|
||||
SOUND_PANPOT_SHIFT * 16
|
||||
SOUND_DUTY_SHIFT * 24
|
||||
SOUND_PEPEAT_TYPE_SHIFT * 27
|
||||
SOUND_FORMAT_SHIFT * 29
|
||||
|
||||
SOUND_OUTPUT_HOLD * 0x00008000 ; ディセーブル時の出力保持
|
||||
|
||||
SOUND_DUTY_1_8 * 0x00000000 ; デューティ 1/8
|
||||
SOUND_DUTY_2_8 * 0x01000000 ; 2/8
|
||||
SOUND_DUTY_3_8 * 0x02000000 ; 3/8
|
||||
SOUND_DUTY_4_8 * 0x03000000 ; 4/8
|
||||
SOUND_DUTY_5_8 * 0x04000000 ; 5/8
|
||||
SOUND_DUTY_6_8 * 0x05000000 ; 6/8
|
||||
SOUND_DUTY_7_8 * 0x06000000 ; 7/8
|
||||
SOUND_DUTY_XX * 0x07000000 ; 設定禁止
|
||||
|
||||
SOUND_LINEAR * 0x00000000 ; リニア再生
|
||||
SOUND_REPEAT * 0x08000000 ; リピート再生
|
||||
SOUND_1SHOT * 0x10000000 ; 1ショット再生
|
||||
|
||||
SOUND_PCM8 * 0x00000000 ; PCM8bit
|
||||
SOUND_PCM16 * 0x20000000 ; PCM16bit
|
||||
SOUND_ADPCM * 0x40000000 ; ADPCM
|
||||
SOUND_PSG_NOISE * 0x60000000 ; PSG(8~13)または ノイズ(14~15)
|
||||
|
||||
SOUND_CHAN_ENABLE * 0x80000000 ; イネーブル
|
||||
|
||||
; 構造体メンバ用定数
|
||||
|
||||
ST_SOUND_PCM8 * 0 ; PCM8bit
|
||||
ST_SOUND_PCM16 * 1 ; PCM16bit
|
||||
ST_SOUND_ADPCM * 2 ; ADPCM
|
||||
ST_SOUND_PSG_NOISE * 3 ; PSG(8~13)または ノイズ(14~15)
|
||||
|
||||
ST_SOUND_DUTY_1_8 * 0 ; デューティ 1/8
|
||||
ST_SOUND_DUTY_2_8 * 1 ; 2/8
|
||||
ST_SOUND_DUTY_3_8 * 2 ; 3/8
|
||||
ST_SOUND_DUTY_4_8 * 3 ; 4/8
|
||||
ST_SOUND_DUTY_5_8 * 4 ; 5/8
|
||||
ST_SOUND_DUTY_6_8 * 5 ; 6/8
|
||||
ST_SOUND_DUTY_7_8 * 6 ; 7/8
|
||||
ST_SOUND_DUTY_XX * 7 ; 設定禁止
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; サウンドキャプチャ コントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
SNDCAP_PREMIXING_ON * 0x01 ; ミキサー前合成 ON
|
||||
SNDCAP_SRC * 0x02 ; キャプチャ元選択
|
||||
SNDCAP_MIXER * 0x00 ; ミキサー出力データをキャプチャ
|
||||
SNDCAP_CHAN * 0x02 ; 単一チャンネルをキャプチャ
|
||||
SNDCAP_REPEAT_OFF * 0x04 ; リピート OFF
|
||||
SNDCAP_FORMAT * 0x08 ; キャプチャフォーマット
|
||||
SNDCAP_PCM16 * 0x00 ; 16bitPCM
|
||||
SNDCAP_PCM8 * 0x08 ; 8bitPCM
|
||||
SNDCAP_ENABLE * 0x80 ; イネーブル
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; SPIコントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
SPI_SCK_MASK * 0x0003 ; シフトクロック
|
||||
IF :DEF: IRIS_TS
|
||||
SPI_TARGET_MASK * 0x0300 ; 通信ターゲット指定
|
||||
ELSE
|
||||
SPI_TARGET_MASK * 0x2000
|
||||
ENDIF
|
||||
|
||||
SPI_SCK_SHIFT * 0
|
||||
|
||||
SPI_SCK_4M * 0x0000 ; シフトクロック 4MHz選択
|
||||
SPI_SCK_2M * 0x0001 ; 2MHz
|
||||
SPI_SCK_1M * 0x0002 ; 1MHz
|
||||
SPI_SCK_524K * 0x0003 ; 524KHz
|
||||
|
||||
SPI_BUSY * 0x0080 ; ビジー
|
||||
SPI_8BIT_MODE * 0x0000 ; 8ビットモード
|
||||
IF :DEF: IRIS_TS
|
||||
SPI_16BIT_MODE * 0x0400 ; 16ビットモード
|
||||
SPI_CONTINUOUS_ON * 0x1000 ; コンティニュアスモード ON
|
||||
SPI_TARGET_PMIC * 0x0000 ; PMIC選択
|
||||
SPI_TARGET_FLASH * 0x1000 ; フラッシュメモリ選択
|
||||
SPI_TARGET_TOUCHPANEL * 0x2000 ; タッチパネル選択
|
||||
ELSE
|
||||
SPI_CONTINUOUS_ON * 0x1000 ; コンティニュアスモード ON
|
||||
SPI_TARGET_PMIC * 0x0000 ; PMIC選択
|
||||
SPI_TARGET_FLASH * 0x2000 ; フラッシュメモリ選択
|
||||
ENDIF
|
||||
SPI_IF_ENABLE * 0x4000 ; 割り込み要求 許可
|
||||
SPI_ENABLE * 0x8000 ; SPI許可
|
||||
|
||||
; 構造体メンバ用定数
|
||||
|
||||
ST_SPI_SCK_4M * 0 ; シフトクロック 4MHz選択
|
||||
ST_SPI_SCK_2M * 1 ; 2MHz
|
||||
ST_SPI_SCK_1M * 2 ; 1MHz
|
||||
ST_SPI_SCK_524K * 3 ; 524KHz
|
||||
|
||||
IF :DEF: IRIS_TS
|
||||
ST_SPI_TARGET_PMIC * 0 ; PMIC選択
|
||||
ST_SPI_TARGET_FLASH * 1 ; フラッシュメモリ選択
|
||||
ELSE
|
||||
ST_SPI_TARGET_PMIC * 0 ; PMIC選択
|
||||
ST_SPI_TARGET_FLASH * 1 ; フラッシュメモリ選択
|
||||
ENDIF
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 汎用入出力コントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
R_SIO_MODE_MASTER_MASK * 0xc000 ; SIOモード・マスタ
|
||||
|
||||
R_SIO_MODE_MASTER_SHIFT * 14
|
||||
|
||||
R_SIO_MASTER_MODE * 0x0000 ; SIOマスタ・モード
|
||||
R_DIRECT_MODE * 0x8000 ; 汎用入出力通信モード
|
||||
|
||||
R_SC * 0x0001 ; データ
|
||||
R_SD * 0x0002
|
||||
R_SI * 0x0004
|
||||
R_SO * 0x0008
|
||||
R_SC_I_O * 0x0010 ; I/O選択
|
||||
R_SD_I_O * 0x0020
|
||||
R_SI_I_O * 0x0040
|
||||
R_SO_I_O * 0x0080
|
||||
R_SC_IN * 0x0000 ; 入力設定
|
||||
R_SD_IN * 0x0000
|
||||
R_SI_IN * 0x0000
|
||||
R_SO_IN * 0x0000
|
||||
R_SC_OUT * 0x0010 ; 出力設定
|
||||
R_SD_OUT * 0x0020
|
||||
R_SI_OUT * 0x0040
|
||||
R_SO_OUT * 0x0080
|
||||
R_IF_ENABLE * 0x0100 ; 割り込み要求 許可
|
||||
|
||||
; 構造体メンバ用定数
|
||||
|
||||
ST_R_SIO_MASTER_MODE * 0 ; SIOマスタ・モード
|
||||
ST_R_DIRECT_MODE * 2 ; 汎用入出力通信モード
|
||||
|
||||
ST_R_IN * 0 ; 入力選択
|
||||
ST_R_OUT * 1 ; 出力選択
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; DMAコントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
DMA_TIMMING_MASK * 0x30000000 ; 開始タイミング
|
||||
DMA_COUNT_MASK * 0x0000ffff ; 転送数
|
||||
|
||||
DMA_TIMMING_SHIFT * 30
|
||||
DMA_COUNT_SHIFT * 0
|
||||
|
||||
DMA_ENABLE * 0x80000000 ; DMA許可
|
||||
DMA_IF_ENABLE * 0x40000000 ; 割り込み要求 許可
|
||||
DMA_TIMMING_IMM * 0x00000000 ; 直ちに起動
|
||||
DMA_TIMMING_V_BLANK * 0x10000000 ; Vブランク起動
|
||||
DMA_TIMMING_CARD * 0x20000000 ; カード
|
||||
DMA_TIMMING_WIRELESS * 0x30000000 ; 無線通信
|
||||
DMA_TIMMING_CARTRIDGE * 0x30000000 ; カートリッジ
|
||||
DMA_16BIT_BUS * 0x00000000 ; バスサイズ16Bit選択
|
||||
DMA_32BIT_BUS * 0x04000000 ; バスサイズ32Bit選択
|
||||
DMA_CONTINUOUS_ON * 0x02000000 ; コンティニュアスモード ON
|
||||
DMA_SRC_INC * 0x00000000 ; 転送元 インクリメント 選択
|
||||
DMA_SRC_DEC * 0x00800000 ; 転送元 デクリメント 選択
|
||||
DMA_SRC_FIX * 0x01000000 ; 転送元 固定 選択
|
||||
DMA_DEST_INC * 0x00000000 ; 転送先 インクリメント 選択
|
||||
DMA_DEST_DEC * 0x00200000 ; 転送先 デクリメント 選択
|
||||
DMA_DEST_FIX * 0x00400000 ; 転送先 固定 選択
|
||||
DMA_DEST_RELOAD * 0x00600000 ; 転送先 インクリメント/リロード 選択
|
||||
|
||||
; 構造体メンバ用定数
|
||||
|
||||
ST_DMA_TIMMING_IMM * 0 ; 直ちに起動
|
||||
ST_DMA_TIMMING_V_BLANK * 1 ; Vブランク起動
|
||||
ST_DMA_TIMMING_CARD * 2 ; カード
|
||||
ST_DMA_TIMMING_CARTRIDGE * 3 ; カートリッジ
|
||||
ST_DMA_16BIT_BUS * 0 ; バスサイズ16bit選択
|
||||
ST_DMA_32BIT_BUS * 1 ; バスサイズ32bit選択
|
||||
ST_DMA_INC * 0 ; アドレス・インクリメント 選択
|
||||
ST_DMA_DEC * 1 ; アドレス・デクリメント 選択
|
||||
ST_DMA_FIX * 2 ; アドレス固定 選択
|
||||
ST_DMA_RELOAD * 3 ; アドレス・インクリメント/リロード 選択
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; タイマー コントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
TMR_PRESCALER_MASK * 0x00030000 ; プリスケーラ クロック
|
||||
|
||||
TMR_PRESCALER_SHIFT * 16
|
||||
|
||||
TMR_PRESCALER_1CK * 0x00000000 ; プリスケーラ 1分周
|
||||
TMR_PRESCALER_64CK * 0x00010000 ; 64分周
|
||||
TMR_PRESCALER_256CK * 0x00020000 ; 256分周
|
||||
TMR_PRESCALER_1024CK * 0x00030000 ; 1024分周
|
||||
TMR_CONNECT * 0x00040000 ; 下位タイマー接続
|
||||
TMR_IF_ENABLE * 0x00400000 ; 割り込み要求 許可
|
||||
TMR_ENABLE * 0x00800000 ; タイマー起動
|
||||
|
||||
; 構造体メンバ用定数
|
||||
|
||||
ST_TMR_PRESCALER_1CK * 0 ; プリスケーラ 1分周
|
||||
ST_TMR_PRESCALER_64CK * 1 ; 64分周
|
||||
ST_TMR_PRESCALER_256CK * 2 ; 256分周
|
||||
ST_TMR_PRESCALER_1024CK * 3 ; 1024分周
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; キー
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
BUTTON_MASK * 0x030f ; ボタン
|
||||
PLUS_KEY_MASK * 0x00f0 ; 十字キー
|
||||
ALL_KEY_MASK * 0x03ff ; 全てのキー
|
||||
|
||||
A_BUTTON * 0x0001 ; Aボタン
|
||||
B_BUTTON * 0x0002 ; Bボタン
|
||||
SELECT_BUTTON * 0x0004 ; セレクトボタン
|
||||
START_BUTTON * 0x0008 ; スタートボタン
|
||||
R_KEY * 0x0010 ; 右ボタン
|
||||
L_KEY * 0x0020 ; 左ボタン
|
||||
U_KEY * 0x0040 ; 上ボタン
|
||||
D_KEY * 0x0080 ; 下ボタン
|
||||
R_BUTTON * 0x0100 ; Rボタン
|
||||
L_BUTTON * 0x0200 ; Lボタン
|
||||
KEY_IF_ENABLE * 0x4000 ; 割り込み要求 許可
|
||||
KEY_OR_INTR * 0x0000 ; 通常キー割り込み
|
||||
KEY_AND_INTR * 0x8000 ; ANDキー割り込み
|
||||
|
||||
; 構造体メンバ用定数
|
||||
|
||||
ST_KEY_OR_INTR * 0 ; 通常キー割り込み
|
||||
ST_KEY_AND_INTR * 1 ; ANDキー割り込み
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; 外部メモリ コントロール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
CTRDG_DT8_10CYC * 0x0000 ; カートリッジ 8bitデータバス 10サイクル
|
||||
CTRDG_DT8_8CYC * 0x0001 ; 8サイクル
|
||||
CTRDG_DT8_6CYC * 0x0002 ; 6サイクル
|
||||
CTRDG_DT8_18CYC * 0x0003 ; 18サイクル
|
||||
CTRDG_AD16_1ST_10CYC * 0x0000 ; カートリッジ AD16バス 1st 10サイクル
|
||||
CTRDG_AD16_1ST_8CYC * 0x0004 ; 8サイクル
|
||||
CTRDG_AD16_1ST_6CYC * 0x0008 ; 6サイクル
|
||||
CTRDG_AD16_1ST_18CYC * 0x000c ; 18サイクル
|
||||
CTRDG_AD16_2ND_6CYC * 0x0000 ; 2nd 6サイクル
|
||||
CTRDG_AD16_2ND_4CYC * 0x0010 ; 4サイクル
|
||||
|
||||
CTRDG_PHI_OUT_NONE * 0x0000 ; φ端子出力クロック Lo固定
|
||||
CTRDG_PHI_OUT_4MCK * 0x0020 ; 4MHz
|
||||
CTRDG_PHI_OUT_8MCK * 0x0040 ; 8MHz
|
||||
CTRDG_PHI_OUT_16MCK * 0x0060 ; 16MHz
|
||||
|
||||
CTRDG_ACCESS * 0x0080 ; カートリッジアクセス権
|
||||
CTRDG_ACCESS_MAINP * 0x0000 ; メインプロセッサ
|
||||
CTRDG_ACCESS_SUBP * 0x0080 ; サブプロセッサ
|
||||
|
||||
CARD_ACCESS * 0x0800 ; カードアクセス権
|
||||
CARD_ACCESS_MAINP * 0x0000 ; メインプロセッサ
|
||||
CARD_ACCESS_SUBP * 0x0800 ; サブプロセッサ
|
||||
|
||||
MMEM_CE2_OUT * 0x2000 ; CE2信号確認
|
||||
|
||||
MMEM_INTF * 0x4000 ; メインメモリインタフェース(TEGでは常にセットして同期モードにする)
|
||||
MMEM_INTF_ASYNC * 0x0000 ; 非同期モード
|
||||
MMEM_INTF_SYNC * 0x4000 ; 同期モード
|
||||
|
||||
MMEM_PRIORITY * 0x8000 ; メインメモリ優先権
|
||||
MMEM_PRIORITY_MAINP * 0x0000 ; メインプロセッサ
|
||||
MMEM_PRIORITY_SUBP * 0x8000 ; サブプロセッサ
|
||||
|
||||
; 構造体メンバ用定数
|
||||
|
||||
ST_CTRDG_DT8_10CYC * 0 ; カートリッジ 8bitデータバス 10サイクル
|
||||
ST_CTRDG_DT8_8CYC * 1 ; 8サイクル
|
||||
ST_CTRDG_DT8_6CYC * 2 ; 6サイクル
|
||||
ST_CTRDG_DT8_18CYC * 3 ; 18サイクル
|
||||
ST_CTRDG_AD16_1ST_10CYC * 0 ; カートリッジ AD16バス 1st 10サイクル
|
||||
ST_CTRDG_AD16_1ST_8CYC * 1 ; 8サイクル
|
||||
ST_CTRDG_AD16_1ST_6CYC * 2 ; 6サイクル
|
||||
ST_CTRDG_AD16_1ST_18CYC * 3 ; 18サイクル
|
||||
ST_CTRDG_AD16_2ND_6CYC * 0 ; 2nd 6サイクル
|
||||
ST_CTRDG_AD16_2ND_4CYC * 1 ; 4サイクル
|
||||
|
||||
ST_CTRDG_PHI_OUT_NONE * 0 ; φ端子出力クロック Lo固定
|
||||
ST_CTRDG_PHI_OUT_4MCK * 1 ; 4MHz
|
||||
ST_CTRDG_PHI_OUT_8MCK * 2 ; 8MHz
|
||||
ST_CTRDG_PHI_OUT_16MCK * 3 ; 16MHz
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_SUBP_DEFINE_H
|
||||
|
||||
END
|
||||
|
||||
410
trunk/IrisSubp/include/IrisSubpMacro.h
Normal file
410
trunk/IrisSubp/include/IrisSubpMacro.h
Normal file
@ -0,0 +1,410 @@
|
||||
//======================================================================
|
||||
// IrisSubpMacro.h
|
||||
// IRISサブプロセッサ 標準マクロ関数
|
||||
//
|
||||
// Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SUBP_MACRO_H
|
||||
#define _IRIS_SUBP_MACRO_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisSubpTarget.h>
|
||||
#include <IrisSubpTypes.h>
|
||||
#include <IrisSubpSystemCall.h>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データ読み込み
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define ReadData(readp, bit) (*(vu##bit *)(readp))
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データ書き込み
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define WriteData(writep, data, bit) \
|
||||
\
|
||||
(*(vu##bit *)(writep) = (data))
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// データ コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CopyData(readp, writep, bit) \
|
||||
\
|
||||
(*(vu##bit *)(writep) = *(vu##bit *)(readp))
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// アドレス境界整列バッファの有効化
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#ifdef __CC_ARM
|
||||
#define EnableAlignBuf(alignBuf) \
|
||||
{ \
|
||||
vu16 alignBufTmp = *(vu16 *)alignBuf; \
|
||||
}
|
||||
#else
|
||||
#define EnableAlignBuf(alignBuf) ((void) 0)
|
||||
#endif
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// 割り込みアドレス セット
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SetIntrAddr(intrp) \
|
||||
\
|
||||
(*(vu32 *)INTR_VECTOR_BUF = (vu32 )intrp)
|
||||
|
||||
//・割り込み処理のアドレスをセットします。
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMA セット
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
//#define SIMULATOR
|
||||
#ifndef SIMULATOR
|
||||
#define DmaSet(dmaNo, srcp, destp, dmaCntData) \
|
||||
{ \
|
||||
vu32 *dmaCntp = &((vu32 *)REG_DMA0)[dmaNo * 3]; \
|
||||
dmaCntp[0] = (vu32 )(srcp); \
|
||||
dmaCntp[1] = (vu32 )(destp); \
|
||||
dmaCntp[2] = (vu32 )(dmaCntData); \
|
||||
{u32 dummy = dmaCntp[2];} \
|
||||
}
|
||||
#define DmaSetAsync(dmaNo, srcp, destp, dmaCntData) \
|
||||
{ \
|
||||
vu32 *dmaCntp = &((vu32 *)REG_DMA0)[dmaNo * 3]; \
|
||||
dmaCntp[0] = (vu32 )(srcp); \
|
||||
dmaCntp[1] = (vu32 )(destp); \
|
||||
dmaCntp[2] = (vu32 )(dmaCntData); \
|
||||
}
|
||||
#else
|
||||
#define DmaSet(dmaNo, srcp, destp, dmaCntData) \
|
||||
{ \
|
||||
int i; \
|
||||
for (i=0; i<(dmaCntData & 0x1ffff); i++) \
|
||||
if ((dmaCntData) & DMA_SRC_FIX) { \
|
||||
if ((dmaCntData) & DMA_32BIT_BUS) \
|
||||
((vu32 *)(destp))[i] = ((vu32 *)(srcp))[0]; \
|
||||
else ((vu16 *)(destp))[i] = ((vu16 *)(srcp))[0]; \
|
||||
} else { \
|
||||
if ((dmaCntData) & DMA_32BIT_BUS) \
|
||||
((vu32 *)(destp))[i] = ((vu32 *)(srcp))[i]; \
|
||||
else ((vu16 *)(destp))[i] = ((vu16 *)(srcp))[i]; \
|
||||
} \
|
||||
}
|
||||
#define DmaSetAsync(dmaNo, srcp, destp, dmaCntData) \
|
||||
DmaSet( dmaNo, srcp, destp, dmaCntData)
|
||||
#endif
|
||||
|
||||
//・DMAコントローラにパラメータをセットします。
|
||||
//・SIMULATERを定義するとCPUでシミュレートします。
|
||||
// GDBでデバッグする場合などに有効です。
|
||||
//・最後にDMA起動待ちのために"LDR"命令が挿入されます。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// dmaCntData パラメータデータ
|
||||
//
|
||||
//※CPU内部RAM上のプログラムにてDMAを起動すると
|
||||
// その次の命令が先に実行されます。
|
||||
// よって、DMA直後に転送先をCPUにて変更しようとした場合、
|
||||
// 読み込み/書き戻しの間にDMAが起動されてしまいますので、
|
||||
// DMAの転送先のデータが意図していない値になる場合があります。
|
||||
// その場合にはWaitDma()を直後に挿入して、DMAが終了したか
|
||||
// どうかをチェックすると続くコードへの影響を確実に回避できます。
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMA クリア
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define DmaClear(dmaNo, data, destp, size, bit) \
|
||||
{ \
|
||||
vu##bit tmp = (data); \
|
||||
DmaSet(dmaNo, &tmp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_IMM | \
|
||||
DMA_SRC_FIX | DMA_DEST_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8)))); \
|
||||
}
|
||||
|
||||
#define DmaClearIf(dmaNo, data, destp, size, bit) \
|
||||
{ \
|
||||
vu##bit tmp = (data); \
|
||||
DmaSet(dmaNo, &tmp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_IMM | \
|
||||
DMA_IF_ENABLE | \
|
||||
DMA_SRC_FIX | DMA_DEST_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8)))); \
|
||||
}
|
||||
|
||||
#define DmaClearArray( dmaNo, data, destp, bit) \
|
||||
DmaClear( dmaNo, data, destp, sizeof(destp), bit)
|
||||
|
||||
#define DmaClearArrayIf(dmaNo, data, destp, bit) \
|
||||
DmaClearIf( dmaNo, data, destp, sizeof(destp), bit)
|
||||
|
||||
//・DMAでRAMクリアします。
|
||||
//・クリアデータはスタックに置かれ、それをデスティネーションへコピーします。
|
||||
//・DmaClearIf/DmaClearArrayIfは終了時に割り込み要求を発生します。
|
||||
//・DmaClearArray/DmaClearArrayIfはデスティネーション配列全体をクリアします。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// data クリアデータ
|
||||
// destp デスティネーションアドレス
|
||||
// size クリアバイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
//
|
||||
//
|
||||
//※CPU内部RAM上のプログラムにてDMAを起動すると
|
||||
// その次の命令が先に実行されます。
|
||||
// よって、DMA直後に転送先をCPUにて変更しようとした場合、
|
||||
// 読み込み/書き戻しの間にDMAが起動されてしまいますので、
|
||||
// DMAの転送先のデータが意図していない値になる場合があります。
|
||||
// その場合にはWaitDma()を直後に挿入して、DMAが終了したか
|
||||
// どうかをチェックすると続くコードへの影響を確実に回避できます。
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMA コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define DmaCopy(dmaNo, srcp, destp, size, bit) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_IMM | \
|
||||
DMA_SRC_INC | DMA_DEST_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/((bit)/8))))
|
||||
|
||||
#define DmaCopyIf(dmaNo, srcp, destp, size, bit) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_IMM | \
|
||||
DMA_IF_ENABLE | \
|
||||
DMA_SRC_INC | DMA_DEST_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8))))
|
||||
|
||||
#define DmaCopyArray( dmaNo, srcp, destp, bit) \
|
||||
DmaCopy( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
#define DmaCopyArrayIf(dmaNo, srcp, destp, bit) \
|
||||
DmaCopyIf( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
//・DMAでコピーします。
|
||||
//・DmaCopyIf/DmaCopyArrayIfは終了時に割り込み要求を発生します。
|
||||
//・DmaCopyArray/DmaCopyArrayIfはソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送バイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
//
|
||||
//
|
||||
//※CPU内部RAM上のプログラムにてDMAを起動すると
|
||||
// その次の命令が先に実行されます。
|
||||
// よって、DMA直後に転送先をCPUにて変更しようとした場合、
|
||||
// 読み込み/書き戻しの間にDMAが起動されてしまいますので、
|
||||
// DMAの転送先のデータが意図していない値になる場合があります。
|
||||
// その場合にはWaitDma()を直後に挿入して、DMAが終了したか
|
||||
// どうかをチェックすると続くコードへの影響を確実に回避できます。
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// HブランクDMA コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define H_DmaCopy(dmaNo, srcp, destp, size, bit) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_H_BLANK | \
|
||||
DMA_SRC_INC | DMA_DEST_RELOAD | \
|
||||
DMA_CONTINUOUS_ON | \
|
||||
DMA_##bit##BIT_BUS | ((size)/((bit)/8))))
|
||||
|
||||
#define H_DmaCopyIf(dmaNo, srcp, destp, size, bit) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_H_BLANK | \
|
||||
DMA_IF_ENABLE | \
|
||||
DMA_SRC_INC | DMA_DEST_RELOAD | \
|
||||
DMA_CONTINUOUS_ON | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8))))
|
||||
|
||||
#define H_DmaCopyArray( dmaNo, srcp, destp, bit) \
|
||||
H_DmaCopy( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
#define H_DmaCopyArrayIf(dmaNo, srcp, destp, bit) \
|
||||
H_DmaCopyIf( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
//・Hブランクに同期してDMAでコピーします。
|
||||
//・H_DmaCopyIf/H_DmaCopyArrayIfは終了時に割り込み要求を発生します。
|
||||
//・H_DmaCopyArray/H_DmaCopyArrayIfはソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送バイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// VブランクDMA コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define V_DmaCopy(dmaNo, srcp, destp, size, bit) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_V_BLANK | \
|
||||
DMA_SRC_INC | DMA_DEST_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8))))
|
||||
|
||||
#define V_DmaCopyIf(dmaNo, srcp, destp, size, bit) \
|
||||
\
|
||||
DmaSet(dmaNo, srcp, destp, ( \
|
||||
DMA_ENABLE | DMA_TIMMING_V_BLANK | \
|
||||
DMA_IF_ENABLE | \
|
||||
DMA_SRC_INC | DMA_DEST_INC | \
|
||||
DMA_##bit##BIT_BUS | ((size)/(bit/8))))
|
||||
|
||||
#define V_DmaCopyArray( dmaNo, srcp, destp, bit) \
|
||||
V_DmaCopy( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
#define V_DmaCopyArrayIf(dmaNo, srcp, destp, bit) \
|
||||
V_DmaCopyIf( dmaNo, srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
//・Vブランクに同期してDMAでコピーします。
|
||||
//・V_DmaCopyIf/V_DmaCopyArrayIfは終了時に割り込み要求を発生します。
|
||||
//・V_DmaCopyArray/V_DmaCopyArrayIfはソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送バイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMA 終了待ち
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define WaitDma(dmaNo) \
|
||||
{ \
|
||||
vu32 *(dmaCntp) = (vu32 *)REG_DMA##dmaNo; \
|
||||
while (dmaCntp[2] & DMA_ENABLE) ; \
|
||||
}
|
||||
|
||||
//・DMAの終了を待ちます。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// DMA ストップ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define StopDma(dmaNo) \
|
||||
{ \
|
||||
vu16 *(dmaCntp) = &((vu16 *)REG_DMA0)[dmaNo * 6]; \
|
||||
dmaCntp[5] &= ~((DMA_TIMMING_MASK | DMA_CONTINUOUS_ON) \
|
||||
>> 16); \
|
||||
dmaCntp[5] &= ~( DMA_ENABLE >> 16); \
|
||||
{u32 dummy = dmaCntp[5];} \
|
||||
}
|
||||
|
||||
//・DMAを停止します。
|
||||
//・但し、処理中にDMAの自動起動が掛かった場合は一度だけDMAが実行されます。
|
||||
//
|
||||
//・引数:
|
||||
// dmaNo DMA番号
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU クリア
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuClear(data, destp, size, bit) SVC_CpuClear(data, (void *)(destp), size, bit)
|
||||
|
||||
#define CpuClearArray(data, destp, bit) \
|
||||
CpuClear( data, destp, sizeof(destp), bit)
|
||||
|
||||
//・CPUでRAMクリアするシステムコールを呼び出します。
|
||||
//・クリアデータはスタックに置かれ、それをデスティネーションへコピーします。
|
||||
//・CpuClearArrayはデスティネーション配列全体をクリアします。
|
||||
//
|
||||
//・引数:
|
||||
// data クリアデータ
|
||||
// destp デスティネーションアドレス
|
||||
// size クリアバイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuCopy(srcp, destp, size, bit) SVC_CpuCopy((void *)(srcp), (void *)(destp), size, bit)
|
||||
|
||||
#define CpuCopyArray(srcp, destp, bit) \
|
||||
CpuCopy( srcp, destp, sizeof(srcp), bit)
|
||||
|
||||
//・CPUでコピーするシステムコールを呼び出します。
|
||||
//・CpuCopyArrayはソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送バイト数
|
||||
// bit 転送ビット幅(16|32)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 高速クリア
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuClearFast(data, destp, size) SVC_CpuClearFast(data, (void *)(destp), size)
|
||||
|
||||
#define CpuClearArrayFast(data, destp) \
|
||||
CpuClearFast( data, destp, sizeof(destp))
|
||||
|
||||
//・CPUで高速にRAMクリアするシステムコールを呼び出します。
|
||||
//・クリアデータはスタックに置かれ、それをデスティネーションへコピーします。
|
||||
//・CpuClearArrayFastはデスティネーション配列全体をクリアします。
|
||||
//
|
||||
//・引数:
|
||||
// data クリアデータ
|
||||
// destp デスティネーションアドレス
|
||||
// size クリアバイト数
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// CPU 高速コピー
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define CpuCopyFast(srcp, destp, size) SVC_CpuCopyFast((void *)(srcp), (void *)(destp), size)
|
||||
|
||||
#define CpuCopyArrayFast(srcp, destp) \
|
||||
CpuCopyFast( srcp, destp, sizeof(srcp))
|
||||
|
||||
//・CPUで高速にコピーするシステムコールを呼び出します。
|
||||
//・CpuCopyArrayFastはソース配列全体をコピーします。
|
||||
//
|
||||
//・引数:
|
||||
// srcp ソースアドレス
|
||||
// destp デスティネーションアドレス
|
||||
// size 転送バイト数
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_SUBP_MACRO_H
|
||||
42
trunk/IrisSubp/include/IrisSubpMacroArm.s
Normal file
42
trunk/IrisSubp/include/IrisSubpMacroArm.s
Normal file
@ -0,0 +1,42 @@
|
||||
;=======================================================================
|
||||
; IrisSubpMacroArm.s
|
||||
; IRISサブプロセッサ 標準マクロ関数(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
IF :DEF: _IRIS_SUBP_MACRO_H
|
||||
ELSE
|
||||
_IRIS_SUBP_MACRO_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisSubpTargetArm.s
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; システムコール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
MACRO
|
||||
SystemCall16 $No
|
||||
swi $No
|
||||
MEND
|
||||
MACRO
|
||||
SystemCall32 $No
|
||||
swi $No << 16
|
||||
MEND
|
||||
|
||||
MACRO
|
||||
Halt $Bits ; HALT
|
||||
SystemCall$Bits 2
|
||||
MEND
|
||||
MACRO
|
||||
Stop $Bits ; STOP
|
||||
SystemCall$Bits 3
|
||||
MEND
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_SUBP_MACRO_H
|
||||
|
||||
END
|
||||
|
||||
28
trunk/IrisSubp/include/IrisSubpMacroMw.s
Normal file
28
trunk/IrisSubp/include/IrisSubpMacroMw.s
Normal file
@ -0,0 +1,28 @@
|
||||
;=======================================================================
|
||||
; IrisSubpMacroMw.s
|
||||
; IRIS 標準マクロ関数(MWASMARM用)
|
||||
;
|
||||
; Copyright (C) 2003 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
#ifndef _IRIS_SUBP_MACRO_H
|
||||
#define _IRIS_SUBP_MACRO_H
|
||||
|
||||
|
||||
.INCLUDE IrisSubpTarget.h
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; システムコール
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
SystemCall16: .MACRO No
|
||||
swi No
|
||||
.ENDM
|
||||
|
||||
SystemCall32: .MACRO No
|
||||
swi No << 16
|
||||
.ENDM
|
||||
|
||||
|
||||
|
||||
#endif // _IRIS_SUBP_MACRO_H
|
||||
530
trunk/IrisSubp/include/IrisSubpMemoryMap.h
Normal file
530
trunk/IrisSubp/include/IrisSubpMemoryMap.h
Normal file
@ -0,0 +1,530 @@
|
||||
//======================================================================
|
||||
// IrisSubpMemoryMap.h
|
||||
// IRISサブプロセッサ メモリマップ定数
|
||||
//
|
||||
// Copyright (C) 2002-2004 NINTENDO Co.,Ltd.
|
||||
//======================================================================
|
||||
#ifndef _IRIS_SUBP_MEMORY_MAP_H
|
||||
#define _IRIS_SUBP_MEMORY_MAP_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <IrisSubpTarget.h>
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メモリ・マップ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SHARED_WORK 0x027ff000 // CPU間共有ワーク領域
|
||||
#define SHARED_WORK_END 0x02800000
|
||||
|
||||
#if defined(NDEBUG)
|
||||
#define SUBP_PRV 0x02380000 // サブプロセッサ専有領域(リリースバージョン)
|
||||
#elif defined(MMEM_4M)
|
||||
#define SUBP_PRV 0x02300000 // (デバッグバージョン<メインメモリ4M本体>)
|
||||
#else
|
||||
#define SUBP_PRV 0x02600000 // (デバッグバージョン<メインメモリ8M本体>)
|
||||
#endif
|
||||
#define SUBP_PRV_END SHARED_WORK
|
||||
|
||||
|
||||
#define MAIN_MEM 0x02000000 // メインメモリ
|
||||
#define MAIN_MEM_END (MAIN_MEM + 0x400000)
|
||||
#define MAIN_MEM_EX_END (MAIN_MEM + 0x800000) //(拡張時の最終アドレス)
|
||||
|
||||
#define MAIN_MEM_CMD_AREA (MAIN_MEM_EX_END - 0x2) // メインメモリコマンド発行エリア(使用禁止エリア)
|
||||
|
||||
#define SHARED_LOCK_BUF (MAIN_MEM_EX_END - 0x40) // 共有リソース・ロックバッファ
|
||||
#define SHARED_LOCK_BUF_END (MAIN_MEM_EX_END - 0x10)
|
||||
|
||||
#define INIT_LOCK_BUF (MAIN_MEM_EX_END - 0x10) // 初期化ロックバッファ
|
||||
#define CARTRIDGE_LOCK_BUF (MAIN_MEM_EX_END - 0x18) // カートリッジ・ロックバッファ
|
||||
#define CARD_LOCK_BUF (MAIN_MEM_EX_END - 0x20) // カード・ロックバッファ
|
||||
#define WRAM_BLOCK1_LOCK_BUF (MAIN_MEM_EX_END - 0x28) // CPU内部ワークRAM・ブロック1・ロックバッファ
|
||||
#define WRAM_BLOCK0_LOCK_BUF (MAIN_MEM_EX_END - 0x30) // ブロック0・ロックバッファ
|
||||
#define VRAM_D_LOCK_BUF (MAIN_MEM_EX_END - 0x38) // VRAM-D・ロックバッファ
|
||||
#define VRAM_C_LOCK_BUF (MAIN_MEM_EX_END - 0x40) // C・ロックバッファ
|
||||
|
||||
#define TO_MAINP_IF_BUF (MAIN_MEM_EX_END - 0x50) // サブ→メインプロセッサ割り込み要求フラグ(2Byte×8)
|
||||
#define WM_TO_MAINP_IF_BUF (MAIN_MEM_EX_END - 0x50) // ワイヤレスマネージャ予約
|
||||
#define FROM_MAINP_IF_BUF (MAIN_MEM_EX_END - 0x60) // メイン→サブプロセッサ割り込み要求フラグ(2Byte×8)
|
||||
#define WM_FROM_MAINP_IF_BUF (MAIN_MEM_EX_END - 0x60) // ワイヤレスマネージャ予約
|
||||
|
||||
#define ROM_HEADER_BUF (MAIN_MEM_EX_END - 0x200)// ROM内登録エリアデータ・バッファ
|
||||
|
||||
|
||||
#ifdef IRIS_TS
|
||||
#define PRV_WRAM_DF_SIZE 0x8000 // CPU内部専有ワークRAM TS-TEG差分サイズ
|
||||
#else
|
||||
#define PRV_WRAM_DF_SIZE 0
|
||||
#endif
|
||||
|
||||
#define CPU_WRAM 0x037f8000 // CPU内部ワークRAM 3ブロック構成時(デフォルト)
|
||||
#define CPU_WRAM_END (CPU_WRAM + PRV_WRAM_DF_SIZE + 0x10000)
|
||||
#define CPU_WRAM_2B 0x037fc000 // 2ブロック構成時
|
||||
#define CPU_WRAM_2B_END (CPU_WRAM_2B + PRV_WRAM_DF_SIZE + 0xc000)
|
||||
#define CPU_WRAM_BLOCK0 0x037f8000 // ブロック0
|
||||
#define CPU_WRAM_BLOCK0_END (CPU_WRAM_BLOCK0 + 0x4000)
|
||||
#define CPU_WRAM_BLOCK1 0x037fc000 // ブロック1
|
||||
#define CPU_WRAM_BLOCK1_END (CPU_WRAM_BLOCK1 + 0x4000)
|
||||
#define PRV_WRAM 0x03800000 // CPU内部専有ワークRAM
|
||||
#define PRV_WRAM_END (PRV_WRAM + PRV_WRAM_DF_SIZE + 0x8000)
|
||||
#define CPU_XWRAM 0x06000000 // CPU内部拡張ワークRAM
|
||||
#define CPU_XWRAM_END (CPU_XWRAM +0x40000)
|
||||
|
||||
#define INTR_VECTOR_BUF (CPU_WRAM_END - 0x4)// 割り込み分岐アドレス
|
||||
#define INTR_CHECK_BUF (CPU_WRAM_END - 0x8)// 割り込みチェック
|
||||
|
||||
#define SEND_FIFO_LOCK_BUF (CPU_WRAM_END - 0x10)// CPU間送信FIFO・ロックバッファ
|
||||
#define TIMER3_LOCK_BUF (CPU_WRAM_END - 0x12)// タイマー3・ロックバッファ
|
||||
#define TIMER2_LOCK_BUF (CPU_WRAM_END - 0x14)// タイマー2
|
||||
#define TIMER1_LOCK_BUF (CPU_WRAM_END - 0x16)// タイマー1
|
||||
#define TIMER0_LOCK_BUF (CPU_WRAM_END - 0x18)// タイマー0
|
||||
#define DMA3_LOCK_BUF (CPU_WRAM_END - 0x1a)// DMA3・ロックバッファ
|
||||
#define DMA2_LOCK_BUF (CPU_WRAM_END - 0x1c)// DMA2
|
||||
#define DMA1_LOCK_BUF (CPU_WRAM_END - 0x1e)// DMA1
|
||||
#define DMA0_LOCK_BUF (CPU_WRAM_END - 0x20)// DMA0
|
||||
|
||||
|
||||
#define REG_BASE 0x04000000 // レジスタ群
|
||||
#define WIRELESS_INTF 0x04800000 // 無線通信インタフェース
|
||||
#define WIRELESS_INTF0 0x04800000 // インタフェース0
|
||||
#define WIRELESS_INTF1 0x04808000 // インタフェース1
|
||||
#define WIRELESS_INTF0_END (WIRELESS_INTF0 + 0x8000)
|
||||
#define WIRELESS_INTF1_END (WIRELESS_INTF1 + 0x8000)
|
||||
#define WIRELESS_INTF_END (WIRELESS_INTF + 0x10000)
|
||||
|
||||
#define CARTRIDGE 0x08000000 // カートリッジ
|
||||
#define CTRDG_AD16_BANK0 0x08000000 // カートリッジ AD16バス バンク0
|
||||
#define CTRDG_AD16_BANK0_END 0x0a000000
|
||||
#define CTRDG_AD16_BANK1 0x0a000000 // バンク1
|
||||
#define CTRDG_AD16_BANK1_END 0x0c000000
|
||||
#define CTRDG_AD16_BANK2 0x0c000000 // バンク2
|
||||
#define CTRDG_AD16_BANK2_END 0x0e000000
|
||||
#define CTRDG_DT8 0x0e000000 // カートリッジ 8bitデータバス
|
||||
#define CTRDG_DT8_END 0x10000000
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// メモリ・サイズ
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define SHARED_WORK_SIZE (SHARED_WORK_END - SHARED_WORK) // CPU間共有ワーク領域(4KB以上、2のべき乗サイズ)
|
||||
#define SUBP_PRV_SIZE (SUBP_PRV_END - SUBP_PRV) // サブプロセッサ専有領域(32KB以上、2のべき乗サイズ)
|
||||
|
||||
#define SHARED_LOCK_BUF_SIZE (SHARED_LOCK_BUF_END - SHARED_LOCK_BUF) // 共有リソース・ロックバッファ
|
||||
|
||||
|
||||
#define MAIN_MEM_SIZE 0x400000 // メインメモリ
|
||||
#define MAIN_MEM_EX_SIZE 0x800000 // (拡張時)
|
||||
|
||||
#define CPU_WRAM_SIZE (0x10000 + PRV_WRAM_DF_SIZE) // CPU内部ワークRAM 3ブロック構成時(デフォルト)
|
||||
#define CPU_WRAM_2B_SIZE (0xc000 + PRV_WRAM_DF_SIZE) // 2ブロック構成時
|
||||
#define CPU_WRAM_BLOCK0_SIZE 0x4000 // ブロック0
|
||||
#define CPU_WRAM_BLOCK1_SIZE 0x4000 // ブロック1
|
||||
#define PRV_WRAM_SIZE (0x8000 + PRV_WRAM_DF_SIZE) // CPU内部専有ワークRAM
|
||||
#define CPU_XWRAM_SIZE 0x40000 // CPU内部拡張ワークRAM
|
||||
|
||||
#define MROM_PAGE_SIZE 512 // マスクROM・ページ
|
||||
|
||||
#define CARTRIDGE_SIZE 0x02000000 // カートリッジ
|
||||
#define CTRDG_AD16_BANK_SIZE 0x02000000 // カートリッジ AD16バス バンク
|
||||
#define CTRDG_AD16_BANK0_SIZE 0x02000000 // バンク0
|
||||
#define CTRDG_AD16_BANK1_SIZE 0x02000000 // バンク1
|
||||
#define CTRDG_AD16_BANK2_SIZE 0x02000000 // バンク2
|
||||
#define CTRDG_DT8_SIZE 0x02000000 // カートリッジ 8bitデータバス
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// レジスタ・アドレス
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define REG_IME (REG_BASE + 0x208) // 割り込みマスタイネーブル
|
||||
#define REG_IE (REG_BASE + 0x210) // 割り込み許可
|
||||
#define REG_IF (REG_BASE + 0x214) // 割り込み要求
|
||||
|
||||
#define REG_MAINPINTF (REG_BASE + 0x180) // メインプロセッサインタフェース
|
||||
#define REG_MAINP_FIFO_CNT (REG_BASE + 0x184) // CPU間FIFOコントロール
|
||||
#define REG_SEND_FIFO (REG_BASE + 0x188) // 送信FIFO
|
||||
#define REG_RECV_FIFO (REG_BASE + 0x100000) // 受信FIFO
|
||||
|
||||
|
||||
#define REG_POWCNT (REG_BASE + 0x304) // パワーコントロール
|
||||
|
||||
#define REG_EXMEMCNT (REG_BASE + 0x204) // 外部メモリコントロール
|
||||
|
||||
#define REG_VRAMSTAT (REG_BASE + 0x240) // VRAMステータス
|
||||
#define REG_WRAMSTAT (REG_BASE + 0x241) // 内部ワークRAMステータス
|
||||
#define REG_WVRAMSTAT (REG_BASE + 0x240) // VRAM C・D + 内部ワークRAM ステータス
|
||||
|
||||
|
||||
#define REG_DISPSTAT (REG_BASE + 0x4) // 表示ステータス
|
||||
#define REG_VCOUNT (REG_BASE + 0x6) // Vカウンタ
|
||||
|
||||
|
||||
#define REG_SPICNT (REG_BASE + 0x1c0) // SPIコントロール
|
||||
#define REG_SPIDATA (REG_BASE + 0x1c2) // SPIデータ
|
||||
|
||||
#define REG_RCNT (REG_BASE + 0x134) // 汎用入出力コントロール
|
||||
|
||||
#define REG_KEYINPUT (REG_BASE + 0x130) // キー入力
|
||||
#define REG_KEYCNT (REG_BASE + 0x132) // キーコントロール
|
||||
|
||||
|
||||
#define REG_DMA0 (REG_BASE + 0xb0) // DMA0
|
||||
#define REG_DMA0SAD (REG_BASE + 0xb0)
|
||||
#define REG_DMA0DAD (REG_BASE + 0xb4)
|
||||
#define REG_DMA0CNT (REG_BASE + 0xb8)
|
||||
#define REG_DMA0CNT_L (REG_BASE + 0xb8)
|
||||
#define REG_DMA0CNT_H (REG_BASE + 0xba)
|
||||
#define REG_DMA1 (REG_BASE + 0xbc) // DMA1
|
||||
#define REG_DMA1SAD (REG_BASE + 0xbc)
|
||||
#define REG_DMA1DAD (REG_BASE + 0xc0)
|
||||
#define REG_DMA1CNT (REG_BASE + 0xc4)
|
||||
#define REG_DMA1CNT_L (REG_BASE + 0xc4)
|
||||
#define REG_DMA1CNT_H (REG_BASE + 0xc6)
|
||||
#define REG_DMA2 (REG_BASE + 0xc8) // DMA2
|
||||
#define REG_DMA2SAD (REG_BASE + 0xc8)
|
||||
#define REG_DMA2DAD (REG_BASE + 0xcc)
|
||||
#define REG_DMA2CNT (REG_BASE + 0xd0)
|
||||
#define REG_DMA2CNT_L (REG_BASE + 0xd0)
|
||||
#define REG_DMA2CNT_H (REG_BASE + 0xd2)
|
||||
#define REG_DMA3 (REG_BASE + 0xd4) // DMA3
|
||||
#define REG_DMA3SAD (REG_BASE + 0xd4)
|
||||
#define REG_DMA3DAD (REG_BASE + 0xd8)
|
||||
#define REG_DMA3CNT (REG_BASE + 0xdc)
|
||||
#define REG_DMA3CNT_L (REG_BASE + 0xdc)
|
||||
#define REG_DMA3CNT_H (REG_BASE + 0xde)
|
||||
|
||||
|
||||
#define REG_TM0CNT (REG_BASE + 0x100) // タイマー0
|
||||
#define REG_TM0CNT_L (REG_BASE + 0x100)
|
||||
#define REG_TM0CNT_H (REG_BASE + 0x102)
|
||||
#define REG_TM1CNT (REG_BASE + 0x104) // タイマー1
|
||||
#define REG_TM1CNT_L (REG_BASE + 0x104)
|
||||
#define REG_TM1CNT_H (REG_BASE + 0x106)
|
||||
#define REG_TM2CNT (REG_BASE + 0x108) // タイマー2
|
||||
#define REG_TM2CNT_L (REG_BASE + 0x108)
|
||||
#define REG_TM2CNT_H (REG_BASE + 0x10a)
|
||||
#define REG_TM3CNT (REG_BASE + 0x10c) // タイマー3
|
||||
#define REG_TM3CNT_L (REG_BASE + 0x10c)
|
||||
#define REG_TM3CNT_H (REG_BASE + 0x10e)
|
||||
|
||||
|
||||
#define REG_SOUNDCNT (REG_BASE + 0x500) // サウンド・マスタコントロール
|
||||
|
||||
#define REG_SOUNDBIAS (REG_BASE + 0x504) // サウンドBIAS
|
||||
|
||||
#define REG_SNDCAPCNT (REG_BASE + 0x508) // サウンドキャプチャコントロール
|
||||
#define REG_SNDCAP0DAD (REG_BASE + 0x510) // サウンドキャプチャ0パラメータ
|
||||
#define REG_SNDCAP0LEN (REG_BASE + 0x514)
|
||||
#define REG_SNDCAP1DAD (REG_BASE + 0x518) // サウンドキャプチャ1パラメータ
|
||||
#define REG_SNDCAP1LEN (REG_BASE + 0x51c)
|
||||
|
||||
#define REG_SOUND0CNT (REG_BASE + 0x400) // サウンド0コントロール
|
||||
#define REG_SOUND0CNT_L (REG_BASE + 0x400)
|
||||
#define REG_SOUND0CNT_H (REG_BASE + 0x402)
|
||||
#define REG_SOUND0SAD (REG_BASE + 0x404)
|
||||
#define REG_SOUND0TMR (REG_BASE + 0x408)
|
||||
#define REG_SOUND0RPT_PT (REG_BASE + 0x40a)
|
||||
#define REG_SOUND0RPT_LEN (REG_BASE + 0x40c)
|
||||
#define REG_SOUND1CNT (REG_BASE + 0x410) // サウンド1コントロール
|
||||
#define REG_SOUND1CNT_L (REG_BASE + 0x410)
|
||||
#define REG_SOUND1CNT_H (REG_BASE + 0x412)
|
||||
#define REG_SOUND1SAD (REG_BASE + 0x414)
|
||||
#define REG_SOUND1TMR (REG_BASE + 0x418)
|
||||
#define REG_SOUND1RPT_PT (REG_BASE + 0x41a)
|
||||
#define REG_SOUND1RPT_LEN (REG_BASE + 0x41c)
|
||||
#define REG_SOUND2CNT (REG_BASE + 0x420) // サウンド2コントロール
|
||||
#define REG_SOUND2CNT_L (REG_BASE + 0x420)
|
||||
#define REG_SOUND2CNT_H (REG_BASE + 0x422)
|
||||
#define REG_SOUND2SAD (REG_BASE + 0x424)
|
||||
#define REG_SOUND2TMR (REG_BASE + 0x428)
|
||||
#define REG_SOUND2RPT_PT (REG_BASE + 0x42a)
|
||||
#define REG_SOUND2RPT_LEN (REG_BASE + 0x42c)
|
||||
#define REG_SOUND3CNT (REG_BASE + 0x430) // サウンド3コントロール
|
||||
#define REG_SOUND3CNT_L (REG_BASE + 0x430)
|
||||
#define REG_SOUND3CNT_H (REG_BASE + 0x432)
|
||||
#define REG_SOUND3SAD (REG_BASE + 0x434)
|
||||
#define REG_SOUND3TMR (REG_BASE + 0x438)
|
||||
#define REG_SOUND3RPT_PT (REG_BASE + 0x43a)
|
||||
#define REG_SOUND3RPT_LEN (REG_BASE + 0x43c)
|
||||
#define REG_SOUND4CNT (REG_BASE + 0x440) // サウンド4コントロール
|
||||
#define REG_SOUND4CNT_L (REG_BASE + 0x440)
|
||||
#define REG_SOUND4CNT_H (REG_BASE + 0x442)
|
||||
#define REG_SOUND4SAD (REG_BASE + 0x444)
|
||||
#define REG_SOUND4TMR (REG_BASE + 0x448)
|
||||
#define REG_SOUND4RPT_PT (REG_BASE + 0x44a)
|
||||
#define REG_SOUND4RPT_LEN (REG_BASE + 0x44c)
|
||||
#define REG_SOUND5CNT (REG_BASE + 0x450) // サウンド5コントロール
|
||||
#define REG_SOUND5CNT_L (REG_BASE + 0x450)
|
||||
#define REG_SOUND5CNT_H (REG_BASE + 0x452)
|
||||
#define REG_SOUND5SAD (REG_BASE + 0x454)
|
||||
#define REG_SOUND5TMR (REG_BASE + 0x458)
|
||||
#define REG_SOUND5RPT_PT (REG_BASE + 0x45a)
|
||||
#define REG_SOUND5RPT_LEN (REG_BASE + 0x45c)
|
||||
#define REG_SOUND6CNT (REG_BASE + 0x460) // サウンド6コントロール
|
||||
#define REG_SOUND6CNT_L (REG_BASE + 0x460)
|
||||
#define REG_SOUND6CNT_H (REG_BASE + 0x462)
|
||||
#define REG_SOUND6SAD (REG_BASE + 0x464)
|
||||
#define REG_SOUND6TMR (REG_BASE + 0x468)
|
||||
#define REG_SOUND6RPT_PT (REG_BASE + 0x46a)
|
||||
#define REG_SOUND6RPT_LEN (REG_BASE + 0x46c)
|
||||
#define REG_SOUND7CNT (REG_BASE + 0x470) // サウンド7コントロール
|
||||
#define REG_SOUND7CNT_L (REG_BASE + 0x470)
|
||||
#define REG_SOUND7CNT_H (REG_BASE + 0x472)
|
||||
#define REG_SOUND7SAD (REG_BASE + 0x474)
|
||||
#define REG_SOUND7TMR (REG_BASE + 0x478)
|
||||
#define REG_SOUND7RPT_PT (REG_BASE + 0x47a)
|
||||
#define REG_SOUND7RPT_LEN (REG_BASE + 0x47c)
|
||||
#define REG_SOUND8CNT (REG_BASE + 0x480) // サウンド8コントロール
|
||||
#define REG_SOUND8CNT_L (REG_BASE + 0x480)
|
||||
#define REG_SOUND8CNT_H (REG_BASE + 0x482)
|
||||
#define REG_SOUND8SAD (REG_BASE + 0x484)
|
||||
#define REG_SOUND8TMR (REG_BASE + 0x488)
|
||||
#define REG_SOUND8RPT_PT (REG_BASE + 0x48a)
|
||||
#define REG_SOUND8RPT_LEN (REG_BASE + 0x48c)
|
||||
#define REG_SOUND9CNT (REG_BASE + 0x490) // サウンド9コントロール
|
||||
#define REG_SOUND9CNT_L (REG_BASE + 0x490)
|
||||
#define REG_SOUND9CNT_H (REG_BASE + 0x492)
|
||||
#define REG_SOUND9SAD (REG_BASE + 0x494)
|
||||
#define REG_SOUND9TMR (REG_BASE + 0x498)
|
||||
#define REG_SOUND9RPT_PT (REG_BASE + 0x49a)
|
||||
#define REG_SOUND9RPT_LEN (REG_BASE + 0x49c)
|
||||
#define REG_SOUND10CNT (REG_BASE + 0x4a0) // サウンド10コントロール
|
||||
#define REG_SOUND10CNT_L (REG_BASE + 0x4a0)
|
||||
#define REG_SOUND10CNT_H (REG_BASE + 0x4a2)
|
||||
#define REG_SOUND10SAD (REG_BASE + 0x4a4)
|
||||
#define REG_SOUND10TMR (REG_BASE + 0x4a8)
|
||||
#define REG_SOUND10RPT_PT (REG_BASE + 0x4aa)
|
||||
#define REG_SOUND10RPT_LEN (REG_BASE + 0x4ac)
|
||||
#define REG_SOUND11CNT (REG_BASE + 0x4b0) // サウンド11コントロール
|
||||
#define REG_SOUND11CNT_L (REG_BASE + 0x4b0)
|
||||
#define REG_SOUND11CNT_H (REG_BASE + 0x4b2)
|
||||
#define REG_SOUND11SAD (REG_BASE + 0x4b4)
|
||||
#define REG_SOUND11TMR (REG_BASE + 0x4b8)
|
||||
#define REG_SOUND11RPT_PT (REG_BASE + 0x4ba)
|
||||
#define REG_SOUND11RPT_LEN (REG_BASE + 0x4bc)
|
||||
#define REG_SOUND12CNT (REG_BASE + 0x4c0) // サウンド12コントロール
|
||||
#define REG_SOUND12CNT_L (REG_BASE + 0x4c0)
|
||||
#define REG_SOUND12CNT_H (REG_BASE + 0x4c2)
|
||||
#define REG_SOUND12SAD (REG_BASE + 0x4c4)
|
||||
#define REG_SOUND12TMR (REG_BASE + 0x4c8)
|
||||
#define REG_SOUND12RPT_PT (REG_BASE + 0x4ca)
|
||||
#define REG_SOUND12RPT_LEN (REG_BASE + 0x4cc)
|
||||
#define REG_SOUND13CNT (REG_BASE + 0x4d0) // サウンド13コントロール
|
||||
#define REG_SOUND13CNT_L (REG_BASE + 0x4d0)
|
||||
#define REG_SOUND13CNT_H (REG_BASE + 0x4d2)
|
||||
#define REG_SOUND13SAD (REG_BASE + 0x4d4)
|
||||
#define REG_SOUND13TMR (REG_BASE + 0x4d8)
|
||||
#define REG_SOUND13RPT_PT (REG_BASE + 0x4da)
|
||||
#define REG_SOUND13RPT_LEN (REG_BASE + 0x4dc)
|
||||
#define REG_SOUND14CNT (REG_BASE + 0x4e0) // サウンド14コントロール
|
||||
#define REG_SOUND14CNT_L (REG_BASE + 0x4e0)
|
||||
#define REG_SOUND14CNT_H (REG_BASE + 0x4e2)
|
||||
#define REG_SOUND14SAD (REG_BASE + 0x4e4)
|
||||
#define REG_SOUND14TMR (REG_BASE + 0x4e8)
|
||||
#define REG_SOUND14RPT_PT (REG_BASE + 0x4ea)
|
||||
#define REG_SOUND14RPT_LEN (REG_BASE + 0x4ec)
|
||||
#define REG_SOUND15CNT (REG_BASE + 0x4f0) // サウンド15コントロール
|
||||
#define REG_SOUND15CNT_L (REG_BASE + 0x4f0)
|
||||
#define REG_SOUND15CNT_H (REG_BASE + 0x4f2)
|
||||
#define REG_SOUND15SAD (REG_BASE + 0x4f4)
|
||||
#define REG_SOUND15TMR (REG_BASE + 0x4f8)
|
||||
#define REG_SOUND15RPT_PT (REG_BASE + 0x4fa)
|
||||
#define REG_SOUND15RPT_LEN (REG_BASE + 0x4fc)
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// レジスタ・オフセット
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define OFFSET_REG_IME 0x208 // 割り込みマスタイネーブル
|
||||
#define OFFSET_REG_IE 0x210 // 割り込み許可
|
||||
#define OFFSET_REG_IF 0x214 // 割り込み要求
|
||||
|
||||
#define OFFSET_REG_MAINPINTF 0x180 // メインプロセッサインタフェース
|
||||
#define OFFSET_REG_MAINP_FIFO_CNT 0x184 // CPU間FIFOコントロール
|
||||
#define OFFSET_REG_SEND_FIFO 0x188 // 送信FIFO
|
||||
#define OFFSET_REG_RECV_FIFO 0x100000 // 受信FIFO
|
||||
|
||||
|
||||
#define OFFSET_REG_POWCNT 0x304 // パワーコントロール
|
||||
|
||||
#define OFFSET_REG_EXMEMCNT 0x204 // 外部メモリコントロール
|
||||
|
||||
#define OFFSET_REG_VRAMSTAT 0x240 // VRAMステータス
|
||||
#define OFFSET_REG_WRAMSTAT 0x241 // 内部ワークRAMステータス
|
||||
#define OFFSET_REG_WVRAMSTAT 0x240 // VRAM C・D + 内部ワークRAM ステータス
|
||||
|
||||
|
||||
#define OFFSET_REG_DISPSTAT 0x4 // ステータス
|
||||
#define OFFSET_REG_VCOUNT 0x6 // Vカウンタ
|
||||
|
||||
|
||||
#define OFFSET_REG_SPICNT 0x1c0 // SPIコントロール
|
||||
#define OFFSET_REG_SPIDATA 0x1c2 // SPIデータ
|
||||
|
||||
#define OFFSET_REG_RCNT 0x134 // 汎用入出力コントロール
|
||||
|
||||
#define OFFSET_REG_KEYINPUT 0x130 // キー入力
|
||||
#define OFFSET_REG_KEYCNT 0x132 // キーコントロール
|
||||
|
||||
|
||||
#define OFFSET_REG_DMA0 0xb0 // DMA0
|
||||
#define OFFSET_REG_DMA0SAD 0xb0
|
||||
#define OFFSET_REG_DMA0DAD 0xb4
|
||||
#define OFFSET_REG_DMA0CNT 0xb8
|
||||
#define OFFSET_REG_DMA0CNT_L 0xb8
|
||||
#define OFFSET_REG_DMA0CNT_H 0xba
|
||||
#define OFFSET_REG_DMA1 0xbc // DMA1
|
||||
#define OFFSET_REG_DMA1SAD 0xbc
|
||||
#define OFFSET_REG_DMA1DAD 0xc0
|
||||
#define OFFSET_REG_DMA1CNT 0xc4
|
||||
#define OFFSET_REG_DMA1CNT_L 0xc4
|
||||
#define OFFSET_REG_DMA1CNT_H 0xc6
|
||||
#define OFFSET_REG_DMA2 0xc8 // DMA2
|
||||
#define OFFSET_REG_DMA2SAD 0xc8
|
||||
#define OFFSET_REG_DMA2DAD 0xcc
|
||||
#define OFFSET_REG_DMA2CNT 0xd0
|
||||
#define OFFSET_REG_DMA2CNT_L 0xd0
|
||||
#define OFFSET_REG_DMA2CNT_H 0xd2
|
||||
#define OFFSET_REG_DMA3 0xd4 // DMA3
|
||||
#define OFFSET_REG_DMA3SAD 0xd4
|
||||
#define OFFSET_REG_DMA3DAD 0xd8
|
||||
#define OFFSET_REG_DMA3CNT 0xdc
|
||||
#define OFFSET_REG_DMA3CNT_L 0xdc
|
||||
#define OFFSET_REG_DMA3CNT_H 0xde
|
||||
|
||||
|
||||
#define OFFSET_REG_TM0CNT 0x100 // タイマー0
|
||||
#define OFFSET_REG_TM0CNT_L 0x100
|
||||
#define OFFSET_REG_TM0CNT_H 0x102
|
||||
#define OFFSET_REG_TM1CNT 0x104 // タイマー1
|
||||
#define OFFSET_REG_TM1CNT_L 0x104
|
||||
#define OFFSET_REG_TM1CNT_H 0x106
|
||||
#define OFFSET_REG_TM2CNT 0x108 // タイマー2
|
||||
#define OFFSET_REG_TM2CNT_L 0x108
|
||||
#define OFFSET_REG_TM2CNT_H 0x10a
|
||||
#define OFFSET_REG_TM3CNT 0x10c // タイマー3
|
||||
#define OFFSET_REG_TM3CNT_L 0x10c
|
||||
#define OFFSET_REG_TM3CNT_H 0x10e
|
||||
|
||||
|
||||
#define OFFSET_REG_SOUNDCNT 0x500 // サウンド・マスタコントロール
|
||||
|
||||
#define OFFSET_REG_SOUNDBIAS 0x504 // サウンドBIAS
|
||||
|
||||
#define OFFSET_REG_SNDCAPCNT 0x508 // サウンドキャプチャコントロール
|
||||
#define OFFSET_REG_SNDCAP0DAD 0x510 // サウンドキャプチャ0パラメータ
|
||||
#define OFFSET_REG_SNDCAP0LEN 0x514
|
||||
#define OFFSET_REG_SNDCAP1DAD 0x518 // サウンドキャプチャ1パラメータ
|
||||
#define OFFSET_REG_SNDCAP1LEN 0x51c
|
||||
|
||||
#define OFFSET_REG_SOUND0CNT 0x400 // サウンド0コントロール
|
||||
#define OFFSET_REG_SOUND0CNT_L 0x400
|
||||
#define OFFSET_REG_SOUND0CNT_H 0x402
|
||||
#define OFFSET_REG_SOUND0SAD 0x404
|
||||
#define OFFSET_REG_SOUND0TMR 0x408
|
||||
#define OFFSET_REG_SOUND0REPLEN 0x40c
|
||||
#define OFFSET_REG_SOUND1CNT 0x410 // サウンド1コントロール
|
||||
#define OFFSET_REG_SOUND1CNT_L 0x410
|
||||
#define OFFSET_REG_SOUND1CNT_H 0x412
|
||||
#define OFFSET_REG_SOUND1SAD 0x414
|
||||
#define OFFSET_REG_SOUND1TMR 0x418
|
||||
#define OFFSET_REG_SOUND1REPLEN 0x41c
|
||||
#define OFFSET_REG_SOUND2CNT 0x420 // サウンド2コントロール
|
||||
#define OFFSET_REG_SOUND2CNT_L 0x420
|
||||
#define OFFSET_REG_SOUND2CNT_H 0x422
|
||||
#define OFFSET_REG_SOUND2SAD 0x424
|
||||
#define OFFSET_REG_SOUND2TMR 0x428
|
||||
#define OFFSET_REG_SOUND2REPLEN 0x42c
|
||||
#define OFFSET_REG_SOUND3CNT 0x430 // サウンド3コントロール
|
||||
#define OFFSET_REG_SOUND3CNT_L 0x430
|
||||
#define OFFSET_REG_SOUND3CNT_H 0x432
|
||||
#define OFFSET_REG_SOUND3SAD 0x434
|
||||
#define OFFSET_REG_SOUND3TMR 0x438
|
||||
#define OFFSET_REG_SOUND3REPLEN 0x43c
|
||||
#define OFFSET_REG_SOUND4CNT 0x440 // サウンド4コントロール
|
||||
#define OFFSET_REG_SOUND4CNT_L 0x440
|
||||
#define OFFSET_REG_SOUND4CNT_H 0x442
|
||||
#define OFFSET_REG_SOUND4SAD 0x444
|
||||
#define OFFSET_REG_SOUND4TMR 0x448
|
||||
#define OFFSET_REG_SOUND4REPLEN 0x44c
|
||||
#define OFFSET_REG_SOUND5CNT 0x450 // サウンド5コントロール
|
||||
#define OFFSET_REG_SOUND5CNT_L 0x450
|
||||
#define OFFSET_REG_SOUND5CNT_H 0x452
|
||||
#define OFFSET_REG_SOUND5SAD 0x454
|
||||
#define OFFSET_REG_SOUND5TMR 0x458
|
||||
#define OFFSET_REG_SOUND5REPLEN 0x45c
|
||||
#define OFFSET_REG_SOUND6CNT 0x460 // サウンド6コントロール
|
||||
#define OFFSET_REG_SOUND6CNT_L 0x460
|
||||
#define OFFSET_REG_SOUND6CNT_H 0x462
|
||||
#define OFFSET_REG_SOUND6SAD 0x464
|
||||
#define OFFSET_REG_SOUND6TMR 0x468
|
||||
#define OFFSET_REG_SOUND6REPLEN 0x46c
|
||||
#define OFFSET_REG_SOUND7CNT 0x470 // サウンド7コントロール
|
||||
#define OFFSET_REG_SOUND7CNT_L 0x470
|
||||
#define OFFSET_REG_SOUND7CNT_H 0x472
|
||||
#define OFFSET_REG_SOUND7SAD 0x474
|
||||
#define OFFSET_REG_SOUND7TMR 0x478
|
||||
#define OFFSET_REG_SOUND7REPLEN 0x47c
|
||||
#define OFFSET_REG_SOUND8CNT 0x480 // サウンド8コントロール
|
||||
#define OFFSET_REG_SOUND8CNT_L 0x480
|
||||
#define OFFSET_REG_SOUND8CNT_H 0x482
|
||||
#define OFFSET_REG_SOUND8SAD 0x484
|
||||
#define OFFSET_REG_SOUND8TMR 0x488
|
||||
#define OFFSET_REG_SOUND8REPLEN 0x48c
|
||||
#define OFFSET_REG_SOUND9CNT 0x490 // サウンド9コントロール
|
||||
#define OFFSET_REG_SOUND9CNT_L 0x490
|
||||
#define OFFSET_REG_SOUND9CNT_H 0x492
|
||||
#define OFFSET_REG_SOUND9SAD 0x494
|
||||
#define OFFSET_REG_SOUND9TMR 0x498
|
||||
#define OFFSET_REG_SOUND9REPLEN 0x49c
|
||||
#define OFFSET_REG_SOUND10CNT 0x4a0 // サウンド10コントロール
|
||||
#define OFFSET_REG_SOUND10CNT_L 0x4a0
|
||||
#define OFFSET_REG_SOUND10CNT_H 0x4a2
|
||||
#define OFFSET_REG_SOUND10SAD 0x4a4
|
||||
#define OFFSET_REG_SOUND10TMR 0x4a8
|
||||
#define OFFSET_REG_SOUND10REPLEN 0x4ac
|
||||
#define OFFSET_REG_SOUND11CNT 0x4b0 // サウンド11コントロール
|
||||
#define OFFSET_REG_SOUND11CNT_L 0x4b0
|
||||
#define OFFSET_REG_SOUND11CNT_H 0x4b2
|
||||
#define OFFSET_REG_SOUND11SAD 0x4b4
|
||||
#define OFFSET_REG_SOUND11TMR 0x4b8
|
||||
#define OFFSET_REG_SOUND11REPLEN 0x4bc
|
||||
#define OFFSET_REG_SOUND12CNT 0x4c0 // サウンド12コントロール
|
||||
#define OFFSET_REG_SOUND12CNT_L 0x4c0
|
||||
#define OFFSET_REG_SOUND12CNT_H 0x4c2
|
||||
#define OFFSET_REG_SOUND12SAD 0x4c4
|
||||
#define OFFSET_REG_SOUND12TMR 0x4c8
|
||||
#define OFFSET_REG_SOUND12REPLEN 0x4cc
|
||||
#define OFFSET_REG_SOUND13CNT 0x4d0 // サウンド13コントロール
|
||||
#define OFFSET_REG_SOUND13CNT_L 0x4d0
|
||||
#define OFFSET_REG_SOUND13CNT_H 0x4d2
|
||||
#define OFFSET_REG_SOUND13SAD 0x4d4
|
||||
#define OFFSET_REG_SOUND13TMR 0x4d8
|
||||
#define OFFSET_REG_SOUND13REPLEN 0x4dc
|
||||
#define OFFSET_REG_SOUND14CNT 0x4e0 // サウンド14コントロール
|
||||
#define OFFSET_REG_SOUND14CNT_L 0x4e0
|
||||
#define OFFSET_REG_SOUND14CNT_H 0x4e2
|
||||
#define OFFSET_REG_SOUND14SAD 0x4e4
|
||||
#define OFFSET_REG_SOUND14TMR 0x4e8
|
||||
#define OFFSET_REG_SOUND14REPLEN 0x4ec
|
||||
#define OFFSET_REG_SOUND15CNT 0x4f0 // サウンド15コントロール
|
||||
#define OFFSET_REG_SOUND15CNT_L 0x4f0
|
||||
#define OFFSET_REG_SOUND15CNT_H 0x4f2
|
||||
#define OFFSET_REG_SOUND15SAD 0x4f4
|
||||
#define OFFSET_REG_SOUND15TMR 0x4f8
|
||||
#define OFFSET_REG_SOUND15REPLEN 0x4fc
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_SUBP_MEMORY_MAP_H
|
||||
529
trunk/IrisSubp/include/IrisSubpMemoryMapArm.s
Normal file
529
trunk/IrisSubp/include/IrisSubpMemoryMapArm.s
Normal file
@ -0,0 +1,529 @@
|
||||
;=======================================================================
|
||||
; IrisSubpMemoryMapArm.s
|
||||
; IRISサブプロセッサ メモリマップ定数(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2002-2004 NINTENDO Co.,Ltd.
|
||||
;=======================================================================
|
||||
IF :DEF: _IRIS_SUBP_MEMORY_MAP_H
|
||||
ELSE
|
||||
_IRIS_SUBP_MEMORY_MAP_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisSubpTargetArm.s
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; メモリ・マップ
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
SHARE_WORK * 0x027ff000 ; CPU間共有ワーク領域
|
||||
SHARE_WORK_END * 0x02800000
|
||||
|
||||
IF :DEF: NDEBUG
|
||||
SUBP_PRV * 0x02380000 ; サブプロセッサ専有領域(リリースバージョン)
|
||||
ELSE
|
||||
IF :DEF: MMEM_4M
|
||||
SUBP_PRV * 0x02300000 ; (デバッグバージョン<メインメモリ4M本体>)
|
||||
ELSE
|
||||
SUBP_PRV * 0x02600000 ; (デバッグバージョン<メインメモリ8M本体>)
|
||||
ENDIF
|
||||
ENDIF
|
||||
SUBP_PRV_END * SHARED_WORK
|
||||
|
||||
|
||||
MAIN_MEM * 0x02000000 ; メインメモリ
|
||||
MAIN_MEM_END * (MAIN_MEM + 0x400000)
|
||||
MAIN_MEM_EX_END * (MAIN_MEM + 0x800000) ;(拡張時の最終アドレス)
|
||||
|
||||
MAIN_MEM_CMD_AREA * (MAIN_MEM_EX_END - 0x2) ; メインメモリコマンド発行エリア(使用禁止エリア)
|
||||
|
||||
SHARED_LOCK_BUF * (MAIN_MEM_EX_END - 0x40) ; 共有リソース・ロックバッファ
|
||||
SHARED_LOCK_BUF_END * (MAIN_MEM_EX_END - 0x10)
|
||||
|
||||
INIT_LOCK_BUF * (MAIN_MEM_EX_END - 0x10) ; 初期化ロックバッファ
|
||||
CARTRIDGE_LOCK_BUF * (MAIN_MEM_EX_END - 0x18) ; カートリッジ・ロックバッファ
|
||||
CARD_LOCK_BUF * (MAIN_MEM_EX_END - 0x20) ; カード・ロックバッファ
|
||||
WRAM_BLOCK1_LOCK_BUF * (MAIN_MEM_EX_END - 0x28) ; CPU内部ワークRAM・ブロック1・ロックバッファ
|
||||
WRAM_BLOCK0_LOCK_BUF * (MAIN_MEM_EX_END - 0x30) ; ブロック0・ロックバッファ
|
||||
VRAM_D_LOCK_BUF * (MAIN_MEM_EX_END - 0x38) ; VRAM-D・ロックバッファ
|
||||
VRAM_C_LOCK_BUF * (MAIN_MEM_EX_END - 0x40) ; C・ロックバッファ
|
||||
|
||||
TO_MAINP_IF_BUF * (MAIN_MEM_EX_END - 0x50) ; サブ→メインプロセッサ割り込み要求フラグ(2Byte×8)
|
||||
WM_TO_MAINP_IF_BUF * (MAIN_MEM_EX_END - 0x50) ; ワイヤレスマネージャ予約
|
||||
FROM_MAINP_IF_BUF * (MAIN_MEM_EX_END - 0x60) ; メイン→サブプロセッサ割り込み要求フラグ(2Byte×8)
|
||||
WM_FROM_MAINP_IF_BUF * (MAIN_MEM_EX_END - 0x60) ; ワイヤレスマネージャ予約
|
||||
|
||||
ROM_HEADER_BUF * (MAIN_MEM_EX_END - 0x200); ROM内登録エリアデータ・バッファ
|
||||
|
||||
|
||||
IF :DEF: IRIS_TS
|
||||
PRV_WRAM_DF_SIZE * 0x8000 ; CPU内部専有ワークRAM TS-TEG差分サイズ
|
||||
ELSE
|
||||
PRV_WRAM_DF_SIZE * 0
|
||||
ENDIF
|
||||
|
||||
CPU_WRAM * 0x037f8000 ; CPU内部ワークRAM 3ブロック構成時(デフォルト)
|
||||
CPU_WRAM_END * (CPU_WRAM + PRV_WRAM_DF_SIZE + 0x10000)
|
||||
CPU_WRAM_2B * 0x037fc000 ; 2ブロック構成時
|
||||
CPU_WRAM_2B_END * (CPU_WRAM_2B + PRV_WRAM_DF_SIZE + 0xc000)
|
||||
CPU_WRAM_BLOCK0 * 0x037f8000 ; ブロック0
|
||||
CPU_WRAM_BLOCK0_END * (CPU_WRAM_BLOCK0 + 0x4000)
|
||||
CPU_WRAM_BLOCK1 * 0x037fc000 ; ブロック1
|
||||
CPU_WRAM_BLOCK1_END * (CPU_WRAM_BLOCK1 + 0x4000)
|
||||
PRV_WRAM * 0x03800000 ; CPU内部専有ワークRAM
|
||||
PRV_WRAM_END * (PRV_WRAM + PRV_WRAM_DF_SIZE + 0x8000)
|
||||
CPU_XWRAM * 0x06000000 ; CPU内部拡張ワークRAM
|
||||
CPU_XWRAM_END * (CPU_XWRAM +0x40000)
|
||||
|
||||
INTR_VECTOR_BUF * (CPU_WRAM_END - 0x4); 割り込み分岐アドレス
|
||||
INTR_CHECK_BUF * (CPU_WRAM_END - 0x8); 割り込みチェック
|
||||
|
||||
SEND_FIFO_LOCK_BUF * (CPU_WRAM_END - 0x10); CPU間送信FIFO・ロックバッファ
|
||||
TIMER3_LOCK_BUF * (CPU_WRAM_END - 0x12); タイマー3・ロックバッファ
|
||||
TIMER2_LOCK_BUF * (CPU_WRAM_END - 0x14); タイマー2
|
||||
TIMER1_LOCK_BUF * (CPU_WRAM_END - 0x16); タイマー1
|
||||
TIMER0_LOCK_BUF * (CPU_WRAM_END - 0x18); タイマー0
|
||||
DMA3_LOCK_BUF * (CPU_WRAM_END - 0x1a); DMA3・ロックバッファ
|
||||
DMA2_LOCK_BUF * (CPU_WRAM_END - 0x1c); DMA2
|
||||
DMA1_LOCK_BUF * (CPU_WRAM_END - 0x1e); DMA1
|
||||
DMA0_LOCK_BUF * (CPU_WRAM_END - 0x20); DMA0
|
||||
|
||||
|
||||
REG_BASE * 0x04000000 ; レジスタ群
|
||||
WIRELESS_INTF * 0x04800000 ; 無線通信インタフェース
|
||||
WIRELESS_INTF0 * 0x04800000 ; インタフェース0
|
||||
WIRELESS_INTF1 * 0x04808000 ; インタフェース1
|
||||
WIRELESS_INTF0_END * (WIRELESS_INTF0 + 0x8000)
|
||||
WIRELESS_INTF1_END * (WIRELESS_INTF1 + 0x8000)
|
||||
WIRELESS_INTF_END * (WIRELESS_INTF + 0x10000)
|
||||
|
||||
CARTRIDGE * 0x08000000 ; カートリッジ
|
||||
CTRDG_AD16_BANK0 * 0x08000000 ; カートリッジ AD16バス バンク0
|
||||
CTRDG_AD16_BANK0_END * 0x0a000000
|
||||
CTRDG_AD16_BANK1 * 0x0a000000 ; バンク1
|
||||
CTRDG_AD16_BANK1_END * 0x0c000000
|
||||
CTRDG_AD16_BANK2 * 0x0c000000 ; バンク2
|
||||
CTRDG_AD16_BANK2_END * 0x0e000000
|
||||
CTRDG_DT8 * 0x0e000000 ; カートリッジ 8bitデータバス
|
||||
CTRDG_DT8_END * 0x10000000
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; メモリ・サイズ
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
SHARED_WORK_SIZE * (SHARED_WORK_END - SHARED_WORK) ; CPU間共有ワーク領域(4KB以上、2のべき乗サイズ)
|
||||
SUBP_PRV_SIZE * (SUBP_PRV_END - SUBP_PRV) ; サブプロセッサ専有領域(32KB以上、2のべき乗サイズ)
|
||||
|
||||
SHARED_LOCK_BUF_SIZE * (SHARED_LOCK_BUF_END - SHARED_LOCK_BUF) ; 共有リソース・ロックバッファ
|
||||
|
||||
|
||||
MAIN_MEM_SIZE * 0x400000 ; メインメモリ
|
||||
MAIN_MEM_EX_SIZE * 0x800000 ; (拡張時)
|
||||
|
||||
CPU_WRAM_SIZE * (0x10000 + PRV_WRAM_DF_SIZE) ; CPU内部ワークRAM 3ブロック構成時(デフォルト)
|
||||
CPU_WRAM_2B_SIZE * (0xc000 + PRV_WRAM_DF_SIZE) ; 2ブロック構成時
|
||||
CPU_WRAM_BLOCK0_SIZE * 0x4000 ; ブロック0
|
||||
CPU_WRAM_BLOCK1_SIZE * 0x4000 ; ブロック1
|
||||
PRV_WRAM_SIZE * (0x8000 + PRV_WRAM_DF_SIZE) ; CPU内部専有ワークRAM
|
||||
CPU_XWRAM_SIZE * 0x40000 ; CPU内部拡張ワークRAM
|
||||
|
||||
MROM_PAGE_SIZE * 512 ; マスクROM・ページ
|
||||
|
||||
CARTRIDGE_SIZE * 0x02000000 ; カートリッジ
|
||||
CTRDG_AD16_BANK_SIZE * 0x02000000 ; カートリッジ AD16バス バンク
|
||||
CTRDG_AD16_BANK0_SIZE * 0x02000000 ; バンク0
|
||||
CTRDG_AD16_BANK1_SIZE * 0x02000000 ; バンク1
|
||||
CTRDG_AD16_BANK2_SIZE * 0x02000000 ; バンク2
|
||||
CTRDG_DT8_SIZE * 0x02000000 ; カートリッジ 8bitデータバス
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; レジスタ・アドレス
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
REG_IME * (REG_BASE + 0x208) ; 割り込みマスタイネーブル
|
||||
REG_IE * (REG_BASE + 0x210) ; 割り込み許可
|
||||
REG_IF * (REG_BASE + 0x214) ; 割り込み要求
|
||||
|
||||
REG_MAINPINTF * (REG_BASE + 0x180) ; メインプロセッサインタフェース
|
||||
REG_MAINP_FIFO_CNT * (REG_BASE + 0x184) ; CPU間FIFOコントロール
|
||||
REG_SEND_FIFO * (REG_BASE + 0x188) ; 送信FIFO
|
||||
REG_RECV_FIFO * (REG_BASE + 0x100000) ; 受信FIFO
|
||||
|
||||
|
||||
REG_POWCNT * (REG_BASE + 0x304) ; パワーコントロール
|
||||
|
||||
REG_EXMEMCNT * (REG_BASE + 0x204) ; 外部メモリコントロール
|
||||
|
||||
REG_VRAMSTAT * (REG_BASE + 0x240) ; VRAMステータス
|
||||
REG_WRAMSTAT * (REG_BASE + 0x241) ; 内部ワークRAMステータス
|
||||
REG_WVRAMSTAT * (REG_BASE + 0x240) ; VRAM C・D + 内部ワークRAM ステータス
|
||||
|
||||
|
||||
REG_DISPSTAT * (REG_BASE + 0x4) ; 表示ステータス
|
||||
REG_VCOUNT * (REG_BASE + 0x6) ; Vカウンタ
|
||||
|
||||
|
||||
REG_SPICNT * (REG_BASE + 0x1c0) ; SPIコントロール
|
||||
REG_SPIDATA * (REG_BASE + 0x1c2) ; SPIデータ
|
||||
|
||||
REG_RCNT * (REG_BASE + 0x134) ; 汎用入出力コントロール
|
||||
|
||||
REG_KEYINPUT * (REG_BASE + 0x130) ; キー入力
|
||||
REG_KEYCNT * (REG_BASE + 0x132) ; キーコントロール
|
||||
|
||||
|
||||
REG_DMA0 * (REG_BASE + 0xb0) ; DMA0
|
||||
REG_DMA0SAD * (REG_BASE + 0xb0)
|
||||
REG_DMA0DAD * (REG_BASE + 0xb4)
|
||||
REG_DMA0CNT * (REG_BASE + 0xb8)
|
||||
REG_DMA0CNT_L * (REG_BASE + 0xb8)
|
||||
REG_DMA0CNT_H * (REG_BASE + 0xba)
|
||||
REG_DMA1 * (REG_BASE + 0xbc) ; DMA1
|
||||
REG_DMA1SAD * (REG_BASE + 0xbc)
|
||||
REG_DMA1DAD * (REG_BASE + 0xc0)
|
||||
REG_DMA1CNT * (REG_BASE + 0xc4)
|
||||
REG_DMA1CNT_L * (REG_BASE + 0xc4)
|
||||
REG_DMA1CNT_H * (REG_BASE + 0xc6)
|
||||
REG_DMA2 * (REG_BASE + 0xc8) ; DMA2
|
||||
REG_DMA2SAD * (REG_BASE + 0xc8)
|
||||
REG_DMA2DAD * (REG_BASE + 0xcc)
|
||||
REG_DMA2CNT * (REG_BASE + 0xd0)
|
||||
REG_DMA2CNT_L * (REG_BASE + 0xd0)
|
||||
REG_DMA2CNT_H * (REG_BASE + 0xd2)
|
||||
REG_DMA3 * (REG_BASE + 0xd4) ; DMA3
|
||||
REG_DMA3SAD * (REG_BASE + 0xd4)
|
||||
REG_DMA3DAD * (REG_BASE + 0xd8)
|
||||
REG_DMA3CNT * (REG_BASE + 0xdc)
|
||||
REG_DMA3CNT_L * (REG_BASE + 0xdc)
|
||||
REG_DMA3CNT_H * (REG_BASE + 0xde)
|
||||
|
||||
|
||||
REG_TM0CNT * (REG_BASE + 0x100) ; タイマー0
|
||||
REG_TM0CNT_L * (REG_BASE + 0x100)
|
||||
REG_TM0CNT_H * (REG_BASE + 0x102)
|
||||
REG_TM1CNT * (REG_BASE + 0x104) ; タイマー1
|
||||
REG_TM1CNT_L * (REG_BASE + 0x104)
|
||||
REG_TM1CNT_H * (REG_BASE + 0x106)
|
||||
REG_TM2CNT * (REG_BASE + 0x108) ; タイマー2
|
||||
REG_TM2CNT_L * (REG_BASE + 0x108)
|
||||
REG_TM2CNT_H * (REG_BASE + 0x10a)
|
||||
REG_TM3CNT * (REG_BASE + 0x10c) ; タイマー3
|
||||
REG_TM3CNT_L * (REG_BASE + 0x10c)
|
||||
REG_TM3CNT_H * (REG_BASE + 0x10e)
|
||||
|
||||
|
||||
REG_SOUNDCNT * (REG_BASE + 0x500) ; サウンド・マスタコントロール
|
||||
|
||||
REG_SOUNDBIAS * (REG_BASE + 0x504) ; サウンドBIAS
|
||||
|
||||
REG_SNDCAPCNT * (REG_BASE + 0x508) ; サウンドキャプチャコントロール
|
||||
REG_SNDCAP0DAD * (REG_BASE + 0x510) ; サウンドキャプチャ0パラメータ
|
||||
REG_SNDCAP0LEN * (REG_BASE + 0x514)
|
||||
REG_SNDCAP1DAD * (REG_BASE + 0x518) ; サウンドキャプチャ1パラメータ
|
||||
REG_SNDCAP1LEN * (REG_BASE + 0x51c)
|
||||
|
||||
REG_SOUND0CNT * (REG_BASE + 0x400) ; サウンド0コントロール
|
||||
REG_SOUND0CNT_L * (REG_BASE + 0x400)
|
||||
REG_SOUND0CNT_H * (REG_BASE + 0x402)
|
||||
REG_SOUND0SAD * (REG_BASE + 0x404)
|
||||
REG_SOUND0TMR * (REG_BASE + 0x408)
|
||||
REG_SOUND0RPT_PT * (REG_BASE + 0x40a)
|
||||
REG_SOUND0RPT_LEN * (REG_BASE + 0x40c)
|
||||
REG_SOUND1CNT * (REG_BASE + 0x410) ; サウンド1コントロール
|
||||
REG_SOUND1CNT_L * (REG_BASE + 0x410)
|
||||
REG_SOUND1CNT_H * (REG_BASE + 0x412)
|
||||
REG_SOUND1SAD * (REG_BASE + 0x414)
|
||||
REG_SOUND1TMR * (REG_BASE + 0x418)
|
||||
REG_SOUND1RPT_PT * (REG_BASE + 0x41a)
|
||||
REG_SOUND1RPT_LEN * (REG_BASE + 0x41c)
|
||||
REG_SOUND2CNT * (REG_BASE + 0x420) ; サウンド2コントロール
|
||||
REG_SOUND2CNT_L * (REG_BASE + 0x420)
|
||||
REG_SOUND2CNT_H * (REG_BASE + 0x422)
|
||||
REG_SOUND2SAD * (REG_BASE + 0x424)
|
||||
REG_SOUND2TMR * (REG_BASE + 0x428)
|
||||
REG_SOUND2RPT_PT * (REG_BASE + 0x42a)
|
||||
REG_SOUND2RPT_LEN * (REG_BASE + 0x42c)
|
||||
REG_SOUND3CNT * (REG_BASE + 0x430) ; サウンド3コントロール
|
||||
REG_SOUND3CNT_L * (REG_BASE + 0x430)
|
||||
REG_SOUND3CNT_H * (REG_BASE + 0x432)
|
||||
REG_SOUND3SAD * (REG_BASE + 0x434)
|
||||
REG_SOUND3TMR * (REG_BASE + 0x438)
|
||||
REG_SOUND3RPT_PT * (REG_BASE + 0x43a)
|
||||
REG_SOUND3RPT_LEN * (REG_BASE + 0x43c)
|
||||
REG_SOUND4CNT * (REG_BASE + 0x440) ; サウンド4コントロール
|
||||
REG_SOUND4CNT_L * (REG_BASE + 0x440)
|
||||
REG_SOUND4CNT_H * (REG_BASE + 0x442)
|
||||
REG_SOUND4SAD * (REG_BASE + 0x444)
|
||||
REG_SOUND4TMR * (REG_BASE + 0x448)
|
||||
REG_SOUND4RPT_PT * (REG_BASE + 0x44a)
|
||||
REG_SOUND4RPT_LEN * (REG_BASE + 0x44c)
|
||||
REG_SOUND5CNT * (REG_BASE + 0x450) ; サウンド5コントロール
|
||||
REG_SOUND5CNT_L * (REG_BASE + 0x450)
|
||||
REG_SOUND5CNT_H * (REG_BASE + 0x452)
|
||||
REG_SOUND5SAD * (REG_BASE + 0x454)
|
||||
REG_SOUND5TMR * (REG_BASE + 0x458)
|
||||
REG_SOUND5RPT_PT * (REG_BASE + 0x45a)
|
||||
REG_SOUND5RPT_LEN * (REG_BASE + 0x45c)
|
||||
REG_SOUND6CNT * (REG_BASE + 0x460) ; サウンド6コントロール
|
||||
REG_SOUND6CNT_L * (REG_BASE + 0x460)
|
||||
REG_SOUND6CNT_H * (REG_BASE + 0x462)
|
||||
REG_SOUND6SAD * (REG_BASE + 0x464)
|
||||
REG_SOUND6TMR * (REG_BASE + 0x468)
|
||||
REG_SOUND6RPT_PT * (REG_BASE + 0x46a)
|
||||
REG_SOUND6RPT_LEN * (REG_BASE + 0x46c)
|
||||
REG_SOUND7CNT * (REG_BASE + 0x470) ; サウンド7コントロール
|
||||
REG_SOUND7CNT_L * (REG_BASE + 0x470)
|
||||
REG_SOUND7CNT_H * (REG_BASE + 0x472)
|
||||
REG_SOUND7SAD * (REG_BASE + 0x474)
|
||||
REG_SOUND7TMR * (REG_BASE + 0x478)
|
||||
REG_SOUND7RPT_PT * (REG_BASE + 0x47a)
|
||||
REG_SOUND7RPT_LEN * (REG_BASE + 0x47c)
|
||||
REG_SOUND8CNT * (REG_BASE + 0x480) ; サウンド8コントロール
|
||||
REG_SOUND8CNT_L * (REG_BASE + 0x480)
|
||||
REG_SOUND8CNT_H * (REG_BASE + 0x482)
|
||||
REG_SOUND8SAD * (REG_BASE + 0x484)
|
||||
REG_SOUND8TMR * (REG_BASE + 0x488)
|
||||
REG_SOUND8RPT_PT * (REG_BASE + 0x48a)
|
||||
REG_SOUND8RPT_LEN * (REG_BASE + 0x48c)
|
||||
REG_SOUND9CNT * (REG_BASE + 0x490) ; サウンド9コントロール
|
||||
REG_SOUND9CNT_L * (REG_BASE + 0x490)
|
||||
REG_SOUND9CNT_H * (REG_BASE + 0x492)
|
||||
REG_SOUND9SAD * (REG_BASE + 0x494)
|
||||
REG_SOUND9TMR * (REG_BASE + 0x498)
|
||||
REG_SOUND9RPT_PT * (REG_BASE + 0x49a)
|
||||
REG_SOUND9RPT_LEN * (REG_BASE + 0x49c)
|
||||
REG_SOUND10CNT * (REG_BASE + 0x4a0) ; サウンド10コントロール
|
||||
REG_SOUND10CNT_L * (REG_BASE + 0x4a0)
|
||||
REG_SOUND10CNT_H * (REG_BASE + 0x4a2)
|
||||
REG_SOUND10SAD * (REG_BASE + 0x4a4)
|
||||
REG_SOUND10TMR * (REG_BASE + 0x4a8)
|
||||
REG_SOUND10RPT_PT * (REG_BASE + 0x4aa)
|
||||
REG_SOUND10RPT_LEN * (REG_BASE + 0x4ac)
|
||||
REG_SOUND11CNT * (REG_BASE + 0x4b0) ; サウンド11コントロール
|
||||
REG_SOUND11CNT_L * (REG_BASE + 0x4b0)
|
||||
REG_SOUND11CNT_H * (REG_BASE + 0x4b2)
|
||||
REG_SOUND11SAD * (REG_BASE + 0x4b4)
|
||||
REG_SOUND11TMR * (REG_BASE + 0x4b8)
|
||||
REG_SOUND11RPT_PT * (REG_BASE + 0x4ba)
|
||||
REG_SOUND11RPT_LEN * (REG_BASE + 0x4bc)
|
||||
REG_SOUND12CNT * (REG_BASE + 0x4c0) ; サウンド12コントロール
|
||||
REG_SOUND12CNT_L * (REG_BASE + 0x4c0)
|
||||
REG_SOUND12CNT_H * (REG_BASE + 0x4c2)
|
||||
REG_SOUND12SAD * (REG_BASE + 0x4c4)
|
||||
REG_SOUND12TMR * (REG_BASE + 0x4c8)
|
||||
REG_SOUND12RPT_PT * (REG_BASE + 0x4ca)
|
||||
REG_SOUND12RPT_LEN * (REG_BASE + 0x4cc)
|
||||
REG_SOUND13CNT * (REG_BASE + 0x4d0) ; サウンド13コントロール
|
||||
REG_SOUND13CNT_L * (REG_BASE + 0x4d0)
|
||||
REG_SOUND13CNT_H * (REG_BASE + 0x4d2)
|
||||
REG_SOUND13SAD * (REG_BASE + 0x4d4)
|
||||
REG_SOUND13TMR * (REG_BASE + 0x4d8)
|
||||
REG_SOUND13RPT_PT * (REG_BASE + 0x4da)
|
||||
REG_SOUND13RPT_LEN * (REG_BASE + 0x4dc)
|
||||
REG_SOUND14CNT * (REG_BASE + 0x4e0) ; サウンド14コントロール
|
||||
REG_SOUND14CNT_L * (REG_BASE + 0x4e0)
|
||||
REG_SOUND14CNT_H * (REG_BASE + 0x4e2)
|
||||
REG_SOUND14SAD * (REG_BASE + 0x4e4)
|
||||
REG_SOUND14TMR * (REG_BASE + 0x4e8)
|
||||
REG_SOUND14RPT_PT * (REG_BASE + 0x4ea)
|
||||
REG_SOUND14RPT_LEN * (REG_BASE + 0x4ec)
|
||||
REG_SOUND15CNT * (REG_BASE + 0x4f0) ; サウンド15コントロール
|
||||
REG_SOUND15CNT_L * (REG_BASE + 0x4f0)
|
||||
REG_SOUND15CNT_H * (REG_BASE + 0x4f2)
|
||||
REG_SOUND15SAD * (REG_BASE + 0x4f4)
|
||||
REG_SOUND15TMR * (REG_BASE + 0x4f8)
|
||||
REG_SOUND15RPT_PT * (REG_BASE + 0x4fa)
|
||||
REG_SOUND15RPT_LEN * (REG_BASE + 0x4fc)
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; レジスタ・オフセット
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
OFFSET_REG_IME * 0x208 ; 割り込みマスタイネーブル
|
||||
OFFSET_REG_IE * 0x210 ; 割り込み許可
|
||||
OFFSET_REG_IF * 0x214 ; 割り込み要求
|
||||
|
||||
OFFSET_REG_MAINPINTF * 0x180 ; メインプロセッサインタフェース
|
||||
OFFSET_REG_MAINP_FIFO_CNT * 0x184 ; CPU間FIFOコントロール
|
||||
OFFSET_REG_SEND_FIFO * 0x188 ; 送信FIFO
|
||||
OFFSET_REG_RECV_FIFO * 0x100000 ; 受信FIFO
|
||||
|
||||
|
||||
OFFSET_REG_POWCNT * 0x304 ; パワーコントロール
|
||||
|
||||
OFFSET_REG_EXMEMCNT * 0x204 ; 外部メモリコントロール
|
||||
|
||||
OFFSET_REG_VRAMSTAT * 0x240 ; VRAMステータス
|
||||
OFFSET_REG_WRAMSTAT * 0x241 ; 内部ワークRAMステータス
|
||||
OFFSET_REG_WVRAMSTAT * 0x240 ; VRAM C・D + 内部ワークRAM ステータス
|
||||
|
||||
|
||||
OFFSET_REG_DISPSTAT * 0x4 ; ステータス
|
||||
OFFSET_REG_VCOUNT * 0x6 ; Vカウンタ
|
||||
|
||||
|
||||
OFFSET_REG_SPICNT * 0x1c0 ; SPIコントロール
|
||||
OFFSET_REG_SPIDATA * 0x1c2 ; SPIデータ
|
||||
|
||||
OFFSET_REG_RCNT * 0x134 ; 汎用入出力コントロール
|
||||
|
||||
OFFSET_REG_KEYINPUT * 0x130 ; キー入力
|
||||
OFFSET_REG_KEYCNT * 0x132 ; キーコントロール
|
||||
|
||||
|
||||
OFFSET_REG_DMA0 * 0xb0 ; DMA0
|
||||
OFFSET_REG_DMA0SAD * 0xb0
|
||||
OFFSET_REG_DMA0DAD * 0xb4
|
||||
OFFSET_REG_DMA0CNT * 0xb8
|
||||
OFFSET_REG_DMA0CNT_L * 0xb8
|
||||
OFFSET_REG_DMA0CNT_H * 0xba
|
||||
OFFSET_REG_DMA1 * 0xbc ; DMA1
|
||||
OFFSET_REG_DMA1SAD * 0xbc
|
||||
OFFSET_REG_DMA1DAD * 0xc0
|
||||
OFFSET_REG_DMA1CNT * 0xc4
|
||||
OFFSET_REG_DMA1CNT_L * 0xc4
|
||||
OFFSET_REG_DMA1CNT_H * 0xc6
|
||||
OFFSET_REG_DMA2 * 0xc8 ; DMA2
|
||||
OFFSET_REG_DMA2SAD * 0xc8
|
||||
OFFSET_REG_DMA2DAD * 0xcc
|
||||
OFFSET_REG_DMA2CNT * 0xd0
|
||||
OFFSET_REG_DMA2CNT_L * 0xd0
|
||||
OFFSET_REG_DMA2CNT_H * 0xd2
|
||||
OFFSET_REG_DMA3 * 0xd4 ; DMA3
|
||||
OFFSET_REG_DMA3SAD * 0xd4
|
||||
OFFSET_REG_DMA3DAD * 0xd8
|
||||
OFFSET_REG_DMA3CNT * 0xdc
|
||||
OFFSET_REG_DMA3CNT_L * 0xdc
|
||||
OFFSET_REG_DMA3CNT_H * 0xde
|
||||
|
||||
|
||||
OFFSET_REG_TM0CNT * 0x100 ; タイマー0
|
||||
OFFSET_REG_TM0CNT_L * 0x100
|
||||
OFFSET_REG_TM0CNT_H * 0x102
|
||||
OFFSET_REG_TM1CNT * 0x104 ; タイマー1
|
||||
OFFSET_REG_TM1CNT_L * 0x104
|
||||
OFFSET_REG_TM1CNT_H * 0x106
|
||||
OFFSET_REG_TM2CNT * 0x108 ; タイマー2
|
||||
OFFSET_REG_TM2CNT_L * 0x108
|
||||
OFFSET_REG_TM2CNT_H * 0x10a
|
||||
OFFSET_REG_TM3CNT * 0x10c ; タイマー3
|
||||
OFFSET_REG_TM3CNT_L * 0x10c
|
||||
OFFSET_REG_TM3CNT_H * 0x10e
|
||||
|
||||
|
||||
OFFSET_REG_SOUNDCNT * 0x500 ; サウンドマスタコントロール
|
||||
|
||||
OFFSET_REG_SOUNDBIAS * 0x504 ; サウンドBIAS
|
||||
|
||||
OFFSET_REG_SNDCAPCNT * 0x508 ; サウンドキャプチャコントロール
|
||||
OFFSET_REG_SNDCAP0DAD * 0x510 ; サウンドキャプチャ0パラメータ
|
||||
OFFSET_REG_SNDCAP0LEN * 0x514
|
||||
OFFSET_REG_SNDCAP1DAD * 0x518 ; サウンドキャプチャ1パラメータ
|
||||
OFFSET_REG_SNDCAP1LEN * 0x51c
|
||||
|
||||
OFFSET_REG_SOUND0CNT * 0x400 ; サウンド0コントロール
|
||||
OFFSET_REG_SOUND0CNT_L * 0x400
|
||||
OFFSET_REG_SOUND0CNT_H * 0x402
|
||||
OFFSET_REG_SOUND0SAD * 0x404
|
||||
OFFSET_REG_SOUND0TMR * 0x408
|
||||
OFFSET_REG_SOUND0REPLEN * 0x40c
|
||||
OFFSET_REG_SOUND1CNT * 0x410 ; サウンド1コントロール
|
||||
OFFSET_REG_SOUND1CNT_L * 0x410
|
||||
OFFSET_REG_SOUND1CNT_H * 0x412
|
||||
OFFSET_REG_SOUND1SAD * 0x414
|
||||
OFFSET_REG_SOUND1TMR * 0x418
|
||||
OFFSET_REG_SOUND1REPLEN * 0x41c
|
||||
OFFSET_REG_SOUND2CNT * 0x420 ; サウンド2コントロール
|
||||
OFFSET_REG_SOUND2CNT_L * 0x420
|
||||
OFFSET_REG_SOUND2CNT_H * 0x422
|
||||
OFFSET_REG_SOUND2SAD * 0x424
|
||||
OFFSET_REG_SOUND2TMR * 0x428
|
||||
OFFSET_REG_SOUND2REPLEN * 0x42c
|
||||
OFFSET_REG_SOUND3CNT * 0x430 ; サウンド3コントロール
|
||||
OFFSET_REG_SOUND3CNT_L * 0x430
|
||||
OFFSET_REG_SOUND3CNT_H * 0x432
|
||||
OFFSET_REG_SOUND3SAD * 0x434
|
||||
OFFSET_REG_SOUND3TMR * 0x438
|
||||
OFFSET_REG_SOUND3REPLEN * 0x43c
|
||||
OFFSET_REG_SOUND4CNT * 0x440 ; サウンド4コントロール
|
||||
OFFSET_REG_SOUND4CNT_L * 0x440
|
||||
OFFSET_REG_SOUND4CNT_H * 0x442
|
||||
OFFSET_REG_SOUND4SAD * 0x444
|
||||
OFFSET_REG_SOUND4TMR * 0x448
|
||||
OFFSET_REG_SOUND4REPLEN * 0x44c
|
||||
OFFSET_REG_SOUND5CNT * 0x450 ; サウンド5コントロール
|
||||
OFFSET_REG_SOUND5CNT_L * 0x450
|
||||
OFFSET_REG_SOUND5CNT_H * 0x452
|
||||
OFFSET_REG_SOUND5SAD * 0x454
|
||||
OFFSET_REG_SOUND5TMR * 0x458
|
||||
OFFSET_REG_SOUND5REPLEN * 0x45c
|
||||
OFFSET_REG_SOUND6CNT * 0x460 ; サウンド6コントロール
|
||||
OFFSET_REG_SOUND6CNT_L * 0x460
|
||||
OFFSET_REG_SOUND6CNT_H * 0x462
|
||||
OFFSET_REG_SOUND6SAD * 0x464
|
||||
OFFSET_REG_SOUND6TMR * 0x468
|
||||
OFFSET_REG_SOUND6REPLEN * 0x46c
|
||||
OFFSET_REG_SOUND7CNT * 0x470 ; サウンド7コントロール
|
||||
OFFSET_REG_SOUND7CNT_L * 0x470
|
||||
OFFSET_REG_SOUND7CNT_H * 0x472
|
||||
OFFSET_REG_SOUND7SAD * 0x474
|
||||
OFFSET_REG_SOUND7TMR * 0x478
|
||||
OFFSET_REG_SOUND7REPLEN * 0x47c
|
||||
OFFSET_REG_SOUND8CNT * 0x480 ; サウンド8コントロール
|
||||
OFFSET_REG_SOUND8CNT_L * 0x480
|
||||
OFFSET_REG_SOUND8CNT_H * 0x482
|
||||
OFFSET_REG_SOUND8SAD * 0x484
|
||||
OFFSET_REG_SOUND8TMR * 0x488
|
||||
OFFSET_REG_SOUND8REPLEN * 0x48c
|
||||
OFFSET_REG_SOUND9CNT * 0x490 ; サウンド9コントロール
|
||||
OFFSET_REG_SOUND9CNT_L * 0x490
|
||||
OFFSET_REG_SOUND9CNT_H * 0x492
|
||||
OFFSET_REG_SOUND9SAD * 0x494
|
||||
OFFSET_REG_SOUND9TMR * 0x498
|
||||
OFFSET_REG_SOUND9REPLEN * 0x49c
|
||||
OFFSET_REG_SOUND10CNT * 0x4a0 ; サウンド10コントロール
|
||||
OFFSET_REG_SOUND10CNT_L * 0x4a0
|
||||
OFFSET_REG_SOUND10CNT_H * 0x4a2
|
||||
OFFSET_REG_SOUND10SAD * 0x4a4
|
||||
OFFSET_REG_SOUND10TMR * 0x4a8
|
||||
OFFSET_REG_SOUND10REPLEN * 0x4ac
|
||||
OFFSET_REG_SOUND11CNT * 0x4b0 ; サウンド11コントロール
|
||||
OFFSET_REG_SOUND11CNT_L * 0x4b0
|
||||
OFFSET_REG_SOUND11CNT_H * 0x4b2
|
||||
OFFSET_REG_SOUND11SAD * 0x4b4
|
||||
OFFSET_REG_SOUND11TMR * 0x4b8
|
||||
OFFSET_REG_SOUND11REPLEN * 0x4bc
|
||||
OFFSET_REG_SOUND12CNT * 0x4c0 ; サウンド12コントロール
|
||||
OFFSET_REG_SOUND12CNT_L * 0x4c0
|
||||
OFFSET_REG_SOUND12CNT_H * 0x4c2
|
||||
OFFSET_REG_SOUND12SAD * 0x4c4
|
||||
OFFSET_REG_SOUND12TMR * 0x4c8
|
||||
OFFSET_REG_SOUND12REPLEN * 0x4cc
|
||||
OFFSET_REG_SOUND13CNT * 0x4d0 ; サウンド13コントロール
|
||||
OFFSET_REG_SOUND13CNT_L * 0x4d0
|
||||
OFFSET_REG_SOUND13CNT_H * 0x4d2
|
||||
OFFSET_REG_SOUND13SAD * 0x4d4
|
||||
OFFSET_REG_SOUND13TMR * 0x4d8
|
||||
OFFSET_REG_SOUND13REPLEN * 0x4dc
|
||||
OFFSET_REG_SOUND14CNT * 0x4e0 ; サウンド14コントロール
|
||||
OFFSET_REG_SOUND14CNT_L * 0x4e0
|
||||
OFFSET_REG_SOUND14CNT_H * 0x4e2
|
||||
OFFSET_REG_SOUND14SAD * 0x4e4
|
||||
OFFSET_REG_SOUND14TMR * 0x4e8
|
||||
OFFSET_REG_SOUND14REPLEN * 0x4ec
|
||||
OFFSET_REG_SOUND15CNT * 0x4f0 ; サウンド15コントロール
|
||||
OFFSET_REG_SOUND15CNT_L * 0x4f0
|
||||
OFFSET_REG_SOUND15CNT_H * 0x4f2
|
||||
OFFSET_REG_SOUND15SAD * 0x4f4
|
||||
OFFSET_REG_SOUND15TMR * 0x4f8
|
||||
OFFSET_REG_SOUND15REPLEN * 0x4fc
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_SUBP_MEMORY_MAP_H
|
||||
|
||||
END
|
||||
|
||||
455
trunk/IrisSubp/include/IrisSubpOS.h
Normal file
455
trunk/IrisSubp/include/IrisSubpOS.h
Normal file
@ -0,0 +1,455 @@
|
||||
//====================================================================
|
||||
// IrisSubpOS.h
|
||||
// OSライブラリ
|
||||
//
|
||||
// Copyright (C) 2003-2004 NINTENDO Co.,Ltd.
|
||||
//====================================================================
|
||||
#ifndef _IRIS_SUBP_OS_H
|
||||
#define _IRIS_SUBP_OS_H
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <IrisSubpTarget.h>
|
||||
#include <IrisSubpTypes.h>
|
||||
|
||||
|
||||
|
||||
//======================================================================
|
||||
// ロック変数
|
||||
//
|
||||
//・カード/カートリッジ/CPU間共有内部ワークRAM/VRAM-C/D
|
||||
// などのCPU間での共有リスースや、CPU間送信FIFO 等の専有リソース
|
||||
// の排他制御ためにこの関数をご使用下さい。
|
||||
//======================================================================
|
||||
|
||||
// ロックID
|
||||
|
||||
#define OS_UNLOCK_ID 0 // ロック変数がロックされていない場合のID
|
||||
#define OS_MAINP_LOCKED_FLAG 0x40 // メインプロセッサによるロック確認フラグ
|
||||
#define OS_MAINP_LOCK_ID_START 0x40 // メインプロセッサ用ロックIDの割り当て開始番号
|
||||
#define OS_MAINP_LOCK_ID_END 0x6f // 割り当て終了番号
|
||||
#define OS_MAINP_DBG_LOCK_ID 0x70 // デバッガ予約番号
|
||||
#define OS_MAINP_SYSTEM_LOCK_ID 0x7f // システム予約番号
|
||||
#define OS_SUBP_LOCKED_FLAG 0x80 // サブプロセッサによるロック確認フラグ
|
||||
#define OS_SUBP_LOCK_ID_START 0x80 // サブプロセッサ用ロックIDの割り当て開始番号
|
||||
#define OS_SUBP_LOCK_ID_END 0xaf // 割り当て終了番号
|
||||
#define OS_SUBP_DBG_LOCK_ID 0xb0 // デバッガ予約番号
|
||||
#define OS_SUBP_SYSTEM_LOCK_ID 0xbf // システム予約番号
|
||||
|
||||
#define OS_LOCK_SUCCESS 0 // ロック成功
|
||||
#define OS_LOCK_ERROR -1 // ロックエラー
|
||||
|
||||
#define OS_UNLOCK_SUCCESS 0 // ロック解除成功
|
||||
#define OS_UNLOCK_ERROR -2 // ロック解除エラー
|
||||
|
||||
#define OS_LOCK_FREE 0 // ロック解除中
|
||||
|
||||
#define OS_LOCK_ID_ERROR -3 // ロックIDエラー
|
||||
|
||||
|
||||
// ロック変数構造体
|
||||
|
||||
typedef struct {
|
||||
u32 lockFlag; // ロックフラグ(試行モジュールID格納)
|
||||
u16 ownerID; // 取得モジュールID
|
||||
u16 extension; // 拡張情報
|
||||
} LockWord;
|
||||
typedef vl LockWord vLockWord;
|
||||
|
||||
typedef struct {
|
||||
u8 lockFlag; // ロックフラグ(試行モジュールID格納)
|
||||
u8 ownerID; // 取得モジュールID
|
||||
} LockByte;
|
||||
typedef vl LockByte vLockByte;
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// システムロック変数の初期化
|
||||
//
|
||||
//・システムロック変数を初期化します。
|
||||
//
|
||||
//・引数: なし
|
||||
//
|
||||
//・戻り値:なし
|
||||
//
|
||||
//※NSYNC_MAINP定義時であっても、カートリッジ排他制御領域は
|
||||
// デバッガも使用するためクリアされません。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void OS_InitLock(void);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ロックIDの獲得
|
||||
//
|
||||
//・ロック変数へ設定するIDを獲得します。
|
||||
//
|
||||
//・引数: なし
|
||||
//
|
||||
//・戻り値:
|
||||
// 0x80 ~ 0xaf ロックID
|
||||
// OS_LOCK_ID_ERROR ロックID獲得失敗
|
||||
//
|
||||
//※IDは48種類までしか割り当てることができません。
|
||||
// モジュール内にて複数のロック変数を制御する場合は
|
||||
// できるだけ1つのIDを使用するようにして下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 OS_GetLockID(void);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// スピンロック(ワード/バイト)
|
||||
//
|
||||
//・プロセッサ間やモジュール間で共有リソースを排他制御するための
|
||||
// ロック変数のスピンロックを行います。
|
||||
//・ロックが成功するまで試行し続けます。
|
||||
//・プロセッサ間の共有リソースは必ずロック後に使用して下さい。
|
||||
//・プロセッサ専有のリソースはタイミング的に調整できるのであれば
|
||||
// ロックしなくても構いません。
|
||||
// 専有リソースはデバッグ時に限定してロックすることもできます。
|
||||
//
|
||||
//・引数:
|
||||
// lockID ロックID
|
||||
// lockp ロック変数のポインタ
|
||||
// CtrlFuncp リソース制御関数のポインタ
|
||||
//
|
||||
//・戻り値:
|
||||
// OS_LOCK_SUCCESS ロック成功
|
||||
// OS_LOCK_ID_ERROR ロックIDエラー
|
||||
//
|
||||
//※但し、メインメモリに対してはキャッシュ経由でなければ
|
||||
// バイトアクセスはできないことに注意して下さい。
|
||||
// ですので、メインメモリ上では基本的に OS_LockWord() を使用して下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 OS_LockWord(u32 lockID, volatile LockWord *lockp, void (*CtrlFuncp)(void));
|
||||
s32 OS_LockByte(u32 lockID, volatile LockByte *lockp, void (*CtrlFuncp)(void));
|
||||
|
||||
|
||||
s32 OS_LockCard(u32 lockID); // カード
|
||||
s32 OS_LockCartridge(u32 lockID); // カートリッジ
|
||||
s32 OS_LockWramBlock0(u32 lockID); // CPU内部ワークRAM・ブロック0
|
||||
s32 OS_LockWramBlock1(u32 lockID); // CPU内部ワークRAM・ブロック1
|
||||
s32 OS_LockVramC(u32 lockID); // VRAM-C
|
||||
s32 OS_LockVramD(u32 lockID); // VRAM-D
|
||||
|
||||
s32 OS_LockSendFifo(u32 lockID); // CPU間送信FIFO
|
||||
s32 OS_LockDma0(u32 lockID); // DMA0
|
||||
s32 OS_LockDma1(u32 lockID); // DMA1
|
||||
s32 OS_LockDma2(u32 lockID); // DMA2
|
||||
s32 OS_LockDma3(u32 lockID); // DMA3
|
||||
s32 OS_LockTimer0(u32 lockID); // タイマー0
|
||||
s32 OS_LockTimer1(u32 lockID); // タイマー1
|
||||
s32 OS_LockTimer2(u32 lockID); // タイマー2
|
||||
s32 OS_LockTimer3(u32 lockID); // タイマー3
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ロックの解除(ワード/バイト)
|
||||
//
|
||||
//・ロックを解除します。
|
||||
//・ロックしていないモジュールが実行した場合には解除されず、
|
||||
// OS_UNLOCK_ERROR が返されます。
|
||||
//
|
||||
//・引数:
|
||||
// lockID ロックID
|
||||
// lockp ロック変数のポインタ
|
||||
// CtrlFuncp リソース制御関数のポインタ
|
||||
//
|
||||
//・戻り値:
|
||||
// 正 ロック中(直前に格納されていたID)
|
||||
// OS_UNLOCK_ERROR ロック解除エラー
|
||||
// OS_LOCK_ID_ERROR ロックIDエラー
|
||||
//
|
||||
//※但し、メインメモリに対してはキャッシュ経由でなければ
|
||||
// バイトアクセスはできないことに注意して下さい。
|
||||
// ですので、メインメモリ上では基本的に OS_UnLockWord() を使用して下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 OS_UnLockWord(u32 lockID, volatile LockWord *lockp, void (*CtrlFuncp)(void));
|
||||
s32 OS_UnLockByte(u32 lockID, volatile LockByte *lockp, void (*CtrlFuncp)(void));
|
||||
|
||||
|
||||
s32 OS_UnLockCard(u32 lockID); // カード
|
||||
s32 OS_UnLockCartridge(u32 lockID); // カートリッジ
|
||||
s32 OS_UnLockWramBlock0(u32 lockID); // CPU内部ワークRAM・ブロック0
|
||||
s32 OS_UnLockWramBlock1(u32 lockID); // CPU内部ワークRAM・ブロック1
|
||||
s32 OS_UnLockVramC(u32 lockID); // VRAM-C
|
||||
s32 OS_UnLockVramD(u32 lockID); // VRAM-D
|
||||
|
||||
s32 OS_UnLockSendFifo(u32 lockID); // CPU間送信FIFO
|
||||
s32 OS_UnLockDma0(u32 lockID); // DMA0
|
||||
s32 OS_UnLockDma1(u32 lockID); // DMA1
|
||||
s32 OS_UnLockDma2(u32 lockID); // DMA2
|
||||
s32 OS_UnLockDma3(u32 lockID); // DMA3
|
||||
s32 OS_UnLockTimer0(u32 lockID); // タイマー0
|
||||
s32 OS_UnLockTimer1(u32 lockID); // タイマー1
|
||||
s32 OS_UnLockTimer2(u32 lockID); // タイマー2
|
||||
s32 OS_UnLockTimer3(u32 lockID); // タイマー3
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ロックの試行(ワード/バイト)
|
||||
//
|
||||
//・1回だけスピンロックを試行します。
|
||||
//・プロセッサ間の共有リソースは必ずロック後に使用して下さい。
|
||||
//・プロセッサ専有のリソースはタイミング的に調整できるのであれば
|
||||
// ロックしなくても構いません。
|
||||
// 専有リソースはデバッグ時に限定してロックすることもできます。
|
||||
//
|
||||
//・引数:
|
||||
// lockID ロックID
|
||||
// lockp ロック変数のポインタ
|
||||
// CtrlFuncp リソース制御関数のポインタ
|
||||
//
|
||||
//・戻り値:
|
||||
// 正 ロック中(直前に格納されていたID)
|
||||
// OS_LOCK_SUCCESS ロック成功
|
||||
// OS_LOCK_ID_ERROR ロックIDエラー
|
||||
//
|
||||
//※但し、メインメモリに対してはキャッシュ経由でなければ
|
||||
// バイトアクセスはできないことに注意して下さい。
|
||||
// ですので、メインメモリ上では基本的に OS_TryLockWord() を使用して下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 OS_TryLockWord(u32 lockID, volatile LockWord *lockp, void (*CtrlFuncp)(void));
|
||||
s32 OS_TryLockByte(u32 lockID, volatile LockByte *lockp, void (*CtrlFuncp)(void));
|
||||
|
||||
|
||||
s32 OS_TryLockCard(u32 lockID); // カード
|
||||
s32 OS_TryLockCartridge(u32 lockID); // カートリッジ
|
||||
s32 OS_TryLockWramBlock0(u32 lockID); // CPU内部ワークRAM・ブロック0
|
||||
s32 OS_TryLockWramBlock1(u32 lockID); // CPU内部ワークRAM・ブロック1
|
||||
s32 OS_TryLockVramC(u32 lockID); // VRAM-C
|
||||
s32 OS_TryLockVramD(u32 lockID); // VRAM-D
|
||||
|
||||
s32 OS_TryLockSendFifo(u32 lockID); // CPU間送信FIFO
|
||||
s32 OS_TryLockDma0(u32 lockID); // DMA0
|
||||
s32 OS_TryLockDma1(u32 lockID); // DMA1
|
||||
s32 OS_TryLockDma2(u32 lockID); // DMA2
|
||||
s32 OS_TryLockDma3(u32 lockID); // DMA3
|
||||
s32 OS_TryLockTimer0(u32 lockID); // タイマー0
|
||||
s32 OS_TryLockTimer1(u32 lockID); // タイマー1
|
||||
s32 OS_TryLockTimer2(u32 lockID); // タイマー2
|
||||
s32 OS_TryLockTimer3(u32 lockID); // タイマー3
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ロックフラグの読み込み(ワード/バイト)
|
||||
//
|
||||
//・ロックフラグを読み込みます。
|
||||
//・ロック変数が解除されているかどうかを確認することができます。
|
||||
//
|
||||
//・引数:
|
||||
// lockp ロック変数のポインタ
|
||||
//
|
||||
//・戻り値:
|
||||
// 非0 ロック中(直前に格納されていたID)
|
||||
// OS_LOCK_FREE ロック解除中
|
||||
//
|
||||
//※但し、メインメモリに対してはキャッシュ経由でなければ
|
||||
// バイトアクセスはできないことに注意して下さい。
|
||||
// ですので、メインメモリ上では基本的に OS_ReadLockWord() を使用して下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 OS_ReadLockWord(volatile LockWord *lockp);
|
||||
s32 OS_ReadLockByte(volatile LockByte *lockp);
|
||||
|
||||
|
||||
// カード
|
||||
#ifdef IRIS_TS
|
||||
#define OS_ReadLockCard() OS_ReadLockWord((LockWord *)(CARD_LOCK_BUF))
|
||||
#else
|
||||
#define OS_ReadLockCard() OS_ReadLockCartridge() // カートリッジで代用
|
||||
#endif
|
||||
|
||||
// カートリッジ
|
||||
#define OS_ReadLockCartridge() OS_ReadLockWord((LockWord *)(CARTRIDGE_LOCK_BUF))
|
||||
|
||||
// CPU内部ワークRAM・ブロック0
|
||||
#define OS_ReadLockWramBlock0() OS_ReadLockWord((LockWord *)(WRAM_BLOCK0_LOCK_BUF))
|
||||
|
||||
// CPU内部ワークRAM・ブロック1
|
||||
#define OS_ReadLockWramBlock1() OS_ReadLockWord((LockWord *)(WRAM_BLOCK1_LOCK_BUF))
|
||||
|
||||
// VRAM-C
|
||||
#define OS_ReadLockVramC() OS_ReadLockWord((LockWord *)(VRAM_C_LOCK_BUF))
|
||||
|
||||
// VRAM-D
|
||||
#define OS_ReadLockVramD() OS_ReadLockWord((LockWord *)(VRAM_D_LOCK_BUF))
|
||||
|
||||
|
||||
// CPU間送信FIFO
|
||||
#define OS_ReadLockSendFifo() OS_ReadLockByte((LockByte *)(SEND_FIFO_LOCK_BUF))
|
||||
|
||||
// DMA0
|
||||
#define OS_ReadLockDma0() OS_ReadLockByte((LockByte *)(DMA0_LOCK_BUF))
|
||||
|
||||
// DMA1
|
||||
#define OS_ReadLockDma1() OS_ReadLockByte((LockByte *)(DMA1_LOCK_BUF))
|
||||
|
||||
// DMA2
|
||||
#define OS_ReadLockDma2() OS_ReadLockByte((LockByte *)(DMA2_LOCK_BUF))
|
||||
|
||||
// DMA3
|
||||
#define OS_ReadLockDma3() OS_ReadLockByte((LockByte *)(DMA3_LOCK_BUF))
|
||||
|
||||
// タイマー0
|
||||
#define OS_ReadLockTimer0() OS_ReadLockByte((LockByte *)(TIMER0_LOCK_BUF))
|
||||
|
||||
// タイマー1
|
||||
#define OS_ReadLockTimer1() OS_ReadLockByte((LockByte *)(TIMER1_LOCK_BUF))
|
||||
|
||||
// タイマー2
|
||||
#define OS_ReadLockTimer2() OS_ReadLockByte((LockByte *)(TIMER2_LOCK_BUF))
|
||||
|
||||
// タイマー3
|
||||
#define OS_ReadLockTimer3() OS_ReadLockByte((LockByte *)(TIMER3_LOCK_BUF))
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ロック変数の所有モジュールIDの読み込み(ワード/バイト)
|
||||
//
|
||||
//・ロック変数の所有モジュールID を読み込みます。
|
||||
//・モジュールID が非0 の場合はその時点でどちらのプロセッサ側が
|
||||
// 所有権を持っているのかを確認できます。
|
||||
//・共有リソースの場合は「サブプロセッサ側が所有権を持っている状態」
|
||||
// のみを割り込みを禁止することによって維持することができます。
|
||||
// その他の状態はメインプロセッサが変化させてしまう可能性があります。
|
||||
//・所有モジュールID が 0 であってもロック変数が解除されているとは限りません。
|
||||
//
|
||||
//・引数:
|
||||
// lockp ロック変数のポインタ
|
||||
//
|
||||
//・戻り値: 所有モジュールID
|
||||
//
|
||||
//※但し、メインメモリに対してはキャッシュ経由でなければ
|
||||
// バイトアクセスはできないことに注意して下さい。
|
||||
// ですので、メインメモリ上では基本的に OS_ReadOwnerOfLockWord() を使用して下さい。
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
s32 OS_ReadOwnerOfLockWord(volatile LockWord *lockp);
|
||||
s32 OS_ReadOwnerOfLockByte(volatile LockByte *lockp);
|
||||
|
||||
|
||||
// カード
|
||||
#ifdef IRIS_TS
|
||||
#define OS_ReadOwnerOfLockCard() OS_ReadOwnerOfLockWord((LockWord *)(CARD_LOCK_BUF))
|
||||
#else
|
||||
#define OS_ReadOwnerOfLockCard() OS_ReadOwnerOfLockCartridge() // カートリッジで代用
|
||||
#endif
|
||||
|
||||
// カートリッジ
|
||||
#define OS_ReadOwnerOfLockCartridge() OS_ReadOwnerOfLockWord((LockWord *)(CARTRIDGE_LOCK_BUF))
|
||||
|
||||
// CPU内部ワークRAM・ブロック0
|
||||
#define OS_ReadOwnerOfLockWramBlock0() OS_ReadOwnerOfLockWord((LockWord *)(WRAM_BLOCK0_LOCK_BUF))
|
||||
|
||||
// CPU内部ワークRAM・ブロック1
|
||||
#define OS_ReadOwnerOfLockWramBlock1() OS_ReadOwnerOfLockWord((LockWord *)(WRAM_BLOCK1_LOCK_BUF))
|
||||
|
||||
// VRAM-C
|
||||
#define OS_ReadOwnerOfLockVramC() OS_ReadOwnerOfLockWord((LockWord *)(VRAM_C_LOCK_BUF))
|
||||
|
||||
// VRAM-D
|
||||
#define OS_ReadOwnerOfLockVramD() OS_ReadOwnerOfLockWord((LockWord *)(VRAM_D_LOCK_BUF))
|
||||
|
||||
|
||||
// CPU間送信FIFO
|
||||
#define OS_ReadOwnerOfLockSendFifo() OS_ReadOwnerOfLockByte((LockByte *)(SEND_FIFO_LOCK_BUF))
|
||||
|
||||
// DMA0
|
||||
#define OS_ReadOwnerOfLockDma0() OS_ReadOwnerOfLockByte((LockByte *)(DMA0_LOCK_BUF))
|
||||
|
||||
// DMA1
|
||||
#define OS_ReadOwnerOfLockDma1() OS_ReadOwnerOfLockByte((LockByte *)(DMA1_LOCK_BUF))
|
||||
|
||||
// DMA2
|
||||
#define OS_ReadOwnerOfLockDma2() OS_ReadOwnerOfLockByte((LockByte *)(DMA2_LOCK_BUF))
|
||||
|
||||
// DMA3
|
||||
#define OS_ReadOwnerOfLockDma3() OS_ReadOwnerOfLockByte((LockByte *)(DMA3_LOCK_BUF))
|
||||
|
||||
// タイマー0
|
||||
#define OS_ReadOwnerOfLockTimer0() OS_ReadOwnerOfLockByte((LockByte *)(TIMER0_LOCK_BUF))
|
||||
|
||||
// タイマー1
|
||||
#define OS_ReadOwnerOfLockTimer1() OS_ReadOwnerOfLockByte((LockByte *)(TIMER1_LOCK_BUF))
|
||||
|
||||
// タイマー2
|
||||
#define OS_ReadOwnerOfLockTimer2() OS_ReadOwnerOfLockByte((LockByte *)(TIMER2_LOCK_BUF))
|
||||
|
||||
// タイマー3
|
||||
#define OS_ReadOwnerOfLockTimer3() OS_ReadOwnerOfLockByte((LockByte *)(TIMER3_LOCK_BUF))
|
||||
|
||||
|
||||
|
||||
//======================================================================
|
||||
// プログラムステータスレジスタ
|
||||
//======================================================================
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カレント・プログラムステータスレジスタ セット
|
||||
//
|
||||
//・カレント・プログラムステータスレジスタに値をセットします。
|
||||
//
|
||||
//・引数: セットするカレント・プログラムステータスレジスタの値
|
||||
//
|
||||
//・戻り値:なし
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void OS_SetCpsr(u32 param);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// カレント・プログラムステータスレジスタ値 獲得
|
||||
//
|
||||
//・カレント・プログラムステータスレジスタの値を獲得します。
|
||||
//
|
||||
//・引数: なし
|
||||
//
|
||||
//・戻り値:カレント・プログラムステータスレジスタの値
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
u32 OS_GetCpsr(void);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// IRQ イネーブル/ディセーブル
|
||||
//
|
||||
//・カレント・プログラムステータスレジスタのIRQを
|
||||
// イネーブル/ディセーブルにします。
|
||||
//
|
||||
//・引数: なし
|
||||
//
|
||||
//・戻り値:変更前のカレント・プログラムステータスレジスタの値
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
u32 OS_EnableCpsrIRQ(void);
|
||||
u32 OS_DisableCpsrIRQ(void);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// FIQ&IRQ イネーブル/ディセーブル
|
||||
//
|
||||
//・カレント・プログラムステータスレジスタのFIQ&IRQを
|
||||
// イネーブル/ディセーブルにします。
|
||||
//
|
||||
//・引数: なし
|
||||
//
|
||||
//・戻り値:変更前のカレント・プログラムステータスレジスタの値
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
u32 OS_EnableCpsrFIQ_IRQ(void);
|
||||
u32 OS_DisableCpsrFIQ_IRQ(void);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _IRIS_SUBP_OS_H
|
||||
|
||||
165
trunk/IrisSubp/include/IrisSubpOS_Arm.s
Normal file
165
trunk/IrisSubp/include/IrisSubpOS_Arm.s
Normal file
@ -0,0 +1,165 @@
|
||||
;=====================================================================
|
||||
; IrisSubpOS_Arm.s
|
||||
; OSライブラリ(ARMASM用)
|
||||
;
|
||||
; Copyright (C) 2003-2004 NINTENDO Co.,Ltd.
|
||||
;=====================================================================
|
||||
IF :DEF: _IRIS_SUBP_OS_H
|
||||
ELSE
|
||||
_IRIS_SUBP_OS_H * 1
|
||||
|
||||
|
||||
INCLUDE IrisSubpTargetArm.s
|
||||
INCLUDE IrisSubpDefineArm.s
|
||||
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; ロック変数
|
||||
;=======================================================================
|
||||
|
||||
; ロックID
|
||||
|
||||
OS_UNLOCK_ID * 0 ; ロック変数がロックされていない場合のID
|
||||
OS_MAINP_LOCKED_FLAG * 0x40 ; メインプロセッサによるロック確認フラグ
|
||||
OS_MAINP_LOCK_ID_START * 0x40 ; メインプロセッサ用ロックIDの割り当て開始番号
|
||||
OS_MAINP_LOCK_ID_END * 0x6f ; 割り当て終了番号
|
||||
OS_MAINP_DBG_LOCK_ID * 0x70 ; デバッガ予約番号
|
||||
OS_MAINP_SYSTEM_LOCK_ID * 0x7f ; システム予約番号
|
||||
OS_SUBP_LOCKED_FLAG * 0x80 ; サブプロセッサによるロック確認フラグ
|
||||
OS_SUBP_LOCK_ID_START * 0x80 ; サブプロセッサ用ロックIDの割り当て開始番号
|
||||
OS_SUBP_LOCK_ID_END * 0xaf ; 割り当て終了番号
|
||||
OS_SUBP_DBG_LOCK_ID * 0xb0 ; デバッガ予約番号
|
||||
OS_SUBP_SYSTEM_LOCK_ID * 0xbf ; システム予約番号
|
||||
|
||||
OS_LOCK_SUCCESS * 0 ; ロック成功
|
||||
OS_LOCK_ERROR * -1 ; ロックエラー
|
||||
|
||||
OS_UNLOCK_SUCCESS * 0 ; ロック解除成功
|
||||
OS_UNLOCK_ERROR * -2 ; ロック解除エラー
|
||||
|
||||
OS_LOCK_FREE * 0 ; ロック解除中
|
||||
|
||||
OS_LOCK_ID_ERROR * -3 ; ロックIDエラー
|
||||
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロック関数の初期化
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_InitLock
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロックIDの獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_GetLockID
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; スピンロック(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_LockWord
|
||||
EXTERN OS_LockByte
|
||||
|
||||
EXTERN OS_LockCard
|
||||
EXTERN OS_LockCartridge
|
||||
EXTERN OS_LockWramBlock0
|
||||
EXTERN OS_LockWramBlock1
|
||||
EXTERN OS_LockVramC
|
||||
EXTERN OS_LockVramD
|
||||
|
||||
EXTERN OS_LockSendFifo
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロックの解除(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_UnLockWord
|
||||
EXTERN OS_UnLockByte
|
||||
|
||||
EXTERN OS_UnLockCard
|
||||
EXTERN OS_UnLockCartridge
|
||||
EXTERN OS_UnLockWramBlock0
|
||||
EXTERN OS_UnLockWramBlock1
|
||||
EXTERN OS_UnLockVramC
|
||||
EXTERN OS_UnLockVramD
|
||||
|
||||
EXTERN OS_UnLockSendFifo
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロックの試行(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_TryLockWord
|
||||
EXTERN OS_TryLockByte
|
||||
|
||||
EXTERN OS_TryLockCard
|
||||
EXTERN OS_TryLockCartridge
|
||||
EXTERN OS_TryLockWramBlock0
|
||||
EXTERN OS_TryLockWramBlock1
|
||||
EXTERN OS_TryLockVramC
|
||||
EXTERN OS_TryLockVramD
|
||||
|
||||
EXTERN OS_TryLockSendFifo
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロックフラグの読み込み(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_ReadLockWord
|
||||
EXTERN OS_ReadLockByte
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ロック変数の所有モジュールIDの読み込み(ワード/バイト)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_ReadOwnerOfLockWord
|
||||
EXTERN OS_ReadOwnerOfLockByte
|
||||
|
||||
|
||||
|
||||
;=======================================================================
|
||||
; プログラムステータスレジスタ
|
||||
;=======================================================================
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; プログラムステータスレジスタ セット(r0=パラメータ)
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_SetCpsr
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; カレント・プログラムステータスレジスタ値 獲得
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_GetCpsr
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; IRQ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_EnableCpsrIRQ
|
||||
EXTERN OS_DisableCpsrIRQ
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; FIQ&IRQ イネーブル/ディセーブル
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
EXTERN OS_EnableCpsrFIQ_IRQ
|
||||
EXTERN OS_DisableCpsrFIQ_IRQ
|
||||
|
||||
|
||||
|
||||
ENDIF ; _IRIS_SUBP_OS_H
|
||||
|
||||
|
||||
|
||||
END
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user