MSX-DOS2PIS 05 03

From Z80 Machines Wiki
Jump to: navigation, search

5.3.マッパールーチン

プログラムは、 "ALL_SEG"ルーチンを呼び出すことによっていつでも16k RAMセグメントを要求できます。空きセグメントがない場合はエラーを返すか、プログラムが使用できる新しいセグメントのセグメント番号を返します。プログラムは、RAMの基本64kを構成する4つのセグメントを除いて、明示的に割り当てられていないセグメントを使用してはなりません。

セグメントは、ユーザーセグメントまたはシステムセグメントとして割り当てることができます。ユーザーセグメントはプログラムの終了時に自動的に解放されますが、システムセグメントはプログラムが明示的に解放しない限り解放されません。通常、プログラムはユーザーセグメントを割り当てます。

RAMセグメントは、指定されたセグメントにバイトを読み書きする "RD_SEG"と "WR_SEG"ルーチンによってアクセスすることができます。ルーチン "CAL_SEG"と "CALLS"を使用すると、現在のMSXシステムのスロット間呼び出しとほぼ同じ方法でセグメント間呼び出しを実行できます。

ルーチンは、セグメントを明示的にページングするため、またはどのセグメントが特定のページにあるかを見つけるために提供されています。 HL( "PUT_PH"と "GET_PH")のアドレスの上位2ビットでページ(0 ... 3)を指定するルーチンがあります。そして各ページにアクセスするための特定のルーチン( "GET_Pn"と "PUT_Pn")もあります。これらのルーチンは非常に高速であるため、プログラムはそれらを使用してもパフォーマンスが低下することはありません。

これにはマッパーサポートルーチンと他のすべてのシステム変数が含まれるので、page-3は決して変更されるべきではないことに注意してください。また、ページ0が変更される場合、これには割り込みとスロット切り替えエントリポイントが含まれるため、細心の注意を払う必要があります。ページ1と2はどのように変更することもできます。

マッパーサポートルーチンのどれもスロット選択メカニズムをまったく乱すことはありません。たとえば、 "PUT_P1"が呼び出されると、page-1でマッパースロットが選択されている場合、指定されたRAMセグメントはアドレス4000h ... 7FFFhにのみ表示されます。 "RD_SEG"と "WR_SEG"ルーチンは、指定されたページの現在のスロット選択に関係なく、常にRAMセグメントにアクセスしますが、ページ2でマッパーのRAMスロットを選択する必要があります。