Changes

NEXTOR DDG 02 01

1,589 bytes removed, 21:01, 23 February 2019
no edit summary
===2.2。 1. MSX-DOS 2カーネル 1カーネル===
MSXオリジナルのMSX-DOS 2カーネルは、最初は関連するストレージハードウェアを持たないカートリッジとして登場しましたが、MSX-DOS 1カーネルに関連する既存のストレージコントローラと一緒に使用するためのものです。後でそれはMSX Turbo-Rコンピュータに内部的に含まれていました。 DOSカーネル(バージョン1と表示されています)は、最初に外部のMSXフロッピーディスクコントローラに埋め込まれたROMとして存在し、その後、フロッピーディスクドライブを内蔵したMSXコンピュータの内部ROMとして存在しました。スロットの1ページ目のアドレス空間(アドレス4000h〜7FFFh)を使用する16K ROMです。
MSX-DOS 2カーネルは、そのスロットのページ1アドレス空間をMSX-DOS 1カーネルと同じように使用します。ただし、MSX-DOS 2カーネルのサイズは64 Kです。このスペースは4つの16Kバンクに分割されていて、バンクマッピングメカニズムが使用されているため、同時に1つのバンクしか見えません。バンクの内容は次のとおりです。1カーネルは、大きく2つの部分に分けられます。
バンク0には、カーネル共通コードとディスクドライバコードが含まれています。 カーネル共通コードすべての関数呼び出しのコードやFATファイルシステム管理コードなど、ハードウェアに依存しないコードが含まれています。 ROM内のコードの大部分がこの部分を占めています。
バンク1と2には、カーネル共通コードが含まれています。 ディスクドライバこれは、必要に応じてカーネルコードによって要求されるように、主にディスクセクタを読み書きするために大容量記憶装置に物理的にアクセスするコードです。それは標準化された入力と出力パラメータを持つ一連のルーチンから成ります。
バンク3には、MSX-DOS 1カーネルのコピーとディスクドライバコードのコピーが含まれています(MSX Turbo-Rマシンのみ)。 カーネル共通コード部分は、100%ドライバに依存しません。使用するディスクドライバに応じてパッチを適用する必要があるポイントがいくつか含まれています。1つはドライバによって制御されるドライバユニットの数、もう1つはドライバが必要とする作業領域の数です。
図2にMSX図1にMSX-DOS 2カーネルの構造図を示します。1カーネルの構造図を示します。
Bank 0 Banks 1 and 2 Bank 34000h +---------------------+---------------------+---------------------+ | Page 0 code | Page 0 code | |40FFh +---------------------+---------------------+ | | 0 (bank ID) | 1/2 (bank ID) | |4100h +---------------------+---------------------+ | | | | | | Bank 0 | Banks 1/2 | Kernel Bank 3 | | kernel code | kernel code | kernel common code | | | | (MSX-DOS 1 kernel) | | | | | +---------------------+ |---------------------+ | | | | | Disk driver | | Disk driver | | | | |7FD0h +---------------------+---------------------+---------------------+ | Bank switching code | Bank switching code | Bank switching code |7FFFh +---------------------+---------------------+---------------------+
すべてのバンクに共通の3つの部分があります(バンク3にはバンク切り替えコードのみが含まれています)。 図1 - MSX-DOS 1のカーネル構造
ページ0コードは255バイト長で、タイマー割り込みルーチン、別のバンクのコードを呼び出すためのルーチン、およびその他の便利なユーティリティコードのエントリポイントを含みます。 MSXコンピュータでは、最大4つのMSX-DOSカーネルROMをアクティブにできます。複数存在する場合は、スロット番号が最も小さいものが「マスター」(カーネル共通コードが実際に実行されるもの)になり、その他のものが「スレーブ」になります(それらのドライバコードだけが実行されます)。
バンクIDはバンク番号とちょうど1バイトです、それはバンク間の呼び出しをするために必要です。 バンク切り替えコードは、表示されているバンクを変更するために必要です。 ここに配置されている正確なコードは、使用されているROMマッパーの種類によって異なります(元のDOS 2カートリッジのマッピングはASCII 16です)。  DOS 2モードで起動すると、バンク0は恒久的に切り替えられ、他のバンクは、バンク0コードがルーチンを呼び出すか、またはこれらのバンクの1つのデータにアクセスする必要があるときにのみ一時的に切り替えられます。 DOS 1モードで起動すると、バンク3は起動時に切り替えられ、永久に切り替えられたままになります。  MSX-DOS 1カーネルの場合と同様に、最大4つのMSX-DOSカーネルROMを同時にアクティブにすることができ、そのうちの1つを「マスター」に、その他を「スレーブ」にすることができます。ただし、今回はマスターは最小のスロット番号を持つカーネルではなく、最大のバージョン番号を持つカーネルになります(同じバージョンを持つ2つ以上のカーネルの場合は、最小のスロット番号を持つカーネルが引き続きマスターとして選択されます)。数)。DOSは記憶装置をドライブ文字と見なし、ディスクドライバは1つ以上のドライバユニットを提示します。両方のエンティティ間のマッピングは固定されており、1対1です。たとえば、ドライブA:は最初のカーネルのドライバユニット0にマッピングされ、ドライブB:はドライバユニット1にマッピングされます。