見出し画像

フロッピーディスクの本当の中身

フロッピーディスクの表面はトラックとセクタという単位でデータが読み書きされることは

で書きました。もう少し掘り下げましょう。

最初のフロッピーディスクである8インチの時代に最初に登場したフロッピーは、ハードセクタと呼ばれるもので、トラックの位置は決め打ち、セクタは各セクタの位置を示すたくさんの穴が開けられており、一つしか無いジャケットの穴から、セクタの穴が覗いたところから読み書きを始めるようにしていました。

この方法だと、セクタ数ごとに異なるフロッピーディスクを用意する必要があるので、最初のセクタがある場所にひとつだけ穴が開けられたソフトセクタになっていきました。

フロッピーディスクの歴史(再び登場)

DISK][では、ひとつだけ開いている穴すら使いません(だからひっくり返しても使えるのです)。まずトラックは、物理的に行けるだけ外側に行ったところをトラック0とします。起動時などに「カッカッカッ」と聞こえる音は(もう聞いたことがある人もいないか…)、この行けるだけ行けるをやっているのです。ここから一定のタイミングだけ内側に移動しつつ、次に大きな番号のトラックになるのです。セクタの方は、初期化時に好きなタイミングで最初のセクタから書き込んで置きます。ですからトラックによって最初のセクタがある位置(角度)は異なります。

これで間に合うのは、データを読み出す時に、データの中に初期化時に書かれたトラック番号とセクタ番号が入っているからです。読んでみてトラック番号が予定していたものでなければ、例の「カッカッカッ」をやってヘッドの位置合わせをやり直してから、読み直します。セクタの方は読み続けて読みたいところまで待てば良いわけです。実はセクタ番号の順序も0から順番にする必要すらありません。セクタを続けて読む場合、読み込む処理の間もディスクは回り続けているので、次のセクタを読むときには、少し先に進んでいます。この少し先に進んだところに次のセクタがあれば、もう1周待たなくて良いので、番号としては飛び飛びの順序で書かれることもありました(インターリーブ)。大事なことは順序は好きにして良いということです(コピープロテクトで関係してきます)。

フロッピーディスクは磁気メディアなので、物理的には回転するメディアとヘッドの間で発生する誘導電流によって読み書きがなされます。ですから連続した1や0があると直流に近くなってしまうのと、1や0がいくつあるのかわからなくなるので確実な読み書きができません。ハードウェアで実装されていた殆どのディスク装置では、読み書きするデータを常に隣と反転したビットとしてセットで使うことで、この問題を回避していました。1ビットを2ビット使って記憶するのです(1バイトあたり4ビット記憶できる)。TRS-80のディスク装置は、この方式だったのでフロッピーディスクの容量としては80Kバイトでした。

さて、DISK][のハードウェアは、ソフトウェア的にはヘッドから読み込まれた1と0が、そのままシフトレジスタの中を流れているという構造になっています。この流れているデータを見て「ここだ!」というタイミングで値を読み取るのです(最上位ビットが1の時が「ここ」です)。

ここで再び天才は閃きます。「本当に連続したビット値はダメなのか」と調べたところ、1が2つ連続しても、データの書き方を工夫すれば大丈夫じゃないかとわかりました。これで1バイト(8ビット)あたり5ビットのデータが格納できるようになり、結果的に1トラックで13セクタ、合計で114Kバイトの容量となったのです。ハードウェア的(アンフォーマット容量)にはTRSと変わっていないのにも関わらずです。

この後、さらにインターフェースカードのファームをアップデートすることで、連続した0も使えるようになり、これで使えるパターンは8ビット中に66種類あることになります。1バイトあたり6ビットのデータが入れられるようになり、1トラックは16セクタ、合計で140Kの容量に増えることとなりました。

The Amazing Disk II Controller Card

このロジックを働かせるためには、同期(Sync)バイトと呼ばれる特殊なパターンを最初に書き込んでおく必要があります。これは不思議なビット列で、このパターンを見つけて、そこから一定のタイミングで読み取り続けることで、最上位ビットが1の時に有効なデータであることが保証できるのです。データ自身はビット列が流れていくだけで、何らかの区切りなどはありません。

この一定のタイミングというのが大変です。DISK][は完全にソフトだけで制御しているので、読み取りルーチンのクロック数を数えて、どんな時にも同じタイミングで実行しなければなりません。特に6502の場合、メモリのページ境界をまたぐアクセスをすると、クロック数が変わってしまうので、絶対に避けなければいけません。セクタに含まれるデータが256バイトだったのは、その意味では6502との相性は良かったといえます。

なお、このビット変換ロジックはDOSで使われたロジックが唯一の解法ではなく、独自に修正を加えたコードを使っているケースもゲームなどにはありました。特に変換テーブルに手を加えるのは容易なので、時折は見かけたのですが、これを追うのは少しばかり骨が折れましたね。

こういった話は、もっぱらApple][だけの話で、その後のパソコンでは少なくともドライバの向こう側でしか登場してこないので、下手にいじることもできなくなり、誰も知らない話になりました。アップル自身もハードウェアを変更すると(クロック数を数えて処理していますから)、今までのディスクにアクセスできなくなってしまうので、かなり首を絞めることにもなった部分だとは思います。

2022/8/13追記。

8月11日はWozのバースデーだったようです。73回目の誕生日、おめでとうございます(なお誕生日は0から数えているのだとか)。


ヘッダ写真はDISK][の磁気ヘッド付近を拡大したもの。真ん中あたりの円柱っぽいところが、わかりますか。


この記事が気に入ったらサポートをしてみませんか?