PBR まとめ
結局、逆アセンブルしたリストを印刷して、紙の上で整理する事にした。
やっぱり、紙の方が便利な場面って、結構、あるよね。
ペーパレスが叫ばれるようになってから随分経つけど、紙媒体は無くならないと思う。
さて、PBR の方ですが、ざっとまとめてしまうと、以下のような手順になるようです。
・ルートディレクトリエントリを読み込む。(多分、0800:0000 だと思う)
・ファイル名を順に検査していき "IBMBIO COM" を探す。
・見付けたら、先頭クラスタ番号とファイルサイズを保存。
・FAT(クラスタチェーン)を読み込む。(多分、0800:0000 だと思う)
ルートディレクトリエントリを上書きしてしまう模様。
・クラスタチェーンを辿りながら、ファイル本体を読み込む。(多分、0070:000 だと思う)
・DLレジスタにドライブ番号を保存
・読み込んだ内容の先頭アドレスに far ジャンプ。
これを参考に、FreeDOS の PBR も眺めてみると...
大まかには同じようだけれど、細かいところで、ちょっと違うみたい。
・まず、自分自身の再配置を行う。(1FE0:7C00へ移動)
・あんまり重要ではない気もするけれど、
BP = 7C00; SP = BP-60h って、立場逆転じゃない?(笑)
・BIOSから、DLレジスタにドライブ番号をセットして渡される事になっているみたいだけど、
FAT 前提であれば、BPB に記述されているわけだから、
BPB が無効じゃない限り、BPB の情報を優先しますよ。(だそうです)
・ルートディレクトリエントリを読み込む。(0060:0000)
・ファイル名を順に検査していき "KERNEL SYS" を探す。
・見付けたら、先頭クラスタ番号を保存。(のみ?)
・FAT(クラスタチェーン)を読み込む。(0060:0000)
これまた、ルートディレクトリエントリを上書きしてしまう。
・まず、クラスタチェーンを辿りながら、
クラスタリストをバッファに格納していく。(1FE0:2000)
・クラスタリスを参照しながら、順次、ファイル本体を読み込む。(0060:0000)
・BLレジスタにドライブ番号を保存
・読み込んだ内容の先頭アドレスに far ジャンプ。
細かい部分は、流しちゃったりしているけど、概ね、把握出来た気がする。
ROSeは、今のところ、特定のファイルシステムを持っていないので、
ベタにセクタ単位で読み込みを行っているので、特に複雑な処理は必要ない。
考えようだと思うけれど、必要ないのであれば、
このままシンプルな作りでも、良いような気もしたりする。