EN JA
I386_VM86(2)
I386_VM86(2) FreeBSD System Calls Manual I386_VM86(2)

名称

i386_vm86vm86 に関連する関数を制御する

ライブラリ

Standard C Library (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
これは、CR4 のビット 0 である、Pentium(r) プロセッサの VME (仮想 8086 モード拡張) フラグの現在の状態を取り出すために使用されます。 data は、次を指すように初期化されるべきです:

struct vm86_vme_args { 
       int     state;                  /* 状態 */ 
};

state は、返るときに VME フラグの状態を含みます。

vm86 のための正確なマシンのコンテキストで、そして PSL_VM ビットの設定で、 sigreturn(2) を呼び出すことによって vm86 モードに入ります。制御は、シグナルの配信でプロセスに返ります。

戻り値

The i386_vm86() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

i386_vm86() システムコールは、次の場合に失敗します:
[ EINVAL]
カーネルに、vm86 サポートがないか、または無効の関数が指定されました。
[ ENOMEM]
カーネルのデータ構造を初期化するために十分なメモリがありません。

作者

このマニュアルページは、 Jonathan Lemon によって書かれ、 Bruce M Simpson によって更新されました。
July 27, 1998 FreeBSD