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

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

現在、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種類の異なるタイプのカードがあります:

多分、試行錯誤に頼らないといけないでしょう。16M バイトより少ないメモリならば `誤った' membase を設定するとグラフィック画面は表示できませんが、多分コントロール+オルタネート+バックスペースを同時に押すと戻ってこれます。

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


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