MSX-DOS2PIS 05 04

From Z80 Machines Wiki
Jump to: navigation, search

5.4.セグメントの割り当てと解放

次の2つのルーチンは、セグメントを割り当てたり解放したりするために呼び出すことができます。 AFとBC以外のすべてのレジスタは保持されます。エラーは復帰時にセットされているキャリーフラグによって示されます。これらのルーチンが呼び出されると、スロット選択とRAMページングは​​どのような状態になっても、どちらも保持されます。これらのルーチンのいずれかが呼び出されるとき、スタックはpage-0またはpage-2にあってはいけません。 プログラムは、(基本64kを構成する4つのセグメントを除いて)どのセグメントも使用してはなりません。また、解放された後もセグメントを使用し続けてはいけません。

セグメントは、ユーザーまたはシステムセグメントとして割り当てられます。唯一の違いは、プログラムの終了時にユーザーセグメントが自動的に解放されるのに対し、システムセグメントは解放されないことです。一般に、プログラムは、プログラム自体より長持ちするためにセグメント内のデータを必要としない限り、ユーザーセグメントを割り当てるべきです。ユーザセグメントは常に、最も番号の小さい空きセグメントから割り当てられ、システムセグメントは最も番号の大きい空きセグメントから割り当てられます。

「セグメントの割り振り」からのエラーは通常、フリー・セグメントがないことを示しますが、無効なパラメーターがレジスターAおよびBに渡されたことも意味します。「フリー・セグメント」からのエラーは、指定されたセグメント番号が存在しないことを示しますすでに無料です。

ALL_SEG - パラメータ:A = 0 =>ユーザセグメントを割り当てる A = 1 =>システムセグメントを割り当てる B = 0 =>プライマリマッパーを割り当てる B!= 0 => FxxxSSPPスロットアドレスを割り当てる (主マッパー、0の場合) xxx = 000は指定されたスロットのみを割り当てます xxx = 001以外のスロットを割り当てます 指定された xxx = 010指定されたスロットを割り当てようとし、失敗した場合は別のスロットを試します (もしあれば) xxx = 011指定された以外のスロットを割り当てようとし、失敗した場合は指定されたスロットを試します 結果:キャリーセット=>フリーセグメントなし キャリークリア=>セグメント割当 A =新しいセグメント番号 B =のスロットアドレス マッパースロット(B = 0として呼び出された場合は0) FRE_SEG - パラメータ:A =解放するセグメント番号 B = 0プライマリマッパー プライマリ以外のB!= 0マッパー 戻り値:キャリーセット=>エラー クリアキャリー=>セグメント解放OK