VESA : Video Electronics Standards Association
目次
VESAとは
VESA(Video Electronics Standards Association)
ビデオ周辺機器に関する業界標準化団体のこと。
VBE
VBE(VESA BIOS Extensions)
VESAが作ったビデオ周辺機器に関するBIOSコールの拡張。
これを利用することにより、ドライバがなくても、高解像度やフルカラーが利用できる。
BIOSコールだが、プロテクトモードからも実行が可能。ただし、古いVBEは対応していない。
動作を速くしたりグラフィックスボードの力を発揮するにはドライバが必須。
VESAの情報取得(al:0x00)
パラメータ
| レジスタ | 内容 |
|---|
| ah | VESAファンクション(0x4f) |
| al | VESAの情報を取得するコマンド(0x00) |
| es:di | VESA情報を受け取るバッファアドレス(256Byte以上) |
戻り値
| レジスタ | 値 | 内容 |
|---|
| ah | 0x00 | 正常に終了した |
| 0x01 | 失敗した |
| 0x02 | 現在のハードウェアでは実行できない |
| 0x03 | 現在のモードでは実行できない |
| al | 0x4f | VESAファンクションが有る |
| !0x4f | VESAファンクションサポート外 |
取得できる情報
es:diからの256Byteに取得できる情報は以下のとおりです。
| オフセット | サイズ | 内容 |
|---|
| 0x00 | 0x04 | シグネチャ"VESA" |
| 0x04 | 0x02 | VESAのバージョン |
| 0x06 | 0x04 | |
| 0x0a | 0x04 | 各種フラグ |
| 0x0e | 0x04 | |
| 0x12 | 0x02 | VESAがサポートするVRAM容量(KB単位) |
| 0x14 | 0xf2 | 予約 |
#情報格納アドレスの指定
movw $0xhhhh, %ax
movw %ax, %es
movw $0xhhhh, %di
#VESAの情報取得
movw $0x4f00, %ax #ah:0x4f, al:0x00
int $0x10
画面モード情報取得(al:0x01)
パラメータ
| レジスタ | 内容 |
|---|
| ah | VESAファンクション(0x4f) |
| al | 画面モード情報を取得するコマンド(0x01) |
| cx | 情報を得る画面モード番号 |
| es:di | 画面モード情報を受け取るバッファアドレス(256Byte以上) |
戻り値
| レジスタ | 値 | 内容 |
|---|
| ah | 0x00 | 正常に終了した |
| !0x00 | エラー |
| al | 0x4f | サポート |
| !0x4f | サポート外 |
取得できる情報
es:diからの256Byteに取得できる情報は以下のとおりです。
| オフセット | サイズ | 内容 |
|---|
| 0x00 | 0x02 | モード属性 |
| 0x02 | 0x01 | ウインドウAの属性 |
| 0x03 | 0x01 | ウインドウBの属性 |
| 0x04 | 0x02 | ウィンドウグラニュラリティ |
| 0x06 | 0x02 | ウインドウサイズ |
| 0x08 | 0x02 | ウインドウAの開始セグメント |
| 0x0a | 0x02 | ウインドウBの開始セグメント |
| 0x0c | 0x04 | ウインドウ関数へのポインタ |
| 0x10 | 0x02 | スキャンラインのバイト数 |
| 0x12 | 0x02 | ディスプレイの横の大きさ |
| 0x14 | 0x02 | ディスプレイの縦の大きさ |
| 0x16 | 0x01 | 文字1つ分の横の大きさ |
| 0x17 | 0x01 | 文字1つ分の縦の大きさ |
| 0x18 | 0x01 | メモリプレーンの数 |
| 0x19 | 0x01 | 1ピクセルあたりのビット数 |
| 0x1a | 0x01 | バンクの数 |
| 0x1b | 0x01 | メモリモデル |
| 0x1c | 0x01 | キロバイト単位でのバンクの大きさ |
| 0x1d | 0x01 | イメージページの数 |
| 0x1e | 0x01 | 予約:1 |
| 0x1f | 0x01 | 赤成分のビット数 |
| 0x20 | 0x01 | 赤成分のLSBの位置 |
| 0x21 | 0x01 | 緑成分のビット数 |
| 0x22 | 0x01 | 緑成分のLSBの位置 |
| 0x23 | 0x01 | 青成分のビット数 |
| 0x24 | 0x01 | 青成分のLSBの位置 |
| 0x25 | 0x01 | 使用されないビットの数 |
| 0x26 | 0x01 | 使用されないビットのLSBの位置 |
| 0x27 | 0x01 | ダイレクトカラーの属性 |
| 0x28 | 0x04 | リニアフレームバッファーの開始アドレス |
| 0x2c | 0x04 | 画面外の先頭VRAMオフセット |
| 0x30 | 0x02 | 画面外のVRAMのサイズ(KB単位) |
| 0x32 | 0xce | 予約 |
#情報格納アドレスの指定
movw $0xhhhh, %ax
movw %ax, %es
movw $0xhhhh, %di
#画面モード情報取得
movw $0x4f01, %ax #ah:0x4f, al:0x01
movw $0xhhhh, %cx
int $0x10
画面モード設定(al:0x02)
パラメータ
| レジスタ | 内容 |
|---|
| ah | VESAファンクション(0x4f) |
| al | 画面モード設定コマンド(0x02) |
| bx | bit0-13:情報を得る画面モード番号 |
| bit14:1_リニアアクセスモード(VESA 2.0以降) |
| bit15:1_VRAMクリア省略 |
戻り値
| レジスタ | 値 | 内容 |
|---|
| ah | 0x00 | 正常に終了した |
| !0x00 | エラー |
| al | 0x4f | サポート |
| !0x4f | サポート外 |
#画面モードの設定
movw $0x4f02, %ax #ah:0x4f, al:0x02
movw $0xhhhh, %bx
int $0x10
モード番号と解像度
4,8bitはインデックス方式(パレット方式)、15,16,24,32bitはダイレクトカラー方式。
| モード番号 | 解像度 | カラー |
|---|
| 0x0100 | 640x400 | 8bit |
| 0x0101 | 640x480 | 8bit |
| 0x0102 | 800x600 | 4bit |
| 0x0103 | 800x600 | 8bit |
| 0x0104 | 1024x768 | 4bit |
| 0x0105 | 1024x768 | 8bit |
| 0x0106 | 1280x1024 | 4bit |
| 0x0107 | 1280x1024 | 8bit |
| 0x0108 | 80x60 | テキストモード |
| 0x0109 | 132x132 | テキストモード |
| 0x010b | 132x50 | テキストモード |
| 0x010c | 132x60 | テキストモード |
| 0x010d | 320x200 | 15bit |
| 0x010e | 320x200 | 16bit |
| 0x010f | 320x200 | 24bit/32bit |
| 0x0110 | 640x480 | 15bit |
| 0x0111 | 640x480 | 16bit |
| 0x0112 | 640x480 | 24bit/32bit |
| 0x0113 | 800x600 | 15bit |
| 0x0114 | 800x600 | 16bit |
| 0x0115 | 800x600 | 24bit/32bit |
| 0x0116 | 1024x768 | 15bit |
| 0x0117 | 1024x768 | 16bit |
| 0x0118 | 1024x768 | 24bit/32bit |
| 0x0119 | 1280x1024 | 15bit |
| 0x011a | 1280x1024 | 16bit |
| 0x011b | 1280x1024 | 24bit/32bit |
ダイレクトカラー方式の詳細。
| カラー | Alpha | Red | Green | Brue | 備考 |
|---|
| 15bit | 1bit | 5bit | 5bit | 5bit | 本当は16bitだが、MSBが使用されないため、実効15bit。 |
|---|
| 16bit | - | 5bit | 6bit | 5bit | |
|---|
| 24bit | - | 8bit | 8bit | 8bit | |
|---|
| 32bit | 8bit | 8bit | 8bit | 8bit | |
|---|
関連リンク