Image: MS-DOS 6.2/Vにおいてフリーメモリを確保する

PC/AT互換機上のMicrosoft MS-DOS 6.2/Vにおいてメモリを最適化(コンベンショナルメモリを確保)する。

○コンベンショナルメモリ、EMSメモリ、XMSメモリ、上位メモリについて

今さらになってこのページをご覧になる方ならご存じだと思うが、念のためDOSで扱うメモリの種類についておさらい。

もともとMS-DOS(PC DOS)は16ビットCPU(Intel 8086/8088)で動かすものとして作られたOSである。つまりDOSが直接管理できるのは1MBまでのメモリだ。IBM PCでは上位384KBがハードウェアが使用するためのシステム予約領域となるため、残りの下位640KB分がDOSで使えるメモリ、いわゆるコンベンショナルメモリとなる。

本当はここから説明をだらだら書いていく予定だったけど面倒になったのでやめた。EMS、XMS、UMBについて詳しいことはこちらを参考に。図があった方がわかりやすいので、DOSのマニュアルから拝借した図をここに置いておく。
IBM DOS バージョンJ5.0/V カンタンDOS 5章 DOSのそこが知りたい
(引用元:『IBM DOS バージョンJ5.0/V 入門書(カンタンDOS)』、日本アイ・ビー・エム株式会社、1991年)

1. 使用しないデバイスやROMを無効にする。

PCを起動したらBIOS設定画面に入り、使わないデバイスを無効に設定する。特にRAIDコントローラーやLANコントローラーのブートROMは通常は使わないので無効にしておく。
Onboard Device Configuration - Advanced - Phoenix BIOS

2. MEMMAKERコマンドを実行する。

本来ならここでMS-DOSのリファレンスマニュアルを読みながらCONFIG.SYSの編集画面とにらめっこするところだが、便利なことにMS-DOS 6.0以降にはCONFIG.SYSを自動で最適化してくれるMEMMAKERコマンドが用意されているので、これを実行する。IBM PC DOS 6.1以降の場合はMEMMAKERコマンドの代わりにRAMBoostが用意されているので、RAMSETUPコマンドを実行する。

高速セットアップとカスタムセットアップを選ぶ画面では[スペース]キーで「カスタムセットアップ」を選ぶ。
Microsoft MemMaker 1

「EMSメモリを必要とするプログラムを使いますか?」という問いが表示される。
WXII、MS-IMEなどのFEP(日本語入力支援プログラム)でEMSメモリを使うので、ここでは「はい」を選ぶ。

詳細設定の画面が表示されるので以下のように設定する。
ただし、「現在の EMM386 メモリ設定をこのまま保持しますか?」では通常は「いいえ」、既にEMM386のオプションを手動で設定してある場合は「はい」を選ぶ。
Microsoft MemMaker 2

 あとは画面の指示に従って[Enter]キーで進めてゆく。
2回再起動した後、DOSが問題なく起動すればMEMMAKERの設定は完了したことになる。起動に失敗した場合はMEMMAKERによる設定は取り消される。

3. CONFIG.SYSを手動で編集(カスタマイズ)する。

コマンドラインにて「EDIT C:CONFIG.SYS」(CはDOSの起動ドライブ)を実行する。
MS-DOS EditorでCONFIG.SYSが開かれる。(他にお気に入りのテキストエディタ・ソフトがあればそちらを使ってもよい。)
EDITコマンド

3-A. FCB(File Control Block)バッファを減らす。

FCBはごく初期のMS-DOS(Ver.1.xx)用に開発されたアプリケーションとの互換性のために残してあるだけで、ほとんどの場合は使われないのでバッファは必要ない。
なのでCONFIG.SYS内のFCBSコマンドを次のように変える。

FCBS=1,0

3-B. MS-DOSが確保するシステム割り込みハンドラのデータスタック(STACKS)を減らす。

多くのアプリケーションは自前でスタックを用意するため、通常はMS-DOSが確保するスタックは0でも問題ない。
CONFIG.SYSに次の1行を追加する。

STACKS=0,0

3-C. ディスクバッファ(BUFFERS)を減らす。

ディスクキャッシュドライバ(SMARTDRV)を組み込んでいる環境ではディスクバッファは必要ないので、最小値を設定する。
CONFIG.SYSのBUFFERSコマンドの値を減らしていくと、ある値でフリーエリアのサイズが変わらなくなる。その値が最小値である。
ちなみにフリーエリアはMEMコマンドで「コンベンショナルメモリ」の「空き」、または「最大実行可能プログラムサイズ」で知ることができる。
MEMコマンド

3-D. ファイルハンドラ(FILES)を上位メモリ(UMBメモリ)に移動させる。

FILESコマンドの最小設定値は8と決まっているので、CONFIG.SYSのFILESコマンドを次のように書き換える。

FILES=8

このままだとファイルハンドラが不足してアプリケーションによっては正常に動作しなくなるので、XFLUTを使ってファイルハンドラを上位メモリに追加確保する。
XFLUTを入手・展開したら、AUTOEXEC.BATに次の1行を追加する。

C:\XFLUT\XFLUT.COM /U20

 上はXFLUTをC:\XFLUTに展開した場合。実行パスや確保するファイルハンドラの数は適宜変える。

3-E. FEP(日本語入力支援プログラム)に対してEMSメモリを使うように設定する。[MS-IME場合]

NEC PC98付属のNECAIでは何も設定しなくてもEMSメモリを使うようになっていたが、MS-IMEの場合はCONFIG.SYSでスイッチを指定しないと、せっかくのEMSメモリを使わずにコンベンショナルメモリを消費してしまう。
CONFIG.SYSのDEVICEコマンドのうちMSIMEK.SYSとMSIME.SYSに/A1スイッチが付いていることを確認する。

DEVICE=C:\DOS\MSIMEK.SYS /A1
DEVICE=C:\DOS\MSIME.SYS /D*C:\DOS\MSIMER.DIC /DC:\DOS\MSIME.DIC /C1 /N /A1

○設定例

CONFIG.SYS

DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM HIGHSCAN I=B000-B7FF
BUFFERS=38,0
FILES=8
LASTDRIVE=E
FCBS=1,0
STACKS=0,0
DOS=HIGH,UMB
DEVICEHIGH /L:2,15072 =C:\DOS\SETVER.EXE
DEVICEHIGH /L:2,12464 =C:\DOS\BILING.SYS
DEVICEHIGH /L:1,22336 =C:\DOS\JFONT.SYS /P=C:\DOS\
DEVICE=C:\DOS\JDISP.SYS
DEVICEHIGH /L:1,17744 =C:\DOS\JKEYB.SYS /106 C:\DOS\JKEYBRD.SYS
DEVICEHIGH /L:3,4672 =C:\DOS\KKCFUNC.SYS
DEVICE=C:\DOS\ANSI.SYS
DEVICE=C:\DOS\MSIMEK.SYS /A1
DEVICE=C:\DOS\MSIME.SYS /D*C:\DOS\MSIMER.DIC /DC:\DOS\MSIME.DIC /C1 /N /A1

AUTOEXEC.BAT

@ECHO OFF
LH /L:0;2,1216 /S C:\XFLUT\XFLUT.COM /U20
LH /L:0;1,16400 /S C:\DOS\SMARTDRV.EXE /X
PROMPT $p$g
PATH C:\DOS;C:\VZ
PATH C:\NU;%PATH%
SET SYMANTEC=C:\SYMANTEC
SET NU=C:\NU
SET TEMP=C:\DOS
C:\DOS\NLSFUNC.EXE C:\DOS\COUNTRY.SYS
C:\DOS\CHEV.COM JP
C:\NU\NDD C:/Q
C:\NU\IMAGE C:

まだまだ続く。→MS-DOS/PC DOSでフリーエリアを極限まで確保する


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!