piFDC(仮)

はじめに

概要

ダウンロード

使い方

SLFについて

実行ファイルの作り方

makefileがありますので、makeコマンドで実行ファイルが作られると思います。

実行ファイルを作るのに追加したモジュール類は失念してしまったので詳しくは書くことが出来ません(申し訳ありません)。
開発環境としてgccは必要になります(でもこれは言うまでもないですね...)。

実行ファイルの使い方

生成された実行ファイルを実行するには管理者権限が必要になります。ユーザモードで実行する場合はコマンドの前にsudoが必要になります。

・fdr
フロッピーディスクメディアからトラックの内容を読み取りイメージファイルを作成します。通常は読み出したトラックデータのセクタ構造をチェックし、正常と判断した場合、もしくはリトライの最後のデータを格納します。出力ファイルはSLF形式のフォーマットになります。

[sudo] ./fdr [オプション] 出力ファイル
オプションについて
--cpu=highデータ読み取り時のCPUの動作モードをパフォーマンスモード(1.2GHz)にして実行します。オプションの指定がない場合はパワーセーブモード(600MHz)で実行します。(クロック数はいずれもRaspberry Pi 3 Model Bの場合、動作モードがないモデルでは無効です)
--drive=NUMFDDの指定、NUMには0か1のいずれかの数値を入れます。オプションの指定がないときは0になります。
--merge=INPUTFILEマージするファイルを指定します。--trackオプションで指定されなかったトラックは、ここで指定されたファイルのトラック情報が格納されます。
--raw1物理フォーマットレベルのデータを保存します。セクタ構造のチェックは行いません。
--raw2物理フォーマットレベルのデータを保存します。セクタ構造のチェックを行い、正常と判断した場合もしくはリトライの最後のデータを格納します。
--repairリトライした際にセクタ単位でのマージ処理を行います。メディアが劣化して読み取りが不安定な場合やあるいはRaspberry Piの動作状況の都合で、どうしてもトラック単位で正常なデータが読み取れないようなケースでの使用を想定しています。リトライしたデータの中で正常に検出できたセクタ単位でマージを行い全体として正常なトラックになるよう努めます(この際GAPやSYNCは標準的な値に変更します)。このオプションが指定されない場合はリトライしたデータの方が正常だと判断した場合トラック単位での差し替えが行われます。
--retry=NUMエラーリトライの回数を指定します。最大は10で、指定しない場合リトライ回数は4回になります。
--rpm=NUMFDDの動作rpmを指定します。設定値は300か360で、オプションが指定されない場合は300rpmになります。360rpm対応ドライブでのみ有効です。
--scanrate=NUMコアクロックの分周値を指定します。デフォルトは32です。最大100まで設定できるようにしていますが、経験的に64では正常な読み出しが可能で、96にするとほぼ読み出しに失敗します。コアクロックは経験的にパワーセーブモードでおよそ250MHzで、32分周することでおよそ7.8125Mhzになります。これはおよそ128nsに一回読み出しをおこなう計算になります(2μsで15~16ビット)。数値を小さくすると信号1サイクルにかけるビット数が増えるため信号の判別で誤りが減ることが予想されますが、FIFOがすぐにあふれてしまいます。数値を大きくすると逆にビット数が少なくなるため信号の判別にとってはマイナスですが、FIFOがあふれるまでの猶予が大きくなるので負荷への耐性は多少増えるものと考えられます(実際の効果のほどは不明ですが...)。
--singlesideヘッド1側の読み取りをスキップします
--eventrack偶数トラックのみをスキャンします。2Dのメディアの読み取りを想定したオプションです
--oddtrack奇数トラックのみをスキャンします
--track=NUM:NUM読み出すトラックの指定をします。指定の仕方はトラック番号(0~79)とヘッド番号(0,1)をコロン「:」で区切ったもので指定し、範囲指定する場合は始まりのトラック:ヘッドと終わりのトラック:ヘッドをハイフン「-」で繋ぎます。また複数のトラックを指定する場合はトラック:ヘッドの組み合わせをカンマ「,」で区切って列記します。

・fdw
イメージファイルからをフロッピーディスクメディアへ書き戻しを行います。書き戻すことが出来る対象ファイルはSLFフォーマットのほかベタデータにも対応しています。セクタ構造を持ったデータの場合標準でベリファイを行い正常に書き込みが出来たかチェックします。物理フォーマットデータの場合はベリファイは行わないので書き込みの信頼性は落ちます。

[sudo] ./fdw [オプション] 入力ファイル
オプションについて
--cpu=highデータ読み取り時のCPUの動作モードをパフォーマンスモード(1.2GHz)にして実行します。オプションの指定がない場合はパワーセーブモード(600MHz)で実行します。(クロック数はいずれもRaspberry Pi 3 Model Bの場合、動作モードがないモデルでは無効です)
--drive=NUMFDDの指定、NUMには0か1のいずれかの数値を入れます。オプションの指定がないときは0になります。
--retry=NUMエラーリトライの回数を指定します。最大は10で、指定しない場合リトライ回数は2回になります。
--rpm=NUMFDDの動作rpmを指定します。設定値は300か360で、オプションが指定されない場合は300rpmになります。360rpm対応ドライブでのみ有効です。
--scanrate=NUM基本的にはfdrと同じなのですが、書き込み時の分周値は物理フォーマットサイズから算出した最適と思われる値を使用するため、ここで指定した値が反映されるのはベリファイ時の読み出し処理のときに使用する分周値になります。
--singlesideヘッド1側への書き込みをスキップします
--eventrack偶数トラックのみを書き込みます※2Dのイメージの書き戻しで使用するオプションではありません
--oddtrack奇数トラックのみを書き込みます
--standardgapGAPやSYNCのサイズに標準的な値を使用します。なお、影響を受けるのはセクタ数やサイズに依存せず固定のGAP4A,GAP1,GAP2,SYNCのみで、GAP3とGAP4bは影響を受けません。
--track=NUM:NUM書き戻すトラックの指定をします。指定の仕方はトラック番号(0~79)とヘッド番号(0,1)をコロン「:」で区切ったもので指定し、範囲指定する場合は始まりのトラック:ヘッドと終わりのトラック:ヘッドをハイフン「-」で繋ぎます。また複数のトラックを指定する場合はトラック:ヘッドの組み合わせをカンマ「,」で区切って列記します。
--noverify書き込んだデータを読み出して正常に書き込めたかどうかチェックする処理をスキップします。現状では書き込みの信頼性が落ちます。

・fdstop
バグやCtrl+Cでプログラムが中断した場合FDDのモータが回り続けてしまうため、こうしたときにFDDの動作を停止させるためのコマンドです。

FD1155Dで使用する場合の補足

FD1155Dを接続して使用する場合、ジャンパの設定などいくつか注意すべき点があるので補足します。 ジャンパは基本的にはATへ接続するときの設定に合わせます。(本項はakm様のホームページradioc.dat内にあるNEC PC-98 基本情報 書庫目録 - ハードウェア技術情報 - NEC FD1155D(5.25インチFDD)を参考にさせて頂きました。情報の公開ありがとうございます)

RD1VFO回路を使用しない
USE2In Use信号
MON1モーター制御、Motor On
DX0or1接続するケーブルのコネクタの位置に合わせて設定
VCOn信号線の終端抵抗あり
DCG234ピン信号 Disk Change
HDE1(or2)標準密度モード時の回転速度 360rpm(300rpm)
DEN1動作モード 2モード切替
※HDEは2にすると回転が遅くなるのでイメージ化するときにはこちらの方がよい感じがします

また、メディアの2DD/2Dと2HDの判定は3.5インチドライブにおける回転数の設定によって決められるようです(すみません。知見がないので結果からの推測です)
・2HDのメディアをイメージ化する場合--rpm=300のオプションを設定(あるいは設定しない)
・2DD/2Dのメディアをイメージ化する場合--rpm=360のオプションを設定