NEXTOR DDG 04 05 01

From Z80 Machines Wiki
Jump to: navigation, search

4.5.1.DRV_DSKIO(4160h)

特定のドライバユニットに関連付けられている大容量記憶デバイスからセクタを読み書きします。

入力:A = 0から始まるドライバユニット
        読み取りセクタの場合はCy = 0、書き込みセクタの場合は1
        B =読み書きするセクタ数
        ビット7が設定されていない場合、C =読み書きする最初のセクター番号(ビット22から16)
             ビット7が設定されている場合はメディアIDバイト
        DE =読み書きする先頭セクタ番号(ビット15〜0)
        HL =転送元/宛先アドレス 出力:成功するとCy = 0、エラーになると1
        A =エラーコード(エラー時のみ):
             0書き込み禁止
             2準備ができていません
             4データ(CRC)エラー
             6シークエラー
             8レコードが見つかりません
             10書き込みエラー
             12その他のエラー
        B =実際に読み取られたセクタ数(エラーの場合のみ)

古いMSX-DOSドライバのこのルーチンの対応物とは異なり、このルーチンはページ1との間のデータ転送要求を決して受け取りません。カーネルコードがページ1へのデータ転送を必要とする場合、転送を複数に分割します。 1ページ転送し、3ページの一時バッファを使用します。ドライバコードはこれを心配する必要はなく、常にメモリとの直接転送を行うことができます。

NextorがドライブにFAT16ファイルシステムが含まれていることを検出した場合、レジスタCはセクタ番号のビット22〜16を保持するために使用されます。したがって、完全なセクタ番号はレジスタCDEによる23ビット値の保持になります。そうでなければ、レジスタCはデバイスメディアID(常にそのMSBをセットさせる)を含み、完全なセクタ番号はレジスタDEによって保持される16ビット値となります。