
2026/06/30 3:23
アップルディスク II コントローラカード
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Apple II の長期的な人気は、主に低コストの Disk II コントローラーによって大きく支えられており、これはシステムにフロッピーディスクサポートをもたらした独自のデバイスです。1977 年末、スティーブ・ウォズニアックとランディ・ウィギントンによって設計されたこの「ダマ」ハードウェアは、チップがわずか 8 つで構成され、データ符号化やサーチなど複雑な操作のすべてを内蔵ロジックではなくソフトウェアルーチンにオフロードし、現代の基準とは対照的なアプローチでした。しかしながら、これは大きなコスト削減を実現しました。当初は トラックあたり 13 セクターまでしか扱えない非効率な「5-and-3」符号化方式を採用していましたが、連続したゼロを読み取ることを可能にする重要なソフトウェア修正が行われた後、「6-and-2」方式へのアップグレードが実施され、DOS 3.3 の導入により容量は 140 KB に増加しました。ハードウェアに抽象化レイヤーがないため、OS は DOS 3.3 などのようにドライブの生メカニクスを直接管理する必要があり、現代システムで自動的に処理されるタスクのために膨大な内部コードが関与していました。このアーキテクチャは必然的にユーザーエクスペリエンスとコピー保護スキームに影響を与え、ハーフトラックオフセット操作やスプリットトラック書き込みのような複雑なトリックを利用することが一般的でした。結局のところ、Apple II は、ハードウェアの複雑さを手放して費用対効果と柔軟性を提供するという、軽量でソフトウェア中心の設計が画期的なパーソナルコンピュータを動力源とすることを示しました。
本文
アップル II ディスクコントローラーとフラップディスク技術の深層分析
1. 2 つのアプローチ:オリジナル vs そのほかのカテゴリー
アップル II のディスクシステムには、主に 2 つの種類 のコントローラカードが存在します。
- カテゴリ A: オリジナル・ディスク II コントローラ(およびクローン)
- 極めてシンプルで「頭脳なし」の状態です。
- ソフトウェアに事実上すべての低レベル処理を任せます。
- 簡素な構成でありながら、当時の技術としては驚くべき傑作でした。
- カテゴリ B: それ以外のすべて
- アップル 3.5 インチコントローラ、リロン (Liron) カード、SCSI、IDE などが含まれます。
- 「知能」を内蔵しており、低レベルの詳細処理はハードウェア(組み込みの知能)が対応します。
- スタンダードな API を提供するため、ソフトウェア側がディスク内部構造を知る必要はありません。
2. フラップディスク基礎知識と開発背景
フラップディスクとは
- 磁気被覆を施したプラスチック円盤です。
- 回転速度:約 300 RPM。
- データ記録方式:ステッパモーターでヘッドが中心から外周へ直線移動し、**同心リング(並列データ)**を形成します。
ウォズニアクの挑戦
- 背景: 初期アップル II に内蔵ドライブがなく、安価な外部ドライブ接続が必要でした。
- 制約: 小規模企業・実績不足(発売後半年)。ウォズは専門知識がありませんでした。
- 戦略: **「Bit-banging(ビットバンギング)」**と呼ばれる、ソフトウェア主導のアプローチを採用しました。
- シュガート社製の SA400 をベースに制御回路を簡素化。
- 単なるモーターとステッパのみを持つ低コスト機構を実現。
- 開発期間: ウォズとランディ・ウィギントンが、1977 年クリスマス休暇の数週間で完成(CES でデモ発表)。
ウォズの言葉:「地上げ」からの発想
「電子回路は得意だが、ディスク分野の経験はない。ゼロから考え直した。ディスクからデータを受け取り、タイミングに基づいて 0 と 1 を判断する仕組みが必要だった。」
「ステートマシン(簡易マイクロプロセッサ)として 2 つのチップだけで全てを動かす設計にした。ドライブ内の約 20 チップをすべて外し、ソフトウェアで代替処理した。お金がない分、部品数を最小限に抑えながら創造的な解決策が生まれました。」
3. ディスク II コントローラーのハードウェア構成
本質的には高度な シフトレジスター に過ぎず、以下のような極小構成で動作します。
- チップ数: всего 8 つ。
- ROM (256 バイト): CPU 起動時のブートストラップコード。
- ROM (256 バイト): ステートマシンの処理ロジック。
- 74LS174: ヘックスフラップフロップ(ステートマシン入出力)。
- 74LS323: 8 ビットシフトレジスター(心臓部)。
- 74LS259: アドレスラッチ(モーター状態・ドライブ選択記憶)。
- 556/74LS05/74LS132: タイマ、インバーター、ゲート(グルーロジック)。
ブートストラップ ROM の役割
- トラック 0 セクタ 0 を探索し、データをメインメモリへ読み込み。
- これ以上の処理はすべて CPU とソフトウェア に任せる「最小限の知能」しか持たない。
4. 課題と解決策(ソフトウェア主導の奇跡)
ディスク II はハードウェアで保証する機構を持たず、すべての課題をソフトウェア規約で解決しました。
課題 #1: バイトフレームング (Byte Framing)
- 問題: ディスクデータは連続した「1」と「0」のストリームであり、バイト境界がない。
- 解決策: **最上位ビット (MSB) を常に「1」**に設定する規約。
- 読み取り時は MSB が「1」になるまでシフトし続けた時点で、「新しいバイトが見つかった」と判断する。
- 同期問題の回避: バイト途中から始まっても、初回を除き永続的に正確に機能する仕組みを作る。
- 同期バイト (Sync Bytes):
のパターンを 5 回繰り返す。初期位置に関わらず最大 5 回で同期状態に収束する(純粋なソフトウェア規約)。1111111100
課題 #2: バイト符号化 (Byte Encoding)
- 問題:
- MSB を「1」にするため、ゼロバイトや小値を直接書き込めない。
- 連続したゼロビットが3 つ以上あると読み戻せない。
- 解決策: 「6-and-2」エンコード方式 (GCR の一種) を採用。
- ディスクバイトは 64 通り使え、1 バイトで論理ビット 6 ビットを表現できる(1.33 倍のオーバーヘッド)。
- 動的デコードテーブル: ROM に逆参照テーブルを持たず、RAM で動的に前方参照テーブルを構築する巧妙な手法(約 30 バイトのコードで実装)。
- 技術進化:
- 初期型(DOS 3.1/3.2): 連続ゼロ制限が厳しく「5-and-3」方式を採用。トラックあたり 13 セクタ、容量 114 KB。
- DOS 3.3 以降: ステートマシン ROM の修正のみで対応可能になり、「6-and-2」へ移行。16 セクタ・140 KB へ向上。
課題 #3: セクタ分割 (Sectoring)
- 問題: データリングのどこがセクタの始まりか?(物理的インデックス穴を使わない)。
- 解決策: D5 AA 96 というバイトシーケンスをセクタ開始シグネチャとする。
- ヘッダーに含まれるセクタ番号と照合し、不一致なら次の
を探す。D5 AA 96 - 完全なソフトウェア規約であり、ハードウェアによる強制はない。(※『サファリアン』などは独自スキームを採用)
- ヘッダーに含まれるセクタ番号と照合し、不一致なら次の
課題 #4: タラックの位置付け (Finding Tracks)
- 問題: ディスク上には「トラック」という物理的定義がなく、ヘッドをどこに持っていくべきか。
- 解決策: ソフトウェアによる相対制御。
- トラック 0 探索: ステッパモーターを止まらずに連続動作させ、物理ストッパーにぶつかって停止させる(起動時の「カタカタ」音)。80 半ステップ後確定。
- ヘッド移動: 4 つの電磁石による微細制御。「1 回の動き」=「半トラック」。密な配置のため通常は 2 回の動きで 1 つのトラックとする。
- コピー保護トリック:
- 奇数回だけオフセットした位置にデータを置く(整数トラック期待プログラムを混乱)。
- 円盤周長の半分のみ使用する「分割トラック」技術。
5. ブートストラップコードの逆アセンブリ解説
256 バイトという限られた空間で、以下の処理を実現しています。
- ステッパ制御によるトラック 0 到達。
- バイト読み取り開始と
シグネチャ認識。D5 AA 96 - RAM 上に動的に GCR デコードテーブル構築。
- 「6-and-2」デコードを実行して論理バイトへ変換。
- スーパーダ(Super-DOS)全体を RAM へ読み込み、実行。
欠点と妥協点
- チェックサム検証なし: セクタ 0 のエラー検知を行わない(後継機で「修正」されたが互換性問題発生)。
- エラーハンドリング無効: 読み取り失敗時に永遠にループし、起動時フリーズの原因となる。
6. 総括:すべてを統合して考える
ソフトウェア主導の哲学
ディスク II コントローラーは、「最小限のハードウェア × 莫大なソフトウェア」による設計です。
- 現代的視点: ブロック I/O は低レベル詳細から解放されたい(不良慣行と呼ばれるほど)。
- 現実: 他のコントローラと異なり、アップル II は DOS3.3 や ProDOS のように追加コードで全ての処理を行うという狂気的なスタイル。
現代への応用:BMOW Floppy Emu
古き良きマシン(Apple II, Mac, Lisa)の保存・活用には Floppy Emu が不可欠です。
- SD カードに数百枚のディスクイメージを保存。
- 専用ハードウェアが多種類のフラップ/HDD をシミュレートし、ファイル転送やソフトウェア実行を実現。
アーカイブへのメッセージ
この技術はウォズニアクと小チームによる驚異的な冒険でした。理解の限界を超えて構造を把握しましたが、なおも多くの未知があります。
もし誤解や重要な欠落があれば、コメント欄でお知らせください。