「手探りで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
へ辿り着くのだと思います。