PC98のMS-DOS 3.3がMS-DOS 3.21であることを実証する

NEC PC98版MS-DOS 3.3の内部バージョンは3.21であるという噂はちらほら聞いたことあるが、それをちゃんと検証しているところを見たことがないので、手元にあるMS-DOS 3.3Cを使って外部からも内部からも調べてみた。

内部に隠しメッセージ!?見れば誰でも分かる方法

小難しいことをしなくても、誰が見てもMS-DOS 3.21であると分かる方法がある。MS-DOSのシステムファイル (MSDOS.SYS) をテキストエディタでシフトJISコードとしてデコードして開くと、内部バージョンのメッセージを見ることができる。ただ、このファイルはシステムファイル属性と隠しファイル属性が付いているので、MS-DOSやWindowsの初期設定では表示されない。

次はMS-DOS 3.3CのMSDOS.SYSの場合。

このメッセージは普通にMS-DOSを使っていた限りでは表示された記憶がない。日本IBMの日本語DOS K3.3やAXのMS-DOS 3.21には0除算エラーのメッセージは同じくあるが、このようなバージョンのメッセージは存在せず、PC98版だけ何故残っているのかは謎。

また、COMMAND.COMを見るとより分かりやすい。

「Command バージョン 3.30C」はCOMMAND.COMを起動したときに表示されるメッセージと思われるが、その下のバージョン3.21のメッセージはどういう時に表示されるのか分からない。

DOSの機能実装としてはどうなのか

上の隠しメッセージは普通に使用していたら表示されないものである。単に旧バージョンや開発中のゴミが残っているだけでは?ということも考えられる。そこで、機能的にPC98版MS-DOS 3.3がMS-DOS 3.21であるかどうか。つまり、本家のDOS 3.3で新しく実装された機能が、PC98版MS-DOS 3.3に存在しないことを証明できれば、より確証を得られる。

そこで、以下のDOS 3.2およびDOS 3.3で追加されたDOSファンクションが、MS-DOSの各バージョンで使用できるか、確認してみる。

ただし、Int 21h, AX=6300h(DBCSベクタアドレスの取得)は本家DOS 3.2では未実装で、MS-DOS 3.21の極東バージョン(日本・韓国・中国向け))で実装されたものと思われる。このファンクションは本家ではDOS 4.0以降で実装されている。

DOSファンクションの調査にはRalf Brown's Interrupt List (Release 61, 16 July 2000) のPart E (Utility Program) にあるINT.COMを使用し、有効な返値が得られるかどうかで判断した。

DOS Function DOS 3.3 (IBM) MS-DOS 3.21 (AX) MS-DOS 3.3C (PC98) MS-DOS 5.0A (PC98)
AX=440Eh (DOS 3.2+)
AX=6300h (DOS 3.21, 4.0+)
×
AX=6601h (DOS 3.3+)
×
×
AH=67h (DOS 3.3+)
×
×
AH=68h (DOS 3.3+)
×
×

AXのMS-DOS 3.21とPC98のMS-DOS 3.3Cでは、どちらもDOS 3.2のファンクションは使用できたが、DOS 3.3で新しく実装されたファンクションは使用できなかった。また、PC98のMS-DOS 5.0Aでは3.3Cで未実装だったファンクションがいずれも実装されていることを確認できた。このことから、PC98版MS-DOS 3.3が機能的に本家DOS 3.3相当とは言えないことが分かった。

日本IBMのPS/55用日本語DOS K3.3は拡張パーティションこそ実装されているが、コードページ取得・設定が未実装だったり、Int 21h, AX=6300hが使用できたりすることから、これもDOS 3.3というよりMS-DOS 3.21ベースである可能性が高い(実動環境がないため、逆アセンブルによる調査)。(2020/5/2追記:日本語DOS K3.3で拡張パーティションの論理ディスクを認識するには、$MDISK.SYSというドライバを使用する必要があるため、MS-DOS 3.21と同様、DOSの基本機能には組み込まれていない。)

DOSのコマンドサポートの違い

MS-DOSでサポートされているコマンドやスイッチからバージョンを見分ける方法は最初の段階で検討していたのだが、特に日本市場向けのものはコマンドに独自の改造がなされているものが多く、あまり当てにしていなかった。それでも比較してみると、何か見えてくるかもしれない。

DOS Version 3.1 (MS) 3.2 (MS) MS-DOS 3.21ベース? 3.3 (IBM) 3.3 (MS)
Command 3.21 (AX) 3.3C (PC98) K3.3 (IBMJ)
COMMAND Ver. ? ? 3.20, 3.21 3.30, 3.31 3.20 3.30 ?
APPEND × ×
ATTRIB +A ×
ATTRIB /S × × × × ×
CALL × × × × ×
CHCP × × × × ×
FC × ×
FC /A × × ×
FDISK × ×
FORMAT /T × ×
GRAPHICS × × ×
MODE × ×
REPLACE ×
TREE ×
XCOPY ×

COMMAND Ver.はCOMMAND.COM自身のバージョンではなく、COMMAND.COMが要求するDOSバージョン。

これを見ていくと、MS-DOS 3.3でサポートされていて3.2ではサポートされていないATTRIB /S、CALL、CHCPコマンドについて、MS-DOS 3.21ベースの疑いが掛かっている3つの日本語バージョン全てでサポートされていないことが分かった。よって、これらは少なくともMS-DOS 3.3ベースではないことが言える。また、MS-DOS 3.2でサポートされていて3.1ではサポートされていないATTRIB +A、REPLACE、TREE、XCOPYコマンドについては、3つの日本語バージョン全てでサポートされていることが分かった。APPENDコマンドは本家IBM DOS 3.2以前には付属せず、他の差異については機種依存の関係によるものと思われる。従って、3つの日本語バージョンはMS-DOS 3.2以上3.3未満である可能性が高まったと言える。

MS-DOS 3.21ベースであることを裏付ける第三者資料

ここまでは私の個人的な調査に過ぎないが、PC98のMS-DOS 3.3がMS-DOS 3.21ベースであることを裏付ける公の資料がある。日経パソコン1988年12月5日号「トピック・レポート―ソフト―混乱するMS-DOS、こんなにあるバージョン。」に、この辺りの事情が書かれている。

1988年11月の時点でマイクロソフトがメーカーに供給しているMS-DOSのバージョンは、日本語版のVer.3.1以降では3.1と3.21の2種類しかなかった(ただし、その中でも細かいバージョンが複数ある)。しかし、バージョンの付け方やリリースについてはOEM先の判断に任せられているため、NEC、富士通、日本IBMなどのメーカーによってバージョンの命名規則に差が出ていたようである。以下にバージョンのリリース年表を引用する。(日経パソコン1988年12月5日号、p.186)

Image: MS-DOSのメーカー別バージョン履歴

マイクロソフトのVer.3.1日本語版に先行してNECや富士通がVer.3.1を出していた?それとも英語版からの移植?まあ、アスキーが代理店だった1986年までの状況についてはあまり信用できないが、一方でVer.3.21のリリース時期については裏付けるものがある。沖電気AXパソコン用のMS-DOS 3.21のシステムディスクを覗くと、タイムスタンプが大きく分けて1988年4月25日と同年7月31日の2つに分けられる。前者は表にある日本語版Ver.3.21のβ版、後者はVer.3.21 Final版に近い日付となっていて、信憑性が帯びてくる。PC98版MS-DOS 3.3が発売された時期はFinal版のリリースと被っていることから、この資料でもPC98版MS-DOS 3.3の中身がマイクロソフトのMS-DOS 3.21であるという予想が付く。ただ、残念ながらNEC公式の言質はこの雑誌特集では得られていないことと、3.3A以降の動向が分かっていない。

これだけの証拠があるとDOS 3.3ベースであることを説明する方が難しくなってくると思うが、真相やバージョン3.3と命名した動機は開発者のみぞ知る。


inserted by FC2 system