NEXTOR PR 03 10

From Z80 Machines Wiki
Jump to: navigation, search

3.10.デバイスパーティションに関する情報のGet(_GPART、7Ah)

パラメータ:C = 7AH(_GPART)
             A =ドライバースロット番号
             B =ドライバセグメント番号、ROM内のドライバのFFh
                 (現在のバージョンでは常にFFhである必要があります)
             D =装置索引
             E =論理装置索引
             H = 1次区画番号(1から4)
             L =拡張パーティション番号
                 (1次区画テーブル内の項目の場合は0) 
結果:A =エラーコード
             B =パーティションタイプコード
                 指定されたパーティションが存在しない場合は0
             HL:DE =区画の開始装置の絶対セクター番号


デバイスパーティションに関する情報を返します。この機能はMSX-DOS 1モードで動作します。

この機能はデバイスベースのドライバでのみ機能します。存在しないドライバ、ドライブベースのドライバ、またはMSX-DOSドライバがAとBに指定されている場合、.IDRVRエラーが返されます。指定されたデバイスまたは論理ユニット、あるいはその両方がドライバに存在しない場合、.IDEVLエラーが返されます。

記憶装置は通常パーティションに分割され、各パーティションはメディア内の連続したセクタブロックに存在する独立した論理ボリュームです。この機能により、通常はMAPDRV機能を使用してドライブ文字にマップするために、メディア内の特定のパーティションの開始セクタを見つけることができます。これにより、含まれているファイルシステムにNextorからアクセスできます。


パーティションタイプコードは、パーティションが保持しているファイルシステムに関する情報を返します。コードは次のいずれかです。

0:なし(指定した番号のパーティションは存在しません) 
1:FAT12 
4:FAT16、32MBより小さい(旧式) 
5:拡張(下記参照) 
6:FAT16 
14:FAT16(LBA) 

もっと多くのパーティションタイプコードが定義されていますが、それらはNextorで扱うことができないファイルシステムを参照しているので、このリストには入っていません。

1つのデバイスには、1から4までの番号が付けられた最大4つの基本パーティションを含めることができます。4つを超えるパーティションを収容するために、パーティション番号2は「Extended」という名前の特殊タイプです。拡張パーティションは、実際にはより多くのパーティションのコンテナです。 "Extended"タイプのパーティションに含めることができる追加パーティションの数に制限はありません。パーティション2が拡張されると、プライマリパーティション3と4は存在しません。

デバイスに存在するすべてのパーティションを列挙するには、拡張パーティションが存在する可能性を考慮して、次の手順に従ってください。

  1. パーティション1-0(1次番号1、拡張番号0)を検索します。
  2. パーティション2-0を検索します。存在し、タイプが "Extended"の場合は、パーティションコード0が返されるまでパーティション2-1、2-2、2-3などを検索します。
  3. パーティション2-0が存在しないか、タイプが「拡張」ではない場合は、パーティション3-0および3-4を検索します。

デバイスにパーティションがまったく存在しない可能性があることに注意してください。この場合、デバイスに有効なファイルシステムが含まれている可能性があります。このファイルシステムは、絶対デバイスセクタのゼロにマッピングされています。これは、フロッピーディスクや非常に小さな容量のデバイスの場合にも当てはまります。


パーティションがドライブレターにマップされるとき、パーティションによって実際に保持されているファイルシステムを決定するために、パーティションの先頭セクタが常に調べられます。 Nextorはファイルシステムの種類を決定するのにパーティションの種類のコードに頼ることは決してないでしょう。

Nextorはパーティションを検索するためにデバイスを読む必要があります。デバイスへのアクセス中にエラーが発生した場合(たとえば、準備ができていないなど)、エラーコードが返されます。標準システムエラー処理ルーチン(または_DEFERで定義されている場合はユーザーエラー処理ルーチン)は呼び出されません。

指定されたパーティションがデバイスに存在しない場合(例えば、4より大きい1次パーティション番号が指定されている場合、または非拡張1次パーティションに拡張パーティション番号が指定されている場合)、B = 0およびA =.IPARTが返されます。