科学・技術
Apple Disk II コントローラカード
The Apple Disk II Controller Card (bigmessowires.com)
要約
Apple IIのディスクコントローラカードには、オリジナルのDisk IIコントローラと、それ以外の2つの主要なタイプがあります。後者のタイプは標準APIを提供し、ソフトウェアが低レベルの詳細を知る必要なくブロックの読み書きを可能にしますが、Disk IIコントローラは非常にシンプルで、ほとんどすべての低レベルの処理をソフトウェアに任せていました。これは当時の画期的な技術であり、Apple IIが普及する大きな要因となりました。
全文翻訳
Apple IIのディスクの世界には、ディスクコントローラカードの2つの主要なタイプがあります。オリジナルのDisk IIコントローラ(およびそのクローン)と、それ以外のすべてです。どちらもそれぞれの役割があります。「それ以外のすべて」のカテゴリには、Apple 3.5ディスクコントローラカード、Lironカード、SCSIカード、IDEカードなどが含まれます。これらのカードは、ソフトウェアがディスクの実際の動作について何も知ることなく、ブロックの読み書き、ドライブの状態取得、ディスクのフォーマットを行うための標準APIを提供します。これらのカードには、低レベルの詳細を処理するための組み込みのスマート機能が備わっています。対照的に、オリジナルのDisk IIコントローラカードは非常にシンプルで、ソフトウェアに低レベルの詳細のほぼすべてを処理させるものです。それでも、当時の技術としては驚くべきものでした。
最初のApple IIモデルには、フロッピーディスクのサポートが組み込まれていませんでした。Disk IIコントローラは、その不足しているサポートを非常に低コストで追加できるように巧みに設計されており、Apple IIコンピュータが非常に人気になった主な理由の一つでした。このディスクコントローラは、当時の競合製品よりもシンプルで、安価で、柔軟性があり、全体的に優れていました。これはウォズニアックの「やればできる」技術の究極の例です。
フロッピーディスクの基礎知識
フロッピーディスクは、磁性体でコーティングされたプラスチック製の円盤です。ドライブにセットされると、ディスクは約300 RPMで回転します。ステッピングモーターは、読み書きヘッドをディスクの中心から外周に向かって直線的に移動させます。この配置により、シリアルストリームの1と0を保存できる数十個の同心円状のリングが提供されます。これらの基本から、バイト、トラック、セクタといったより高レベルの概念にどのように移行するのでしょうか?論理データバイトはどのようにディスク上のビットパターンにエンコードされるのでしょうか?ディスクを読み取る際、ビットはどのようにバイトにフレーム化されるのでしょうか?トラック0やセクタ間の境界はどのように見つけるのでしょうか?1970年代におけるこれらの質問への従来の答えは、追加のハードウェアであり、多くのハードウェアでした。これにより、ディスクコントローラとドライブ自体が複雑で高価になり、安価なホームコンピュータシステムにとってはほとんど手が届かないものになっていました。
Appleがカセットテープデータストレージの代替品を見つけることに着手し、Apple II用のフロッピーディスクドライブの選択肢を検討し始めたのは1977年後半のことでした。彼らはまだ小規模で未確立な会社であり、Apple IIは発売されてから約6ヶ月しか経っていませんでした。ウォズニアックはフロッピーディスクの主題についてあまり知りませんでしたが、彼はその挑戦を引き受けることに同意しました。ウォズニアックのアプローチは、ディスクを制御するハードウェアのほぼすべてを取り除き、ビットバンギングに似たソフトウェア駆動型のアプローチをとることでした。Appleは、5.25インチフロッピーディスクドライブの発明者であるShugart社に行き、ShugartのSA400ドライブからほとんどの制御電子部品を取り除いた、簡素化されたバージョンのドライブを要求しました。それは、ディスクを回転させるための1つのモーターと、読み書きヘッドを移動させるためのステッピングモーターだけを備えたシンプルな機構でした。伝説によれば、Disk IIのハードウェア設計全体は、ウォズニアックとランディ・ウィギントンによって1977年のクリスマス休暇中の数週間に考案・構築され、最初のDOSの作成も含まれており、動作するディスクドライブは1978年1月にCESでデモされました。Appleのエンジニアであるクリフ・ヒューストンとウェンデル・サンダーも追加の支援を提供しました。40年以上経った今でも、この小さなチームがこれらすべてをいかに迅速に動作させることができたかに驚かされます。
数年前、私はウォズニアックにDisk IIの開発について尋ねたところ、彼は次のように答えました。「あの驚くべきディスクコントローラをどうやって思いついたのか、私にはわかりません。私はアナログでもデジタルでも、電子機器で何でも作るのが得意でした。ディスクハードウェアやソフトウェアに関する事前の経験は、授業も含めて一切ありませんでした。ですから、私の考え方はゼロから始めるしかありませんでした。ディスクから来るデータを感知し、タイミングに基づいて0と1の判断をしなければなりませんでした。私はバークレーでステートマシンに関する大学院レベルのコースを受講しており(学部生でしたが、どこの大学でもコンピューターに関する大学院コースしか受講しませんでした)、これを実現するために2つのシンプルで低コストのチップをステートマシンとしてどのように使用できるか、一種の最小限のマイクロプロセッサーを手作りするような方法を考えました。当時、私はそれがデータを読み書きすることは知っていましたが、何をするのか分からなかったため、ディスクコントローラの多くの要素を省略していると思っていました。私の設計は部品数が非常に少なかったため、そう思っていたのです。しかし最終的には、私の設計はいくつかの良い点でより多くのことを行いました。特に、コンピュータ内にあり、動作を変更できるソフトウェアと結びついていたため、通常のディスクでは不可能だったより大きなストレージとより速い速度につながりました。さらに、私はドライブ自体から約20個のチップを取り外し、独自のコントローラからそれらを迂回させました。それらは単に物事を邪魔する仲介役だったからです。私が何度も行った最高の仕事は、一部はお金がなくて誰よりも少ない部品を使う方法を学ばなければならなかったこと、そして私が創造した素晴らしいものはすべて、それまで一度もやったことがなかったという事実によるものでした。」
Disk IIコントローラカードの解説
Disk IIコントローラカードは、基本的には単なる巧妙なシフトレジスタです。1ビットあたり4マイクロ秒という固定レートでビットを読み書きする方法を知っています。このカードには、コンピュータが最初に起動したときに実行されるブートストラップコードを含む小さな256バイトのROMも搭載されています。これは、トラック0、セクタ0を見つけてコンピュータのメモリにロードし、それを実行するのに十分なスマートさを持つ最小限の6502プログラムです。ディスク制御の他のすべての側面はソフトウェアによって処理されます。
カードには8つのシンプルなチップしか含まれていません。ブートストラップコードを含む256バイトのROMと、ステートマシンの一部として使用される2番目の256バイトのROM(これについては後述します)があります。また、ステートマシンの入力を提供する74LS174ヘックスフリップフロップもあります。74LS323 8ビットシフトレジスタは、設計全体の心臓部です。74LS259アドレス可能ラッチは、モーターの望ましい状態とドライブ1または2の選択を保存します。556デュアルタイマーと、必要な接着ロジックを提供する74LS05ヘックスインバーターと74LS132クアッドNANDがあります。以上です。それがディスクコントローラ全体です。ここに回路図があります。
フロッピーディスクI/Oの課題を1つずつ見ていき、Disk IIコントローラの設計がそれらをどのように解決したかを見ていきましょう。
課題1:バイトフレーミング。ディスクからくるデータは1と0の連続したストリームであり、開始ビットや停止ビットはありません。では、1バイトがどこで終わり、次のバイトがどこで始まるかをどうやって知るのでしょうか?ウォズニアックの解決策は、ディスクに書き込まれるすべてのバイトの最上位ビットが1であることを要求することでした。ディスクの読み取り中、ステートマシンはディスクからビットを一度に1つずつ取得し、シフトレジスタを1つ左に移動させ、新しいビットを右に追加します。左端のビット位置に1が保持されるまでこれを続け、その時点でステートマシンは「よし!これで完全なバイトだ!」と言います。その後、CPUはバイトを保存し、プロセスが再び開始されます。ステートマシンはMSBが1になった後、シフトレジスタをクリアするため、次のバイトの8ビットをシフトインする準備が整います。
この解決策だけでは十分ではありません。もしステートマシンが実際にバイトの途中からビットの読み取りを開始した場合、バイトの途中にある1ビットをMSB位置の1ビットとして誤解釈する可能性があります。しかし、このスキームは、ステートマシンが一度だけバイトフレーミングを正しく行えば(運によってか、別の方法によってかにかかわらず)、その後も正しくあり続けることを保証します。したがって、課題はディスクデータの読み取りを開始する前にフレーミングが正しいことを保証する方法を見つけることです。従来の解決策は、各セクタの直前に、いわゆる同期バイトの特別な50ビットパターンをディスクに書き込むことでした。これらは実際にはバイトではなく、10ビットパターン1111111100を5回繰り返したものです。このパターンは、初期のバイトフレーミングがどこにあっても、前述のステートマシンルールに従うだけで、パターンの最大5回の繰り返し後に正しい同期に落ち込むという興味深い特性を持っています。この解決策は完全にソフトウェアによって行われます。