「手探りでCUI OS作成に挑む」連載
この記事は「手探りでCUI OS作成に挑む」連載の一部です。
全体の目次は「手探りでCUI OS作成に挑む」連載目次を御覧下さい。
実験
BIOSの入口を見つけることが目的です。
CPUは電源が入れられた直後FFFF:0にある命令を実行します。
その後F000:0xFFF0にあるBIOSの入口へ跳びます。
初めFFFF:0の位置にJMP 0xF000:0xFFF0があり直接BIOSの入口へ跳ぶものと思っていました。
しかし8086で見てみるとFC00:205Bへ跳んでいることがわかりました。
そこでブートローダからそれらのアドレスへ跳び、ブートローダへ戻って来られるか(戻ってくるということはそこにあるデータは何かしらの初期化処理であるということ)を検証することにしました。
FFFF:0のコード
アドレスFFFF:0にあるの命令を確認するとJMP FC00:205Bとなっていました。
このFC00:205Bから実行していくのだと思われますが、念の為8086実機で実験を行いました。
ブートローダから0xFC00:0x205Bへ跳ぶプログラムを書いたところ再起動を無限に繰り返していたため、0xFC00:0x205Bから一行ずつ実行していけばいつかは7c00へ辿り着くことが証明できました。
[org 0x7C00]
bits 16
start:
jmp 0xFC00:0x205B
times 510-($-$$) db 0
dw 0xAA55
一般的なBIOS入口
一般的なBIOSの入口であるF000:0xFFF0へ跳ぶプログラムも書いて試してみたが結果は全く同じで再起動を繰り返しました。
よって0xFC00:0x205Bから実行していき、F000:0xFFF0も通過するということでしょう。
[org 0x7C00]
bits 16
start:
jmp 0xF000:0xFFF0
times 510-($-$$) db 0
dw 0xAA55
動作結果を載せたかったのですが、GIFを何度貼っても失敗するので諦めます。
仮説
0xFC00:0x205Bから実行していき、どこかで0xF000:0xFFF0へ跳び、最終的にブートローダ7c00へ辿り着くのだと思います。
