- ベストアンサー
フロッピーディスクのデータ構造を教えてください。
OS自作入門という本を読んで自作のプログラムを フロッピーのブートセクタに書き込んで実行する、 ということをやっています。 この本にはフロッピーのデータ構造については 記述がありませんでした。ご存知のかた、おしえて ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ブートセクタは、最初の3バイトと0x003E以降がアセンブリコードで、それ以外は、FDを管理するためのパラメータになっています。 0x0000~0x0002 ジャンプ命令 (ブートストラップコードの先頭0x003Eにジャンプさせる) 0x0003~0x000A OEM名 (フォーマットしたOSにより、"MS-DOS5.0"とか"MSWIN4.1"とか"LINUX"とか書かれている) 0x000B~0x0023 BIOSパラメータブロック (以下の括弧内は1.44MB DOSフォーマットの数値) 0x000B~0x000C 1セクタ当たりのバイト数 (0x0200=512) 0x000D 1クラスタ当たりのセクタ数 (0x01=1) 0x00OE~0x000F 予備セクタ数 (0x0001=1) 0x0010 FATの数 (0x02=2) 0x0011~0x0012 ルートディレクトリのディレクトリエントリ数 (0x00E0=224) 0x0013~0x0014 セクタ総数 (0x0B40=2880) 0x0015 メディアの種類 (1.44MB:0xF0、720KB:0xF9) 0x0016~0x0017 1つのFAT情報を保存しておくためのセクタ数 (0x0009=9) 0x0018~0x0019 1トラック当たりのセクタ数 (0x0012=18) 0x001A~0x001B ヘッド数 (0x0002=2) 0x001C~0x001F 隠しセクタの数 (0x00000000=0) 0x0020~0x0023 ラージセクタ数 (0x00000000=0) 0x0024~0x003D 拡張BIOSパラメータブロック 0x0024 物理ディスク番号 (0x00) 0x0025 DOS:現在のヘッド、NT:ダーティフラグ (0x00) 0x0026 シグニチャ (0x29) 0x0027~0x002A ボリュームシリアル番号 (ランダム(?)な4バイト) 0x002B~0x0035 ボリュームラベル 0x0036~0x003D ファイルシステムID ("FAT12 "とか書かれている) 0x003E~0x01FE ブートストラップコード (次に読み込むセクター or ファイルをロードするコードを記述する) 『ブートパラメータブロックの構造』 http://tkralia.hp.infoseek.co.jp/mona/BPB.txt
その他の回答 (2)
- deadline
- ベストアンサー率63% (1239/1943)
>このような情報を皆さんはどこから入手するのでしょうかね? インターネットの無かったMS-DOS全盛の時代(歳がバレますね(笑))には、ASCIIやSOFTBANKから機種ごとの技術情報満載の書籍(←雑誌ではない)が出てて、それを参考にハードを弄くり倒してましたが、 インターネットが出来てからは、メーカーのサイトで技術情報を探したり(ただし、Intelとかはほとんど英語。FD関係は、最近、FDがあまり使われないせいか、メーカーサイトでは中々見つからない)、"Google"で関係しそうな単語を片っ端から入力して検索したり・・・、『Interface』のような技術情報専門の雑誌も出てますし。 >JMP 3C >NOP プログラムカウンタ+0x3Cの相対ジャンプなので、"3C"で"0x003E"へ飛びます。
お礼
情報の入手先については他の回答者様からの ご意見をもとにネットで探していきます。 英文サイトでいくつかいいのがありました。 辞書片手に読みます。 MS-DOS全盛の時代には私も黒本(ご存知でしょうか) を読んでいました。 JMP 3Cの件はありがとうございます。PCのことを 忘れてました。
- msystem
- ベストアンサー率42% (79/186)
「データ構造」というのが良く分かりませんが、フロッピーには複数の意味のフォーマットがあり、物理フォーマットと、論理フォーマットがあります。(HDDも同じですが今のHDDは一般には物理フォーマットはしません) 物理フォーマットとは、以下のとおりです。 FDはディスク上に同心円状のトラックが複数あり、このトラックの数をは、物理フォーマット時に決定します。(標準的なものは当然あります。昔は標準的なフォーマットを使用しないことで、コピーできないディスクを作成するということをしていました。) また、1つのトラックには複数のセクタがあり、この数とサイズをフォーマット時に決めます。(同じく標準的なものがあります。)また、ディスクは裏と表の両方を使えますので、ここも区別します。 一般にブートセクタというのは1つ目のトラックの最初のセクターのことを指します。 論理フォーマットは、物理フォーマットされたディスク上にデータを保存する際の管理領域などを書き込む作業です。ディスク上にただ単にデータを書き込むだけであれば、セクターに順番にデータを書き込めばいいのですが、普通は複数のファイルを保存するなどの管理ができる必要があります。そのファイル名やどのセクターにどの順番にデータを保存しておくかを決め、その間利用データを保存する領域を作成することを、論理フォーマットといいます。 分からなければ、更に質問していただければ、お答えいたします。
補足
ご回答ありがとうございます。 物理フォーマットについては前述の 参考書に記述がりましたので理解して おります。 知りたいのは論理フォーマットのほうです。 よろしくご教示願います。
お礼
最初の3バイトはジャンプ命令になってますね? 今、WindowsXPでDOSの起動ディスクを作って ブートセクタを調べると、 EB 3C 90 になってるんですよ。 JMP 3C NOP のことですね。 3Cを3Eに書き換えると動かなくなるので すが、なぜでしょう?
補足
詳細な資料ありがとうございます。 しかし、このような情報を皆さんはどこから 入手するのでしょうかね?