2014年8月8日金曜日

フロッピーディスクドライブの信号波形

2HD の WRITE DATA 信号

パルスの間隔が、短いところで 2us になっています。
2HD の 転送速度は 500kbps で クロックを入れると 1,000kbps になります。
1,000kbps だと 1ビットあたり 1us になり、2HD で使用されている MFM 方式だと "1" が連続することはないので、パルスの間隔は最短の場合で 2us になります。
ビット列の並びは
  • 2us なら "101"
  • 3us なら "1001"
  • 4us なら "10001"
となります。MFM 方式では "0" が 3個以上連続することはありません。(ミッシングクロックの場合でも、"0" が 3個以上連続しないようになっていました)

WRITE DATA 信号の拡大図

パルス幅は、だいたい 300ns くらいでしょうか。
2HD の READ DATA 信号

READ DATA 信号は、ドライブが選択されていてモーターが回転している間、ずっと出力され続けます。
2DD の READ DATA 信号
パルスの間隔が、2HD の時の倍になっています。
パルス幅は 2HD と同じくらいに見えます。
READ DATA と WRITE GATE の関係

書き込み中には READ DATA 信号が出てきません。
INDEX 信号のパルス幅は 2ms ~ 4ms 弱くらいの変動がありました。パルスの立ち下がりを使用する事になっているので、幅はあまり重要でありません。
INDEX 信号の間隔

360RPM なので
60/360*1000 = 166.667ms
と、計算と同じになっています。

フローッピ-ディスクドライブの READ DATA 信号/ WRITE DATA 信号は、RS232Cなどのシリアル通信のように "0" なら "H" 、"1" なら "L" (FDDの信号は負論理) とレベルが変化するものだと勝手に思っていて、FM 方式で記録した場合、データビットに "1" が連続すると、READ DATA 信号がしばらく "L" になったままになって、同期を外さずに読み取るのはすごく難しくないか? というか、自分ではできる気がしないなと思ってたのですが、今回波形を観測してみて、そうでないことがわかりました。

実際には、"0" なら "H" 、 "1" なら "短いパルスを出力" というぐあいで、信号線が "L" になったままにはならない仕組みになっていました。
これなら、パルスの立ち下がりから次の立ち下がりまでの時間を計測することで、データの取り込みができますね。

FM 方式は、データのビット列に対して、単純にクロックビット "1" を挿入するのですが、MFM 方式の場合、通常はクロックビットに "0" を挿入し、データに "0" が連続した時だけクロックビットに "1" を挿入します。
こうすることで、"1" が連続することがなくなり、FM 方式と比べて信号の最大周波数が半分になります。同じ周波数で記録するならデータ量を2倍にできることになります。
古いパソコンで使われていた 2D / 2DD / 2HD は、どれも MFM 方式が使用されていますが、フロッピーディスクコントローラーの設定により FM 方式も使用できます。

今回波形を観測してみて、フロッピーディスクドライブを自分で作れそうな気分になってきました。