/ «2006-10-31 (Tue) ^ 2007-01-01 (Mon)» ?
   西田 亙の本:GNU 開発ツール -- hello.c から a.out が誕生するまで --

Categories Books | Hard | Hardware | Linux | MCU | Misc | Publish | Radio | Repository | Thoughts | Time | UNIX | Writing | プロフィール


2006-11-03 (Fri)

[Thoughts][Publish] Magic number 1440 (Floppy disk format 歴史編)

【2006/11/7 補足】 1.44 MiB という表記は間違いでしたので、以下訂正および補足を行いました。

Magic number 1440 が私に囁きかけるもうひとつの意味は、フロッピィディスク・フォーマットに関係しています。皆さんご存じの通り、現在主流となっている3.5インチFDのフォーマット後容量は "1440KB" です(IEC表記では、1440KiB, Ki = kilobinary = 2^10)。

ブロックデバイスをファイルとして取り扱うことのできる UNIX では、ディスクの中身を意識する必要はないのですが、中には "なぜ1440なの?" と疑問を感じておられる方もいらっしゃることでしょう。

フォーマット時容量1440KiB フロッピィディスクが持つ magic number 1440 は、次に示すパラメータから構成されています。

  • フロッピィディスクに収められた磁性体円盤には表と裏の2面がある
  • 各面には同心円状に全部で80本のトラックが存在する。
  • 各トラックには18個のセクターが含まれている。
  • 1セクターには512バイトのデータが記録されている。

フロッピィディスク1枚に含まれている総セクター数は、2x80x18=2880個。2セクターで1024バイト(1KiB)ですから、フロッピィディスクのフォーマット後容量は 1440 KiB となる訳です。

現在市販されている教科書が教えるフロッピィディスクの中身は、残念ながらこのレベルまで。

しかし、お楽しみはここから先に隠されているのです。

1.44 MB = 1440 KiB ≠ 1.44 MiB

蛇足ですが、ここで 1440 KiB を通常の単位取りを行い、1.44 MiB (Mi = megabinary = 2^20) と表記してしまうと、大きな誤差が生じますので注意しましょう(経験者は語る)。1440x1024 = 1474560 ですが、1.44x(2^20) = 1509949.44 となり、1.44MiB は 1440KiB に比較して、2.4%増しとなってしまいます。

1.44 MiB = 1.44x(2^20) = 1.44x(2^10)x(2^10)。これに対して、1440 KiB = 1.44x(10^3)x(2^10) バイトですから、両者を割り算すれば、2.4%増し(1024/1000) となるのは当然です。ちなみに、10進数による指数表記を SI prefix、2進数による指数表記を Binary prefix と呼びます。周波数で使う KHz や MHz は、SI prefix ですね(ここ、次回への伏線です)。

それでは、フロッピィディスクパッケージでお馴染みの "1.44MB" という表記は、どちらの prefix でしょうか?

既にお分かりの通り、1.44MB は SI prefix でも Binary prefix でもありません。1.44MB の M は、1024,000 = (2^10)x(10^3) 。なんと「SI prefix と Binary prefix のチャンポン表記」なのです。紛らわしいこと、この上ありません。良い子は "1440 KiB" で覚えておきましょう。

アンフォーマット時容量 2,000,000バイト

アンフォーマット時容量2000,000バイト 鋭い学生さんであれば、パッケージの裏側に書かれている右のような記述に気づくことでしょう。曰く、「フォーマットを施す前の生ディスク容量は 2.0MB です」と(併記されている1.6MBは、NEC PC-9801シリーズに搭載されていたFDDを使用した際の容量)。

これまた困ったことに、アンフォーマット時の容量で使われている MB の M は、実は SI prefix に基づいているのです(2x10^6)。2000 KiB でも、2 MiB でもありません。もう、無茶苦茶であります。詳細は次回明らかになりますが、良い子は「アンフォーマット時容量 2x(10^6) バイト」で覚えておきましょう。

この結果、フォーマット前後の容量差は、2,000,000 - 1,474,560 = 525,440 バイトとなります。

先生、どうしてフォーマットすると1/4も目減りしてしまうんですか?
もったいないじゃないですか!

USBメモリ全盛の時代にあって、設定に少々無理があるかもしれませんが、このような質問を投げかける学生さんがいても不思議ではありません。ところが、この質問は相当の難問で、現在市販されている書籍やインターネット上の情報を全て寄せ集めたところで、学生さんの疑問に明快に答えることはできません。

この質問の答えは、今から20年以上前に日本で発刊された資料が知っています。

世界的名著 フロッピ・ディスク装置のすべて

フロッピ・ディスク装置のすべて フロッピィディスクに関するリファレンス書と言えば、古今東西一冊しかありません。その本の名は、1989年にCQ出版から出版された「フロッピ・ディスク装置のすべて」。本書は、著者である高橋昇司氏がワイ・イー・データ社(現在も小型FDDを生産中)勤務中に執筆された、インターフェース1983年5月号の特集記事「最新フロッピ・ディスクシステムの研究」が下地になっています。

補足すると、この特集記事自身も、インターフェース1979年7月号に掲載された、特集記事「両面倍密度フロッピー・ディスクのすべて」を基本骨格としています。著者は、高橋氏と同じくワイ・イー・データ社に勤務されていた手嶋勉氏です。

当時は今と違い、第一線で開発に関わっていた技術者による自社製品の解説記事が目立ちました。内容も非常に読み応えがあるものが多く、30年近く立った今でもその内容は全く色褪せません。

文章もしっかりしていますが、何より記事の構成が素晴らしい。ブロック図, 回路図, タイミングチャート, オシロスコープ出力, 制御レジスター解説, アセンブリソース等々が、所狭しと繰り広げられる誌面は変化に富み、躍動感に溢れています。当時、ハードウェアとソフトウェアの垣根は存在しなかったことが良く分かります。

これに比べると、最近のハードウェア関連の記事は、データシートのCOPY&PASTEや、開発環境のインストール方法に終始したものが多く、内容的には極めて単調。昔の迫力ある誌面は、どこへ行ってしまったのでしょうか。

さて、「フロッピ・ディスク装置のすべて」の内容ですが、開発の歴史・機械的な構造・インターフェース・トラックフォーマット・磁気記録方式・FDC (Floppy Disk Controller)・データセパレータなど、フロッピィディスクに関する情報が天こ盛り。フロッピィディスクの聖典と言っても過言ではありません。

海外に類書はなく、日本語で読めることを神に感謝しましょう。既に絶版になって久しいですが、古本であればまだ何とか入手できるようです。

プロテクト解説の決定版 ザ・プロテクトIII

ザ・プロテクトIII 「フロッピ・ディスク装置のすべて」は、世界にただひとつのフロッピィディスク・リファレンス書ですが、内容は高度であり、初心者には少々敷居が高すぎます。

また、仕様と実装技術が淡々と述べられるだけなので、現実世界のフロッピィディスク上において、これらの技術がどのような形でビットパターンとして記録されているのか、読者はイメージできません。そこでお勧めの書籍が、1990年に秀和システムトレーディング社から出版された「ザ・プロテクトIII 上下巻」です。

フロッピィディスクが唯一のリムーバブル・メディアであった1980年代前半、市販ソフトウェアはフロッピィディスクで販売されていましたが、その多くにはコピープロテクトが施されていました。

フロッピィディスクドライブとCPUの間には、FDC (Fllopy Disk Controller)と呼ばれる制御 LSI が介在しており、CPU は FDC に対してコマンドを発行することで、ディスクの読み書きを行います。

FDC は豊富な機能を有していますが、私達が普段利用している機能はそのごく一部に過ぎません。1980年代、プログラマーは FDC の能力を最大限まで引き出し、様々なプロテクト技術を生み出しました。「ザ・プロテクトIII」は、PC-9800 シリーズのハードウェアに基づいた究極のプロテクト・テクニックを体系的に紹介した貴重な書籍です。

当時、かなりの種類のプロテクト解説書が発行されていますが、本書は最晩年に刊行されただけあり、扱っているテーマの豊富さは他書の追随を許しません。また、本書にはあらゆるプロテクト技術が具体的なアセンブリソース付きで掲載されており、実践編としての資料性は先の「フロッピ・ディスク装置のすべて」よりも遙かに上です。

プロテクトと言うと聞こえは悪いのですが、究極のプロテクト技術を学ぶことは、フロッピィディスクのローレベルフォーマットをビットレベルで学ぶことと同義です。後ろめたい気持ちを持つ必要は全くありません。

これまた、海外に類書はなく、日本に生まれたことに感謝しましょう。古本の在庫も比較的豊富のようです。

μPD765 FDC ユーザーズ・マニュアル

日本が誇る FDC μPD765

FDC と来れば、我が日本が世界に誇る NEC μPD765 を忘れてはなりません。μPD765 は、NEC PC-8001 と共に発売されたフロッピィディスクドライブユニット PC-8031 に搭載され、その後は IBM-PC への採用により、世界デビューを果たしました。

先ほど紹介した「ザ・プロテクトIII」は、μPD765 プログラミングに関する世界史上最も優れた解説書と言えるでしょう。

ちなみに、右の写真は私が浪人時代に肌身離さず愛読した μPD765 のデータシートです。発行は1980年1月10日、まさしく青春を FDC に捧げたのでありました。

長くなりましたので、Linux 上での Floppy disk format 実践編は次回へとつづきます・・

追記 (2007/1/28)

このメモを公開した際、古川享氏のブログを引用した上で、「Microsoft が N88-Disk BASIC の FAT 形式を真似て MS-DOS に採用した」と、誤った解釈を掲載してしまいました。お詫びすると共に、FAT 誕生に関する記事を新たに作成しましたので、そちらをご覧ください。

また、μPD765 が初代 IBM-PC に FDC として採用された経緯についてですが、同氏の記述は一行だけであり、私にはその事実を確認できる手段がなかったため、削除しました。