NetBSD/pc98(based on NetBSD 1.3.1) PCMCIA 設定ガイド 最終更新 1997年 3月 19日 このドキュメントでは、PCMCIA に関するカーネル側の設定および ユーティリティの使い方について説明します。カーネルの構築方法に 関してはconfig.txt も参照して下さい。 1. サポートしているカードおよびハードウェア 現在、NetBSD/pc98 core team内で動作確認しているカードは以 下の通りです。 [LAN CARD] NE2000互換製品 ALLIED TELESIS LA-PCM ELECOM Laneed LD-CDWA ELECOM Laneed LD-CDY IO DATA PCLA/T MELCO LPC-TJ Matsushita CF-VEL211P-B NEC PC-9801N-J12 PLANET SMART COM CREDITCARD/2000 PCMCIA PLANET SMART COM 3500 ENW-3500-T D-Link DE-660 Fujitsu MB86960及び互換チップを使った製品 CONTEC C-NET(PC)C-10 TDK LAC-CD021AX RATOC REX-5588A 3Com EtherLink シリーズ 3Com EtherLink III PCMCIA 3C589B-COMBO; ep [MODEM CARD] IO DATA PCFM-144 IO DATA PCFM-288 Megahertz PCMCIA MODEM With XJACK Connector XJ3288J-MD Panasonic FAX & DATA MODEM 14400 TO-706CW [PHS Data CARD] NTT Personal Paldio Data Card DC-1S, DC-1P NTT Personal Paldio DataFAX Card DC-2S など、さまざまな物が確認されています。 IBM互換機のcom portで認識されるモデムカードは(今までのところ 全て)ほぼ確実に動きます。従って選択の基準はモデムカードがかなり 発熱する事から、消費電力の少なさだと思います。 [SCSI CARD] MACNICA MIRACLE SCSI I, IIのOEM製品 RATOC REX5537/9530系のOEM製品 九州松下のOEM製品 MACNICA MIRACLE SCSI I mPS-100 MACNICA MIRACLE SCSI II mPS-110 MIDORI ELEC. CN-SC43 IO DATA PCSC-98 IO DATA PCSC-II Logitec LPM-SCSI KME CDWORKMAN 付属カード MELCO IFC-SC2 NEC PC-9801N-J03 Panasonic Fast SCSI Interface Card LK-RJ120ZH RATOC REX-5572W RATOC REX-9530 TOSHIBA SCSC200A ADAPTEC SlimSCSIのOEM製品 Adaptec SlimSCSI APA-1460J RATOC 5536のOEM製品 Future DomainのOEM製品 IBM SCSI PCMCIA Card ICM PSC-2401-X MELCO IFC-SC [IDE CARD] 緑電子 Card Hard Drive (Type III) 105M など、さまざまな物が確認されています。 IDE hard dirve card も modem cardと同様で、ほぼどれでも確実に 動きます。従って、選択の基準は、スタンバイ時の低消費電力と、1M bytesあたりのコストパフォーマンスでしょう。 [LAN+MODEM CARD] APEX DATA製Multi Card(AT互換機で設定が必要) [SOUND CARD] Q Vision pcm86 PCMCIA CARD [MIDI CARD] Q Vision MIDI card Roland SOUND CANPUS SPC-55mk2 [ATA Flush CARD] KERNEL PCF-10 (SanDiskのOEM) これ以外にも、同じファームウェアを使用している物であれば、 動作すると思います。使用しているファームウェアを特定する方法は、 cardinfo プログラムの説明を参照して下さい。 2. cardinfo の簡単な読み方 cardinfo プログラムは、PCMCIA CARDに書かれている、CIS(Card Identification Structure) を表示するためのプログラムです。 CIS内には、タプル(Tuple)と呼ばれる、デバイス情報やコンフィ ギュレーションレジスタの番地、IRQや割り込み情報などを記録した ものがあります。タプルは複数存在する場合もあり、このような場合 はユーザーでどのタプルを使用するか選択する事が出来ます。 これらの情報により、どのような用途のカードが挿入され、どの ようなリソースが使用できるかをカーネルが把握できるわけです。 cardinfo プログラムの出力する情報の簡単な読み方ですが、まず は/dev/ata0 および/dev/ata1 がある事を確認して下さい。通常は あると思いますが、もし/dev/ata[0,1]がない場合は、 # cd /dev # sh MAKEDEV ata0 ata1 を実行して、デバイスファイルを作成して下さい。 次にcardinfo プログラムを実行して下さい。引数を指定しない場 合は、slot 0の情報を表示します。カード用のスロットを2つ以上 持っている機種で、例えばslot 1の情報を表示したい場合は、 % cardinfo slot1 と実行して下さい。希望のカードスロットに挿入されているPCMCIA CARDのCISが表示されます。 例えばMELCO LPC-TS(UE2212)を例に取ります。 % /usr/local/bin/cardinfo slot1 VENDOR: 0x0000:0x0000 INTERFACE: IO-CARD flags 0x8 CLASS: NET CARD REGISTER: offset 0x100 lastc 0x1 ccrs 0x1 ccrsv 0x0 [Configuration Entry] Intrtype: edge Irq set: ( 3) 0x3e68 io[0] port 0x300, sz 0x10, bus 0x2 io[1] port 0x310, sz 0x10, bus 0x2 mem[0] host 0xd4000, offs 0x0, sz 0x400, bus 0x0 mem[1] host 0xd4000, offs 0x4000, sz 0x4000, bus 0x0 % このように出力されました。 VENDOR で始まる行は、そのPCMCIA CARDのベンダー名です。この部分が 既に動作確認されているPCMCIA CARDと全く同じ場合は、どのOEMメーカー のものでも動作する事が出来ると思います。 [Configuration Entry] に続いて表示されるメッセージは、使用 可能なirq を表しています。しかしPC98では、これらの全てが使えるわけ ではありません。例えば、irq12(INT5)はサウンドボード等で使用している 可能性が高いです。また、2nd serialなどを搭載して、 ソフトウェアディップスイッチで2nd serialを使用できるようにしている場合、 irq5(INT1)も使えません。 したがって、UE2212の場合、実質的に使用可能なのは、irq 3,5,10 位です。 現在の実装では、割り込み番号はユーザが指定する事も可能ですが、 指定する必要がありません。この場合、 isaバスやpciバスが使用していない空き番号で、かつ、 CISに記述されている使用可能割り込み番号から自動的に選択されます。 割り込みに空きがない場合、 no irq left or invalid irq というメッセージが出てカードはprobeされませんので注意してください。 (注意)最新の機種ではIRQ6がシステムで予約されていて、使用できない可能 性がありますので、IRQ6は自動的に排除されます。 io[0] port 0x300, sz 0x10, bus 0x2 io[1] port 0x310, sz 0x10, bus 0x2 とありますが、これはport に書かれたものがIO portのベースアドレス、 sz に書かれたものがサイズを表しています。すなわち、UE2212はport 0x300〜0x30f およびport 0x310〜0x31f の2つのIO window を開きます。 しかし、98の場合、これらのアドレスが既に使用されている事もある ため、port 0xX300〜0xX30f およびport 0xX310〜0xX31f のアドレスを 開く事が出来るようになっています。X の部分はユーザーが自由に決め る事が出来ます。 これまでの説明から、ユーザー側で決めなければいけない事をまとめ ると、 (1) index (2) IO windowのXを指定したWindow address の2つとなります。あとの情報については、カーネル側で自動的に判断し て、適切な初期化をします。 これらのパラメータをどのようにカーネルに通達してやるかは、後程説 明します。 3. PCMCIAカードの認識方法について 現在のNetBSD/pc98 のPCMCIAカードの認識方法としては、 (1) 通常のデバイスと同じように、ブート時にカーネルが認識する (2) pcsdがカード挿入時に認識する の2種類あります。(1) および(2) を使用する時の設定について次に 説明します。 3-0. PISA (PnP Isa Bus) に接続する宣言。 pcmcia cardを動作させるために必要なdevice driverは、pisa0 busに 接続されます。従って、どのような場合も使用するデバイスをpisa0に 接続する宣言をkernel configファイルに記述しておく必要があります。 まず、pisaバスの使用宣言 pisa0 at mainbus0 が必要です。 次に、例えばneをpcmcia cardで使う場合、 ne* at pisa0 という記述を書いて置きます。 この記述はdeviceの接続busを宣言するものですから、通常の irq, iobase等は記述する必要はありません。また、 複数のneを接続する場合も、ne*という宣言が行われている為、 同じ表現を複数書く必要はありません。 3-1. ブート時にカーネルにPCMCIA CARDを認識させる方法 ブート時に認識させる必要がない場合は次のセクションに進んでください。 先程のUE2212 をブート時から認識させるには、カーネルのコンフィ ギュレーションファイルのcard*リーソス記述仮想デバイスの 記述を行う必要があります。 pcmcia0 at systm? port 0x03e0 iomem 0xc0000 iosiz 0x1000 irq 10 slot* at pcmcia? card* at slot? dv pa_ne dvcfg 0x10000 index 0x01 io0 0x4300 io1 0x4310 最初の3行は、PCMCIA CARDを使用する時に必ず必要なものです。 必ず指定して下さい。card* で始まる行がne 互換のPCMCIA card をブート時に認識するための必要なリソースの記述です。 (card*はリソースを記述するための仮想的なデバイスです) 次のような意味を持っています。 dv はこのpcmcia cardを動作させる為の、デバイス ドライバーの記述です。 この例の、dv pa_ne は、neのドライバを使用する事を表しています。  device driver XXX を使う場合は、 dv pa_XXX と記述します。 dv pa_ncv : NCR53C406/500互換 SCSI card dv pa_aic : Adaptec AIC-6360互換SCSI card dv pa_spc : Fujitsu MB89352互換SCSI card dv pa_stg : FutureDomain TMC18C30/18C50互換SCSI card dv pa_bs : WD33C93 SCSI card dv pa_wdc : IDE HD CARD dv pa_ser : MODEM CARD dv pa_ne : dp86960互換network card dv pa_ep : 3Com ether link III dv pa_fe : TDK LAC-CD02xなど dv pa_es : SMC SMC91C90/92/94/100互換network card dv pa_pcm : NEC PC-9801-86 互換SOUND card dv pa_NODV : dummy driver が使用できます。 dvcfg 0x10000 は、ドライバに与えるデバイスコンフィグレーショ ンフラグです。これは、neドライバに与えるkernel config fileの flagsフィールドと同じです。指定出来る値はkernel config fileにつ いての説明を参照してください。かならず指定しなげればなりません。 index 0x01 は、タプル0x01 を使用する事を宣言します。先程の cardinfo の出力からわかる通り、UE2212 はindex 0x01 しかないの で、このように指定しています。 io0 0x4300 io1 0x4310 は、オープンするIO windowのアドレスを 指定します。ベースアドレスとして0x300 および0x310 の2つを開か なければならない事はcardinfo の出力からわかり、この例ではX と して4を選択したので、0x4300 と0x4310の2つをオープンするよう にカーネルに指定しています。 このように記述してカーネルを再構築する事により、UE2212をブート 時に認識することができます。ただし、APMのサスペンド機能を使用し ^^^^^^^^^^^^^^^^^^^^^^^^^^^ たり、カードを抜き差しするとそのカードは使えなくなってしまうの ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ で注意して下さい。このような場合でも使えるようにする為には、 以下の項で説明するpcsd daemonを走らせる必要があります。 3-2. pcsd にカード挿入時に認識させる方法 ブート時に認識させる方法だけだと、カードを抜いてしまうとその カードは使用できなくなってしまいます。また、起動時にカードを挿 入していなければ、カードを使用する事が出来ません。そこで、pcsd を使用して、動的にカードを認識させる方法を紹介します。 pcsd の使い方は次の通りです。 usage: pcsd [-f conf] [-d] -f conf は、使用するコンフィギュレーションファイルの名前です。 デフォルトでは/etc/pcmcia.conf を使用します。 -d を指定すると、/tmp/pcsd.logに動作が記録されます。非常に詳し い情報が記録されますので、PCMCIA関連の動作がおかしい場合は、この ログをNetBSD/pc98 core teamに送って下さい。 通常は/etc/rc.local の中で/sbin/pcsdを実行するようにしておけば 良いでしょう。 3-3. pcsdを使用する時に注意する点について (1) pcmcia.conf ファイルは、起動時にメモリ上に読み込まれます。 pcmcia.conf を変更した場合は、pcsd daemonにSIGHUPを送って下さい。 (2) pcsdを終了する時は、pcsd daemonにSIGINT もしくはSIGTERM を 送る事を推奨します。 (3) pcsd daemonは複数起動できません。SIGUSR1を使用してカーネル とコミニュケーションを取り、複数起動のチェックをしているからで す。 (4) セキュリティー対策の関係で、pcsdにsetuid bitを立ててはいけ ません。また、pcmcia.conf は、owner以外に絶対に書き込み権限を 与えないで下さい。 4. pcmcia.confの書式について 4-1. ACCTON UE2212を用いたpcmcia.conf の記述例 次に、pcmcia.conf の書き方について説明します。pcmcia.conf は 基本的にtermcap などの書き方と同様です。 pcmcia.conf は1つのCARDに対して、 (1) cardname の記述をもつ、カードコンフィギュレーションエントリー (2) bind の記述をもつデバイスコンフィギュレーションエントリー の2つのセクションがあります。 (1) は、pcicに対して、io windows, memory windows, bus動作記述 flagsを指定するものです。PCMCIA CARDを初期化するための情報だと考 えればよいでしょう。また、(2) は、実際にカードにアタッチするデバ イスドライバに対して、irq, iobaseなどの動作を指定するものです。 例えば、1つの(1) に対して、2つの(2) を指定する事により、1つ のカードに複数のデバイスをアタッチする事が可能です。このようにす る事により、マルチカードなども動作させる事が出来ます。 では、先程のUE2212カードの例を紹介します。まずはカードカードコン フィギュレーションエントリーです。 ether0|NE2000 Compat Ether Card:\ :cardname=NE2000-compat:\ :index#0x01:\ :io0#0x4300:io1#0x4310: 最初の ether0|NE2000 Compat Ether Card: は、全く意味を持ちません。これは、どのようなカードなのかというメモ 変わりの物だと考えて下さい。 :cardname=NE2000-compat: は、このエントリーがカードコンフィギュレーションエントリーである事を 指示すると同時に、エントリーの名前を与えています。"NE2000-compat"の 部分は、他のカードコンフィギュレーションエントリーと同じ物を使用して はいけません。 :index#0x01: は、タプル0x01を使用する事を指定します。cardinfo の結果から、UE2212は 0x01のタプルしか持っていないことがわかっているため、0x01 と必ず指定し て下さい。 :io0#0x4300:io1#0x4310: は、このカードに対して、0x4300と0x4310の2つのIO windowをオープンする 事を指定しています。cardinfo の出力から、0xX300 と0xX310 の2つのIO windowをオープンしなければいけない事がわかっており、Xとしてこの例では 4を選んでいるためです。 次に、デバイスコンフィギュレーションエントリーの説明です。 ether0-sample:\ :bind=NE2000-compat:\ :dv=ne:dvcfg#0x100000:\ :insert=/etc/etherstart:\ :remove=/etc/etherstop: 最初の、 ether0-sample: は、カードコンフィギュレーションエントリと同じで、意味はありません。 :bind=NE2000-compat: は、このエントリがデバイスコンフィギュレーションエントリである事を 宣言すると共に、どのカードコンフィギュレーションエントリに結び付け るかを指定します。この例では、"NE2000-compat" と書いてある事から、 前述のカードコンフィギュレーションエントリに結びつけられる事がわか ります。 :dv=ne:dvcfg#0x100000: は、アタッチするデバイスがne(NE2000互換Ethernetボード用)であり、 デバイスコンフィギュレーションフラグが0x100000である事を指示します。 (ne デバイスのPCMCIA CARD用のflagsは0x100000となっているためです)。 さて、ちょっと*BSDを経験されている方なら、iobase とirq が必要なの ではないか? と思うでしょう。しかし、この場合は省略可能です。 というのは、通常はiobase は結びつけられたカードコンフィギュレーショ ンエントリのio window0番(すなわち、io0#で指定した値)が仮定されるか らです。irqも自動的に値が選択されます。 しかし、マルチカードにおいては、iobaseが、io window1番(つまり、io1# で指定した値)の場合があります。例えば、Q visionのsound cardのPCM sound partが相当します。このような場合は、 :port#0x234:\ :irq#6:\ のように、明示的に指定して上書きする事が可能です。 :insert=/etc/etherstart:\ :remove=/etc/etherstop: は、このEthernet CARDに状態変化が発生した場合(例えば、カードが挿入・ 削除された場合、resume, suspendした場合)などに自動的に呼ばれるプログ ラムを指定します。これらのプログラムには、引数として (1) device name(例えば、ne2など) (2) card vendor name(例えば、"PCMCIA UE2212 ETHERNET R01"など) が自動的に渡されます。ですので、/etc/etherstart に #! /bin/sh ifconfig $1 inet `/bin/hostname` /etc/etherstop に #! /bin/sh ifconfig $1 down と書けば、カードの状態変化に応じて自動的にifconfig コマンドを 実行するようになります。 4-2. マルチカードの記述例 4-1. では、UE2212のように比較的簡単なカードを例に取って、 pcmcia.confの記述方法を示しました。ここでは、少し複雑な、APEXの modem+etherカードを例に取って、pcmcia.conf を記述してみます。 まずは、cardinfo コマンドを実行してみます。 % cardinfo VENDOR: 0x0013:0x0000 INTERFACE: IO-CARD flags 0xd CLASS: MULTI NET SERIAL CARD REGISTER: offset 0x400 lastc 0x3 ccrs 0x17 ccrsv 0x28 [Configuration Entry] Intrtype: edge Irq set: ( 3) 0x628 io[0] port 0x3f8, sz 0x8, bus 0x0 mem[0] host 0xffffffff, offs 0xd0000, sz 0x400, bus 0x0 [Configuration Entry] Intrtype: edge Irq set: ( 3) 0x628 io[0] port 0x2f8, sz 0x8, bus 0x0 mem[0] host 0xffffffff, offs 0xd0000, sz 0x400, bus 0x0 [Configuration Entry] Intrtype: edge Irq set: ( 3) 0x628 io[0] port 0x3e8, sz 0x8, bus 0x0 mem[0] host 0xffffffff, offs 0xd0000, sz 0x400, bus 0x0 [Configuration Entry] Intrtype: edge Irq set: ( 3) 0x628 io[0] port 0x2e8, sz 0x8, bus 0x0 mem[0] host 0xffffffff, offs 0xd0000, sz 0x400, bus 0x0 [Configuration Entry] Intrtype: edge Irq set: ( 3) 0x628 io[0] port 0xff00, sz 0x8, bus 0x10 mem[0] host 0xffffffff, offs 0xd0000, sz 0x400, bus 0x0 % UE2212のカードと違い、タプルが複数存在するので、ユーザー側では まずどのタプルを選択するかを決定します。今回は、0x03を使用する事 にしましょう。 [Configuration Entry] Intrtype: edge Irq set: ( 3) 0x628 index 0x03のio portは0x3f8 と書かれていますので、PC98では、0xX3f8 をベースアドレスとする事が出来ます。ここでは、Xとして4を使用する事 にします。また、irq 3,5,9,10が使用できます。これらの事を踏まえると、 pcmcia.conf は modem1|APEX Modem-ether Card:\ :cardname=APEX-ether-modem:\ :index#0x03:\ :irq#3:\ :io0#0x43f8:\ :mw0#0xd0000:mwo0#0x0:mws0#0x4000:\ :mw1#0xd4000:mwo1#0x80000000:mws1#0x1000: となります。ここで、新たなパラメータとして、mw?, mwo?, mws?, memws? などが出てきましたので、これらのパラメータについて説明しておきます。 mw?(つまり、mw0とmw1)は、コンピュータ側のMemory Windowをマップす る物理アドレスを表しています。 mwo?(つまり、mwo0とmwo1)は、カード側のメモリオフセットの指定を します。 mws?(つまり、mws0とmws1)は、Memory Window のサイズを指定します。 つまり、カードの、オフセットmwo? から、mow? + mos? までのメモリ をコンピューターの物理アドレス mw? にマップするという事です。 :mw0#0xd0000:mwo0#0x0:mws0#0x4000: を例に取れば、カードのオフセット0から0x4000バイト分を、0xd0000に マッピングするという事を表しています。 なお、mwo1#0x80000000 のように、最上位ビットが立っている場合、 カードのメモリとして、アトリビュートメモリを選択する事を意味して います。したがって、 :mw1#0xd4000:mwo1#0x80000000:mws1#0x1000: を例に取れば、カードのアトリビュートメモリ0から0x1000バイト分を、 0xd4000にマッピングするという事を表しています。 APEXのカードで、何故このような複雑な指定をしなければならないかと いうと、APEXのカードは、MMIO(Memory Mapped IO)方式を使用しており、 card ne register … card common memory 0x0 -> 0x100 card ether buffer … card common memory 0x100 -> 0x4000 card asic register … card attribute mememory 0x400 -> 0x410 のように配置されているためです。 なお、CISには、IO portに関する情報は書かれているのですが、メモ リに関する情報は書かれていない事が多いので、このような場合は、そ のPCMCIA cardに付属するインストールディスクなどからこれらの情報を 得て下さい。 この他、メモリ関連のフラグとしては、 memwz: no weight memory access memws0: add 1 sys cycle weight memws1: add 2 sys cycle weight memwp: write protect memds16: 16 bits access があります。また、IO関連のフラグとしては、 iods16: io bus sizeに関するflagsでいじってはいけません。 iocs16: io bus sizeに関するflagsでいじってはいけません。 iozw: 8 bits access の時 no weight iows: 16 bits access の時 weightを入れる。 があります。これらのフラグは、CISに書かれているフラグの値と排他 的論理和がとられます(例えば、CISの情報としてがある時に、 pcmcia.conf にmemwzを書くと、not memwzの意味になってしまいます)。 通常はこれらのフラグを指定する必要はないと思いますので、指定しな いで下さい。 続いて、デバイスコンフィギュレーションエントリの記述です。 まず、モデム部ですが、先程のAPEXのエントリにバインドしてやるの で、 :bind=APEX-ether-modem: が必要です。デバイスはシリアルですので、 :dv=ser: が必要です。flagsには、NS16550系のチップを使用している事から、 0x120000 を渡してやる必要があります。ですので、 :dvcfg#0x120000: と書いてやります。また、iobase とirqはIO Window0番の値を使用 するので省略できます。 したがって、 modem1-sample:\ :bind=APEX-ether-modem:\ :dv=ser:dvcfg#0x120000: となります(もうおわかりだと思いますが、1行目はコメントなので、 なんでもよいですね)。 次に、Ether部ですが、モデム部分と同じように、APEXのエントリに バインドしてやるので、 :bind=APEX-ether-modem: が必要です。デバイスは、NE2000互換Ethernetですので、 :dv=ne: が必要です。また、flags はMMIO用を指定してやる必要があるので、 :dvcfg#0x70000:\ が必要です。また、APEX ether cardはMMIOですので、 :maddr#0xd0000:msize#0x5000: によって、明示的に指定し上書きする必要があります。あと、カードが 出し入れされる時に自動的にifconfig などをしようと思ったら、 :insert=/etc/edstart:\ :remove=/etc/edstop: を記述すればよいです。これらをまとめると、次のようになります。 modem1-ether-sample:\ :bind=APEX-ether-modem:\ :dv=ed:dvcfg#0x70000:\ :maddr#0xd0000:msize#0x5000:\ :insert=/etc/edstart:\ :remove=/etc/edstop: 4-3. APEXのカードについて補足 APEXのカードは、AT互換機専用です。付属のセットアッププログラムが、 現在のところAT機でしか動きません。このカードをPC98で使用する場合、 AT互換機で一度セットアップを実行する必要があります。 5. NEC pcmciaコントローラー搭載機種(旧note機種)。 NEC pcmciaコントローラーは、Intel互換pcmciaコントローラーと 異なった構造を持っています。 NetBSD/pc98では、その差異を、kernelで吸収していますので、 基本的に、kernel config, pcmcia.confの記述方法は変りません。 また、chipのprobeも自動的に行われます。従って、基本的に 1つのkernel&pcmcia.confでどちらも動かす事が出来ます。 6. その他 PCMCIA CARDはかなりの数が出回っており、それらのカードはほとんどが MS-DOS や、Windows 3.1/Widows95などを対象として販売されています。 このため、カードによっては、特殊な初期化方法が必要だったりする事があ ります。 未知のカードを動かす事に成功したという情報は、開発者にとって非常に 有益な情報となり得る事があると思います。ですので、このような場合は、 是非NetBSD/pc98 core teamまで連絡をお願い致します。 NetBSD/pc98 core team 連絡先 E-Mail:netbsd-98@njk.co.jp