フロッピーディスク(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からメモリへの転送がうまくいっているのか判断がつきませんね……(さて、どうやって目で確認したものか)

同時並行にて、別環境での開発も実施

しております。Cygwinとnasmです。makeもCygwinの中のものです。FDへの焼きこみは同じくCygwin内のldというのでやってます。
2日目までの内容は出来ました。できれば今後の章すべての内容を、付録CD−ROMのツール無しでやってみたいんですよ。(あくまで希望的観測(ぉ)