MS-DOS 3.1 インストール方法



MS-DOS 3.1について


MS-DOSのバージョン2から3の主な変化点は、以下の通りとなります。
  ・拡張フォーマットに対応
  ・日本語変換の機能が向上
  ・辞書やマウス以外も徐々にDEVICEとして組み込めるように進化

PC-9801用としては、2.11から3.1になりましたので、3.1の製品のラインナップを列挙しておきます。
製品番号日本語変換日付FORMAT.EXEHDD備考
PS98-125-HMW文節1985-12-11
※1
Ver.3.0標準フォーマットのみMASM標準添付の最終版
PS98-127-HMW連文節1986-10-13Ver.3.05拡張フォーマットに対応MASMが別売に
メニュー選択方式を採用
PS98-129-HMW連文節1987-07-20Ver.3.1拡張フォーマットに対応ADDDRV、DELDRV等のコマンド追加
メニューがカラーに
↓これ以降を3.1最終版と呼びます
PS98-011-HMW逐次変換1987-10-23Ver.4.0拡張フォーマットのみ
不具合あり※2
ファンクションコールの拡張
PRINT.SYSが独立
SETUPコマンド
PS98-012-HMW逐次変換1987-10-23Ver.4.0拡張フォーマットのみ
不具合あり※2
アプリケーションソフト実行環境セット
※1 COMMAND.COMのタイムスタンプ、これより後のバージョンは全ファイルタイムスタンプが統一されています。
※2 Neko Project固有の問題で、OSが起動しません。詳しくは後述します。

製品番号の「HMW」という部分は媒体の種類を示していて、それぞれ「H4W」という製品も存在します。
  ・HMW・・・5インチ 2HD 1.25M
  ・H4W・・・5インチ 2DD 720K
しかし、これらの違いは、フロッピー1枚に収まるものが2枚になる、という程度のものでOSの機能としては同じとなります。 ですので、ハードディスクにインストールしてしまえば全く違いはありません。
この当時は5インチのみですが、MS-DOS 3.3以降は徐々に3.5インチに変わって行きます。 実機では、そのマシンで扱える媒体に合わせた製品を使用する必要がありますが、 仮想環境では5インチと3.5インチの差も「そんなの関係無ぇ!」と言ってしまって構いません。



持ってる男!


ものすごく才能に恵まれた人とか、実力だけでなく運もいい人のことを「持ってる」と今風に表現しますが、実は私「持ってる男」なんです。 そのことについて、私事になりますが、ちょっと脱線してお話しします。

パソコンを使い始めた当時、Disk-BASICしか使っていなかった私は、MS-DOSの存在を知り、その便利さに感動しました。 MS-DOSを使い始めた時には、バージョンは3.3Aとなっていました。
FD起動が当たり前だった当時、一太郎・マルチプランなどの有名アプリはOSがバンドルされていたので、MS-DOSを別途用意する必要はないのですが、そのバージョンは2.11でした。 まだハードディスクを持っていなかった私は、市販アプリを使う時は2.11、MS-DOSを単独で使用する時は3.3Aという状態でした。

MS-DOS 3.1は、その中間にあたり、私にとってはあまり馴染みのないバージョンです。 ほとんど使った記憶がないのですが、何を隠そう、私はこれらの製品を5種類全て所有しています。 ということで私は、ただOSを「持ってる男」となります(笑)、それじゃダメじゃん! 中古の値段がタダ同然まで落ちてから買い集めたのが、結果的に無駄にならなかったようです。

プログラマーの立場で言うと、3.1最終版の以前と以降で結構大きな変化があって、本格的な自作ツールの多くはこの時拡張されたファンクションコールを使用していますので、 使用条件に「3.1最終版以降」と謳っています。
そうであるなら、3.1最終版では動作して、それ以前では動かないというチェックをすべきなのですが、それを行ったかどうか記憶がありません(汗)。 多分当時はしてません。
これについて敢えて言い訳をすると、当時のハードディスクというのは、今の感覚では信じられないくらい高価でした。 限られたディスクスペースに、そういくつものバージョンを並立させることもままならず、結果として、信頼できる資料をもとに、多分大丈夫であろうと思うしかありませんでした。 少なくとも、3.1最終版からサポートされたDOSファンクションコールを使用している限り、「3.1最終版以降」とアナウンスするのは妥当だったと思います。

実際のところ、3.3や5.0が出てからも3.1を使い続けている人はほとんどいなかったはずで、 「3.1最終版以降」という仕様なら「3.3や5.0は大丈夫」という意味に取っていただけたと思いますので、それで何か問題が発生することはありませんでした。

限られたディスクスペースをやり繰りした時代を経験した者にとって、思う存分環境が作れる仮想の世界は何と恵まれていることか。 せっかくなので、そう言った当時やり残した「宿題」を、今更ではありますが片づけて行こうと思っています。 過去を巡る旅というのも(実用性はともかく)それはそれで楽しいものです。



3.1は過渡期のバージョン


MS-DOS 3.1 と呼んでいるのはPS98-125・PS98-127・PS98-129の3つです。 そのうち、PS98-125だけは拡張フォーマットに対応していませんので、ハードディスクへインストールすることだけ考えると2.11と大して変わらないことになります。

その後のPS98-127・PS98-129は拡張フォーマットに対応しています。 セクタ長が512バイトの場合は強制的に拡張フォーマット、256バイトの場合は標準フォーマット・拡張フォーマットの選択ができます。 利便性を考えれば、標準フォーマットを使う理由はなく、拡張フォーマットを選択すればいいでしょう。

そんな中、MS-DOS 3.1最終版と呼ばれるバージョンがリリースされます。 PS98-011・PS98-012です。内部的に大きな変化があったことは前述の通りです。

この辺りは、私の想像もかなり含んでいますが、「通常は拡張フォーマットを使う」が浸透し始めたので、 3.1最終版では拡張フォーマットのみとなり、標準フォーマットは切り捨てられました。 それに対していろいろ批判があったのでしょう、3.3以降標準フォーマットが再びサポートされるようになりました。 それ以降、ほとんどSASIが使われることはなくなったMS-DOS 5.0時代まで、この状況は続きます。

それでは、実際にインストールを実行してみましょう。まずは、以下の状態でマシンを起動します。
・FDD1 MS-DOS 3.1 システムディスク(例としてPS98-129を使用)
・IDE#0 Neko Projectで作成した40MB HDDイメージ

PS98-127以降、OSが起動したらメニュー画面が立ち上がるようになりました。PS98-129では罫線等がシアン色となり、本格的なメニュー画面となります。 これ以降、このメニュー画面は、MS-DOS 5以降のDOS SHELLにその座を開け渡すまでMS-DOSの顔となります。個人的には、私が使い始めた頃のMS-DOSというのはこのイメージでしたので、この起動メニュー画面を見ると今でもノスタルジックな気分になります。

ここでは、メニュー画面より「固定ディスクの初期設定」を選択します。すると「FORMAT /H」が実行されます。
以下、私が行った作業のコンソール内容を示します。
A>FORMAT /H                                                                     
                                                                                
Format Version 3.1                                                              
                                                                                
固定ディスクの装置番号を入力してください [1,2] = 1                              
                                                                                
   [ 1:標準フォ−マット  2:拡張フォ−マット ] = 2                               
                                                                                
モ−ドを選択して下さい                                                          
[ 1:マップ 2:確保 3:解放 4:初期化 5:アクティブ 6:変更 7:終了 ] = 4              
                                                                                
                                                                                
使用OS名   ID_NO   状態     FROM  TO(シリンダ) サイズ  セレクタ       
                                                                                
未使用域       01                  0001  ~  0614         40                   
                                                                                
装置全体を初期化します,いいですか  ? y                                    
                                                                                
                                                                                
装置を初期化中です                                                              
 残り xx メガバイト                                                           
                                                                                
                                                                                
モ−ドを選択して下さい                                                          
[ 1:マップ 2:確保 3:解放 4:初期化 5:アクティブ 6:変更 7:終了 ] = 2              
                                                                                
                                                                                
1シリンダは 66.0 kb                                                            
                                                                                
                                                                                
  何メガバイトですか = 40                                                       
                                                                                
FROM = 1                                                                   
                                                                                
使用域の確保中です                                                              
 残り xx メガバイト                                                           
                                                                                
システム転送しますか (Y/N) =  y                                                 
システムを転送しました.                                                         
                                                                                
                                                                                
ディスクのボリュームラベルを入力してください.                                   
漢字−5文字,英数字−11文字,無名称−リターンキー                            
                                                                                
                                                                                
モ−ドを選択して下さい                                                          
[ 1:マップ 2:確保 3:解放 4:初期化 5:アクティブ 6:変更 7:終了 ] = 5              
                                                                                
                                                                                
使用OS名   ID_NO   状態     FROM  TO(シリンダ) サイズ  セレクタ       
                                                                                
MS−DOS     01     スリ−プ    0001  ~  0600         40                   
未使用域       01                  0601  ~  0614         00                   
                                                                                
変更するID_NOを入力して下さい = 1                                          
                                                                                
状態(A:アクティブ,S:スリ−プ)= a                                         
                                                                                
モ−ドを選択して下さい                                                          
[ 1:マップ 2:確保 3:解放 4:初期化 5:アクティブ 6:変更 7:終了 ] = 7              
A>                                                                              
 
以上で、HDDの初期化・システム転送が完了します。




実は、MS-DOS 3.1もそれなりに問題山積


今回の環境構築を行ってみて、私が感じた問題点は以下の4つです。
  @FAT12しか使えないため無駄な領域が多くなる
  Aフォーマットの作業の敷居が高い
  Bブートメニューの自動起動が機能しない
  C3.1最終版の起動時にエラーが発生する

@セクタ長256バイトの場合、標準フォーマットと拡張フォーマットの選択が可能になりました。 拡張フォーマットを選択すれば40MBの領域が使用できますが、ここで問題となるのが、ファイルシステムがFAT12にしか対応していないという点です。 2の12乗=4096までしかFAT IDを扱えない(厳密に言うともうちょっと少ない)ため、ドライブ全体で扱えるファイル数に制限ができます。
FATファイルシステムでは1バイトのファイルでも1クラスタ占有してしまうため、細々したファイルを多数扱う場合には、とても無駄が多くなります。 これを「クラスタ・ギャップ」と言いますが、一般に、ランダムなファイルサイズのデータが散在する場合、 理論上「クラスタサイズ × ファイル数 × 1/2」のクラスタギャップが生じます。
32MBを超えたあたりではクラスタサイズは16384バイトとなり、限られた資源を有効に使いたい気持ちが今とは比べ物にならない当時にしては、 この無駄はかなりゆゆしき事態でした。

アーカイバを駆使すればこの問題に対処できそうですが、私が知る限りこの当時そのような道具もなく、 テキスト形式のファイルなど可能な範囲で1ファイルにまとめられるものはまとめるくらいが関の山だったのだろうと想像します。
こればかりは、FAT16に対応したMS-DOS 3.3の登場を待つしかありません。


A領域の初期化・確保の作業で敷居が高い部分がある

【その1】先頭シリンダの値を入力
フォーマット作業の中で、領域を確保する際、先頭のシリンダを数字で指定する必要があります。 0シリンダにはブートメニューがセットされるので、OSの領域は1シリンダから開始する、 ということを知識として知っていれば問題ないのですが、少しハードルを高くする要因になっていると思います。

【その2】領域のデフォルトがスリープ
システムを転送してそこからブートするであろうと思っていると、デフォルトではスリープになっているので、状態の変更を忘れるとOSが起動しません。 しかも、ブート可能な領域がないことがエラーメッセージとして通知されればまだいいのですが、何も起こらず、ただ真っ黒な画面になります。 地味ですが、こういったことも無駄な時間や労力を使う原因になります。

そのような経験を踏まえて、この後もFORMATコマンドは徐々に改良が進んでいくのですが、 古いバージョンを使う時には、過去の不自由な状態も知っておく必要があります。

B拡張フォーマットでOSのインストールを行い、再起動すると、こんな画面が出てきます。

                                                                                
          NEC PC-9800 シリーズ                                                     
          固定ディスク起動メニュープログラム バージョン 1.03                       
          Copyright (C) 1985,1986 NEC Corpor                                    
                                                                                
                    固定ディスクドライブ#1                                    
                                                                                
            処  理:起動する  自動起動に設定する  次のドライブ                  
                                                                                
            領域@:MS-DOS 3.10                                                 
                A:                                                            
                B:                                                            
                C:                                                            
                D:                                                            
                E:                                                            
                F:                                                            
                G:                                                            
                                                                                
          説明:カーソル移動キー=処理/領域の選択 リターンキー=実行          
                                                                                
                                                                                
                                                                                

このメニュー画面の中に「自動起動に設定する」という機能があり、それを行うと選択中の領域の右側に「*」が付きます。 これで、次回からその領域が自動起動されそうな気がしますが、実際にはそうはなりません(苦笑)。
このような状態のものが製品としてリリースされてしまうあたり、時代を感じます。 当時の人たちがどんな気分でこの起動メニューを使っていたのか、実経験をお持ちの方から聞いてみたいところです。

ちなみに、3.3以降のバージョンでは、この問題もすっかり改善され、以下のようになりました。
  ・起動可能な領域が1つならそこから起動
  ・起動可能な領域が複数なら起動時に選択を実施
  ・その選択を毎回行うのが面倒なら、自動で起動する領域の指定が可能


C拡張フォーマットができるようになり、MS-DOS 2.11の頃の諸問題もすっかり解消されたと思いきや、ここで思わぬ落とし穴がありました。 3.1最終版が起動しません(泣)。

ここまで紹介してきた@〜Cの問題点について分類すると、@はMS-DOS 3.1を使う限りどうしようもない問題、 ABはユーザが納得(あるいは我慢)すればそれで済む問題、と言った感じでしたが、 Cは他と違い仮想環境のみの問題ですので解決方法を探る必要があります。
3.1最終版(PS98-011・PS98-012両方とも)をインストールして、OSを再起動すると、途中でフリーズします。 テキストVRAMが壊れている感じですのでプログラムの暴走が起きていると判断して間違いありません。 この現象、Anex86では起きませんので、これもこのエミュレータの問題と思われます。 ちなみに、このバージョンではエプソン・プロテクトがかかっており、Anex86ではこれを解除しないとインストールができません。 久しぶりに解除を行い、何か懐かしさを感じました。



「その後のOSを利用する・・・」という裏技


ここで、上記の問題点ABCを同時に解決する裏技を紹介致しましょう。

「この当時ではできなかった、でも今でならできる」という方法ですが、実機か仮想かということは関係なく、 MS-DOSのその後の進化の状況を知っているかいないか、ということになります。 具体的に言うと、それ以降のバージョンでインストール作業を行い、インストールする中身だけを3.1最終版にする、と言う方法です。

ひと口に「インストール作業」と言っても、内部処理を意識すると、もう少し細かく分類することができます。
(1) 初期化 ※下記(A)は不要の場合もある、重要なのは(B)
  (A) 物理フォーマット セクタ長の設定・既存データの消去
  (B) ブートプログラムのセット(シリンダ0)
(2) 領域確保 ※ドライブとして認識される部分を「空箱」と表現
  シリンダ0の所定の場所に、どのシリンダに領域を設定するかの「空箱の位置情報」を用意する。
(3) システムの転送
  用意した「空箱」のデータ領域の先頭部分にIO.SYS・MSDOS.SYS・COMMAND.COMをコピーする。
(4) システム以外の転送
  「空箱(この時点では空でないが)」の残りの部分に、OSが機能するために必要なその他のファイルをコピーする。

シリンダ0には「OSの選択を行い、OSの最初の動作に必要な情報をメモリに読み込む」ということを行うプログラムが置かれますが、 この「OS起動のための準備作業」は、機種には依存しますが、OSには依存しません。 シリンダ1以降に、目的のOSが入ってさえいれば、そのOSが起動するわけですが、それをコピーする作業は、 最終的に動作させたいOSと一致させる必要は必ずしもありません。 インストール作業自体は不具合の取れた新しいバージョンで行い、 ハードディスクにセットするOSのコピー元の選択を行う時だけ3.1最終版にしてやればいいのです。

具体的にどのバージョンを使えばいいか?、と言うことですが、恐らくMS-DOS 5.0以降なら何でもいいと思います。 ここでは試しにMS-DOS 6.2を使用します。理由は 3.1 の2倍が 6.2 だからです、って言うのはウソです、より新しい方が使いやすく高機能だからです。

MS-DOS 6.2 起動ディスクを用意します。システム転送を行い、FORMAT.EXE・HDFORMAT.EXE・SYS.EXEをコピーしておけば今回の作業に事足りますが、 詳しくはMS-DOS 6.2での緊急用起動FDイメージ作成のところで行いたいと思います。

以下の状態でマシンを起動します。
・FDD1 MS-DOS 6.2起動ディスク
・FDD2 MS-DOS 3.1最終版システムディスク
・IDE#0 Neko Projectで作成した40MB HDDイメージ

 (1) OSが起動したらFORMAT.EXEをします。 お馴染みの「FORMAT /H」
 (2) 初期化及び領域の確保を行います。この時、システム転送は「しない」にして下さい。
 (3) 確保した領域はブート不可になっているので、状態変更でブート可に変更して下さい。
   ついでに、システム名を「MS-DOS 6.2」から「MS-DOS 3.1」に変更します(そのままでも実害はありませんが紛らわしいので名実を合わせます)。
 (4) 一回目の再起動をします。
 (5) システムの転送を行います。 「SYS B: C:」
 (6) その他のファイルの転送を行います。 「COPY B:\*.* C:」
   COMMAND.COMの上書きは「しない(N)」を選択します。
 (7) ここで、FDDを2枚ともイジェクトして二回目の再起動をします。

以上で、MS-DOS 3.1最終版が起動します。OSの内部事情をより深く知ることで、通常では不可能なことを可能にできる場合もありますが、これなどはその一例と言えます。

ただし、本来動かないものを無理やり動かしていますので、ひとつ制約があります。
メニュー画面を経由してから起動しようとするとOS起動途中でフリーズします。複数のOSが起動できる環境に組み込むことはできません。 下の固定ディスク起動メニュー画面とMS-DOS 3.1は相性が悪いようです。

       固定ディスク起動メニュープログラム バージョン 2.30                          
       Copyright (C) NEC Corporation 1985,1992                                  
                                                                                
       処  理:領域の選択(起動)                                               
                                                                                
       固定ディスク      #1               1:MS-DOS 3.1                        
                                                                                
       メ ニ ュ ー 終 了               2:                                  
                                                                                
                                            3:                                  
                                                                                
                                            4:                                  
                                                                                
                                            5:                                  
                                                                                
                                            6:                                  
                                                                                
                                            7:                                  
                                                                                
                                            8:                                  
                                                                                
                                                                                
                                                                                
    説明:↑・↓キー=領域の選択 ←キー=装置の選択 リターンキー=起動        
          スペースキー=自動起動の設定                                          




仮想環境でマルチブートって必要か?


1台のPCに複数のOSをインストールし、起動時に選択できるようにしたものをマルチOSブート環境といいますが、 これは実機で限られたハードディスクを有効利用するための手段と言えます。 仮想環境でも同じようにマルチブートにできますが、領域のサイズ変更の時に他の領域が邪魔になるとか、 ある領域を削除したため、その後の領域のドライブレターを変更しないといけないなどの、マルチブート特有の煩わしさが発生します。
マルチOSブート環境を作ってOS選択メニューからOSを選択する作業も、個々にOSが起動する環境を作ってどのOSが入った環境かを選択する作業も、 手間としては大して変わりがありません。 よって仮想では、それぞれの環境の独立性を持たせるために「1環境=1OS」とするのが自然だと思います。 私の持論では、特に理由がない限り「仮想環境ではマルチブートは不要」です。

上記裏技での「複数のOSを起動したい環境では使えない」という制約は、 マルチブート環境を作らなければ発生しないので、事実上問題ないと言っていいでしょう。
つまり、仮想環境で上記のような、ハードディスクの領域選択画面を目にすることは、基本的にないと思います。



懐かしいMS-DOS 3時代のメニュー画面





最後に、MS-DOS 3.1最終版のメニュー画面のイメージを載せておきます。 それ以前の、真っ黒な画面にプロンプト「A:>」が表示されていただけのものと比べると、随分派手になったと言えます。 シアン色の罫線なども含め、これらは全てテキストで描かれています。
よく使うコマンドが、画面から選択するだけで実行でき、そのコマンドの内容も表示されます。 コマンドの勉強をしたい人から、コマンドを知った上で更に楽に使いたい人まで、幅広い層に向けて作られた、 シンプルながらこの時代としては画期的なメニュー画面だと、私は思っています。



戻る