現在地

パーソナルなコンピュータのメモリ事情 (第5回: 8086前期)


カテゴリー:

8ビットCPUで無理をするよりメモリ空間の広い16ビットCPU 8086/8088を採用したものも現れました。

初期の代表機種には以下のようなものがありました。

名称 CPU ROM メインRAM GVRAM 備考
IBM PC 8088 ? 64kB (256kB) 16kB(CGA) 純正にこだわらなければ256kB以上増設可
PC-9801 8086 96kB 128kB (640kB) 96kB 他にテキストVRAM8kB(12kB)
FM-11EX 8088 / 68B09 ? 128kB (1MB) 192kB 8088と68B09は排他利用 他に68B09をサブCPUとして持つ

8086/8088のメモリ空間は1MBありますのでとりあえずアドレス空間の問題は無くなりました。

あくまでも「とりあえず」です。8ビットCPUの時代も最初は64kBも必要ないと思っていたのに5年も経たずに不足を感じるようになりました。

どの機種も各メモリの配置は00000H付近にRAMを、0FFFFFH付近にROMを配置し、間にVRAMなどを置いています。これは00000H~003FFHに割り込みベクタがあるためRAMが必要(組み込み用途ならROMでも構いませんが)、リセット時の実行開始アドレスが0FFFF0HであることからここにROMが必要という事情があります。VRAMや拡張ROM等はこの間のどこかに置かれるわけですが、多くの機種では0A0000H以降に配置されました。このことが後に問題となります。

具体的な例を(手元に資料のある)PC-9801で見てみましょう。

00000H~1FFFFHまでの128kBにメインRAMが配置されています。64k×1bitのDRAMを16個(8086は16ビットバスです)でこの容量です。後の機種ではPC-9801Mで256kB、PC-9801VMで384kBと増加しています。オンボードでの増設はできませんでしたので増設時には拡張バスにメモリボードを挿します。このボードには128kB分のDRAMがハンダ付けされており、128kB分はソケットが実装されていました。そのまま挿せば128kB、ソケットにDRAMを追加すれば256kBのボードとして使用できました。256kBにしたボードを2枚挿せば合計640kBのフル状態となります。

0A0000HからはテキストVRAMが配置されています。これが邪魔なのでメインメモリは640kBまでしか積めないのです。

0A8000H~0BFFFFHまでの96kBにはGVRAMがあります。これで640×400ドット8色のグラフィックス1面分です。後にGVRAMが2面に増やされた際にはこの同じ空間に2面が配置されバンク切り替えの手法が使われました。

0C0000H~0E7FFFHまでは拡張ROMのために予約されていました。これは拡張ボード上にROMを搭載してボード制御用のソフトウェアを搭載するためです。起動時にスキャンされ初期化などが行なわれました。また後にGVRAMを3プレーン(R,G,B)から4プレーンに増やした際には4プレーン目が0E0000H~0E7FFFHに配置されました。

0E8000H以降はBASICを含むROMが配置されました。

よく言われるMS-DOSの640kBの壁というのは、この0A0000H以降にVRAM等があって連続したメモリが640kBまでしか確保できなかったことによります。IBM PCでも事情は同じだったようです。

しかし本来「MS-DOSには640kBの壁などは無い」のです。640kBの壁はPC-9801の壁であり、IBM PCの壁でしかないのです。
実際、PC-9801でもハイレゾモードでは640kBではなく768kBまで使えますし、FM-11EXでは960kB使えたはず(0F0000H~0FFFFFHはROMと予約領域)。

参考文献・関連図書: 
アスキー出版局テクライト編(1990)『新版PC-9800シリーズ テクニカルデータブック』アスキー.

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
※ コメントは原則公開です。個別のご相談などは「ご意見・ご要望」からお願いします。