86-DOSがなぜディスクの先頭セクタを200Hにロードするのか、なぜIBM PC 5150のROM BIOSおよび現在に至る互換BIOSがMBRを7C00Hにロードするのか、その値の意味は何か。
一通り謎が解けたので、現在まとめ記事を書いてます。今週中に公開予定。
それにしても当時のアセンブラって・・・現在とは少し違います。
86-DOSのコードで頻出していて、悩まされたのが
UP
と
PUT 100H
の二つ。
UPは現在の"CLD"のことでした。(シミュレータ上で86-DOSのMonitorコードをステップ実行してて、シミュレータの逆アセンブリ結果を見て初めて理解)
PUTの方は擬似コードなのですが、正直よく分からないです。ORGも併用されてるので、そのコードがどこのメモリに展開されるのか分かりづらい。
86-DOSのMonitorやbootstrapって、割り込みベクタが調整される前に動作するコード・・・つまり、キーボード入力やディスクI/Oを、I/Oポートの読み書きを駆使し、割り込みは一切使わずに書かれている・・・スゲー。
こういうのを目の当たりにすると、つくづく「たった四半世紀でここまで変わるものなのか・・・」と感心というかあっけにとられます。これからの25年、50年はどうなっちゃうんでしょうね。