NEXTOR PR 03 11

From Z80 Machines Wiki
Jump to: navigation, search

3.11.デバイスドライバでルーチンを呼び出す(_CDRVR、7Bh)

パラメータ:C = 7BH(_CDRVR)
             A =ドライバースロット番号
             B =ドライバセグメント番号、ROM内のドライバのFFh
                 (現在のバージョンでは常にFFhである必要があります)
             DE =通常アドレス              HL =入力レジスタを持つ8バイトバッファのアドレス
                  ルーチンの値 
結果:A =エラーコード
             BC、DE、HL =ルーチンからの結果
             IX =ルーチンによって戻されたAFの値 デバイスドライバでルーチンを直接呼び出すことを許可します。

この機能はMSX-DOS 1モードで動作します。

任意のドライバタイプ(MSX-DOS、デバイスベースおよびドライブベース)のルーチンをこの関数で呼び出すことができますが、デバイス(DEV_INFOおよびLUN_INFO)を列挙して直接アクセスするために、主にデバイスベースのドライバを対象としています。たとえば、デバイスのパーティショニングツールを開発するための、デバイスの絶対セクタ(DEV_RWルーチン)。デバイスドライバに利用可能なルーチンは、Nextor 2.0ドライバー開発ガイドドキュメントに列挙され、詳細に説明されています。

ルーチンのレジスタAF、BC、DE、およびHLの入力値は、HLが指す8バイトのバッファーに入れなければなりません。バッファ内のレジスタ値の順序は次のとおりです。一方、F、A、C、B、E、D、L、H。これらのレジスタの出力値は、レジスタ自体に直接返されます。 IXに返されるAFの出力値を除く。

いくつかのルーチンは、ユーザによって供給されたメモリバッファからデータを受け取る、またはそこにデータを書き込む。この方法でドライバルーチンとデータを交換することには2つの制限があります。一つ目、バッファはプライマリマッパースロットになければなりません。二つ目、バッファは部分的にも全体的にもページ1にはないかもしれません。これらの制限は、8バイトレジスタバッファには適用されません(ただし、F37Dhフックを介してNextorの関数呼び出しを呼び出すときは、page-1にパラメータを渡すことはできません)。レジスタバッファは、ドライバルーチンを効果的に実行する前にのみ使用されるため、ルーチンがデータを返すために使用するバッファと重複しても問題ありません。

存在しないドライバがAとBに指定されている場合、この関数呼び出しによって.IDRVRエラーが返されます。既存のドライバの場所を見つけるには、Nextor関数_GDRVRを使用してください。