;===================================================================== ; 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