1: 2007-11-27 (火) 13:09:28 |
現: 2024-01-06 (土) 22:37:43 |
| はりぼてではVESA2.0でないと高解像度化できない。 | | はりぼてではVESA2.0でないと高解像度化できない。 |
| ・・・なんでじゃぁ??? というわけで。 | | ・・・なんでじゃぁ??? というわけで。 |
| + | |
| + | (まぁ、よーするに。ウチで実験に使ってるボロノートがVESA1.2なんだよねぇ。なので、コイツで高解像度化ってできないもんかと思って・・・) |
| + | |
| + | *はりぼて上のチェック [#h8b59345] |
| + | はりぼてでは、asmhead.nas内で起動時にVESAのチェックを行っている。 |
| + | (つまり、ただ単にVESA2.0かどうかだけをチェックしてるわけじゃないんだよね) |
| + | |
| + | えっと・・・コードを読んでみると・・・ |
| + | |
| + | -0x4f00でBIOSコール |
| + | --そもそもこれが不成功ならscrn320へジャンプ |
| + | --VESAのバージョンチェック。2.0以下(1.02とか)ならscrn320へジャンプ |
| + | -0x4f01でBIOSコール。(CXに要求の画面モード) |
| + | --そもそもこれが不成功ならscrn320へジャンプ |
| + | --帰ってきた情報のうち、0x19バイト目をチェック。これは画面の1ピクセルが何ビットで構成されているのかという情報。これが8じゃなかったらscrn320へジャンプ |
| + | --次に0x1bバイト目をチェック。これはメモリーモデルタイプ?を表す。これが4(Packed pixels)でなければscrn320へジャンプ |
| + | --最後に0x00バイト目をチェック。ここのbit7が立っているかどうか。つまり、(Linear framebuffer mode supported)かどうかをチェック。ダメだったらscrn320へジャンプ |
| + | |
| + | ・・・っとまぁ、こういうチェックをしているわけだね。 |
| + | |
| + | |
| + | *画面モードの切り替え [#i86e2dec] |
| + | はりぼてでは全てのチェックを終え、正常だといよいよ画面の切り替えを行う。 |
| + | この場合、AXに0x4f02をセット。さらにBXに画面モードをセットするんだけど、 |
| + | 単純にそのままセットではない。 |
| + | |
| + | BXにセットする値はビットごとに意味があるようだ。 |
| + | |
| + | -0〜13ビットまでが画面モード。ここに0x101(640x480x256)だの0x105(1024x768x256)だのをセットする。 |
| + | -14ビット目はリニアアクセスモード要請(1で要請) -- ただし VESA 2.0以降 |
| + | -15ビット目がVRAMクリア省略(1で省略) |
| + | |
| + | はりぼてではBXに対し、0x4000 + 画面モード という値をセットしている。つまり、 |
| + | 画面モード101(640x480x256)にしたい場合 |
| + | |
| + | ビット0〜13 0000000100000001 0x101 モード番号 |
| + | ビット14 0100000000000000 0x4000 リニアアクセスを要請する |
| + | ビット15 0000000000000000 0x0000 VRAMクリアを省略しない |
| + | |
| + | こういうことのよーでする・・・ |
| + | |
| + | |
| + | |
| + | *オベンキョ [#rd345145] |
| + | ***Linear framebuffer mode [#mf3f927c] |
| + | リニアフレームバッファモードと読む。リニアフレームバッファとはなにかというと、えーーっと。ようするに、「普通にデータを書き込めるフレームバッファ」ということらしい。 |
| + | |
| + | ''普通''とはなにかというと、はりぼてで全般的に採用されている方式。つまり、0xa0000に0x08を書き込むと、画面の左上にポツンと赤い点が表示されるような動作をするもの。 |
| + | |
| + | 分かりやすくするために''普通ではない''モード。つまりノンリニアなものを説明。 |
| + | プレーンと呼ばれる下敷きがあって、そこに別々にデータを打ち込むことで画面に点が表示される。よくあるパターンは、赤青黄等の3色以上に分かれているパターン。こういうのに点を打ちたい場合、まず赤のプレーンに点を打ち、次に青のプレーンに切り替えてからまた点を打ち・・・と、プレーンを切り替えて色を表現するようなパターン。 |
| + | 比較的遅く、またプログラムも煩雑になるのはわかるだろう。 |