メモリの種類別の増設・設定方法(MS-DOS編)[PC98]

必要な拡張メモリの種類とその設定方法 [PC98]の記事も参考にして下さい。

メモリの種類別の増設・設定方法(MS-DOS編)

コンベンショナルメモリ

コンベンショナルメモリは容量が小さく限られているため、MS-DOS後期ではそれを少しでも空けようと、UMBやHMAといった拡張手段が登場しました。コンベンショナルメモリの空け方は次の記事を参考にして下さい。

→PC98のMS-DOSにおいてフリーエリアを確保する

ここではMS-DOS標準機能を使った方法しか紹介していません。VEM486などサードパーティのメモリドライバを使った方が簡単・高効率な場合があります。VEM486の使用例についても上記リンクを参照して下さい。

XMSメモリ

Image: PC98 XMS

XMSとはMS-DOSでプロテクトメモリを管理するためのインターフェイス仕様です。XMSに対応するドライバをMS-DOSに組み込むことで使用できるようになります。主にWindows 3.xやEMM386で使われますが、SMARTDRVやBorland Turbo Cなど少数のMS-DOSアプリケーションで作業用メモリとして使われることがあります。一方で、RAMDISK.SYSやDOS4GなどXMSを介さずにプロテクトメモリを使用するアプリケーションも存在します。XMSはEMSとは異なり、ページフレームは確保されません。また、プロテクトメモリに対応していない8086/V30 CPUの下では使用できません。

MS-DOS標準ではMS-DOS 5.0以降のHIMEM.SYSでXMSメモリがサポートされています。CONFIG.SYSに次の一文を入れることでXMSメモリを使用できるようになります。

DEVICE=A:\DOS\HIMEM.SYS

ただし、Windowsを使用する場合、WindowsとDOSのバージョンの組み合わせによっては次の例のようにWindowsに付属するドライバを組み込む必要があります。どちらのドライバを使うべきかは、WindowsまたはMS-DOS付属のマニュアルを参照して下さい。

DEVICE=A:\WINDOWS\HIMEM.SYS

MS-DOS 5.0A以前に付属するHIMEM.SYSでは、システムに16MB以上のメモリを積んでも14.6MBまでしか使えません。Windows 3.1、MS-DOS 5.0A-H、6.2に付属するHIMEM.SYSでは64MBまでのメモリをXMSメモリとして割り当てることができます。

EMSメモリ

Image: Hardware EMS

EMSとはMS-DOSのメモリを拡張するためのインターフェイス仕様です。EMSに対応するドライバをMS-DOSに組み込むことで使用できるようになります。主にMS-DOSアプリケーションの作業用メモリとして使われます。EMSメモリに対応するソフトは一太郎やLotus 1-2-3からMS-DOSゲームまで数多くあります。一部のWindows 2.xアプリケーションでもEMSメモリが使われます。

EMSメモリにはEMS対応メモリ拡張ボードを使ったハードウェアEMSと、プロテクトメモリを使って仮想的にEMSメモリを実現させるソフトウェアEMSが存在します。どちらであってもアプリケーションからは同じEMSメモリとして使用できます。

ハードウェアEMS

拡張スロットにメモリボードを取り付け、上図のように外部メモリの一部をシステムメモリ空間に割り当てて拡張メモリとして使用する方式です。プロテクトメモリボードとの違いは、拡張メモリへのアクセスが1MB以下のリアルモードの空間を通じて行われるため、8086/V30 CPUを搭載する古い機種でも使用できるという利点があります。

MS-DOS標準ではEMSドライバとしてMS-DOS 3.3以降でEMM.SYSが用意されています。ただし、このドライバはNEC純正のEMSボード(PC-9801-53/54)以外には使えません。ハードウェアEMSを使用するにはCONFIG.SYSに次の一文を入れます。/Fスイッチを省略した場合は自動で判定します。

DEVICE=A:\DOS\EMM.SYS /F=C000
ソフトウェアEMS

Image: Software EMS

プロテクトメモリの一部をEMSメモリーとして使用する方式です。メモリアクセスをソフトウェアでエミュレートするため、XMSやハードウェアEMSに比べるとアクセススピードは遅くなります。プロテクトメモリにアクセスできない8086/V30 CPUでは使用できません。

DEVICE=A:\DOS\EMM.SYS /F=B000

既定では全ての拡張メモリーがEMSメモリーとして割り当てられるので、XMSメモリーと同時に使用する場合はEMM.SYSに/Pスイッチを指定してEMSメモリーの容量を制限します。なお、MS-DOS 5.0以降ではEMM.SYSの前にHIMEM.SYSを組み込んでおく必要があります。

DEVICE=A:\DOS\HIMEM.SYS
DEVICE=A:\DOS\EMM.SYS /P=64
EMM386(仮想86EMS)

Image: EMM386

プロテクトメモリを使ってエミュレートする点はソフトウェアEMSと同じですが、アドレッシングにi386以上のCPUにあるページング機能を使うため、アクセススピードがハードウェアEMSと同等以上になります。

MS-DOS標準ではMS-DOS 3.3B以降のEMM386.SYSまたはMS-DOS 5.0以降のEMM386.EXEによってサポートされています。EMM386.EXEはXMSを通してプロテクトメモリを使用するため、HIMEM.SYSと一緒に組み込む必要があります。既定では全てのXMSメモリーがEMSメモリーとして割り当てられるので、XMSメモリーの空きを残しておくにはEMM386.EXEに/Pスイッチを指定してEMSメモリーの容量を制限します。

DEVICE=A:\DOS\HIMEM.SYS
DEVICE=A:\DOS\EMM386.EXE /P=64

ただし、Windowsを使用する場合はHIMEM.SYSと同様、WindowsとDOSのバージョンの組み合わせによっては次の例のようにWindowsに付属するドライバを組み込む必要があります。詳細は、WindowsまたはMS-DOS付属のマニュアルを参照して下さい。

DEVICE=A:\WINDOWS\HIMEM.SYS
DEVICE=A:\WINDOWS\EMM386.EXE /P=64

HMAメモリ

リアルモードで使えるメモリ空間は本来は1MBですが、80286以上のCPUではメモリアドレスにFFFF:FFFFを指定すると1MB+64KB-16B(10FFEF)にアクセスすることができます。1MBの範囲からはみ出るこの約64KBの部分をMS-DOSではHMAと呼び、MS-DOSシステムの一部やプログラムの常駐領域として使うことができます。

MS-DOS標準ではMS-DOS 5.0以降のHIMEM.SYSでHMAメモリがサポートされています。また、CONFIG.SYSに次の一文を入れると、HMAメモリにMS-DOSシステムの一部を移してコンベンショナルメモリを空けることができます。

DEVICE=A:\DOS\HIMEM.SYS
DOS=HIGH

UMBメモリ

640KB-1MBのメモリ空間はシステム予約域とされていますが、システム構成によっては使われていない領域があります。この未使用領域をXMSメモリからプログラムメモリとして割り当てるのがUMBメモリです。

MS-DOS標準ではMS-DOS 5.0以降のEMM386.EXEによってUMBメモリがサポートされています。CONFIG.SYSは次のように設定します。「DOS=UMB」は上記の「DOS=HIGH」とまとめて「DOS=HIGH,UMB」と記述することもできます。

DEVICE=A:\DOS\HIMEM.SYS
DEVICE=A:\DOS\EMM386.EXE /P=64 /UMB
DOS=UMB

UMBメモリーはプログラムの常駐領域として使用することもできますが、多くは実行時にDEVICEHIGHコマンドやLOADHIGH(LH)コマンドを使って明示的に指定する必要があります。具体的な設定方法は先に挙げたようにPC98のMS-DOSにおいてフリーエリアを確保するを参照して下さい。

EMSメモリを使う予定がない場合は、EMM386.EXEに/NOEMSスイッチを付けるとEMSページフレームを無効にできるので、その分だけ使用可能なUMBメモリの容量が増加します。このとき/UMBスイッチを指定しなくてもUMBメモリが有効になります。

DEVICE=A:\DOS\HIMEM.SYS
DEVICE=A:\DOS\EMM386.EXE /NOEMS
DOS=HIGH,UMB