[PR]100万円が無料で当たる!:今すぐ応募して現金を当てよう!

Hello, world の動作確認ができましたので、 ディスクからのデータ読み込みに移ります。
今回は、ディスク読み込み方法を説明します。
ディスクからデータを読み込むにはINT 13h、AH=02hを使います。
この BIOS コールは次のように呼び出します。

割り込みパラメータ機能
INT 13hAH=02h
DL=ドライブ
AL=読み込むセクタ数
CH,CL,DH=CHSパラメータ
ES:BX=データ
ディスクから読み込みます。
CHSで指定された位置からALセクタ分読み込みます。

ここで、CHS パラメータとは何でしょう?
1MB のフロッピーディスクは、 80個のシリンダを 2 つ(2ヘッド)持ちます。
この 160 個のブロックを「トラック」と呼びます。
メディアにより CHS の数は違いますが、 例えば1.44MB フロッピーでは、 個々のトラックは 512 バイトのセクタを18個記録できます。
シリンダ番号とヘッド番号は 0 から数えますが、 セクタ番号は 1 から数えます。
通し番号との対応を表にすると以下になります。

通し番号
(論理セクタ)
シリンダ(C)ヘッド(H)セクタ(S)
0001
1002
2003
::::
170018
18011
19012
::::
350118
36101
::::

INT 13h で使うCHSパラメータは、次の形式で シリンダ、ヘッド、セクタの番号を指定したものです。
シリンダは10ビット、ヘッドは8ビット、セクタ番号は6ビットの データとして扱われます。

CL 上位2ビット10ビットのシリンダ(C)の上位2ビット
CH10ビットのシリンダ(C)の下位8ビット
CL 下位6ビット6ビットのセクタ番号
DH8ビットのヘッド番号(H)

今回はフロッピーディスクですので CHS を説明しましたが、 CHS パラメータで扱えるディスク容量は 8GB 程度までです。 現在使われているハードディスクでは、 ここで使われる CHS パラメータではなく LBA パラメータと呼ばれる方式が使われます。

これでディスクからの読み込み方法がわかりましたので、 次回はディスク読み込みを行うマスタブートローダを作ることにします。


OS を作るには以上の説明で十分ですが、一応 ディスクの構造を説明しておきます。
1MB のフロッピーディスクは、先の説明にあったように 80個のシリンダを 2 つ(2ヘッド)持っています。

通し番号(トラック)シリンダヘッド
000
101
210
311
420
521
:::
158790
159791

実は、フォーマットされていないフロッピーディスクには セクタは存在しません。
10000バイト程度を記録できるトラックが 160 個存在するだけです。
ディスクの(物理)フォーマットとは、 このトラックにセクタのマークをつけていくことです。
セクタのマークはセクタ開始マーク、CHS情報、セクタの大きさ、 エラー訂正用の CRC やギャップデータと呼ばれる特別なデータなど からなる複雑なものです。
シリンダ番号とヘッド番号は 0 から数えるのに セクタ番号は 1 から数えるのは、 このとき書き込むセクタ番号が 1 からはじまるためです。
なお、同じフロッピーディスクでも、フォーマットの方法によって 記憶容量が違うのは、記録密度やセクタのマークのつけ方が違うためです。

2005-08-27: ChangeLog作成 (最終更新)
Copyright (C) 2005 hoverkid, all rights reserved.
[PR]話題の新車を無料プレゼント中:必ず当る抽選会!今すぐ応募で簡単GET