雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。

はりぼてではVESA2.0でないと高解像度化できない。 ・・・なんでじゃぁ??? というわけで。

(まぁ、よーするに。ウチで実験に使ってるボロノートがVESA1.2なんだよねぇ。なので、コイツで高解像度化ってできないもんかと思って・・・)

はりぼて上のチェック anchor.png

はりぼてでは、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へジャンプ

・・・っとまぁ、こういうチェックをしているわけだね。

Page Top

画面モードの切り替え anchor.png

はりぼてでは全てのチェックを終え、正常だといよいよ画面の切り替えを行う。 この場合、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クリアを省略しない

こういうことのよーでする・・・

Page Top

オベンキョ anchor.png

Page Top

Linear framebuffer mode anchor.png

リニアフレームバッファモードと読む。リニアフレームバッファとはなにかというと、えーーっと。ようするに、「普通にデータを書き込めるフレームバッファ」ということらしい。

普通とはなにかというと、はりぼてで全般的に採用されている方式。つまり、0xa0000に0x08を書き込むと、画面の左上にポツンと赤い点が表示されるような動作をするもの。

分かりやすくするために普通ではないモード。つまりノンリニアなものを説明。 プレーンと呼ばれる下敷きがあって、そこに別々にデータを打ち込むことで画面に点が表示される。よくあるパターンは、赤青黄等の3色以上に分かれているパターン。こういうのに点を打ちたい場合、まず赤のプレーンに点を打ち、次に青のプレーンに切り替えてからまた点を打ち・・・と、プレーンを切り替えて色を表現するようなパターン。 比較的遅く、またプログラムも煩雑になるのはわかるだろう。


Last-modified: 2012-10-22 (Mon) 22:05:10 (GMT) (2818d) by