1: 2007-11-25 (日) 10:48:47 |
2: 2007-11-25 (日) 11:26:31 |
- | [[資料/haribote/メモリマップ]] | + | **VESAから帰ってくる情報の情報 [#kaa620c0] |
| | | |
- | あああ | + | VESA BIOSが搭載されているのかいないのか。また、搭載されていた場合、どこまで使えるのか。そういう手の情報はある程度BIOSから返される。ではどんなものなのか?? |
| + | |
| + | ***最初の一手 [#c1d0768a] |
| + | 16bit(リアルモード)時、以下のBIOSコールを行うといろいろ調べることができる。 |
| + | |
| + | MOV AX,0x4f00 ;AXにファンクション番号である0x4f00を |
| + | |
| + | MOV AX,0x9000 ;ここはようするに、ES:DIに0x9000:0を |
| + | MOV ES,AX ;書き込みたいだけ。ESは直接代入できない |
| + | MOV DI,0 ;のでこうしているだけ |
| + | |
| + | INT 0x10 ;BIOSコール! |
| + | |
| + | このコールの結果、各レジスタやES:DIで指定したアドレスに情報が帰ってくる |
| + | -AL : 0x4Fが帰ってきたら成功。(とりあえずVESA BIOSは存在する?) |
| + | -AH : 各種詳細情報 |
| + | --0x00 : 成功。問題なし |
| + | --0x01 : 明確に「ダメ」。(VESAはない?あっても使えない?) |
| + | --0x02 : VESAは存在するっぽいんだけど、BIOS設定等でカットされてて使えない? |
| + | --0x03 : VESAは存在するっぽいんだけど、なんらかの理由でまともには使えない? |
| + | |
| + | さらに、例のES:DIアドレスに以下の情報が書き込まれる |
| + | |
| + | |0x9000|4バイト|「VESA」の文字。つまり0x56、0x45、0x53、0x41| |
| + | |0x9004|4バイト|VESAのバージョンナンバー。(ただし数値ではなく文字らしい)| |
| + | |0x9006|4バイト|?? なにかの名前の文字が入っているアドレス?| |
| + | |0x900A|4バイト|性能? Bit 0 Set if the DAC can switch width, clear if it is fixed 6bits per primary color 1 (VBE2) non-VGA controller 2 (VBE2) Programmed DAC with blank bit | |
| + | |0x900E|4バイト|サポートするモードの一覧表のアドレス(文字列のポインタ?)終端が 0xFFFFの文字列らしい| |
| + | |0x9012|2バイト|VRAMの大きさ・・・かな?| |
| + | |
| + | 以降はVESA 2.0以降の場合。 |
| + | |0x9014|2バイト|ソフトウェアのバージョン?なんの?| |
| + | |0x9016|4バイト|製造業者の名前のアドレス(やっぱポインタかな?)| |
| + | |0x901A|4バイト|製品名のアドレス| |
| + | |0x901E|4バイト|製品のリビジョンナンバー?| |
| + | |0x901F|225バイト|ここから0x9100まではメーカーの自由な領域???| |