現在、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