NEXTOR DDG 02 02
2.2。 MSX-DOS 2カーネル
MSX-DOS 2カーネルは、最初は関連するストレージハードウェアを持たないカートリッジとして登場しましたが、MSX-DOS 1カーネルに関連する既存のストレージコントローラと一緒に使用するためのものです。後でそれはMSX Turbo-Rコンピュータに内部的に含まれていました。
MSX-DOS 2カーネルは、そのスロットのページ1アドレス空間をMSX-DOS 1カーネルと同じように使用します。ただし、MSX-DOS 2カーネルのサイズは64 Kです。このスペースは4つの16Kバンクに分割されていて、バンクマッピングメカニズムが使用されているため、同時に1つのバンクしか見えません。銀行の内容は次のとおりです。
バンク0には、カーネル共通コードとディスクドライバコードが含まれています。
バンク1と2には、カーネル共通コードが含まれています。
バンク3には、MSX-DOS 1カーネルのコピーとディスクドライバコードのコピーが含まれています(MSX Turbo-Rマシンのみ)。
図2にMSX-DOS 2カーネルの構造図を示します。
Bank 0 Banks 1 and 2 Bank 3
4000h +---------------------+---------------------+---------------------+
| Page 0 code | Page 0 code | |
40FFh +---------------------+---------------------+ |
| 0 (bank ID) | 1/2 (bank ID) | |
4100h +---------------------+---------------------+ |
| | | | | Bank 0 | Banks 1/2 | Bank 3 | | kernel code | kernel code | kernel code | | | | (MSX-DOS 1 kernel) | | | | | +---------------------+ |---------------------+ | | | | | Disk driver | | Disk driver | | | | |
7FD0h +---------------------+---------------------+---------------------+
| Bank switching code | Bank switching code | Bank switching code |
7FFFh +---------------------+---------------------+---------------------+
図2 - MSX-DOS 2カーネル構造
すべてのバンクに共通の3つの部分があります(バンク3にはバンク切り替えコードのみが含まれています)。
ページ0コードは255バイト長で、タイマー割り込みルーチン、別のバンクのコードを呼び出すためのルーチン、およびその他の便利なユーティリティコードのエントリポイントを含みます。
バンクIDはバンク番号とちょうど1バイトです、それはバンク間呼び出しをするために必要です。
バンク切り替えコードは、表示されているバンクを変更するために必要です。ここに配置されている正確なコードは、使用されているROMマッパーの種類によって異なります(元のDOS 2カートリッジのマッピングはASCII 16です)。
DOS 2モードで起動すると、バンク0は恒久的に切り替えられ、他のバンクは、バンク0コードがルーチンを呼び出すか、またはこれらのバンクの1つのデータにアクセスする必要があるときにのみ一時的に切り替えられます。 DOS 1モードで起動すると、バンク3は起動時に切り替えられ、永久に切り替えられたままになります。
MSX-DOS 1カーネルの場合と同様に、最大4つのMSX-DOSカーネルROMを同時にアクティブにすることができ、そのうちの1つを「マスター」に、その他を「スレーブ」にすることができます。ただし、今回はマスターは最小のスロット番号を持つカーネルではなく、最大のバージョン番号を持つカーネルになります(同じバージョンを持つ2つ以上のカーネルの場合は、最小のスロット番号を持つカーネルが引き続きマスターとして選択されます)。数)。