昔ながらのIBM PC、PC/AT互換機からDOS/Vマシン、さらにはArmベースのWindows PC、M1 Mac、そしてラズパイまでがPCと呼ばれている昨今。その源流からたどっていく連載。第16回はWindows 11で注目された、UEFIとその前身であるBIOSについて。
今月の話はBIOS。
BIOSは連載第2回でちょっと触れたが、もともとはCP/Mで実装された仕組みで、ハードウェアによる違いを吸収するためのものである。
もともとの発想は入出力、つまりキーボード入力、画面出力、RS-232Cポート経由での送受信といった広く利用されている周辺機器に対して、プログラムから一意にアクセスできるようにAPIを用意し、内部のハードウェアが変わってもプログラムの変更なく利用できるようにするというためのもので、BASIC Input/Output Systemと呼ばれていたものを略してBIOSと称している。
このBIOS、IBM PCやIBM PC/ATの時代までは比較的平和だった。
というのは、ハードウェアの構成などはほぼ固まっていたから、BIOSのオプションなるものは基本的に存在せず、せいぜいが日付/時間の設定程度で済んでいた。
ところがその後、まずCompaqが自社製品向けの互換BIOSの開発に成功、次いでPhoenix(や、その後AWARDなど)が「汎用」の互換BIOSを出荷し始めた辺りから雲行きがいろいろと怪しくなってきた。
何の話かというと、BIOSの肥大化である。
PhoenixやAWARDは互換機メーカー向け=AT互換チップセット向けに互換BIOSを提供する訳だが、1990年頃でいえばALi(Acer Laboratories, Inc.)、C&T(Chips & Technologies)、OPTi、SiSといったベンダーがAT互換チップセットを出荷し始めた時期に当たる(VIA Technologiesの名前がないのは、同社がチップセットビジネスに参入したのはApollo VP1を発表した1996年と、実はけっこう後発なためだ)。
だが、製品差別化のためと、そのチップセットを利用してAT互換機を製造するベンダーのニーズが多様で、なるべく広くニーズに応えられるようにということで、これらのチップセットには非常に多くの動作オプションが用意されていた。
オプションが用意されているということは、そのオプションを設定するための方法と、システム初期化時にそれらのオプションをチップセットに設定するためのルーチンが必要になる。加えてAT互換機全盛の時代になると、周辺機器への追加オプションも増えてくることになった。代表例が先月取り上げたHDDである。
前回の記事では取り上げなかったが、当初HDDの制御はCHS(Cylinder/Head/Sector)と呼ばれる管理方式で行っていた。ところが容量増加に対応できなくなり、LBA(Logical Block Addressing)という方式になり、しかもそのLBA自身が途中で28bit→48bitに変更になったり、またHDD以外にCD-ROMやらMOやらとさまざまなデバイスがATAPI経由で接続できるようになったりと、どんどん高機能化が進んだ結果として、ますますBIOSに求められるパラメーター設定機能や初期設定ロジックが増えることになった。
問題はこのBIOSの作り込みがすこぶる困難だったことだ。何故かというと「1MBの壁」があったためだ。
IBM PCは16bitの8088で設計されたため、アクセスできる最大のメモリ容量が1MBに限られる。これは後継の80286、80386/486/Pentium/...も同じで、電源を投入した直後は原則8086と互換であるReal Modeで動作する(正確にいえば、80386以降は、32bitアドレスながら上位12bitがHighにアサートされており、0xFFFxxxxxという、4GBのアドレス空間の一番上の1MBにアクセスできるようになっている)。
このため、1MBの中に初期化ロジックやら設定画面やらを全部押し込まないといけないのだ。
初期のBIOS Setupの画面がキャラクターベース(写真1)なのは、これ以上凝った画面にすると1MBに収まりきらないから、という切実な理由があった。
Copyright © ITmedia, Inc. All Rights Reserved.
Special
PR