,{c H},{BGCOLOR:dddddd|BOLD|CENTER} ,{c C},{CENTER} ,{c R},{RIGHT} // %第1版第9第刷 // !!!第1章 概要  MSX-DOS とは、いったいどのようなソフトウェアであり、ユーザーに何をもたらしてくれるのでしょうか。本章では MSX-DOS の持つ特徴と機能、そのソフトウェア構成などの解説を通して、MSX-DOS を紹介していきます。 !!1.1 MSX-DOS の特徴 '''●ディスク環境の統一'''  MSX-DOS は MSX コンピュータのためのディスク・オペレーティング・システムです。MSX のすべてのバージョンに対応し、MSX2 と従来の MSX のどちらのハードウェア上でも問題なく動作可能です。また、MSX におけるディスクの取り扱いは、かならず何らかの形で MSX-DOS を介して行われます。MSX DISK-BASIC においても例外ではなく、そのディスク入出力には、BDOS コールと呼ばれる MSX-DOS の機能の一部が利用されています。したがって MSX-DOS と DISK-BASIC には同一のディスク・フォーマットが用いられ、一部のパソコンで見られるように、BASIC と DOS の間のファイル変換を行う必要はありません。このことは、MSX-DOS を MSX のプログラム開発環境として使用する場合、操作性およびファイル資源の有効活用という点で、非常に大きなメリットとなります。 '''●MS-DOS との互換性'''  MSX-DOS は、16ビット・パソコン用のディスク・オペレーティング・システムとして作られた MS-DOS(ver1.25) をもとに作成され、MS-DOS と共通のファイル・フォーマットが用いられています。そのため MS-DOS とファイルレベルでの互換性があり、MS-DOS のディスクに書き込まれているファイルを MSX-DOS で読み書きする、逆に MSX-DOS のディスク上のファイルを MS-DOS を用いて読み書きすることが可能です。また、DOS を操作するコマンドのレベルでも両者は統一が図られているため、MSX-DOS で DOS に親しんだユーザーは、後々 16ビット機を使用することになった場合、MS-DOS への移行にとまどうことがありません。 '''●CP-M のアプリケーションが利用可能'''  さらに、CP/M-80 とシステムコールの互換性があり、CP/M 上で作成された大部分のプログラムは、1バイトも手を加えずに MSX-DOS で実行可能です。これは、CP/M 用の膨大なアプリケーションが MSX-DOS 上で手軽に利用できることを意味します。多くの優れたソフトウェアを MSX ユーザーに提供するソフトウェア・バスとしても、MSX-DOS はたいへん有効な存在となり得るのです。 !!1.2 MSX-DOS の使用環境 '''●必要なシステム'''  MSX-DOS を使用するためには、最低限 64K バイトの RAM を実装した MSX 本体と、CRT、ディスクドライブ 1 台、そしてディスクインターフェイス ROM が必要です。RAM が 64K バイトに満たない場合はディスクドライブが存在しても MSX-DOS は起動せず、DISK-BASIC の環境しか利用できません。MSX2 使用のコンピュータは、少なくとも 64K バイトの RAM を実装することが保証されていますから、かならず MSX-DOS に対応可能です。ディスク・インターフェイス ROM は、実際はつねにディスクドライブに付属して供給され、ドライブ内蔵の MSX では本体内、ディスクカートリッジ使用の場合はカートリッジ内に存在します。 '''●サポートするシステム'''  MSX-DOS は 8台までのディスクドライブをサポートします。なお、1 ドライブシステムの場合、2 ドライブ・シミュレーション(1 台のドライブをディスケットを交互に入れ替えることで時分割的に 2 ドライブとして用いるもの)の機能を持ちます。周辺装置は、キーボード入力、画面出力、プリンタ出力に対応しています。 '''●サポートするメディア'''  ディスクの物理的な構造に依存しない柔軟なファイル管理機能を持つ MSX-DOS は、多種のメディアに対応可能ですが、標準として用いられるのは 3.5 インチ倍密度のフロッピーディスクです。このディスクには、 1DD と呼ばれる片面タイプと 2DD と呼ばれる両面タイプの 2 種類があります。また、それぞれのフォーマット形式にも 1 トラックが 8 セクタまたは 9 セクタの 2 種類があり、都合 4 種類のメディアが利用可能です。これらは 表 3.1 に示した形式(マイクロソフト・フォーマット)でフォーマットされます。 ,{t},{CENTER} ,{c},{H},{H},{H},{H},{H} ,,"1DD,9セクタ","2DD,9セクタ","1DD,8セクタ","2DD,8セクタ" ,{c},{L},{R},{R},{R},{R} ,メディアID,0F8H,0F9H,0FAH,0FBH ,面数,1,2,1,2 ,1 面に含まれるトラック数,80,80,80,80 ,1 トラックに含まれるセクタ数,9,9,8,8 ,1 セクタに含まれるバイト数,512,512,512,512 ,クラスタのサイズ,2 セクタ,2 セクタ,2 セクタ,2セクタ ,FAT のサイズ,2 セクタ,3 セクタ,1 セクタ,2セクタ ,FAT の個数,2,2,2,2 ,作成可能ファイル数,112,112,112,112 注) 表中の言葉の意味については、3 章を参照 {{div_begin style='text-align:center;'}} '''表 3.1 MSX-DOS のサポートするメディア''' {{div_end}} !!1.3 MSX-DOS のシステム資源 '''●メモリマップ'''  MSX-DOS を構成するソフトウェアは、COMMAND.COM、MSX-DOS.SYS、ディスク・インターフェイス ROM の 3 つの部分に分かれており、MSX-DOS が動作している時にはメモリ上で図 3.1 に示す位置を占めています。COMMAND.COM および MSX-DOS.SYS は、MSX-DOS が起動するまではファイルとしてディスク上に存在し、MSX-DOS が起動すると RAM に読み込まれます。ディスクインターフェイス ROM は、ディスクドライバ、DOS カーネル、DISK-BASIC インタープリタを含みます。 {{div_begin style='text-align:center;'}} {{svg 図3.1.svg,,size:610x220}} '''図 3.1 MSX-DOS のメモリマップ''' {{div_end}}  RAM 上の 00H〜0FFH 番地は、システムスクラッチ・エリアと呼ばれ、MSX-DOS が他のプログラムとのデータの受け渡しに利用する領域です。後述するシステムコールを使う場合には、この領域が重要な役割を果たします。0100H 番地から始まり、RAM の 0006H 番地の内容で示されるアドレスまでの領域は、TPA(Transient Program Area)と呼ばれ、ユーザーが自由に利用可能です。MSXDOS.SYS は TPA より上位アドレスに常駐し(この部分が壊れると暴走する)、COMMAND.COM は TPA 内に置かれます。 '''●COMMAND.COM'''  MSX-DOS の基本的な操作は、キーボードからコマンドを入力し実行させる、という処理の繰り返しです。この時、文字列の入力からコマンドの解釈実行までの作業、いわゆるユーザー・インターフェイスに相当する部分を受け持つのが COMMAND.COM というプログラムです。COMMAND.COM が実行するプログラムは、内部コマンド、バッチコマンド、外部コマンドの 3 つに分けられます。  内部コマンドは COMMAND.COM の内部に組み込まれているものであり、RAM 上に存在しています。内部コマンドが入力されると、COMMAND.COM はすぐにその部分をコールし、コマンドを実行します。  外部コマンドの場合、COMMAND.COM は、まずディスクからそのルーチンを TPA に読み込み、実行に移ります(外部コマンドの実行はつねに 100H 番地から始まる)。この時、COMMAND.COM は自分自身の領域を外部コマンドのために解放します。つまり、COMMAND.COM を消して、その上に外部コマンドを書き込んでしまってもかまわないのです。外部コマンドが "RET" によって終了すると、まず MSXDOS.SYS によって COMMAND.COM が破壊されているかどうかが調べられ(チェック・サムを用いる)、そうであれば再び COMMAND.COM を RAM 上にロードしてから COMMAND.COM に制御が移ります。  バッチコマンドは、通常はコマンドラインから行う入力を、指定されたバッチファイルから取り込むように変更することで処理されます。バッチコマンドの各ステップでは、任意の内部コマンドあるいは外部コマンドの実行が可能です。バッチコマンドの中でさらにバッチコマンドを実行することもできますが、その場合、呼び出された方のバッチコマンドが終了しても、元のバッチコマンドには戻ってきません。 '''●MSXDOS.SYS'''  MSXDOS.SYS は、MSX-DOS の中核となり、ディスクアクセスや周辺機器との入出力を管理します。MSXDOS.SYS の持つこれらの機能は、"BDOS(Basic Disk Operation System)" として、ユーザーが使用しやすいような形で公開されてもいます。公開された個々のルーチンは "システムコール" と呼ばれ、ディスクを使用するソフトウェアの開発には欠かせない存在となっています (4 章参照)。ただし、それぞれの処理は MSXDOS.SYS 自身によって行われているのではなく、実際の作業は DOS カーネルが受け持っています。MSXDOS.SYS は、COMMAND.COM や外部コマンドからくる入出力の要求を整理して、DOS カーネルに発注する仲立ちの役割を果たしています。  なお、 MSXDOS.SYS の内部には、図 3.2 に示すように BDOS の他に BIOS と呼ばれる部分が含まれています。この BIOS とは、CP/M との互換性のために設けられたもので、通常は使用されません。 {{div_begin style='text-align:center;'}} {{svg 図3.2.svg,,size:220x90}} '''図 3.2 MSXDOS.SYS''' {{div_end}} '''●DOS カーネル''' DOS カーネルは、ディスク・インターフェイス ROM 中に存在する基本入出力ルーチンであり、MSXDOS.SYS の BDOS 機能を実行する部分です。実際、DOS カーネルがあればシステムコールの機能はすべて実行可能です。DISK-BASIC では、直接この DOS カーネルをコールすることで、システムコールを実現しています。 '''●MSX-DOS の起動手順''' MSX-DOS の起動は以下の過程により行われます。 1.MSX をリセットすると、始めにすべてのスロットを調べ、調べたスロットの先頭に (41H, 42H) の 2 バイトが書き込まれていれば、そのスロットには何らかの ROM が接続されていると判断します。ROM が接続されていれば、ROM のヘッダ部分にアドレスを設定された INIT (初期化)ルーチンを実行します。ディスク・インターフェイス ROM の INIT ルーチンの場合は、まずそのインターフェイスに接続されているドライブのためにワークエリアを確保します。 2.すべてのスロットを調べ終わったら、次に FEDAH (H.DTKE) を参照します。このアドレスの内容が C9H でなければ (INIT ルーチンの実行中に H.STKE のフックに対して何らかのルーチンが設定されていれば) DISK-BASIC のための環境を設定し、H.STKE へジャンプします。 3.もし上記の調査で H.STKE の内容が C9H であれば、今度は TEXT エントリを持つカートリッジを各スロットへ探しにいき、存在すれば DISK-BASIC のための環境を設定した後、そのカートリッジの BASIC プログラムを実行します。 4.次に、ブートセクタ (論理セクタ #0) の内容が C000H〜C0FFH へ転送されます。この時、"DRIVE NOT READY" または "READ ERROE" が発生した場合、あるいは転送されたセクタの先頭が EBH でも E9H でもなかった場合、DISK-BASIC が起動します。 5.次に、C01EH のルーチンが CY フラグをリセットした状態でコールされます。通常はこのアドレスには "RET NC" のコードが書き込まれているため、何も実行しないでリターンします。この部分に任意のマシン語プログラムのブートプログラムを書き込んでおけば、そのプログラムがオートスタートします。 6.次に、RAM 容量をチェックします (RAM の内容は破壊されません)。もし 64K バイトの容量が無かった場合は、DISK-BASIC が起動します。 7.次に MSX-DOS の環境が初期化され、さらに CY フラグをセットした状態で C01EH がコールされます。ここでは MSXDOS.SYS が 100H からのアドレスにロードされ、100H へジャンプします。この後、MSX-DOS は自分自身を高位アドレスに転送します。MSXDOS.SYS が存在しない場合には、DISK-BASIC が起動します。 8.MSXDOS.SYS は COMMAND.COM を 100H からのアドレスにロードし、その先頭へジャンプします。COMMAND.COM も、自分自身を高位アドレスに転送し、そこで初めて実行に移ります。COMMAND.COM が存在しない場合には、"INSERT A DISKETTE" のメッセージが表示されて、正しいディスケットがドライブにセットされるのを待ちます。 9.MSX-DOS が最初にブートされた時、"AUTOEXEC.BAT" という名前のファイルが存在すれば、それをバッチファイルとして実行します。MSX-DOS が起動せず DISK-BASIC が立ち上がった場合、"AUTOEXEC.BAS" という名前の BASIC プログラムが存在すれば、それを実行します。