XFree86を使う

XFree86を使えば、GUIとなり便利になるので使える場合は是非使いましょう。


インストール

2007年3月現在でXFree86の最新バージョンは4.6.0です。
FreeBSD 4.11-RELEASEの/stand/sysinstallの配布ファイルからインストールすると4.4.0がインストールされます。
しかし4.4.0、4.5.0ともに、PC-9821Ra40で正常に使用することが出来ないので、XFree86 4.6.0(もしくは4.3.0)を使いましょう。
参考1: [XFree86] Report of XFree86 4.4.0 on NEC PC98 (1) (The Mail Archive)
  (意訳:一部のキー入力が正常に出来ない)
参考2: [XFree86] Report of XFree86 4.5.0 on NEC PC98 (The Mail Archive)
  (意訳:PC-98だとTridentドライバでは無限ループになる)

現在、FreeBSDのX環境はX.Orgが標準となっています。
しかしPC-98でX環境を使いたい場合は、X.OrgよりもXFree86の方が良いようです。XFree86の方がお勧めとは一概に言い切れないようです。

  • 上のPC-98対応パッチもXFree86では反映されているけど、X.Orgでは(現時点では)反映されていない模様
  • XFree86を使う場合は、Xを使うportsはmakeし直す必要がある(実際には、結構そのまま動くようです)
  • X.Orgを使う場合は、X.Orgのソースを修正して、makeする必要がある

FreeBSD 4系は XFree86 が標準なのでそんなに問題ありませんが、FreeBSD 5系以降はX.Orgが標準となっているので注意が必要です。
FreeBSD 5系以降での使用

FreeBSD 4.x用のXFree86 4.6.0のバイナリを、適当なftpサイトからダウンロードしてきます。
(例えば、ftp://ftp.iij.ad.jp/pub/X/XFree86/4.6.0/binaries/FreeBSD-4.x/ から落とせます)
# もちろん、自分でソースからコンパイルしても構いません。
一緒にあるファイル Install を読めば、何をすれば良いか大体分かるでしょう。
(途中に書いてある、13個くらいのファイルをダウンロードして、"sh Xinstall.sh"と打てばOK)

無事にインストールできたら、設定に移ります。


設定

PC-98 用の XF86Config の雛形として、/usr/X11R6/lib/X11/XF86Config.98 があります。
これを /etc/X11/XF86Config にコピーし、適宜編集して使うことにしましょう。

グラフィカルな画面で編集したいという人は xf86cfg -textmode というものがあります。
/stand/sysinstall から「設定」→「XFree86」と進んで、「xf86cfg -textmode」を選びます。(もしくはコマンドを直接入力)
ここで、自分の環境に合わせて設定をします。
# PC-9821Ra40に搭載されているグラフィックカードは TGUI9682XGi (ProVidia9682) ですがXFree86では tgui9660 で認識するようです。

基本的な設定が終わったら、次に細かいところをエディタを使って直接編集していきましょう。
Xの設定ファイルは /etc/X11/XF86Config です。これを編集していきます。
色々手順を書いていっても良いのですが、めんどくさいので結果だけ。
(日本語のコメントはこのページ用に書き加えたものです。)

MonitorセクションでModelineをうまく設定してやれば、任意の解像度を使うことが出来ます。
Modelineの計算は XF86Config の Modeline の代書屋 を利用すると便利です。
960x720ドットの例を次の設定例で示しています。

# /etc/X11/XFree86Config の設定例
#                         for PC-9821Ra40
Section "ServerLayout"
	Identifier     "Layout0"
	Screen      0  "Screen0" 0 0
	InputDevice    "Keyboard0" "CoreKeyboard"
	InputDevice    "BusMouse" "CorePointer"
EndSection

Section "Files"                          # フォントのパス指定など(順番が大事?)
	RgbPath 	"/usr/X11R6/lib/X11/rgb"
	FontPath	"/usr/X11R6/lib/X11/fonts/100dpi"
	FontPath	"/usr/X11R6/lib/X11/fonts/100dpi:unscaled"
	FontPath	"/usr/X11R6/lib/X11/fonts/75dpi"
	FontPath	"/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
	FontPath	"/usr/X11R6/lib/X11/fonts/misc"
	FontPath	"/usr/X11R6/lib/X11/fonts/misc:unscaled"
	FontPath	"/usr/X11R6/lib/X11/fonts/CID"
	FontPath	"/usr/X11R6/lib/X11/fonts/PEX"
	FontPath	"/usr/X11R6/lib/X11/fonts/Speedo"
	FontPath	"/usr/X11R6/lib/X11/fonts/TTF"
	FontPath	"/usr/X11R6/lib/X11/fonts/Type1"
	FontPath	"/usr/X11R6/lib/X11/fonts/cyrillic"
	FontPath	"/usr/X11R6/lib/X11/fonts/encodings"
	#FontPath	"/usr/X11R6/lib/X11/fonts/latin2"
	FontPath	"/usr/X11R6/lib/X11/fonts/local"
	FontPath	"/usr/X11R6/lib/X11/fonts/util"
EndSection

Section "Module"
	Load  "freetype"
	# Load  "xtt"
	Load  "extmod"
	Load  "glx"
	Load  "dri"
	Load  "dbe"
	Load  "record"
	Load  "xtrap"
	Load  "type1"
	Load  "speedo"
EndSection

Section "ServerFlags"
	Option      "PC98"                # なくてもいいけど念のため追加
EndSection

Section "InputDevice"
	Identifier  "BusMouse"
	Driver      "mouse"
	Option	    "Protocol" "Auto"
	Option	    "Emulate3Buttons"
	Option	    "Device" "/dev/sysmouse"
EndSection

Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "keyboard"
	Option	    "XkbModel" "pc98"
	Option	    "XkbLayout" "nec/jp"
EndSection

Section "Monitor"
	Identifier   "DV17C4"
	HorizSync    31.0 - 69.0
	VertRefresh  59.0 - 84.0
	Modeline "960x720" 73 960 1000 1176 1288 720 720 738 757
EndSection

Section "Device"
	Identifier  "NECTrident"
	Driver      "trident"
	ChipSet     "tgui9660"            # tgui9660で認識、なくても良い
	Card        "trident tgui9680"
#	Option      "NoAccel"
#	Option      "SWCursor"
	Option      "NoPciBurst"          # ゴミの軽減
	Option      "SetMClk" "80.00 MHz" # 重要!?
#	Option      "XaaNoCPUToScreenColorExpandFill"
#	Option      "XaaNoScanlineCPUToScreenColorExpandFill"
#	Option      "XaaNoScreenToScreenColorExpandFill"
	VideoRAM    2048
	BusID       "0:8:0"
EndSection

Section "Screen"
	Identifier "Screen0"
	Device     "NECTrident"
	Monitor    "DV17C4"
	DefaultDepth      16
	SubSection "Display"
		Depth     8
		Modes    "960x720" "800x600" "640x480"
	EndSubSection
	SubSection "Display"
		Depth     16
		Modes    "960x720" "800x600" "640x480"
	EndSubSection
EndSection


起動してみる

このようなファイルが出来たら、プロンプトで"startx"と打つことによりX Window Systemが起動します。
あとは適当なウィンドウマネージャを入れたり、~/.xinitrc を編集したりして自分の好みのGUI環境を構成して下さい。
ウィンドウマネージャによっては Windows95 や MacOS ライクのものもあります。
僕はウィンドウマネージャには fvwm2 を使っています。


TGUI9682XGiでの改善方法

うちのPC-9821Ra40では画面をスクロールしたりすると、ゴミが出てしまいます。
Deviceセクションのオプションで"NoPciBurst"を指定すると、結構改善しますがはあまり実用的ではないかもしれません。
まぁ、XFree86 3.3.6 の頃よりはかなり改善していますが。

"SetMClk"オプションでメモリクロックを指定してあげると、画面の乱れがかなり改善できるようです。
これなら実用的に使えると思います。(完全ではないですが)
ただし、かなり危険な感じがします。

0.1MHz違う値を指定するだけで、画面がハングアップしてしまいます。(CTRL + GRPH + BS の強制終了も無理)
このオプションを試すときは十分注意して実行しましょう。
(例えば、予め "shutdown -r +1" 等として1分後に再起動するようにしておくとか)
ちなみに僕は50.00MHzから100.00MHzまで1MHz単位で試してみた結果、(僕の環境では)80.00MHzが一番良い状態になりました。
どなたか1MHz以下の単位で試してみて、もっと良い状態が得られたらぜひ教えて下さい。

ログを取ってみると、
(--) TRIDENT(0): Memory Clock is 46.14 MHz
(**) TRIDENT(0): Setting new Memory Clock to 80.00 MHz
というログがあり、デフォルトは46.14MHzのようです。つまり、かなり高クロックに設定し直しているので、自己責任で設定しましょう。

以下、/usr/X11R6/lib/X11/doc/Japanese/README98のtrident部分がとても参考になるので、引用します(一部修正)。
# 現在のXFree86は、/usr/X11R6/lib/X11/doc/Japaneseディレクトリが存在しません。下の「その他」参照。

  4.4.  trident ドライバ

  NEC の内蔵アクセラレータ (Trident TGUI9680/9682) で動作するドライバで
  す。Accel でお使い下さい。

  4.4.1.  XF86Config の設定

     VideoRam 2048(または 1024)
        VideoRam が正しく検出できない場合に設定して下さい。

  以下の Option(XaaNoScreenToScreenCopy を除く) は TGUI9680 では設定しな
  くても動作することが確認されていますが、TGUI9682 では不可欠です。設定
  しない場合の症例も含めて解説しますが、これらの問題が生じず、ログに

     Trident : BitBLT engine time-out.

  が現れないのであれば設定不要です。(これらは設定しない方が動作が速いこ
  とを念頭において下さい。)

     Option "NoPciBurst"
        マウス・カーソルがマウスの動きに追従せず、またマウス・カーソルの
        動いた跡にその「足跡」が残る場合や描画される文字のドット落ちが甚
        だしい場合に要設定です。

     Option "XaaNoScreenToScreenCopy"
        解像度が 1024x768 以下では設定不要です。それを越える解像度におい
        てマウス・カーソルがマウスの動きに極端に追従しない場合に要設定で
        す。

     Option "XaaNoCPUToScreenColorExpandFill"
        文字の描画が極端に遅いかまたは描画しない場合に要設定です。

     Option "XaaNoScanlineCPUToScreenColorExpandFill"
        文字の描画が極端に遅いかまたは描画しない場合に要設定です。

     Option "XaaNoScreenToScreenColorExpandFill"
        文字の描画が極端に遅いかまたは描画しない場合に要設定です。

  4.4.2.  報告されている問題

  いずれも TGUI9682 特有の表示上の問題点です。

  o  マウスを動かすと、カーソルの軌跡が少し汚れます。

  o  kterm 上でマウスの左ボタンを押しながらドラッグすると、文字が反転す
     るところに横線状のノイズが出ます。

  o  kterm に表示される文字のドットが少し落ちます。

  4.4.3.  その他

  o  まだ十分なテストが行われていないので動作レポートをお願いします。

  4.4.4.  関連

  XFree86 man page, trident man page
以下の3つのオプションは環境によっては不可欠のようですが、私のPCでは追加しても違いがよく分かりませんでした。
Option      "XaaNoCPUToScreenColorExpandFill"
Option      "XaaNoScanlineCPUToScreenColorExpandFill"
Option      "XaaNoScreenToScreenColorExpandFill"


FreeBSD 5系以降での使用

FreeBSD 5系やFreeBSD 6系では、X.Orgが標準となっています。
したがってXFree86を使いたい場合は、ちょっとした注意が必要です。
portsをmakeする際に、XFree86を使っていることを知らせてあげる必要があります。
/etc/make.conf に、

X_WINDOW_SYSTEM=xfree86-4

の1行を書き加えておきましょう。

X.Orgを使う場合は、修正して使う必要があります。
FreeBSDも独自のパッチを用意しています。それらは /usr/ports/x11*/*/files/ にあります。
X.Orgが対応してくれなくて、かつ、PC-98に共通して致命的なものは、ここに反映していただいているようです。したがって、これらのパッチも利用した方がよいでしょう。

  1. 一度、portsを利用して、make, make installする
  2. ソースに自前の修正を加えて、make, make installする
    例えば TGUI に関しては、/usr/ports/x11-servers/xorg-server/ で make, make install
    xc/programs/Xserver/hw/xfree86/drivers/trident/ に移動して、trident_driver.c を修正してmakeすれば、新たなtrident_drv.oができ、make installすればそれが /usr/X11R6/lib/modules/drivers/ にコピーされます

(TGUIのパッチはコミットされた感じです‥‥?(よく分かっていません))

X.Orgのmakeには、私の環境(Celeron 400MHz、Memory 96MB)で2時間くらい(らしい)です。



その他

現在の FreeBSD の packages/ports では、/usr/X11R6/lib/X11/doc/Japanese/README98 がインストールされません。
このファイルに PC-98 に関する情報が書かれています。
ftpサイトで過去のXFree86の配布ファイルを探したところ、4.4.0には、Xjdoc.tgz というファイルが存在し、README98 がありました。
こちらをダウンロードして、手動で解凍し、読んでおくと良いでしょう。(4.3.0のXjdoc.tgzの方がファイルが沢山入っていましたが、どれも古い内容の物っぽいので、4.4.0の物で良いでしょう)

また、ソース(X4?0src-?.tgz)にはREADME98が入っているので、ソースからmakeする場合は別途探す必要はありません。
ソースからmakeする場合は、xc/config/cf/host.def (ファイルが存在しなかったら新規作成)に、

#define InstallJapaneseDocs  YES

と書いておけば、インストール時に適切な場所においてくれます。

すでにmakeしてある場合は、展開されたソースの xc/programs/Xserver/hw/xfree86/doc/Japanese/ に存在しているので、再度makeする必要はありません。

PC-98移植チームが、現在でももうほとんど活動していないようですので、今後新たなグラフィックボードがPC-98対応になる見込みはほぼありません。

PC-98でX環境をきれいに使いたい場合は、MGA Milleniumが安定してお勧めのようです。
PC-98でFreeBSDのX環境をメインで使いたい方は、VGAがdisableできる(もしくはPC-98に挿されていた)、Milleniumを搭載したグラフィックボードを探しましょう。(現在では入手困難ですが)

# Savage 2000を搭載した、I-OデータのGA-S2K32/PCIでXを動かそうと試みていますが、(自分でソースを修正しない限り)ほとんど見込みがなさそうです。
# とりあえず、参考までに GA-S2K32/PCIでXFree86を起動したときのログ



PC-98向けにXFree86/X.Orgの移植作業をされている(されていた)木村様からたくさんの情報提供をいただきました。(このページの最初で紹介した問題を改善した方です)
このページはそれらの情報も反映させていただきました。
木村様に感謝いたします。