MSX-DOS2PIS 05 07

From Z80 Machines Wiki
Jump to: navigation, search

5.7.ダイレクトページングルーチン

以下のルーチンは、プログラムがハードウェアにアクセスしなくても現在のページング状態を直接操作できるようにするために提供されています。これらのルーチンを使用すると、ハードウェアの詳細に対する変更との互換性が保証されます。ルーチンは非常に高速であるため、それらを使用してもプログラムのパフォーマンスが低下することはありません。

4つのページレジスタのいずれかに直接読み書きするためのルーチンが用意されています。セグメント番号の有効性の検査は行われないので、これはユーザーの責任です。レ​​ジスタに書かれた値もメモリに書かれ、レジスタ値が要求されたなら、メモリに格納された値が返され、レジスタ内の値が決して直接読まれることは決してないことに注意してください。これは、システムに2つ以上のマッパーレジスタがあるときにハードウェアの競合によるエラーを回避するために行われます。ユーザーは常にこれらのルーチンを通してメモリマッパーを操作するべきです。

"GET"ルーチンは、実際にレジスタ自体を読み取ることなく、レジスタの内部イメージから値を返します。これにより、たとえば "PUT_P1"によってセグメントが有効になっている場合は、後続の "GET_P1"呼び出しで実際の値が返されます。セグメント番号の最上位ビットは通常記録されないため、マッパー・レジスターを読み取ると異なる値が生成される可能性があります。

"PUT_P3"ルーチンが提供されていますが、実際はダミールーチンであり、ページ3レジスタを変更することはありません。これは、ページ3レジスタの内容が変更されるべきではないためです。 「GET_P3」ルーチンは、どのセグメントがページ3にあるかをユーザが判断することを可能にするように期待通りに動作する。

ページがレジスタHの上位2ビットによって特定されることを除いて機能的に同一である他の対のルーチン(「GET_PH」および「PUT_PH」)が提供される。レジスタHLが破損しています。 "PUT_PH"はページ3レジスタを変更することはありません。

PUT_Pn - パラメータ:ページを選択するためのn = 0、1、2、または3 A =セグメント番号 結果:なし 保存されているすべてのレジスタ GET_Pn - パラメータ:ページを選択するためのn = 0、1、2、または3 結果:A =セグメント番号 他のすべてのレジスタは保持されます PUT_PH - パラメータ:H =アドレスの上位バイト A =セグメント番号 結果:なし 保存されているすべてのレジスタ GET_PH - パラメータ:H =アドレスの上位バイト 結果:A =セグメント番号 他のすべてのレジスタは保持されます

これらの直接ページング・ルーチンを使用してページング状態を変更する前に、プログラムは最初に「GET_Pn」ルーチンを使用して、これらを復元する必要があるときの最初の4つのセグメントを判別する必要があります。これらの初期セグメントは、将来のバージョンのシステムでは変更される可能性があるため、どのプログラムもこれらの初期セグメントに固定値を想定するべきではありません。