OS_InitContext

構文

#include <nitro/os.h>

void OS_InitContext( OSContext* context,
                     u32         newpc,
                     u32         newsp );

引数

context コンテキスト
newpc 開始アドレス
newsp スタック

返り値

なし。

説明

コンテキストを初期化します。

コンテキスト構造体 OSContext は以下のメンバーを持っています。

u32 cpsr CPSR (カレントプログラムステータスレジスタ)
u32 r[13] R0〜R12レジスタ
u32 sp スタックポインタ (R13 レジスタ)
u32 lr リンクレジスタ (R14 レジスタ)
u32 pc_plus4 プログラムカウンタ+4 (R15 レジスタ+4)
u32 sp_svc スーパバイザモードのスタック退避用 (*1)
CPContext cp_context 除算器・平方根演算器のコンテキスト (*2)

(*1) … コンパイルオプションによっては存在しません。
(*2) … ARM9にのみ存在します。

OS_InitContext()では、newsp から下位方向に SVC 用スタックを確保します。( コンパイルオプションによってはこの処理は行ないません。)cpsr は CPSR レジスタからプロセッサモード( ARM、THUMB の区別)を調べ適切に設定されます。r[0]〜r[12] ( R0 〜 R12 レジスタ)、lr ( R14 レジスタ)はゼロクリアされます。pc_plus4newpc で指定した値+4 となります。

cp_contextCPContext 構造体型のメンバでARM9 にのみ存在し、除算器・平方根演算器のコンテキストです。CPContext 構造体は以下のメンバを保持します。

u64 div_numer 除算器のパラメータ(除数)
u64 div_denom 除算器のパラメータ(被除数)
u64 sqrt 平方根演算器のパラメータ
u16 div_mode 除算器のモード
u16 sqrt_mode 平方根演算器のモード


OS_InitContext() ではcp_context の内容を変更しません。

参照

OS_SaveContext, OS_LoadContext, OS_DumpContext

履歴

2004/06/30 cp_context について記述
2003/12/01 初版