

#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_plus4 は newpc で指定した値+4 となります。
cp_context は CPContext 構造体型のメンバで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 初版