概要
ここでは PC-98 のための各々の driver の使用例について詳しく述べます.
概要
ここでは PC-98 のための各々の driver の使用例について詳しく述べます.
目次
ビデオボードの初期化などに関して PC-98 に共通する特徴は以下の通り.
モニターとのデータのやり取りに関して PC-98 に共通する特徴は以下の通り.
mga driver による表示画面の切り換えは DDC, VBE を実行した後に行なわれます. それを DDC, VBE の前 (MGAdoDDC() の直前) に行なうようにしても DDC2 は使えませんでした.
xorg.conf は次のようにします.
Section "Device"
Identifier "MGA Millennium I"
Driver "mga"
# Option "NoDDC" ← DDC 関連はあくまで試験用.
# Option "NoDDC1"
# Option "NoDDC2"
# Option "Int10" "off""
Option "DRI" "off""
BusID "PCI:0:14:0" # for Rv20
# BusID "PCI:0:16:0" # for Ra20
Endsection
Rv20 では DDC2 (xf86DoEDID_DDC2) によりモニターの情報が取得できています. この場合,Option "Int10" "off"" は不要です.
(WW) MGA(0): Could not retrieve video BIOS! ← PC-98 なので,これで正しい. (--) MGA(0): VideoRAM: 4096 kByte (II) MGA(0): I2C bus "DDC" initialized. (II) MGA(0): I2C device "DDC:E-EDID segment register" registered at address 0x60. (II) MGA(0): I2C device "DDC:ddc2" registered at address 0xA0. (II) MGA(0): I2C Monitor info: 0x2871e000 (ここで取得したモニターの情報が xf86PrintEDID() により出力される.) (II) MGA(0): end of I2C Monitor info ← この後に vbe は load されない. (II) MGA(0): EDID vendor "ENC", prod id 6177 ← 以下,xf86SetDDCproperties() の出力が続く. (II) MGA(0): Using hsync ranges from config file (II) MGA(0): Using vrefresh ranges from config file (II) MGA(0): Printing DDC gathered Modelines: (II) MGA(0): Modeline "1280x1024"x0.0 108.00 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync (64.0 kHz) (xf86SetDDCproperties() の出力の終りまで略) (==) MGA(0): Using gamma correction (1.0, 1.0, 1.0)
一方,Ra20 では DDC2 によりモニターの情報が取得できません. 次いでそれを VBE (vbeDoEDID()) によって試みますが,それも失敗します. Rv20 でも "NoDDC" にすれば同じ結果になります. この場合,Option "Int10" "off"" が必要ですが,それなしでも致命的なエラーにはなりません.
(WW) MGA(0): Could not retrieve video BIOS! (--) MGA(0): VideoRAM: 4096 kByte (II) MGA(0): I2C bus "DDC" initialized. (II) MGA(0): I2C device "DDC:E-EDID segment register" registered at address 0x60. (II) MGA(0): I2C device "DDC:ddc2" registered at address 0xA0. (II) MGA(0): I2C Monitor info: 0x0 ← ddc2 が失敗したので 0 である. (II) MGA(0): end of I2C Monitor info ← 即座に終わる. PC-98 では xf86DoEDID_DDC1() は実行されない. (II) Loading /usr/local/lib/xorg/modules//libvbe.so (II) Module vbe: vendor="X.Org Foundation" compiled for 1.6.0, module version = 1.1.0 (II) Loading /usr/local/lib/xorg/modules//libint10.so ← vbe が使う. (II) Module int10: vendor="X.Org Foundation" compiled for 1.6.0, module version = 1.0.0 (II) MGA(0): initializing int10 Int10 が off ならば,以下の 3 行は出力されない. (==) MGA(0): Write-combining range (0xa0000,0x20000) was already clear (==) MGA(0): Write-combining range (0xc0000,0x40000) was already clear (EE) MGA(0): Cannot read V_BIOS (3) Function not implemented Int10 の on/off に依らず,vbe もモニターの情報の取得に失敗する. xf86SetDDCproperties() からも,何も実行されずに戻る. (==) MGA(0): Using gamma correction (1.0, 1.0, 1.0)
mga driver 1.6.2 (そしておそらくそれ以後) においては,xorg.conf に以下の内容を加える必要があります.
Section "Module" ← 既に存在するなら,新設する必要はない.
Load "xaa"
EndSection
そうでないと,log に以下のように出力されて X server が終了してしまいます.
/libexec/ld-elf.so.1: /usr/local/lib/xorg/modules/drivers/mga_drv.so: Undefined symbol "XAACreateInfoRec" xinit: giving up
trident driver は DDC2 が使えない,PC-98 では DDC1, VBE が使えない,というわけでモニター情報の取得はできません. vbe, int10 は必ず load されるので,Option "Int10" "off"" は必須です.
trident driver を TGUI9682 にて用いる場合,以下に赤い文字で示した Option を書き加える必要があります.
Section "Device" Identifier "NECTrident" Driver "trident" Option "Int10" "off"" Option "NoPciBurst" Option "XaaNoScreenToScreenCopy" Option "XaaNoCPUToScreenColorExpandFill" Option "XaaNoScanlineCPUToScreenColorExpandFill" Option "XaaNoScreenToScreenColorExpandFill" BusID "PCI:0:8:0" Endsection
これらの意味に関しては,X on PC-98 の 3 節 の README98 の 4.4.1 を御覧下さい.(4.4.2 も併せて.)
(注 : これはあくまで XFree86 の文書であり,X.Org 7 系にはこれに対応する文書はありません.)
log の関連部分は次のようになります.
(II) Loading /usr/local/lib/xorg/modules//libvbe.so
(II) Module vbe: vendor="X.Org Foundation"
compiled for 1.6.0, module version = 1.1.0
(II) Loading /usr/local/lib/xorg/modules//libint10.so
(II) Module int10: vendor="X.Org Foundation"
compiled for 1.6.0, module version = 1.0.0
(II) TRIDENT(0): initializing int10
("Int10" "off" しないと,以下の 2 行を出力した時点で server が止まります.)
(==) TRIDENT(0): Write-combining range (0xa0000,0x20000) was already clear
(==) TRIDENT(0): Write-combining range (0xc0000,0x40000) was already clear
環境は FreeBSD 4.10 + XFree86 4.4.0 です.
XF86Config は次のようにします.
module vbe, int10 は load されないので Option "Int10" "off" は不要です.
Section "Device" Identifier "CLGD7555" Driver "cirrus" BusID "PCI:0:3:0" Endsection
二箇所で (EE) が出ていますが,動作への影響はありません.
(--) PCI:*(0:3:0) Cirrus Logic GD 7555 Flat Panel GUI Accelerator rev 0, Mem @ 0xfe000000/24 (EE) CIRRUS(0): No valid MMIO address in PCI config space ← Option "noMMIO" はここに間に合わない. (--) CIRRUS(0): Not Using MMIO (II) Loading /usr/X11R6.7/lib/modules/libi2c.a ← I2C の load を抑制する Option はない. (--) CIRRUS(0): Not Using MMIO (II) Module i2c: vendor="The XFree86 Project" compiled for 4.4.0, module version = 1.2.0 (II) Loading /usr/X11R6.7/lib/modules/libddc.a (II) Module ddc: vendor="The XFree86 Project" compiled for 4.4.0, module version = 1.0.0 (EE) CIRRUS(0): I2C initialization failed (**) CIRRUS(0): *Mode "800x600": 49.5 MHz, 46.9 kHz, 75.0 Hz (**) CIRRUS(0): Mode "800x600H": 56.3 MHz, 53.7 kHz, 85.1 Hz
一般に配布されている savage driver は PC-98 では動作しません. 以下の記述は,当方で独自にソースを修正した driver を用いたものです.
現在の到達点は以下の通り. ビデオボードに関しては,対応できているのは I-O Data 製のものだけです.
PC 側から VRAM の情報を取得することができないので,VRAM が二通りある savage4 のボードに対しては私の手持ちのボードから得られる諸々の情報からそれを推測しております. (この推測がうまく行かない場合には,driver の中で VRAM を規定すれば済む話ですが.)
また PC 本体に関しては,「抜いちゃダメ」なボードの有無で動作が少し異なります.
xorg.conf は次のようにします.
Section "Device"
Identifier "GA-SV408/PCI"
# Identifier "GA-SV432/PCI"
# Identifier "GA-S2K32/PCI"
Driver "savage"
Option "Int10" "off"
Option "UseBIOS" "off"
Option "DRI" "off"
Option "sw cursor"
BusID "PCI:0:14:0" # for Rv20 ← どの PCI Bus に挿しているかによります.
# BusID "PCI:0:16:0" # for Ra20
Endsection
"UseBIOS" "off" を指定しなくても,PC-98 では video BIOS は使えないため,同じ結果になります.
(EE) SAVAGE(0): Failed to fetch any BIOS modes. Disabling BIOS.
この出力の直後に自動的に UseBIOS は off にされます.
Rv20 では DDC2 (xf86DoEDID_DDC2) によりモニターの情報が取得できています.
(--) SAVAGE(0): No DDC signal
(II) SAVAGE(0): I2C bus "I2C bus" initialized.
(II) SAVAGE(0): I2C device "I2C bus:E-EDID segment register" registered at address 0x60.
(II) SAVAGE(0): I2C device "I2C bus:ddc2" registered at address 0xA0.
(II) SAVAGE(0): Manufacturer: ENC Model: 1821 Serial#: 16843009
(--) SAVAGE(0): Detected current MCLK value of 150.341 MHz
(EE) SAVAGE(0): Failed to fetch any BIOS modes. Disabling BIOS.
(==) SAVAGE(0): Using video BIOS to set modes
(II) Loading /usr/local/lib/xorg/modules//libvbe.so
(II) Module vbe: vendor="X.Org Foundation"
compiled for 1.6.0, module version = 1.1.0
ABI class: X.Org Video Driver, version 5.0
(II) Loading /usr/local/lib/xorg/modules//libint10.so
(II) Module int10: vendor="X.Org Foundation"
compiled for 1.6.0, module version = 1.0.0
ABI class: X.Org Video Driver, version 5.0
(II) SAVAGE(0): initializing int10
(**) SAVAGE(0): Option "int10" "off"
(II) Reloading /usr/local/lib/xorg/modules//libint10.so
(II) SAVAGE(0): initializing int10
(**) SAVAGE(0): Option "int10" "off"
Ra20 では DDC2 によりモニターの情報が取得できていません. GA-SV408 の出力にモニターを直接繋げば,DDC2 に関しては Rv20 と同じ動作になります. (当然ですが,そうした場合には console 画面は表示されません.)
GA-S2K32/PCI はデジタル出力端子から信号が出ておりません.[1] マニュアルにも「DVI 端子は PC-98 シリーズでは使用できません」と明記されておりますから,当然と言えば当然ですが. ただまあ,どこかのフラグを立てれば X の画面だけはデジタルでも出力される気がします. とはいえ,console 画面はアナログでしか出力されませんから運用が面倒そうです. モニターにアナログ,デジタルの二系統の入力端子があって,それらをモニター側で手動で切り換えられるような環境とかになれば,追求する気になるのですが.
他のボードは,デジタル出力端子のコネクタに合うケーブルを所持していないので試せません. そのうち調達します.
なお,この savage driver は VRAM が 8MB でも 32MB でも,X server と合わせて PC の RAM を 100MB 以上使用します. (参考までに,mga driver なら 30MB 程です.)
[1] AT 互換機においては console, X ともにデジタル信号も出ています.
(補足) ごく稀にですが,X server を立ち上げると,今まではうまく行っていたのに突然
(EE) device not fond
となって失敗することがあります. このエラーは本来は driver の指定を誤った際に生じるものです. 一度この状態になると,何度やり直しても同じエラーが繰り返されるだけです.
こうなった場合には,その PC-98 で Windows を立ち上げるか,そのボードを AT 互換機に挿し換えて X.Org を立ち上げるかすれば,元のように PC-98 + X.Org で使えるようになります. (自前の修正におけるボードの初期化の部分に何かが足りないことが原因でしょう.)
Savage 2000 と Savage 4 とを比較すると,総じて前者が速いです.
ただし動画に関しては,Savage 2000 の方は driver がハードウェア再生をサポートしていないので,Savage 4 の方が滑らかです.
いずれにしても,動画の再生は PC-98 ではかなり苦しいです.
(注) Savage 2000 は,ハードウェアとしては動画再生機能を持っております.
今の driver からはそれを使うことができないのです.
この先,driver がそれをサポートしてくれればうれしいのですが.
% man savage NAME savage - S3 Savage video driver (中略) savage is an Xorg driver for the S3 Savage family video accelerator chips. 2D, 3D, and Xv acceleration is supported on all chips except the Savage2000 (2D only).