vbei show VESA VBE information version 1.12 (2008-06-27) vbei は VESA VBE BIOS の情報を表示します。 VBE 3.0 の情報を見られるものが意外となかったりするので、必要に多少迫られて やっつけ仕事でこしらえてみました。基本的にただ表示するだけです。 用法 ---- vbei [-?] [-s[x]] [-dump] [-rom] [videomode] -? 簡易ヘルプ表示 -s ビデオモード情報をシンプル形式で表示します -sx ビデオモード情報をシンプル形式で表示します(色位置情報つき) -dump 呼び出し時に用いた構造体(VbeInfoBlock, ModeInfoBlock)の 内容をダンプ表示します。 -rom VGA の ROMBIOS に関する情報を表示します videomode ビデオモードを16進数で指定します vbei は DOS 用プログラムです。DOS のコマンドプロンプトから実行してください。 Windows などの DOS プロンプトでも実行可能ですが、その場合、動作結果(ビデオ カードから vbei に渡される情報)が OS によって「補正」されることがあります。 より正しい結果を得たい場合は、実際の DOS (MS/PC/DR/FreeDOS) や Widows9x/Me の 起動ディスクをブートし、その上で vbei を実行してください。 (Windows のコマンドプロンプトでは、フルスクリーンモードにしてから実行すると ビデオカードの能力がほぼそのまま取得できる場合があります。 Alt+Enter でフルスクリーンとウィンドウ表示モードの切り替えができます) 単に vbei のみで(オプション指定なしで)実行した場合、VESA BIOS 情報と VGA ROMBIOS の情報を表示します。ビデオモード、もしくはオプション -s, -sx を 指定した場合はビデオモード情報を表示します。 用例 : vbei VBE BIOS 情報を表示 vbei 105 VBE ビデオモード 105h の情報を表示 vbei -s すべての VBE ビデオモード情報をシンプル形式で表示 表示が画面内に収まらないときは、出力をいったんファイルにリダイレクトして、 適当なエディタなどで開いてください。 vbei -s > vmlist.txt notepad vmlist.txt 情報の見方について ------------------ 基本的には VESA VBE FUNC 00 (int 10h, ax=4f00h) と FUNC 01 (int 10h, ax=4f01h) で得られた情報を単に表示しているだけですが、情報の意味がよくわからないところが あったりしますので適当に説明をしてみます。 しかし、書いている本人もいまひとつわかっていなかったりしますので(説明に 「たぶん」「恐らく」「…と思う」などが散見される)正確なところは VESA VBE の 仕様書や実際のプログラムなどにあたる必要があると思われます。 (ついでに申し上げれば、表示に使ってる英語やら説明に使ってる日本語もかなり いいかげんですので正確なところは仕様書やら何やらにあたって下さい) ・最後に h がついている数値は16進数です。seg:off 形式のポインタを表記する  場合、オフセット部のみに h がついています。 ・ついていない数値は「原則として」10進数となります。  ただし、バイナリデータをダンプ表示する場合とシンプル表示モードの場合、  16進数でも h はつきません。各自で判別してください。 ・VBE ファンクションから返される文字列の前後に引用符(")がついていますが、  これは視認性を考慮して vbei 側でつけたものです。ヌルポインタが返された  場合は (null!!) と表示されます。 オプションを何もつけないで vbei を実行すると、VBE 実装の大局的な情報が 表示されます。 オプション -rom を指定した場合、C0000h (C000:0000h) にある VGA-ROMBIOS を スキャンし、いくつかの情報を表示します。(TSR 型の VBEドライバに関する情報では ありません)BIOS が PCI 対応の場合は PCI 拡張 ROM ヘッダの内容も表示します。 VESA BIOS 情報の見方 : VBE Version VESA VBE のバージョン OEM String OEM 文字列 Capabilities ビデオカードの大局的仕様を示す4バイトの16進数 補足説明は以下の通り 8bitDAC ビデオDAC を VBE FUNC 08 で8ビットに設定可能 (デフォルトは6ビット) NonVGA VGA との互換性がないビデオチップである (VBE の仕様書では「標準的な IBM VGA の全モード、 全フォント、全 I/O ポートをサポートすること」と 定義されています) OldRAMDAC VBE FUNC 09, BL=00h でアナログパレットを変更すると 画面にノイズがでる可能性がある。 VBE FUNC 09, BL=80h(垂直帰線期間にパレットを変更)を 使ったほうがよい StreoSync-VESA VESA ステレオコネクタで立体眼鏡用同期信号をサポートする (VBE 3.0) StreoSync-EVC VESA EVC コネクタで立体眼鏡用同期信号をサポートする (VBE 3.0) Total Memory ビデオRAMの容量 OEM Revision OEM リビジョン番号 (VBE 2.0+) OEM VendorName OEM ベンダ名 (VBE 2.0+) OEM Product OEM プロダクト名 (VBE 2.0+) OEM RevisionStr OEM リビジョン文字列 (VBE 2.0+) VideoMode Table VESA BIOS がサポートしているビデオモードの一覧が入っている FAR ポインタ (**Temporary** の文字列が出る場合は、VideoMode Table が ユーザが確保したテンポラリバッファ上に作成されます) Video Mode... VESA BIOS がサポートしているビデオモード(16進数) この後、VBE 2.0 の32ビットプロテクトモードインターフェースがサポート されていれば、その情報を表示します。 PM-I/F table プロテクトモードインターフェーステーブルの先頭を示す FAR ポインタ Size of table テーブルのバイト数 Func 05 offset 32ビットプロテクトモード用 VBE FUNC 05 エントリの PM-I/F table 先頭からのオフセット値(16進数) Func 07 offset 32ビットプロテクトモード用 VBE FUNC 07 エントリの PM-I/F table 先頭からのオフセット値(16進数) Func 09 offset 32ビットプロテクトモード用 VBE FUNC 09 エントリの PM-I/F table 先頭からのオフセット値(16進数) Port&Mem offset 後述の I/O ports と Memory location の格納されている PM-I/F table 先頭からのオフセット値(16進数) (0000 の場合は I/O ports, Memory location はない) I/O ports アクセス許可する必要のある I/O ポート (VGA で定義されていないポートアドレスを使う必要がある場合) Memory location アクセスする必要のあるメモリの物理アドレスとサイズ (たぶんメモリマップド I/O だと思う) この後、VBE のバージョンが 3.0 以上なら vbei は VGA の ROMBIOS 内 をスキャンし (C0000-C7FFFh の範囲)、16ビットのプロテクトモード・エントリポイントが 見つかった場合はその情報を表示します。 PMInfoBlock at プロテクトモード・エントリポイント構造体(PMInfoBlock)の 先頭位置 PM Entry Point プロテクトモード・エントリポイント PM Initialize プロテクトモード BIOS 初期化ファンクションのエントリ その後、BIOS がサポートしていれば、DPMS (VBE/PM) に関する情報と VESA DDC に 関する情報が表示されます(DDC に関してはまったく確認していません。手持ちの環境で まったくサポートされていなかったので) vbei の引数に16進数のビデオモードを指定した場合、そのビデオモードに関する 情報を表示します。(たとえば vbei 110 を実行すると、ビデオモード 110h の情報が 表示されます) ビデオモード情報の見方 : Mode Attributes ビデオモード属性(16進数) 補足説明は以下の通り ConsoleBIOS ビデオ BIOS の文字表示機能(int 10h, ah=01/02/06/07/09/ 0Ah/0Eh)が使えることを示す。 (ただ、どの程度に「使える」かは BIOS 次第といっても 過言ではないのであまり信用しないほうがいい、と思う) Color カラーモード Mono 白黒モード Graphics グラフィックモード Text テキストモード NonVGA VGA と互換性のないビデオモードである (標準 VGA と同じ I/O ポートアドレスとメモリアドレス だけを使ってビデオメモリにアクセスできない…という ような意味らしい) Window Window 経由でビデオメモリにアクセスできる (これが表示されない場合は Window 経由でのアクセスは できず、つまり後述の Window A/Window B は無効) Linear プロテクトメモリ上にビデオメモリをマッピングできる DoubleScan 画面モードはダブルスキャンモードをサポートする (自前の CRTC パラメータを使って画面設定するとき、 ダブルスキャンビットを使うことができる) Interlaced 画面モードはインターレースモードをサポートする (自前の CRTC パラメータを使って画面設定するとき、 インターレースビットを使うことができる) TripleBuffer トリプルバッファをサポートする StreoScope 立体視ディスプレイ(3D眼鏡)をサポートする DualStartAddress (立体視ディスプレイ用の)デュアルスタートアドレスを サポートする Window A Window A のセグメント(16進数) 補足説明は以下の通り Read 読みだし専用ウィンドウ Write 書き込み専用 Read/Write 読み書き兼用 セグメントが 0000h の場合、ウィンドウはサポートされていない Window B Window B のセグメント(16進数) 補足説明は Window A と同じ Window Size Window A/B それぞれの大きさ(10進数) Granularity ウィンドウの分解能(移動単位) Window Func. VBE FUNC 05 を直接 FAR CALL で呼び出すためのエントリ Bytes/Scanline 1行あたりのバイト数(10進数) Resolution ドット単位の画面解像度(テキストモードの時は文字単位) Character size ドット単位の文字の大きさ Memory plane(s) ビデオモードに必要なビデオメモリのプレーン数 (普通は 1 であり、EGA/VGA の16色モードでは 4 となる) Bits per pixel 1ドットを表すのに必要なビット数。つまり色数 Memory model ビデオメモリの使用方法(16進数) 補足説明は以下の通り Text テキストモード CGA CGA がサポートするグラフィックモード全般 (どうもビデオメモリが B800:0000 から始まる場合は このモデルらしい) Hercules Hercules がサポートするグラフィックモード全般 (どうもビデオメモリが B000:0000 から始まる場合は このモデルらしい) EGA/VGAplanar EGA, VGA でサポートされる16色もしくは2色(白黒)の グラフィックモード (ひょっとしたらプレーン8枚で256色、というのもこれに なるかもしれないが、よくわかりません) Packed pixel パックドピクセルの256色 Non-Chain4 Non-Chain 4 の256色モード、だそうです (VGA のレジスタに Chain 4 とかいうのがあるので、それを リセットしてこしらえる256色のビデオモードでしょうか ねえ。よくわかりません) Direct color ダイレクトカラーモード (いわゆる 32k, 64k, 16M 色などのモード) YUV YUV 形式 Bank(s) インターレースバンク数(10進数) Bank size インターレースバンクのサイズ。0 の時はバンクはなし (例えば CGA のグラフィックモードでは、偶数ラインは B800:0000 から、奇数ラインは B800:2000 からマッピング されています。こういう場合は Bank(s) は 2 Banks、 Bank size は 8 KBytes となります) Image page(s) 表示画面以外にビデオメモリ上に保持できる画面イメージ数 基本的には (ビデオメモリ総量) / (1画面に使うメモリ) - 1 と いう感じで設定されているはずだが 0 が設定されている場合も多い (VBE FUNC 07 を使って表示画面を切り替えたりできる、はず) VBE 3.0 以上の場合、ここには Banked Image Page(s) と LFB Image Page(s) の最大値が入るそうです(仕様書より) この後、Memory model が Direct color か YUV の場合はダイレクトカラー情報が 表示されます。 Bit position(R) Red のビット位置とビット数(YUV の場合は V) (G) Green のビット位置とビット数(YUV の場合は Y) (B) Blue のビット位置とビット数(YUV の場合は U) (Reserved) 予約領域のビット位置とビット数 (予約領域がないと報告された場合は表示されません) DirectColorInfo ダイレクトカラーモード情報 補足説明は以下の通り ColorRamp-Programmable 色調を VBE FUNC 09 で変更可能。 いわゆるガンマ補正というやつでしょうか? ReservedField-usable (Reserved)の位置のビットをユーザーが任意の目的で利用可能 この後、Mode Attributes で Linear がセットされている場合、フレームバッファ 情報が表示されます。 FrameBuff addr. ビデオメモリ先頭の物理アドレス(16進数) (00000000 の場合、プロテクトメモリ上にビデオメモリを マッピングできない) Offscrn offset オフスクリーン領域の Framebuff addr. 先頭からの オフセット(16進数) (一応「オフセット値」らしいのですが、なんかもろに 物理アドレスそのものを返している BIOS もあるみたいです) この値は VBE 2.0 でのみ有効(VBE 3.0 では予約領域となり、 0 を設定することになっている) Offscrn size オフスクリーン領域のサイズ。0 の場合はなし (オフスクリーン領域というのがどういう意味なのか正確には わからないのですが、たぶんメモリマップド I/O なんかの ある領域なのだと思う) この値は VBE 2.0 でのみ有効(VBE 3.0 では予約領域となり、 0 を設定することになっている) VBE のバージョンが 3.0 以上の場合、さらに拡張情報が表示されます。 Max Pixel Clock そのビデオモードで利用可能なピクセルクロックの最大値 LFB Bytes/Scanline リニアフレームバッファモードに設定した場合の、1行あたりの バイト数 Banked Image page(s) ウィンドウ切り替えモード時の保持可能イメージ数 (前述の Image page(s)参照) LFB Image page(s) リニアフレームバッファモード時の保持可能イメージ数 (前述の Image page(s)参照) LFB Bit position (R)/(G)/(B)/(Reserved) リニアフレームバッファモード時の原色ビット数とビット位置 ビデオモード情報(シンプル表示)の見方 : vbei -sx を実行するとこんな感じで出てきます。 (例としてひとつだけ) Mode Reso Color Wnd-A Wnd-B Siz Gr Wnd-Func Linear ColorMap 110 640x480 15bpp A000rw ------ 64 64 07D4:20BF 07800000 arrrrrgggggbbbbb Mode ビデオモード(16進) Reso 解像度(10進) Resolution と同じ Color 色数(10進)とメモリモデル 色数は Bits per pixel と同じ メモリモデル: txt テキストモード cga CGA グラフィック mga モノクログラフィック (Hercules) vga EGA/VGA カラーグラフィック pix パックドピクセル nc4 Non-Chain4 bpp ダイレクトカラー yuv YUV ??? 不明 Wndw-A Window A のセグメントと属性(16進) Wndw-B Window B のセグメントと属性(16進) Siz Window のサイズ(10進) Window size と同じ Gr Window 分解能(10進) Granularity と同じ Wnd-Func VBE FUNC 05 のエントリ Window Func. と同じ Linear ビデオメモリの物理アドレス FrameBuff Addr. と同じ Colormap ピクセル中の原色ビット配置。 上位→下位ビットの順 (ダイレクトカラーモード時のみ) -sx のかわりに -s を指定した場合、Colormap 部分は表示されません。 おおまかな履歴 -------------- 1.12 (2008-06-27) ・表示の修正いろいろ ・戻り値を返すようにした。正常終了 = 0、それ以外は何かしらのエラー。  (VESA VBE がまったく使えない状態のときは 127 を返す。Windows の DOS 窓が  フルスクリーンか否かの簡易判定に使えるかも…) ・-s オプションでのビデオモード一覧表示時、色配列を表示しないようにした。  -sx オプションを使うことにより以前と同様の表示が可能 ・VGABIOS の ROM 情報をデフォルトでは表示しないようにした。  ROM 情報を表示するときは -rom オプションを利用する ・VBE/PM が使えるなら液晶パネルの解像度を得る。ついでにオプション -fp を  指定すると VBE/FP の各種情報を表示するようにした(あまりチェックしていない) ・ライセンス明文化(BSD-style) ・実行バイナリを UPX (http://upx.sourceforge.net) で圧縮 1.11 (2004-08-23) ・VBE 3.0 で拡張された部分の情報を表示できるようにした ・DPMS (VBE/PM) 1.0 の情報表示 ・VESA DDC の情報が表示できるかも(手元に動作環境がないため未テスト) ・VGA-ROMBIOS の情報表示(先頭ヘッダ、PCIROM ヘッダ、VBE 3.0 の PMInfoBlock) ・シンプル表示モードのフォーマットを多少変更 ・表示数値が16進数のときは最後尾に h をつけることにした。ついてないのは  (だいたい)10進数 1.00 (1996-10-30) ・作成 参考資料 -------- Interrupt Lists (Ralf Brown のアレ) VESA VBE/Core 3.0 specification (http://www.vesa.org から VBE/Core 3.0 の仕様書が無料でダウンロード 可能) ------ sava/LP-Project http://www.vector.co.jp/authors/VA003720/lpproj/ lpproj_at_gmail.com