フロッピーディスク(FD)をゴチゴチゴチ[3-1]
えー、3日目(3章)の割り当て分なんですが!2/10節しか消化してません。
この亀っプリ……果たしてどうにかならんものか……
先にFDについて少し。
1枚のFDの記憶領域分けとして、
- シリンダ(Cylinder)……要はディスク上の同心円。0番から79番まで
- ヘッダ(Header)……FDの読み取りヘッダ。0番が表で1番が裏?
- セクタ(Sector)……シリンダの円を分割した扇状の部分。1から18まで
とあり、80*2*18*512 = 1474560 Bytes => 1440 KBytes で、1.4MBのFDを形成するわけです。(1セクタは512バイト)
(←偉そうに書きましたが、本に書かれているままです。それにしても、なんでセクタだけ1からなんでしょうね?)
このエントリの内容
FDからメモリへ読み込みます。FDDでの起動時、C0-H0-S1(シリンダ:0 ヘッダ:0 セクタ:1の意味)から1セクタ512バイトをBIOSが、物理メモリ0x7C00へ読み込んでくれますが、それ以上のことをします。
AH = 0x02(読み) AL = (連続で)処理するセクタの数 CH = シリンダ番号 CL = セクタ番号 DH = ヘッダ番号 DL = ドライブ番号(基本、Aドライブオンリーなので0で良い) ES:BX = バッファアドレス
を突っ込んで、FDDアクセス機能のInt 0x13を叩くと、FDの指定した領域からメモリ(バッファアドレス)へコピーしてくれます。
(自分メモ:ES:BXというのは物理アドレス ES * 0x10 + BX に換算される)
付録CD−ROMのサンプルコード2つを実行してみました。
- C0-H0-S2を物理アドレス0x8200に読み込むソース
- 読み込み失敗した時に再読み込みをする処理を加えたソース
とりあえずうまく動いているようです。
が!!問題が一つ。これ、本当にFDからメモリへの転送がうまくいっているのか判断がつきませんね……(さて、どうやって目で確認したものか)