現在、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 つの異なるタイプがあるのです。
MemBase 0x04e00000' または
`MemBase 0x04000000' を指定してください。この指定は、A26 ライ
ンを実装した VLB マザーボードを使うことを前提にしています。この位置で
はなく、0x2000000 にマップするカードがあるかもしれませんし、5429 等の
最近のカードは通常、0x03e00000 (62MB) にマップするようです。メモリが 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