FDCONTROL(8)

名称
fdcontrol - フロッピディスクパラメータの表示と変更

書式
fdcontrol [-F] [-d dbg] [-f fmt] [-s fmtstr] [-v] device

解説
fdcontrol ユーティリティは、 device で指定した fdc(4) ドライバの実行時の振る舞いを変更します。

下位に位置するデバイスハードウェアの設定と 現在のデバイス密度設定について、 ドライバに登録された情報を返す問い合わせコマンド、 デバッグレベル操作コマンド、 デバイス密度設定調整コマンドが実装されています。 カーネル設定の変更の全ては、(デバイスドライバにより) スーパユーザに操作が制限されていますが、 問い合わせリクエストの全ては、 device への読み込みアクセス権だけを必要とします。

引数 device には、例えば /dev/fd0 のように、常にフルパス名を与える必要があります。

  問い合わせコマンド
fdcontrol ユーティリティをオプション引数無しで実行すると、デバイスドライバに 登録されたドライブタイプを返します。 最も簡潔な形式では、ドライブタイプを 1 行で返します。 返す可能性のある値は、 “360K”, “1.2M”, “720K”, “1.44M”, “2.88M”, “unknown” です。 この情報の主な目的は、スクリプトからの解釈が容易になることを 想定しています。

出力が人間にとってより分かり易くなるように説明を追加するために、 -v を指定することができます。

フラグ -F を指定することにより、オプション -s fmtstr (下記を参照下さい) の与える入力として適切な形式を返すようになります。 これと -v とをいっしょに指定することで、現在の密度指定に基づく容量を キロバイト単位で示すテキストも加えて返すようになります。

  デバッグ制御
オプション FDC_DEBUG を付けてドライバ fdc(4) を構築した (これがデフォルトです) としても、 デバイスデバッグ情報は抑止されたままです。 これは、カーネルメッセージを大量に吐き出す可能性があるためです。 デバッグ情報を出力させるためには、 “-d 1” とともに fdcontrol を用いる必要があります。通常、デバッグ情報が必要な デバイスを操作する直前にこの設定をオンにし、操作直後に “-d 0” でオフにすることになります。 デバッグレベルは、ドライバのグローバルオプションであり、 コマンド fdcontrol のコマンド行でどの device を指定したかに関わらず、ドライバ fdc(4) を用いるドライブ、コントローラのいずれに対しても影響を与えることに 注意して下さい。

  密度制御
コントロールユーティリティ fdc(4) は、どのようにデバイス密度の設定を指定するかについて、2 個の異なる オプションをサポートしています。 最初の形式では、 -f fmt を用い、メディアのフォーマットをキロバイト単位で指定します。 下位に位置するドライブタイプにより、指定した値は、 そのドライブにおいて、世の中でよく使われているデバイス密度設定を 表すテーブルと比較し、一致する設定が見つかれば、その設定を 使用します。現在のところ、ドライブタイプ毎に次の値が受理可能です。

2.88M ドライブ、1.44M ドライブ
KB | sectrac | secsize | ncyls | speed | heads | flags
1721 | 21 | 2 (512) | 82 | 500 | 2 | MFM
1476 | 18 | 2 (512) | 82 | 500 | 2 | MFM
1440 | 18 | 2 (512) | 80 | 500 | 2 | MFM
1200 | 15 | 2 (512) | 80 | 500 | 2 | MFM
820 | 10 | 2 (512) | 82 | 250 | 2 | MFM
800 | 10 | 2 (512) | 80 | 250 | 2 | MFM
720 | 9 | 2 (512) | 80 | 250 | 2 | MFM

1.2M ドライブ
KB | sectrac | secsize | ncyls | speed | heads | flags
1200 | 15 | 2 (512) | 80 | 500 | 2 | MFM
1232 | 8 | 3 (1024) | 77 | 500 | 2 | MFM
1476 | 18 | 2 (512) | 82 | 500 | 2 | MFM
1440 | 18 | 2 (512) | 80 | 500 | 2 | MFM
1200 | 15 | 2 (512) | 80 | 500 | 2 | MFM
820 | 10 | 2 (512) | 82 | 300 | 2 | MFM
800 | 10 | 2 (512) | 80 | 300 | 2 | MFM
720 | 9 | 2 (512) | 80 | 300 | 2 | MFM
360 | 9 | 2 (512) | 40 | 300 | 2 | MFM,2STEP
640 | 8 | 2 (512) | 80 | 300 | 2 | MFM

720K ドライブ
KB | sectrac | secsize | ncyls | speed | heads | flags
720 | 9 | 2 (512) | 80 | 250 | 2 | MFM

360K ドライブ
KB | sectrac | secsize | ncyls | speed | heads | flags
360 | 9 | 2 (512) | 40 | 250 | 2 | MFM

2 番目の形式でデバイス密度を指定するには、 -s fmtstr を使い、各パラメータを詳細にわたり指定します。 引数 fmtstr は、コンマで区切られた値のリストであり、次の形式です。

sectrac,secsize,datalen,gap,ncyls,speed, heads,f_gap,f_inter,offs2,flags

パラメータの意味は次のとおりです。

sectrac
    トラックあたりのセクタ数です。

secsize
    セクタサイズを表す数値です。0 = 128 バイト (または、それ以下)、 1 = 256 バイト、2 = 512 バイト、3 = 1024 バイト。

datalen
    上記のサイズ数値が 0 のとき、実セクタサイズを表します。 0 以外のサイズ数値のとき、(無視して構わない) 値 0xFF です。

gap 読み/書き操作における、GAP 3 パラメータの長さです。

ncyls
    シリンダ数です。

speed
    転送速度 (毎秒キロバイト単位の) です。 値 250, 300, 500, 1000 を取り得ますが、各ドライブタイプにより、 サポートする値はこのうちの一部になります。

heads
    ヘッド数です。

f_gap
    メディアをフォーマットするときの GAP 3 の長さです。

f_inter
    フォーマットするときに適用するセクタインタリーブです。 0 はインタリーブ無し、1 は 1:1 インタリーブ (以下同様) を 表します。

offs2
    サイド 2 (ヘッド番号 1 ) におけるセクタ数オフセットです。 通常、セクタの番号付けは両面とも 1 から始まります。

flags
    次に示すフラグ値のリストです。

    +mfm
        MFM 符号化を使用。
    -mfm
        FM 符号化 (単密度) を使用。
    +2step
        1 シリンダにつき 2 ステップを使用 (80 シリンダのドライブで 40 シリンダのメディアにアクセスするためのもの)。
    -2step
        1 シリンダにつき 2 ステップを使用せず。つまり、ドライブの各物理シリンダに アクセスする。
    +perpend
        垂直記録方式を使用 (2.88 MB メディア用、現在は未サポート)。
    -perpend
        長手方向記録方式を使用。

パラメータ指定がないものについては、現在の値が使用されます。 ですから、指定する必要があるものは、実際に変更したいものだけです。 (フラグ +mfm のようにデフォルトで全ドライブでオンの) フラグビットをオフにするには、先頭にマイナス符号を付けた形式 を明示的に用いる必要があります。

例
単純にドライブタイプを問い合わせる。

    $ fdcontrol /dev/fd0
    1.44M

上と同様ですが、冗長な出力をつける。 結果は、 デバイスの密度 ではなく、 ドライブタイプ についてのものであることに注意して下さい。 ですから、この結果は device で用いられる実際のサブデバイスとは別物です。

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

密度設定を問い合わせる。

    $ fdcontrol -F /dev/fd0
    18,512,0xff,0x1b,80,500,2,0x6c,1,0,+mfm

冗長フラグをつけると読みやすくなります。

    /dev/fd0: 1440 KB media type
            Format:         18,512,0xff,0x1b,80,500,2,0x6c,1,0,+mfm
            Sector size:    512
            Sectors/track:  18
            Heads/cylinder: 2
            Cylinders/disk: 80
            Transfer rate:  500 kbps
            Sector gap:     27
            Format gap:     108
            Interleave:     1
            Side offset:    0
            Flags           <MFM>

ここに示すように、パラメータリスト末尾のコンマは省略できます。

新しい 1.2M ドライブで 古き良き 160KB 単密度 (FM 符号化) 5.25 インチメディアに アクセスするためには、次のような定義が必要になりそうです。 (実際には全てのコントローラハードウェアが FM 符号化を扱えるわけでは ないことに注意して下さい)

    # fdcontrol -s 16,128,0x80,0x2,40,300,,0x10,,,-mfm,+2step /dev/fd1.1

たいていの最近のフロッピコントローラに 8 インチドライブを繋げることは、 適当なケーブルがあれば、未だに可能です。 (PC ハードウェアでは、BIOS には 5.25 インチドライブと設定して下さい) 次のようにすれば、伝統的な 128/26/2/77 フォーマットを読み込めます。

    fdcontrol -s  26,128,0x80,0x2,77,500,2,0x10,,,-mfm /dev/fd0

関連項目
fdc(4)

歴史
fdcontrol ユーティリティは FreeBSD 2.0 で現れ、 FreeBSD 5.0 で大々的に改装されました。

作者
本プログラムと本マニュアルページは Jörg Wunsch, Dresden から寄贈されました。