mirror of
https://github.com/rvtr/ntr_bootrom.git
synced 2025-10-31 07:11:11 -04:00
479 lines
17 KiB
ArmAsm
479 lines
17 KiB
ArmAsm
;=====================================================================
|
||
; 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
|
||
|