
16ビット時代のメモリ拡張の歴史(1) - EMS
8ビットな時代では機種ごとに独自のハードウェアを持ち、それぞれに対応したソフトウェアが用意されていたので、メモリ拡張の方法も機種ごとに異なっていました。
8ビット時代のメモリ拡張の歴史
16ビットの時代になり、当初はたくさんのメモリが使えるようになったと喜んでいたのですが、実際のところは 8086(および8088) では、セグメントベースのアドレスなので連続したメモリは64Kまでしか使えないという少しばかり制約のあるものでした。
この時代になるとソフトウェアも機種ごとに用意するのではなくOSの上で動くようになってきたので(同じOSだからといって、どの機種でも動作するかは別問題)、メモリ管理もOS次第ということになりました。MS-DOSに於いては、その祖先であるCP/Mに似たメモリの使い方をしていて、上位アドレスはシステムのROMであったりビデオメモリなどに予約されており、最下位アドレスである0番地近くには、CPUが使う割り込みベクターを始めOSの作業領域が割り当てられ、その直後にはDOSプログラムが置かれ、一般のプログラムはそれ以降のアドレスを使うことになっていました。その境界は8086のアドレス空間全体が1Mあるのですが、A0000H以降システム空間として予約され、おおよそ640Kがプログラムで使うことの出来るメモリでした。このメモリをコンベンショナル・メモリとも呼びます。
Conventional memory
当初のPCは、640Kまでのメモリを搭載していることも少なく、例えば128Kまでしか使えないということが一般的でした。それでも8ビット時代はCP/Mでも56Kくらいが上限でしたから、倍くらいのメモリが使えるようになったと喜んでいました。
日本に目を移すと、日本語が使えるMS-DOSが普及し、日本語変換ソフト(FEP)もメモリに置く必要がありますし、そのような常駐ソフトと呼ばれるソフトが多く組み込まれ、多くのコンベンショナル・メモリが必要となっていきました。このため比較的短い時間で640Kまでのメモリを拡張した人も多かったと思います。もっとも当初はそんなに大きなメモリを使うソフトも少なかったので、512K~640Kの領域をRAMディスクとして使ったりもしたのですが、一番メモリに入れたい日本語変換辞書を置くには足りずに中途半端ではありました。
その頃、海の向こうでも多くのメモリを必要とする表計算ソフトの人気が出て、やはり640Kでは足りないということになり始めました。そこで Lotus Software、Intel、Microsoftの3社がバンク切り替えに依るメモリ拡張の規格を制定しました。これはEMSで使う64Kのアドレス空間に16K単位でEMSメモリをCPUから使うアドレス空間にマップして利用するもので、拡張バスに専用のメモリを挿して使うものでした。ポイントはプログラムと言うよりもデータを置くものとして考えられていて、あえて16Kという単位を採用したものと考えられます。
Expanded Memory Specification
残念なことにIBM-PC向けのEMSカードは同じ規格の拡張バスを持っている機種でしか使えません。そこで日本でも主にPC-9801向けのEMSカードが発売されるようになりました。
領域確保に悩まされたMS-DOSのメインメモリー
EMS
EMS (Expanded Memory Specification)
094 MS-DOS時代のメモリ拡張
当然、アメリカでEMSを活用できるソフトも移植されたので、その恩恵に預かることも出来たのですが、直ぐに対応ソフトが増えるともいかず、一般のメモリに比べるとそこそこお高いものでもあったので、一気に普及するとはいかなかった覚えがあります。
まあCPUが8086であるとか、80186(V30)といった時代にはどうあがいても1Mのメモリ空間しか無かったので、このようにバンク切り替えでメモリを拡張するしか方法がなかった訳です。そうこうしているうちにCPUが進化して80286が登場すると16Mという広大なアドレス空間が使えるようになったものの、MS-DOSは8086互換のリアルモードでの動作を前提としていたので、やはり1Mを超えるアドレス空間を扱うことができません。メモリスロットに1Mを超えるメモリを挿すことが出来ても、それを使う方法がなかった訳です。もちろんプロテクトモードをサポートする他のOSを使えば活用する道はあるのですが、普及していたMS-DOSのアプリを諦めるのは難しいものがありました。そこでいろいろな工夫で1Mを超えるメモリを使う方法が編み出されていったのですが、その話はまたの機会ということで。
ヘッダ画像は、以下のものを使わせて頂きました。https://commons.wikimedia.org/wiki/File:Expanded_memory.svg
By Germanderivative work: CountingPine (talk) - Memoria_expandida.svg, Public Domain, https://commons.wikimedia.org/w/index.php?curid=10413919
いいなと思ったら応援しよう!
