MS-DOS の基礎講座 Vol 4.

MS-DOS の環境とは?


 Windows の再インストールなどで、MS-DOS のトラブルに遭遇した場合、往々にして『環境はどうなっていますか』という質問と『日当たりの良い窓際においてあります』という噛み合わない会話を見かけることがあります。確かに日本語の『環境』という意味では、間違いではないのですが、こと PC の場合は設置場所以外にも、環境と呼ばれるものがあります。MS-DOS で環境といった場合、次の二つのファイルをさします。

  A.CONFIG.SYS (コンフィグシス)

  B.AUTOEXEC.BAT (オートエグゼクバット)

これらのファイルを編集することで、CD-ROM ドライブが使用可能になったり、RAMDISK が使用可能になったり、指定した日本語 FEP を起動できたり、電源投入時に指定したプログラムを実行したりすることができるようになり、ユーザーにとって使いやすい MS-DOS とすることができます。今回は、この MS-DOS の環境ともいえる二つのファイルについて、解説します。

 

4−1 CONFIG.SYS

 

 config.sys は Configuration for System をもじったもので、日本語に訳すと『システム設定ファイル』となります。さて、ではどのような設定ができるのでしょうか?ここでは具体的な例を挙げて説明することにします。

     config.sys(説明の都合上、行番号を括弧書きしています。)

(1) DOS=HIGH,UMB
(2) device=c:\windows\himem.sys
(3) device=c:\windows\emm386.exe noems X=D000-D7FF
(4) devicehigh=c:\windows\biling.sys
(5) devicehigh=c:\windows\jfont.sys /p=c:\windows
(6) devicehigh=c:\windows\jdisp.sys /HS=LC
(7) devicehigh=c:\windows\jkeyb.sys /106 c:\windows\jkeybrd.sys
(8) devicehigh=c:\windows\kkcfunc.sys
(9) devicehigh=c:\windows\ansi.sys

(10) rem SystemSoft/PCカード構成 -- EMM386.EXEを削除しないでください。
(11) rem SystemSoft CardWorks(TM) PCMCIA drivers:
(12) device=C:\CARDWORK\CARDXTND.SYS
(13) device=C:\CARDWORK\SSCBTI.SYS  /NUMADA:2 /ADA1SKTS:2 /ADA2SKTS:2
(14) device=C:\CARDWORK\CS.SYS /POLL:1
(15) device=C:\CARDWORK\CSALLOC.EXE
(16) device=C:\CARDWORK\CARDID.SYS

 (1) は、MS-DOS にメモリを使わせるための設定です。後で詳しく説明します。

 (2) は MS-DOS のプロテクトメモリドライバと呼ばれるものです。Windows 9x が起動するためには絶対必要なものです。これを組み込まないと Windows 95 が起動しなくなります。

 (3) 〜 (9) および (12) 〜 (16) までは device 文と呼ばれるもので、ここでいろいろと必要な機器を使えるようにしたり、日本語を表示可能にしていたりします。(4) 〜 (7) までは、日本語を表示可能にするための設定で (5) がフォントドライバ、(6) がディスプレイドライバと呼ばれます。 (5) が管理するフォントデータを受けとり、画面に表示するのが (6) の役目です。HS オプションは画面のスクロールをハードウェアで行う(HS=On)か、少しずつ行う(HS=LC)か、それともソフトウェアで行うか(HS=Off) を指定します。ハードウェアスクロールのメリットは、ビデオカードが行うため CPU 負荷が少ないことですが、最近の CPU の高速化で、ハードウェアスクロールの意義は薄れています。(7) は日本語キーボードに対応するためのキーボードドライバであり、オプションでキーボードタイプ(/106 オプション)を指定します。(8) は日本語変換機能を補佐するドライバで、MS-DOS 用の FEP はこれを必要とします。(12) 〜 (16) は PC カードを使用可能にするドライバで、ここで組み込まれているのは、System Soft の CardWorks と呼ばれるものです。MS-DOS で Card Bus 対応の PC カードを使う場合に必要なものです。さらに実際使う PC カード付属のドライバを組み込んで PC カードを使用するようになります。

 それでは、具体的な記述について、見ていきましょう。

A.DOS コマンド

  DOS コマンドは、MS-DOS の使うメモリを指定したり、必要なドライバの自動組み込みを決定するために使われます。デフォルト(既定値)は DOS=HIGH,AUTO となっており、MS-DOS の本体を HMA (後述) に置き(HIGH 指定)、自動組み込みを行う(AUTO) になっているため、config.sys がなくても、必要なドライバについては、自動で組み込まれます。記述がなくても、メモリを占有するため、アプリケーションによっては、自動組み込みが仇になります。

 MS-DOS では、DOS 本体もメモリに常駐するため、約 50KB ほどメモリを使用します。MS-DOS が管理できるアドレスは 1MB= 1024KB までであり、そのうち 640KB にメモリを割り当てて使用できるようになっていますが、MS-DOS を素っぴんで起動させると、それだけで 590KB になってしまう計算になります。しかし、アプリケーションの肥大化により、かなりの空きメモリを必要とすることが、そう珍しいことではなくなりつつあり、MS-DOS 本体を 640KB の外に移動できないか、ということが考えられるようになりました。そこで、1024KB - 640KB = 384KB に対し、未使用となっている領域にメモリを割り当て使おう、ということになりました。中でも、HMA と呼ばれる 64KB の領域は、HIMEM.SYS が組み込まれていれば使用可能となるため、ここに MS-DOS の本体を置くことで、640KB の空き領域を増やそうということになりました。この指定が DOS = HIGH です。

 MS-DOS が難しいと言われた背景の一つに、config.sys に誤った記述を行うと、MS-DOS を起動不能にしてしまう、というものがありました。下手に config.sys に手を出すと、PC が正常に起動できなくなってしまうため、うっかりミスによる起動不能 PC を大量に生産してしまうことになりました。カスタマイズを行う上で、config.sys を編集することはかなり重要なことですが、万一の用意をしておかないと、かえって怪我をする部分でもありました。そこで、必要なドライバについては、自動的に組み込むことで、誤った設定による起動不能を回避できるように変更されました。

記述例:DOS=high,UMB

    指定できるオプション(大文字はデフォルト指定)
                HIGH/low ------------------------- MS-DOS を HMA に常駐させる/MS-DOS をコンベンショナルメモリに常駐させる
                AUTO/noauto --------------------- 必要なドライバは自動で読み込む/指定されたもののみ組み込む
                umb  ----------------------------- UMB を有効とし、 MS-DOS で管理させる

B.device 文

 device 文は、MS-DOS にデバイスドライバを組み込むものです。デバイスドライバとは、機能拡張を行うためのソフトウェアであり、MS-DOS で提供されるさまざまな機能は、このデバイスドライバによって、提供されています。原則とて、記述された順に組み込まれるため、複数のドライバを組み込むものについては、その記述順が重要になります。たとえば、ディスプレイドライバを組み込むためには、あらかじめフォントドライバを組み込んでおかなければなりませんし、EMM386.EXE という EMS メモリドライバは、HIMEM.SYS という XMS メモリドライバを必要としますので、先に HIMEM.SYS を組み込んでおく必要があります。

 device 文を使うことでいろいろな機能拡張を行うことができるようになった反面、深刻な問題も引き起こしました。それは『コンベンショナルメモリ不足』です。device 文で組み込まれるドライバは、基本的にメモリ上に続けて存在する(これを常駐と呼びます。)ため、機能拡張を行えば行うほど、アプリケーションの起動に必要とするコンベンショナルメモリ消費され、最悪の場合には、アプリケーション自体が起動しないことになってしまいます。特に MS-DOS 自体がバージョンアップに連れて、使用するメモリが増えてきたことにより、アプリケーションに残されているメモリはさらに少なくなります。

 そこで、Microsoft が出した結論は、『コンベンショナルメモリに組み込むから駄目なんだ。コンベンショナルメモリの他に組み込めば、コンベンショナルメモリは圧迫しない』ということでした。前節でも述べましたが、MS-DOS は 1024KB までのアドレスを管理でき、その内 640KB をメモリ空間として使用することとなっています。この 640KB 以外の部分(384KB) は、本来は、各種周辺機器のコントロール用に開けておいたものでした。しかし、多くの周辺機器では、この 384KB の領域を必要とはしなかったため、未使用となっている部分がいくつかありました。これらの未使用空間に対して、メモリの割り当てを行い、MS-DOS の管理下におくことで、コンベンショナルメモリ同様に扱えるようにしました。この結果、640KB のほとんど使わずに、開けておくことができるようになりました。

 それでは、MS-DOS モードで必要とされるドライバについて、見ていきましょう。

1) HIMEM.SYS(ハイメムシス)・・・・・・・・ 自動組込み対象

 メモリを管理する、メモリドライバと呼ばれるものです。Windows は、この HIMEM.SYS に管理されたメモリを使うため、このドライバを組み込まないと Windows が起動不能に陥ります。MS-DOS では、すべて、この HIMEM.SYS が管理するメモリを使用します。

   組込方法  device=C:\Windows\himem.sys

 HIMEM.SYS が管理しているメモリを XMS(エックスエムエス)メモリ と呼びます。XMS とは eXtended Memory System の略です。XMS メモリをプロテクトメモリと呼ぶこともあります。なぜ Extend でないのか、と疑問に思われるかもしれません。理由は後述します。

2) EMM386.EXE(イーエムエムサンハチロクエグゼ)

 メモリを管理するメモリドライバ、というよりは、特殊なメモリを産み出すために使用します。EMM386.EXE は HIMEM.SYS から提供された XMS メモリを、UMB(ユーエムビー) メモリや EMS(イーエムエス) メモリに変化させる機能をもちます。EMS とは Expand Memory System の略です。EMS メモリとは、当時のキラーアプリであった Lotus 1-2-3 という表計算ソフトのために産み出されました。

 表計算ソフトは、データをセルという単位で扱うのですが、使用していくにつれ、扱う表が膨らんでいき、MS-DOS の扱う 640KB のメモリでは、到底不足するようになりました。そこで、当時の Lotus 、Intel 、 Microsoft の三者で、640KB 以外のメモリを使うための規格を制定しました。これが EMS( Expand Memory System) です。規格を制定した三者の頭文字をとって、LIM-EMS と表記される場合もあります。最終的な規格としては、EMS ver 4.0 となりました。

 EMS はどのようにして、メモリを使うのでしょうか?簡単にいうと、MS-DOS の扱う 1024KB のアドレスの中に、64KB の窓(ページフレーム)を作り、この 64KB をどんどん切り替えていくことで、広大なメモリを使うことができます。しかし、使用する EMS メモリが増えれば増えるほど、ページフレームの切り替えにかかる時間が無視できなくなりました。このため、EMS ではないメモリ管理方式が求められました。そこで登場した新しいメモリ管理方式が XMS なのです。EMS が先に規格として成立していたために、二番手となった XMS では E を使うことができませんでした。

  ところで、なぜ 386 という特定のプロセッサを指す名前なのでしょうか?実は EMM386.EXE は Intel 製 CPU である i386 のもつ機能を使っているのです。逆に言えば、i386 以前のプロセッサでは、EMM386.EXE が必要とする機能がないため、使用できないのです。このため、EMM386.EXE という名前になったものと推測されます。Windows の名前を普及させた Windows のおじいさんともよべる Windows 3.1 が登場した時代、世には i386 と i286 という異なる世代の CPU が同時に存在していました。しかし、現在 i386 の子である i486 さえ見かけなくなり、486 を CPU の動作クロックを誤解してしまうようにさえなりました。

    組込方式 device=C:\Windows\EMM386.EXE FRAME=D000 RAM

 RAM オプションは UMB を使用することを宣言します。これを忘れると、UMB メモリが生まれませんので、DOS=umb としても、意味がなくなります。FRAME オプションは、ページフレームを設定するものです。ここで勘の良い人は気づいたかもしれません。実はページフレームとして使用する領域は、UMB としても使用できる場所でもあります。このため、EMS は使わないが UMB は欲しいという場合には、EMS をつぶして UMB に、という場合もあります。EMS のページフレームは D000-DFFF の 64KB だけでなく、64KB の連続した領域があれば使えます。そこで、より高位の領域をページフレームにすることで、D000-DFFF を UMB にすることが可能になります。たとえば、E000-EFFF をページフレームに割り当てるように設定すると、指定方式は次のようになります。

    組込方式 device=C:\Windows\EMM386.EXE FRAME=E000 RAM

こうすることで、最大で 96KB(=32KB+64KB) の UMB が使用可能になります。ただし、E000-EFFF のアドレス空間には、拡張 BIOS などが存在する場合が多くあります。仮に拡張 BIOS があったりすると、拡張 BIOS にアクセスした瞬間にハングアップします。このため、この設定は一か八かです。設定したあと、起動できれば OK です。

 UMB を強制的に割り当てるオプションとして I があります。空いてそうなアドレスに強制的に UMB を割り当てます。逆に UMB に使用されるとまずいアドレスについては、X オプションで指定できます。私はほとんど使ったことがありません。

3) BILING.SYS(バイリングシス)・・・・・・・・自動組込対象

 もともと MS-DOS は英語環境しかありませんでした。そこで、日本語対応するために追加されたのが、この BILING.SYS です。

    組込方式 devicehigh=C:\Windows\biling.sys

4) JFONT.SYS(ジェイフォントシス)・・・・・・・・自動組込対象

 日本語フォントを管理するフォントドライバと呼ばれるものです。フォントとは、『文字を画面等に表示するためのデータ』 で、Windows などで良く使われる TrueType というものも、このフォントの一つです。フォントがないと、文字が画面に表示されなくなりますので、このドライバは重要なのですが、ここで一つ疑問に思われた人は、なかなか良いと思います。それは『フォントドライバを組込む前には文字が表示されないというが、MS-DOS 起動時は英語のメッセージが表示されているではないか!』ということです。もちろん、フォントがなければ表示はできませんが、すべてのフォントをフォントドライバが管理していたのでは、BIOS の設定画面も表示できなくなってしまいます。ということで、最低限英数字に関しては、PC の中に格納されています。(OS の日本語化を参照してください。)

    組込方式 devicehigh=C:\Windows\jfont.sys /p=C:\Windows

 JFONT.SYS は、フォントデータの格納場所として、XMS を使用します。このため、最低限 HIMEM.SYS が存在していないと、組込みに失敗します。/P オプションはフォントファイルへのパスを設定します。指定した場所にフォントが存在していないと、エラーになります。

5) JDISP.SYS(ジェイディスプシス)・・・・・・・・自動組込対象

   ディスプレイドライバと呼ばれるもので、JFONT.SYS からフォントの提供を受け、画面に文字を描画します。フォントを表示する『だけ』なので、別途フォントドライバが必要となります。標準の機能しかないため、差し替えられたりすることもあります。

    組込方式 devicehigh=C:\Windows\jdisp.sys /HS=LC

 HS オプションは、ハードウェアスクロールを行うかどうかを設定します。ハードウェアスクロールを行うことで、画面切り替えが早くなりますが、スクロール中に画面表示が乱れることがあるため、多くの場合 LC(= Low Colum) または OFF に設定されています。ハードウェアスクロールを有効にする場合は ON です。

 DOS モードでの画面描画は、すべて、この JDISP.SYS が担当しています。よって、速度が遅いというのも、根源はこの JDISP.SYS にあります。V-text は、このディスプレイドライバをより高速に処理できるものと置き換えることで実現されています。

6) JKEYB.SYS(ジェイキービーシス)

 キーボードドライバと呼ばれ、キーボードの設定を行います。基本的に MS-DOS は 101英語キーボード用に作成されているため、このようにドライバを追加することで、106 日本語キーボードに対応させるようになります。

    組込方式 devicehigh=c:\windows\jkeyb.sys /106 c:\windows\jkeybrd.sys 

 106 オプションは読んで時の如く、106 キーボードの設定を示します。なお、Windows キーやコマンドキーの付いた 109 キーボードやさらにパワーなどまで付いた 112キーボードであっても、指定は 106 になります。その後ろにあるのが、キーボード定義ファイルです。常駐量が大きいので、他の互換ツールでも代用可能です。指定しない場合は、今日強制的に 101 キーボードの設定になります。

7) KKCFUNC.SYS(ケーケーシーファンクシス)

 日本語 FEP の補助ドライバです。DOS プロンプトで漢字変換を行わない場合は不要です。

    組込方式 devicehigh=c:\windows\kkcfunc.sys

8) ANSI.SYS(アンシシス)

 ANSI(アメリカ工業標準規格)互換のエスケープシーケンスを使えるようにします。必要度はあまりありません。


 ここまでが標準的に組込まれるドライバです。(10) 以降は、ユーザーによって組込まれたドライバです。