i386_vm86()
システムコールは vm86 に関連するさまざまな関数を呼び出すのに使用します。
function
引数は次の値の内の 1 つにできます。
VM86_INIT
|
カーネルのプロセス用 vm86 パラメータ領域を初期化し、プロセスが vm86 呼び出しを
できるようにします。
data
引数は次の構造体を指します。
struct vm86_init_args {
int debug;
int cpu_type;
u_char int_map[32];
};
debug
引数はデバッグコードをオンにするために使用されます。
cpu_type
引数はエミュレート中のタイプの CPU を制御するものですが、
現時点では実装されていません。
int_map
引数は、vm86 割り込みを vm86 モードで処理する必要があるか、またはプロセスに
反映して戻される必要があるかどうかを決定するビットマップです。
N 番め
のビットが設定されている場合、割り込みはプロセスに反映されます。
そうでない場合、 vm86 割り込みテーブルによってディスパッチされます。
|
VM86_INTCALL
|
プロセスが vm86 割り込みハンドラを呼び出せるようにします。
これは効果的に INT 命令をシミュレートします。
data
は下記の構造体を指し示しているべきです:
struct vm86_intcall_args {
int intnum;
struct vm86frame vmf;
};
intnum
はシミュレートされた呼び出しのための INT のオペランドを指定します。
例えば、値 0x10 は VGA BIOS への呼び出しのためによく使用されます。
vmf
は割り込みハンドラのための呼び出し規約に従って、CPU のレジスタを
初期化するために使用されます。
|
VM86_GET_VME
|
Pentium(r) プロセッサの VME (仮想 8086 モード拡張) フラグ
である CR4 の ビット 0 の現在の状態を取り出すために使用されます。
data
は下記を指し示すように初期化されるべきです:
struct vm86_vme_args {
int state; /* 状態 */
};
state
は戻る時に VME フラグの状態が入ります。
|
vm86 モードに入るには、vm86 用に正しく設定したマシンコンテキスト、そして
PSL_VM
ビットを設定して
sigreturn(2)
を呼び出します。
シグナルの配信時に制御がプロセスに戻ります。