[技術資料室] [ネットワーク編]
[ハード部屋]
[CPU]
Last update 2007.9.8
AT互換機が最初に起動するときに実行されるソフトウェアは、BIOSの中の初期化プログラムです。
ここがどうなっているのか、調べたことはあるでしょうか?
一部の書籍には、ディスクからIPLをメモリのどの位置に読み込むぐらいのことは書かれていますが、それ以上のことは未知の領域です。
Phonexかどこかに、BIOSの資料があるようなので、ゆっくり読んでみたいのですが。
どこかに公開されてないかな・・・。
OS作ろうと思ってboot部分を探してみても 大抵のBIOS本は、設定方法しか書かれていない。
ソフトを書くときに使えそうな資料無し。
IBMの書籍に書かれていると、OADGにメールをすると教えてくれたので購入してみた。
「BIOSインターフェース技術解説書」(SC88-3054-00 日本アイ・ビー・エム株式会社)という書籍である。
HDDのパーテーションに関する記述、BOOTするときには0:7C00に読み込まれるなどの記述がある。インフォクリエイツで購入可だった。
詳細は、要望があればまた書いてみるかもしれない。
参考
PCの起動について、数年前からもやもやーっとした状態が続いてた。
つらつらと書いてみます。
POST(Power On Self Test)
電源がはいると、CPUはリアルモードで起動し、FFFF:0000 のアドレスから実行を開始します。たぶん。
INT xxh というのも使えるように割り込み領域(0:0000~03FF)も、一部は初期設定されているはずです。
グラフイック等々のバスに接続されている機器の初期化を行います。たぶん。しない機器もあるかもしれません。
まずはメモリのカウントや、割り込みテーブルの基本的な部分、PCIバスなどの初期設定をするのでしょうか。
キーボードも使えるようになっていますね。
ディスクアクセスもできるようになっています。これらはBIOSのなせる技です。
BIOSによる初期化がひととおりおわると、ディスクを順番にチェックしていきます。
ディスクは、FDD、IDE、SCSIなどを順番にチェックするようです。このとき、BIOSによってBOOTするので、BIOSが対応していない機器からはBOOTできないかもしれません。たとえばCD-ROM、Zipドライブなどの機器でも、BIOSによって対応するまで起動できないデバイスでした。BIOSではなく、各機器で対応してほしいかもとか。
ここまでの動きを調べたかったのだけど・・・あきらめる。
ディスクは、パーティション(区画)に分かれています。区画の前には、起動のための情報や区画の情報が書かれているMBRと呼ばれる領域があります。まずはここの446バイトのプログラムがメモリの0000:7C00 へ読み込まれ、実行されるようです。
| オフセット |
サイズ |
内容 |
| 0 | 446 | ブートストラップローダ (マスターブートローダ) |
| 1BEh(446) | 16*4 | パーテーションテーブル |
| 1FEh(510) | 2 | 0xAA55 マジックナンバー |
| オフセット | サイズ | 内容 |
| 0 |
1 |
起動フラグ(00h:オフ または 80h:オン) |
| 1 |
3 |
CHS:開始位置 |
| 4 |
1 |
パーティーション種別 0x07: NTFS 0x0B: FAT32 などなど |
| 5 |
3 | CHS: 終了位置 |
| 8 |
4 | LBA: 開始位置 |
| 12 |
4 | LBA: セクターの総数 |
MBRに処理がわたったあとは、そのディスクの責任と言うことになってもいいのですが、ディスク上に複数の区画を作ることができるようになっています。パーティションテーブルに書かれているので、MBRは各区画の先頭にあるOS別のブートセクタを基本的に自分が読み込まれたのと同じ0:7C00のアドレスに読み込みます。たぶん。
このときには、BIOSのディスクアクセス部分のINT 13hというのが可能になっています。キーボードとCRTのコンソールもかな。これはDOSなどの機能ではありません。
(略)
何やら書くのを忘れていたのか、Intel Mac で採用されている EFI (Extensible Firmware Interface)というものにも触れておきたい。
OSの32ビット化にともなうBIOSの代替となる Itanium 用の規格としてIntelによって作られたEFI。しかし Itainum が普及しなかったので EFIもなかなか普及しなかったが、過去とのしがらみのない Mac のIntel CPU採用でようやく普及をはじめることになった。後にIntelから独立し?、United Extensible Firmware Interface (UEFI)というオープンな規格となるべく作業がすすめられている?
x86系に載っているが、CPUに依存しない。アセンブラではなくC言語等で書けるのでCPUが変わっても移植が容易らしい。IntelのものはTianoCore というところで公開されている?
EFI は 1.1、 UEFI は 2.0 が規格化されているのかな? UEFI 2.0 はまだなのかも?
EFI 1.1 は BIOS もあれば旧式のOSも使える。UEFI 2.0 は、それだけしかつかえない?
参考
参考文献
