I386_VM86(2)

名称
i386_vm86 - vm86 に関連する関数を制御する

ライブラリ
libc

書式
<sys/types.h> <machine/sysarch.h> <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() システムコールは次の場合に失敗します:

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

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

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