2017-07-30 11:16 — asano
8086/8088に移行して1MBというメモリ空間を手に入れましたが、すぐに不足をきたすようになります。
PC-9801の発売から4年後のPC-9801VM21で標準搭載のメインメモリは640kBとなり、拡張は限界に達しました。同じ頃、メモリ空間が16MBの80286搭載の上位機種も発売されていますが、8086やV30(NEC製の8086改良版でメモリ空間は1MBのまま)の機種もラインナップとして残りました。また従来機を640kBにまで拡張して使い続けるユーザも多くいました。
これらの機種でも大容量のメモリを使いたいということでいくつかの方式が考えられました。
一つ目は「8ビット中期」でも書いたバンク切り替えの手法です。PC-9801シリーズではサードパーティのメモリボードメーカが各社独自に作り始めましたが、最終的にIOデータの080000H~09FFFFHの128kBを使う方式に収束しました。
いくつかの対応ソフトウェアで使用できた他はRAMディスク・ディスクキャッシュとして使用されることが多かったようです。
当初は各対応ソフトウェア(やドライバ)が勝手に切り替えていたため、同時に使用する場合は割り当てを手動で調整する必要がありましたが、後述のEMS登場後にはEMSを意識したBMS (Bank Memory Specification)と呼ばれるソフトウェア間のメモリ管理を行なう仕組みも作られました。
もう一つがEMS (Expanded Memory Specification)と呼ばれるものです。上のIOデータ方式のバンクが128kB単位だったのに対しこれは16kB単位で、複数(通常は4つ)を同時にマップできます。4つなら64kB分のアドレスがあればよいので0A0000H以降の空きエリアを使用することができ、メインの640kBのエリアを使わずに済みます。また最初から管理システム(Expanded Memory Manager)を使用することでソフトウェア間で共有できるようになっていました。
- ハードウェアによってマップする方法:
一種のバンク切り替えです。切り替えるためのI/Oアドレス等は非公開(EMMが知っていればよい)です。8086・V30などでは通常この方法が使われます。 - ソフトウェアによってコピーする方法:
プロテクトメモリ(1MBより上のメモリ)の使える80286以降で使われた方法です。 - 仮想86モードを使う方法:
80386以上で使える仮想86モードを使う方法です。
8ビット時代のバンク切り替え・MMUと似たような仕組みですが、切り替わる範囲が狭い(=切り替わらないエリアが広い)のでだいぶ使いやすくなっています。
BMSが一周辺機器メーカの独自規格だったのに比べ、EMSはロータス(表計算ソフトウェアLotus 1-2-3で有名)・インテル・マイクロソフトの提唱したものであったこともあり、こちらが主流になっていきました。
ちなみにBMSもEMSもOSはMS-DOS (PC-DOS, DR-DOS)が前提です。DISK BASICやCP/M-86はあまり使われなくなってきていましたし、OS/2は80286以上が必要です。
コメントを追加