4: 2007-11-26 (月) 10:30:25 |
現: 2024-01-06 (土) 22:39:11 |
| | | |
| MOV AX,0x4f00 ;AXにファンクション番号である0x4f00を | | MOV AX,0x4f00 ;AXにファンクション番号である0x4f00を |
| + | |
| MOV AX,0x9000 ;ここはようするに、ES:DIに0x9000:0を | | MOV AX,0x9000 ;ここはようするに、ES:DIに0x9000:0を |
| MOV ES,AX ;書き込みたいだけ。ESは直接代入できない | | MOV ES,AX ;書き込みたいだけ。ESは直接代入できない |
| MOV DI,0 ;のでこうしているだけ | | MOV DI,0 ;のでこうしているだけ |
| + | |
| INT 0x10 ;BIOSコール! | | INT 0x10 ;BIOSコール! |
| | | |
| --0x02 : VESAは存在するっぽいんだけど、BIOS設定等でカットされてて使えない? | | --0x02 : VESAは存在するっぽいんだけど、BIOS設定等でカットされてて使えない? |
| --0x03 : VESAは存在するっぽいんだけど、なんらかの理由でまともには使えない? | | --0x03 : VESAは存在するっぽいんだけど、なんらかの理由でまともには使えない? |
| + | -結果、 |
| + | CMP AX,0x004f |
| + | JNE scrn320 |
| + | 等とすることでVESAを使うかVGAの元来の機能で我慢するかを分岐できる |
| + | |
| + | |
| + | |
| + | |
| | | |
| さらに、例のES:DIアドレスに以下の情報が書き込まれる | | さらに、例のES:DIアドレスに以下の情報が書き込まれる |
| 0xc0078番地から文字が。終端は0で終わる文字列だった。 | | 0xc0078番地から文字が。終端は0で終わる文字列だった。 |
| ''Bochs VBE v2.0''という名前だった。 | | ''Bochs VBE v2.0''という名前だった。 |
| + | |
| + | |
| + | |
| + | *0x4f01 [#o45e3a87] |
| + | 上記、0x4f00ファンクションの後に行うらしい。VESAの有無を確認したら、望みのビデオモードが動くかどうかを確認するものらしい。 |
| + | |
| + | |
| + | MOV AX,0x4f01 ;AXにファンクション番号である0x4f01を |
| + | MOV CX,0x101 ;使いたいモード番号を代入 |
| + | 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はない?あっても使えない?) |
| + | -結果、 |
| + | CMP AX,0x004f |
| + | JNE scrn320 |
| + | 等とすることでVESAを使うかVGAの元来の機能で我慢するかを分岐できる |
| + | |
| + | |
| + | さらに、例のES:DIアドレスに以下の情報が書き込まれる |
| + | |
| + | |
| + | -0x90000 |
| + | --2バイト:各種モードのフラグ。 |
| + | ---bit 0: mode supported if set |
| + | ---1: optional information available if set |
| + | ---2: BIOS output supported if set |
| + | ---3: set if color, clear if monochrome |
| + | ---4: set if graphics mode, clear if text mode |
| + | ---5: (VBE2) non-VGA mode |
| + | ---6: (VBE2) No bank swiotching supported |
| + | ---7: (VBE2) Linear framebuffer mode supported |
| + | |
| + | |
| + | -0x90002:1バイト: window A の属性 |
| + | --bit 0: exists if set |
| + | --1: readable if set |
| + | --2: writable if set |
| + | --bits 3-7 reserved |
| + | -0x90003:1バイト:window B の属性。上記Aと同じフォーマット |
| + | 04h WORD window granularity in K |
| + | 06h WORD window size in K |
| + | 08h WORD start segment of window A |
| + | 0Ah WORD start segment of window B |
| + | 0Ch DWORD -> FAR window positioning function (equivalent to AX=4F05h) |
| + | 10h WORD bytes per scan line |
| + | ---remainder is optional for VESA modes, needed for OEM modes--- |
| + | -0x90012:2バイト: 画面のX方向のサイズ(ピクセル単位) |
| + | -0x90014:2バイト: 画面のY方向のサイズ(ピクセル単位) |
| + | -0x90016:1バイト: 1文字のX方向のサイズ(ピクセル単位)。高解像度テキスト用? |
| + | -0x90017:1バイト: 1文字のY方向のサイズ(ピクセル単位)。高解像度テキスト用? |
| + | -0x90018:1バイト: プレーンの数?(たとえば4なら赤青黄輝とか?) |
| + | -0x90019:1バイト: 画面の1ピクセルが何ビットで構成されているか? |
| + | -0x9001A:1バイト: バンクの数。 ?? |
| + | |
| + | -0x9001B |
| + | --1バイト:メモリーモデルタイプ。0x04だと256色パレットタイプ。0x06だとダイレクトカラー? |
| + | ---0 Text |
| + | ---1 CGA graphics |
| + | ---2 Hercules Graphics |
| + | ---3 EGA 16 color |
| + | ---4 Packed pixels |
| + | ---5 Non chain 4 256 color modes |
| + | ---6 Direct 15/16/24 bit |
| + | ---7 YUV (luminance-chrominance, alos called YIQ) |
| + | ---8-0Fh Reserved for VESA |
| + | ---10h-0FFh Reserved for OEM |
| + | |
| + | -0x9001C:1バイト: バンクの大きさ(KB単位) |
| + | 1Dh BYTE number of image pages |
| + | -0x9001E:1バイト: 予約らしい。常に1になっているらしい |
| + | ------VBE v1.2+ -------------------------- |
| + | 1Fh BYTE Red mask size |
| + | 20h BYTE Red mask position |
| + | 21h BYTE Green mask size |
| + | 22h BYTE Green mask position |
| + | 23h BYTE Blue mask size |
| + | 24h BYTE Blue mask position |
| + | 25h BYTE Reserved mask size |
| + | 26h BYTE Reserved mask position |
| + | 27h BYTE Direct Screen mode info |
| + | Bit 0 If set the color ramp is programmable, if clear fixed |
| + | 1 If set the reserved field (as defined by Bytes 25-26h) |
| + | can be used by the application, if clear the field is |
| + | truly reserved. |
| + | --- VBE v2.0 --- |
| + | -0x90028:4バイト:リニアフレームバッファ時のVRAMの開始番地。 |
| + | 2Ch DWORD Pointer to start of offscreen memory |
| + | 30h WORD Offscreen memory in Kbytes |
| + | The buffer is defined as 256bytes |
| + | |
| + | ***豆知識! [#nb8254f8] |
| + | -枝豆ってやぁ〜・・・大豆やねんでぇ(コラなぜ殴る痛いじゃないか) |
| + | |
| + | -COLOR(red){VESAではバンク切り替えのバンクをウィンドゥと呼称するらしい!!} |
| + | |
| + | |
| + | |
| + | |
| + | **戯言 [#d7a92b74] |
| + | むむむ・・・? |
| + | ウチのVESA1.2のボロノートは256パレットもリニアフレームバッファもサポートしていないのではりぼては動かせない・・・ |
| + | ではこのモードで描画するにはどうしたらいいのか???? |
| + | ・・・どうも、バンク切り替え?というような方法で行うような感じがしてきた。 |
| + | ようするに、赤青黄などの成分に分けて、色ごとになんらかの方法で切り替えを行って描画する・・・そんな方式のような気がしてきた・・・ |
| + | |
| + | |
| + | もちろんこれはそれなりに煩雑なのだろうけど、なんか思ったより大変じゃないような気がしてくる・・・どうなんだろうか? |
| + | |
| + | 少なくともVGAのように1ドットが1ビットなんてややこしい方式でなければ・・・・ |