次のページ 前のページ 目次へ

5. リニアアドレッシングと 16bpp/24bpp/32bpp モード

現在、SVGA サーバのフレームバッファのコードでは、 16bpp, 24bpp, 32bpp を使うにはリニアアドレッシングが必要になります。色の深さ別の Screen セ クションで Option "linear" を指定することで、リニアアドレッシングを有 効にすることができます。MemBase の設定(Device セクション)も多分必要で す。(ただし、PCI カードであればこれらの値は自動的に選択されます。この ようなカードには、 5446, 546x や 543x ベースの一部のカード等があります。) カードの設定は異なるものがいろいろあります。

ISA バス用の 542x/543x を使っており、かつシステムのメモリが 16MB 以上 でならば、リニアアドレッシングを使うことはできません。申し訳ないですが、 16bpp も駄目です。メモリが 14MB 以下であれば、 `MemBase 0x00e00000' を指定することによりフレームバッファを 14MB の位置にマップすることができるかもしれません。`e' の後には 0 が 5 個あります。残念ながら、ISA カードの多くはリニアアドレッシングをサポー トしていません。

VESA ローカルバス用の 5424/26/28/29 を使っている場合、話はもっと複雑で す。リニアアドレッシングに関して 2 つの異なるタイプがあるのです。

設定を行うにはおそらく試行錯誤するしか無いでしょう。システムのメモリが 16MB より小さい場合、MemBase の値を「誤って」設定すると全くグラフィッ クスが表示されなくなるでしょう。ですが、多分 ctrl-alt-backspace のキー 操作でサーバを終了させることができます。

メモリが 16MB 以上の場合、前者のタイプのカードを使うと(後者のタイプで も頭の悪い VLB マザーボードを使っている時)はマシンがクラッシュするでしょ う(たぶん突発的にハードリブートします)。

カードのタイプは自分の目で見て調べることもできます。カードの A26 にピ ンがあれば、これは 64MB 以上の位置にマップを行うことができると思われま す。これを行うには、カードを取り出してください。VESA ローカルバスのピ ン(これはカードのスロットでない側にある小さいコネクタピンです)の右側を 見てください(全てのチップはボードのこちら側に装着されます)。ここには 45 本のピンがあります。このピンには内側から順に 1 番から 45 番までの番 号が付いています(つまりカードの端に最も近いピンが 45番です)。内側から 数えていくと、17 番目のピンはたぶんありませんが、18-20番目のピンがあり ます。21 番目のピンが A30 で、22 番目が A28, 23番目が A26 です。つまり、 21-23 番のピンがなければ、このカードは 64MB 以上の位置へのマッピングは 行えません。21 番と 22 番の位置に隙間しかなく(あるいは、どちらも存在す る)、かつ 23 番の位置にピンがある場合には、このカードはたぶん 64MB を 越える位置へマップを行うことができます。カード上のそのピンの近くに回路 があれば、その可能性はさらに高くなります。

ローカルバス用の 543x を使う場合には、問題はもっと単純になりますが (Cirrus Logic の Windows 用ドライバはこれを用いています)、それでも問題 が無いわけではありません。

PCI バス用のカードを使う場合、フレームバッファのベースアドレスを格納す る PCI 構成レジスタというものがあります。PCI カードが検出されると、ド ライバはこのレジスタを自動的に読み込みます。`scanpci' プログラムを使え ば、PCI 構成を読み出し、ベースアドレスを表示することができます。

VESA ローカルバスの場合、543x カードのほとんどはデフォルトのアドレスが 64MB であり、ジャンパ設定で 2048MB と 32MB にすることができます。これ については多分カードに付属の説明書か、MS-Windows の system.ini ファイ ルに(linearaddr = <メガバイト単位のオフセット> 等と)書かれている と思います。このように設定を変更できる仕様は、アドレスピンでベースアド レスを変えることができない実装の VLB マザーボードがたくさんあることが 分かった後に、Cirrus Logic が追加したものです。MemBase が指定されなけ れば、ドライバはデフォルトの 64MB であるものとします。MemBase の設定の 例をいくつか示します:

        MemBase 0x02000000      32Mb
        MemBase 0x04000000      64Mb
        MemBase 0x80000000      2048Mb

最後に 546x カードの場合ですが、これを持っているなら運がいいと言えましょ う。心配するような「問題」は全くありません。546X は常にリニアアドレッ シングとメモリマップト I/O を使うことができますし、4GB 近くまでのメモ リアドレスを使うことができます。PCI 万歳!

XAA のおかげで、現在は 16bpp と 32bpp モードで完全にアクセラレーション が効きます。5436/46, 546X のような最近のチップでは、24bpp でも完全にア クセラレーションが効きます。したがって、表示するビット数は 4 倍まで増 えますが、X サーバが遅くなりすぎることはないはずです。24bpp モードと 32bpp モードは限られたカードでしかサポートされていないことと、少なくと も 2MB のメモリを積んでいなければならない点に注意してください。

XF86Config ファイルの "Screen" セクションでは、 使いたい色の深さそれぞれに対して "Display" サブセクションで定 義を行わなければなりません。この時、Modes と仮想スクリーンのサイズもサ ブセクションごとに指定します。例(ビデオメモリ 2MB の場合)を以下に示し ます:

Section "screen"
    SubSection "Display"
        Depth 8
        Virtual 1280 1024
        ViewPort 0 0
        Modes "640x480" "800x600" "1024x768"
        Option "linear"
    EndSubSection
    SubSection "Display"
        Depth 16
        Virtual 1024 992
        ViewPort 0 0
        Modes "640x480" "800x600" "1024x768"
        Option "linear"
    EndSubSection
    SubSection "Display"
        Depth 32
        Virtual 832 600
        ViewPort 0 0
        Modes "640x480" "800x600"
        Option "linear"
    EndSubSection
EndSection


次のページ 前のページ 目次へ