スポンサーリンク

I386_VM86(2) FreeBSD システムコールマニュアル I386_VM86(2)

名称

i386_vm86 − vm86 に関連する関数を制御する

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <sys/types.h>
#include <machine/sysarch.h>
#include <machine/vm86.h>

int

i386_vm86(int function, void *data);

解説

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) を呼び出します。シグナルの配信時に制 御がプロセスに戻ります。

戻り値

関数 i386_vm86() は、処理が成功すると値 0 を返します。そうでない場合、値 -1 が返され、グローバル変数 errno が設定されてエラーを示します。

エラー

i386_vm86() システムコールは次の場合に失敗します:

       [EINVAL]

カーネルに vm86 サポートがないか、または無効な関数が指 定されました。

[ENOMEM]
カーネルデータ構造体を初期化するのに十分なメモリがあり ません。

作者

このマニュアルページは Jonathan Lemon が書き、 Bruce M Simpson が更新しま した。

FreeBSD 10.0 July 27, 1998 FreeBSD 10.0

スポンサーリンク