top page > PC unix > here

FreeBSD/pc98 の活用



目次

1. はじめに
2. APM/ACPI
3. Sound
4. Multimedia
5. USB I/F
6. SCSI, USB storage device
7. FD の mount

1. はじめに

表題に「FreeBSD/pc98 の活用」と書きましたが,ここでは PC-98 特有のかつ基本的な動作の話題を述べます.

2. APM/ACPI

APM (Advanced Power Management) は Rv20, Ra20, La13 で使えますが,Ap では使えません. Desktop PC では zzz で suspend したら resume する手段がないので,現在は

# shutdown -p now

で power off するという使い方しかしておりません. なお,PC-98 La13 では FreeBSD 2.2.8 までは蓋の開閉により suspend/resume を行なうことができましたが FreeBSD 3 系以降はできなくなっています.

ACPI (Advanced Configuration and Power Management) は PC-98 では利用できません.

使用法ですが,/boot/loader.conf に次のように記述します. (kernel を再構築する方法もあります.)

apm_load="YES"

また,/etc/rc.conf に次のように記述します.

apm_enable="YES"        # Set to YES to enable APM BIOS functions (or NO).
apmd_enable="YES"       # Run apmd to handle APM event from userland.
apmd_flags=""           # Flags to apmd (if enabled).

OS を再起動させれば,log に次の二行が現われるはずです.

apm0: <APM BIOS> on motherboard
apm0: found APM BIOS v1.12, connected at v1.0

module としての load の状況は kldstat にて確認することができます.

% kldstat
Id Refs Address    Size     Name
 1    7 0xc0400000 5cdb18   kernel
 2    1 0xc0a39000 72e4     apm.ko

3. Sound

Sound は Rv20, Ra20, La13 で使えます.
Ap は,最近の FreeBSD では試しておりませんが,過去には動作しておりました. (driver は Rv20, Ra20, La13 とは別.)

使用法ですが,/boot/loader.conf に次のように記述します.

sound_load="YES"
snd_mss_load="YES"

OS を再起動させれば,log に次の四行が現われるはずです.

pcm0: <CS4231A> at port 0xf40-0xf47 irq 12 drq 1 flags 0x10000 on isa0
drq/irq conf 22
pcm0: [GIANT-LOCKED]
pcm0: [ITHREAD]

Rv20 では /dev/sndstat の内容は次のようになります.

% cat /dev/sndstat
FreeBSD Audio Driver (newpcm: 32bit 2007061600/i386)
Installed devices:
pcm0: <CS4231A> at io 0xf40 irq 12 drq 1 bufsz 4096 [GIANT] (1p:1v/1r:1v channels default)

kldstat では次のようになります.

% kldstat
Id Refs Address    Size     Name
 1    7 0xc0400000 5cdb18   kernel
 2    5 0xc09ce000 4a64c    sound.ko
 3    1 0xc0a19000 c89c     snd_mss.ko

うちでは少なくとも xmcd, mpg123, pcmplay (tosha), timidity から利用できております.

4. Multimedia

mplayer は動作しております.

% gmplayer -vo x11 sample.mpg   ← 動画のファイルを再生する場合.
% gmplayer -vo x11 dvd://       ← DVD を再生する場合.

-vo xv を指定することができるか否かは,以下のようにすればわかります.

% xvinfo
X-Video Extension version 2.2
screen #0
 no adaptors present    ← mga2064w においてはこう出力されます.

5. USB I/F

現在 (2011.9.24) でも購入できる PCI 接続の USB I/F が PC-98 でも使えるかどうか試してみました. 対象は IFC-PCI5U2V (USB 2.0, Buffalo 製) です. 試したデバイスは,現時点ではマウス,HDD, DVD-ROM drive, USB Memory のみです.

/boot/loader.conf に次のように記述します.

usb_load="YES"
ehci_load="YES"         ← これは USB 2.0 のため.
uhci_load="YES"
ums_load="YES"          ← これはマウスのため.
umass_load="YES"        ← これは storage device のため.

例として,マウスを繋げてから boot した場合の log を提示します.

uhci0: <VIA 83C572 USB controller> port 0x6020-0x603f irq 6 at device 12.0 on pci0
uhci0: [ITHREAD]
usbus0: <VIA 83C572 USB controller> on uhci0
uhci1: <VIA 83C572 USB controller> port 0x6040-0x605f irq 10 at device 12.1 on pci0
uhci1: [ITHREAD]
usbus1: <VIA 83C572 USB controller> on uhci1
ehci0: <VIA VT6202 USB 2.0 controller> mem 0x20002000-0x200020ff irq 6 at device 12.2 on pci0
ehci0: [ITHREAD]
ehci0: VIA-quirk applied
usbus2: EHCI version 1.0
usbus2: <VIA VT6202 USB 2.0 controller> on ehci0
(中略)
usbus0: 12Mbps Full Speed USB v1.0
usbus1: 12Mbps Full Speed USB v1.0
usbus2: 480Mbps High Speed USB v2.0
ugen0.1: <VIA> at usbus0
uhub0:  <VIA UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
ugen1.1:  <VIA> at usbus1
uhub1:  <VIA UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus1
ugen2.1:  <VIA> at usbus2
uhub2:  <VIA EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus2
(中略)
uhub0: 2 ports with 2 removable, self powered
uhub1: 2 ports with 2 removable, self powered
uhub2: 4 ports with 4 removable, self powered
ugen1.2:  <Microsoft> at usbus1
ums0: <Microsoft Microsoft 3-Button Mouse with IntelliEye(TM), class 0/0, rev 1.10/3.00, addr 2> on usbus1
ums0: 3 buttons and [XYZ] coordinates ID=0

/usr/X11R6/lib/X11/xorg.conf を次の要領で変更すれば,X Window System にて USB Mouse が使えます.

#  Option     "Protocol"   "BusMouse"      ← この 2 行はバスマウス用の設定.
#  Option     "Device"     "/dev/mse0"

   Option     "Protocol"   "auto"          ← この 2 行は USB マウス用の設定.
   Option     "Device"     "/dev/ums0"

今後,種々の USB 機器を接続して試してみます. とはいえ,そう珍しい物は所有しておりませんが.

6. SCSI, USB storage device

これは AT 互換機とも共通の話ですが,いつからか OS 起動時に次のような "(probe0:" で始まるメッセージが出るようになりました.[1] 少なくとも FreeBSD 7.2 以後のことです. これで 2 年半使っていて動作に支障は生じていないのですが,気味が悪いです.

Waiting 5 seconds for SCSI devices to settle
(probe0:ahc0:0:0:0): TEST UNIT READY. CDB: 0 0 0 0 0 0
(probe0:ahc0:0:0:0): CAM Status: SCSI Status Error
(probe0:ahc0:0:0:0): SCSI Status: Check Condition
(probe0:ahc0:0:0:0): UNIT ATTENTION asc:29,0
(probe0:ahc0:0:0:0): Power on, reset, or bus device reset occurred
(probe0:ahc0:0:0:0): Retrying Command (per Sense Data)
da0 at ahc0 bus 0 target 0 lun 0          ← これ以降は「いつも通り」.
da0: <I-O DATA HDXG-S40-2 111S> Fixed Direct Access SCSI-2 device
da0: 20.000MB/s transfers (20.000MHz, offset 15)
da0: 19102MB (39121488 512 byte sectors: 8H 128S/T 38203C)

私が試した範囲内で傾向を概観しますと次のようになります.[2]

AT 互換機では,/boot/loader.conf に以下の内容を加えればこのメッセージが出なくなる機器もあります. (各々の数値はあくまで目安とお考え下さい.)

kern.cam.boot_delay=15000  # 何も指定しなければ 0
kern.cam.scsi_delay=30000  # 何も指定しなければ 5000

ところが,PC-98 においてはこの対策では改善されません.

検索すると,動作報告に同様の log を多数見かけます. けれど,「エラーっぽいメッセージが出ているけど動いた」ではなくて時間不足なのか,そもそも TEST UNIT READY 命令をサポートしていない機器なのかを区別するような試行をして欲しいです.

FreeBSD の方も,"Error" という文字列に鈍感になってしまわないように,log の出し方や文面を再考して欲しいものです.

[1] OS の boot の際に "Boot FreeBSD with verbose logging" を選べばさらに複雑なメッセージが出ますが,言及しません.

[2] 当然ですが,正常に動作している機器に限定しています.

[3] USB 機器の場合は quirk として UQ_MSC_NO_TEST_UNIT_READY を設定するという手段もありますが,その対象はあくまで TEST UNIT READY 命令を使うと不具合が生じる機器に限定すべきです.

7. FD の mount

FreeBSD 4.9 では,以下のようにすれば MS-DOS format の FD の mount ができます.

# mount -t msdos /dev/fd0.1232 /mnt      ← 2HC
# mount -t msdos /dev/fd0.1440 /mnt      ← 2HD

一方,FreeBSD 7.2, 8.2, 8.4 では以下のようにうまく行きません. (2HD でも 2HC でも.)

# mount_msdosfs /dev/fd0 /mnt
mount_msdosfs: /dev/fd0: No such file or directory   ← /dev/fd0 は存在するのに.

fdcontrol で見てみると,drive の形式は

# fdcontrol -v /dev/fd0
/dev/fd0: 1.44M drive (3.5" high-density)

となっています. (これは AT 互換機でも同じでした.)

一方 AT 互換機では,2HD だけでなく PC-98 用の 2HC に対しても mount_msdosfs は正常に動作します.