tail head cat sleep
QR code linking to this page

manページ  — I386_VM86

名称

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

内容

ライブラリ

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 Pentium(r) プロセッサの VME (仮想 8086 モード拡張) フラグ である CR4 の ビット 0 の現在の状態を取り出すために使用されます。 data は下記を指し示すように初期化されるべきです:
struct vm86_vme_args {
       int     state;                  /* 状態 */
};

state は戻る時に VME フラグの状態が入ります。

vm86 モードに入るには、vm86 用に正しく設定したマシンコンテキスト、そして PSL_VM ビットを設定して sigreturn(2) を呼び出します。 シグナルの配信時に制御がプロセスに戻ります。

戻り値

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 が更新しました。

I386_VM86 (2) July 27, 1998

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.