現在、SVGA サーバーが非アクセラレータの 16-ビットと 32-ビットピクセルを サポートするにはリニアアドレッシングが必須です。この制約はうまくいけば 将来的にはずされるでしょう。"linear" オプション は深さを指定する screen 節で指定することでリニアアドレッシングを有効にし、又 MemBase を (device 節で) 設定する必要があるでしょう。カードによって異なる構成がいくつもあ ります。
ISA バス用の 542x/543x と 16M バイトかそれ以上のシステムメモリの場合は
リニアアドレッシングは不可能です。16bpp は使えません、すいません。14M
バイト以下のメモリの場合は `MemBase 0x00e00000
' を使うことでフ
レームバッファを 14M バイトに割り付けることが可能です。`e' の後ろにゼロ
を5つ付けてください。残念ながら多くの ISA カードはリニアアドレッシング
をサポートしていません。
VESA ローカルバス用の 5424/26/28/29 の場合は、状況はもっと復雑です。 リニアアドレッシングについて2種類の異なるタイプのカードがあります:
MemBase 0x04e00000
' か又は
`MemBase 0x04000000
' を指定しましょう。A26 を 持っている VLB
マザーボードを仮定しています。またはカードが 0x2000000 に割り付けると
か、 5429 のような最近のカードは通常 0x03e00000 (62M バイト) に割り付
けています。16M バイト以上のメモリの場合は、最初のタイプのカード(と間抜けな VLB マ ザーボードの2番目のタイプも)でハングします(多分ハードリブートが自発 的に起ります)。
カードのタイプは目で確認して分かります。カードに A26 ピンがあれば、64M バイト以上に割り付けるものでしょう。確認を行うには、カードを抜いて下さ い。VESA ローカルバスのピン(カードのスロットでない側から見てコネクタピ ンの小さい方の細長い小片)で、右側(全てのチップが実装されている面)を 詳しくみてください。ここに 45 個のピンがあります。内側から 1 から 45 ま で番号を振ります(カードの端の方が45 番です)。内側から数えて、17 番目 のピンが無く、18 番目から 20 番目まではあると思います。21 番目が A30 で、22 番目が A28 、23 番目が A26 です。そして、21 番目から 23 番目のピ ンが無い場合、カードは 64M バイト以上に割り付けることは出来ません。21 番目と 22 番目が空いていて(または両方あり)且つ 23 番目がピンがある場 合、64M バイト以上に多分割り当てます。カード上のピンのそばに小さな回路 がある場合、かなり見込みがあると思います。
ローカルバス上の 543x カードはより単純(Cirrus Logic 社の winsows のドライバがこれをつかっています)ですが、問題が無いわけではありません。
PCI バス上のカードでは、PCI カードを探査したときに自動的にドライバが読 み込むフレームバッファの基底アドレスを格納している PCI 構成レジスタを 持っています。あるシステムでテストしたところ、レジスタは 0xa0000000 に 割り付けられていて、PCI ボードから 0x08000000 を増分指定で割り当てるよ うになっていました。`scanpci' プログラムは PCI 構成を読み出し基底アドレ スを見ます。
VESA ローカルバス上では、殆どの 543x カードは 64M バイトの標準的な割り 付けアドレスを持っていて、オプションで 2048M バイト と 32M バイトをジャ ンパピンで設定します。これはカードに同梱の資料に書かれているか、MS- Windows の system.ini ファイルに (linearaddr = <offset in megabytes > 等と) 書かれているでしょう。Cirrus Logic が多くの VLB マザーボード の実装状況を調査し加えたもので、これらと異なるアドレスピンには実装しな いのです(しかしながら、彼等の初めての Windows のドライバはこのカードを 順調には扱えませんでした)。ドライバは MemBase の指定が無い場合は標準の 64M バイトを仮定します。MemBase の例を少し示します:
MemBase 0x02000000 32Mb
MemBase 0x04000000 64Mb
MemBase 0x80000000 2048Mb
16bpp と 32bpp モードは限定した(スクロール、テキスト)のアクセラレータ
機能を持っていますがそれでも遅いと感じるかもしれませんが、それでも
(543x が持っているような)優秀なローカルバスインターフェースが十分助け
になるでしょう。
XF86Config
の "Screen"
節のなかの、"Display"
項(subsection) に Modes と 仮想画面の大きさを分けて動かしたい深さ毎に
定義しなければいけません。例(2M バイトのビデオメモリの場合)は:
Section "screen"
SubSection "Display"
Depth 8
Virtual 1152 900
ViewPort 0 0
Modes "640x480" "800x600" "1024x768"
Option "linear"
EndSubSection
SubSection "Display"
Depth 16
Virtual 1152 900
ViewPort 0 0
Modes "640x480" "800x600" "1024x768"
Option "linear"
EndSubSection
SubSection "Display"
Depth 32
Virtual 800 600
ViewPort 0 0
Modes "640x480" "800x600"
Option "linear"
EndSubSection
EndSection