MSX-DOS2PIS 05 02

From Z80 Machines Wiki
Jump to: navigation, search

5.2.マッパー変数とルーチン

マッパーサポートルーチンはDOSシステム領域でいくつかの変数を使用します。これらのテーブルは、さまざまな目的でユーザープログラムによって参照および使用されることがありますが、変更してはいけません。表の内容は次のとおりです。

アドレス機能 +0マッパースロットのスロットアドレス。

+1 16k RAMセグメントの総数。 1〜255(8〜255) 一次用)

+2空き16k RAMセグメントの数。

+3システムに割り当てられている16k RAMセグメントの数 (最低でも6)

+4ユーザーに割り当てられている16k RAMセグメントの数。

+ 5 ... + 7未使用。常にゼロです。

+8 ...他のマッパースロットのエントリもしあるなら なし、

+ 8はゼロになります。

プログラムは、さまざまなサブルーチンを呼び出すことによってマッパーサポートコードを使用します。これらはMSX-DOSシステム領域にあるジャンプテーブルを通してアクセスされます。ジャンプテーブルの内容は次のとおりです。

アドレス。エントリー名。機能

+0H ALL_SEG 16Kセグメントを割り当てます。 +3H FRE_SEG 16kセグメントを解放します。 +6H RD_SEGアドレスAからバイトを読み取る:HLからA。 +9H WR_SEG EからアドレスA:HLにバイトを書き込みます。 +CH CAL_SEGセグメント間呼び出し。 IYhの住所:IX +FH CALLSセグメント間呼び出し。次の行の住所 呼び出し命令 +12H PUT_PHセグメントをページに入れる(HL)。 +15H GET_PHページの現在のセグメントを取得する(HL) +18H PUT_P0セグメントをページ0に入れる。 +1BH GET_P0ページ0の現在のセグメントを取得します。 +1EH PUT_P1セグメントを1ページに入れます。 +21H GET_P1ページ1の現在のセグメントを取得します。 +24H PUT_P2セグメントを2ページに入れる。 +27H GET_P2 2ページ目の現在のセグメントを取得します。 +2AH PUT_P3 page-3は決して許されないのでサポートされない かわった。呼び出されると「NOP」のように動作します。 +2DH GET_P3ページ3の現在のセグメントを取得します。

プログラムは、これらのアドレスを取得するためにマッパーサポート用の拡張BIOS呼び出しを使用できます。これらのアドレスは将来のバージョンで変更される可能性があるため、またはMSX-DOSマッパーサポートルーチン以外のマッパールーチンを使用するために呼び出されています。

拡張BIOSを使用するには、プログラムはページ3のFB20hで "HOKVLD"フラグをテストする必要があります。 bit-0(LSB)が0の場合、拡張BIOSもマッパーサポートもありません。それ以外の場合は、 "EXTBIO"エントリ(下記参照)が設定されており、さまざまなパラメータで呼び出すことができます。このテストはMSX-DOSベースのアプリケーション(ディスクからロードされるプログラムなど)では不要であり、プログラムは次のステップに進む可能性があります。

次に、プログラムは、レジスタDに拡張BIOSのデバイス番号、レジスタEに機能番号、その他のレジスタに必要なパラメータを設定し、3ページのFFCAhで "EXTBIO"を呼び出します。この場合、スタックポインタはページ3になければなりません。指定されたデバイス番号の拡張BIOSがある場合、レジスタAF、BC、およびHLの内容は機能に従って変更されます。そうでなければ、それらは保存されます。レジスタDEは常に保持されます。いずれの場合も、代替レジスタ(AF '、BC'、DE 'およびHL')およびインデックスレジスタ(IXおよびIY)の内容が破損していることに注意してください。 マッパーサポート拡張BIOSで使用可能な機能は次のとおりです。

  • マッパー変数テーブルを取得する パラメータ:A = 0

D = 4(マッパーサポートのデバイス番号) E = 1 結果:A =プライマリマッパーのスロットアドレス DE =予約済み HL =マッパー変数テーブルの開始アドレス *マッパーサポートルーチンアドレスを取得する

パラメータ:A = 0 D = 4 E = 2 結果:A =メモリマッパーセグメントの総数 B =プライマリマッパーのスロット番号 C =プライマリマッパーの空きセグメント数 DE =予約済み HL =ジャンプテーブルの開始アドレス

これらのマッパーサポート拡張BIOSでは、レジスターAはゼロである必要はありません。ただし、マッパーサポートルーチンが存在しない場合は、レジスタの内容は変更されず、それ以外の場合はゼロ以外の値がAに返されます。したがって、マッパーサポートルーチンの存在は、呼び出し時にAにゼロを設定し、Aの戻り値を調べることによって判断できます。

拡張BIOSによって返されるプライマリマッパーのスロットアドレスは、ページ3の現在のRAMスロットアドレスと同じです。通常の環境(DISK-BASICおよびMSX-DOS)では、同じRAMスロットも選択されます。 2ページ。 MSX-DOSでは、これはpage-0とpage-1にも当てはまります。