NEXTOR DDG 02 01

From Z80 Machines Wiki
Jump to: navigation, search

2.1. MSX-DOS 1カーネル

オリジナルのMSX-DOSカーネル(バージョン1と表示されています)は、最初に外部のMSXフロッピーディスクコントローラに埋め込まれたROMとして存在し、その後、フロッピーディスクドライブを内蔵したMSXコンピュータの内部ROMとして存在しました。スロットの1ページ目のアドレス空間(アドレス4000h〜7FFFh)を使用する16K ROMです。

MSX-DOS 1カーネルは、大きく2つの部分に分けられます。

  • カーネル共通コード すべての関数呼び出しのコードやFATファイルシステム管理コードなど、ハードウェアに依存しないコードが含まれています。 ROM内のコードの大部分がこの部分を占めています。
  • ディスクドライバ これは、必要に応じてカーネルコードによって要求されるように、主にディスクセクタを読み書きするために大容量記憶装置に物理的にアクセスするコードです。それは標準化された入力と出力パラメータを持つ一連のルーチンから成ります。

カーネル共通コード部分は、100%ドライバに依存しません。使用するディスクドライバに応じてパッチを適用する必要があるポイントがいくつか含まれています。1つはドライバによって制御されるドライバユニットの数、もう1つはドライバが必要とする作業領域の数です。

図1にMSX-DOS 1カーネルの構造図を示します。


4000h +---------------------+
     |                     |
     |                     |
     |                     |
     |        Kernel       |
     |     common code     |
     |                     |
     |                     |
     +---------------------+
     |                     |
     |     Disk driver     |
     |                     |
7FFFh +---------------------+

図1 - MSX-DOS 1のカーネル構造


MSXコンピュータでは、最大4つのMSX-DOSカーネルROMをアクティブにできます。複数存在する場合は、スロット番号が最も小さいものが「マスター」(カーネル共通コードが実際に実行されるもの)になり、その他のものが「スレーブ」になります(それらのドライバコードだけが実行されます)。


MSX-DOSは記憶装置をドライブレターで見ており、ディスクドライバは1つ以上のドライバユニットを提示します。両方のエンティティ間のマッピングは固定されており、1対1です。たとえば、ドライブA:は最初のカーネルのドライバユニット0にマッピングされ、ドライブB:はドライバユニット1にマッピングされます。