MSX-DOS2 FCS 03 83

From Z80 Machines Wiki
Jump to: navigation, search

3.83ディスクのフォーマット(67H)

パラメータ:C = 67H(_FORMAT)

B =ドライブ番号(0 =>現在、1 => A :)

A = 00H =>選択文字列を返す

01H ... 09H =>この選択をフォーマットする

0AH ... FDH =>違法

FEH、FFH =>新しいブートセクタ

HL =バッファへのポインタ(A = 1 ... 9の場合)

DE =バッファーのサイズ(A = 1 ... 9の場合)

結果:A =エラー

B =選択文字列のスロット(A = 0がオンの場合のみ)

エントリ)

HL =選択文字列のアドレス(A = 0の場合のみ)

入場時) この機能はディスクをフォーマットするために使われ、実際には "FORMAT"コマンドのためだけに提供されています。レジスタAに渡されるコードによって選択される3つの異なるオプションがあります。

A = 0の場合、レジスタBとHLは、利用可能なフォーマットの選択を指定するASCIIZ文字列のスロット番号とアドレスをそれぞれ返します。このディスクをフォーマットできない場合( "RAMディスク"など)、 "。IFORM"エラーが返されます。通常、文字列は "RDSLT"ルーチンを使用して読み取られ、画面に表示された後に "?"プロンプトが表示されます。その後、ユーザーは選択肢 "1" ... "9"を指定し、この選択肢は適切な警告プロンプトの後で "format"機能に渡され、実際にディスクをフォーマットします。 A = 0の場合、場合によってはHLにゼロが返されます。これは、フォーマットの種類が1つだけであり、プロンプトが不要であることを意味します。これは特定のディスクドライバに依存するため、特定の選択がどのディスクフォーマットを参照しているかを知る方法はありません。

A = 01h ... 09hの場合、これはフォーマットの選択として解釈され、ディスクは指定されたドライブでそれ以上プロンプトを表示せずにフォーマットされます。レジスタHLとDEは、ディスクドライバが使用するバッファ領域を指定する必要があります。このバッファの大きさを知る方法はないので、できるだけ大きくするのが最善です。バッファがページ境界をまたぐ場合、この関数はディスクドライバに渡すために1ページにあるそれの最も大きい部分を選択します。多くのディスクドライバはこのバッファをまったく使用しません。

A = FFhの場合、ディスクは実際にはフォーマットされませんが、ディスクを真のMSX-DOS 2ディスクにするために新しいブートセクタが与えられます。これは、古いMSX-DOS 1.0ディスクを更新してボリュームIDを持たせ、MSX-DOS 2で許可されているフルディスクチェックと削除解除を可能にするように設計されています。 A = FEhはA = FFhと同じですが、ディスクパラメータだけが正しく更新され、ボリュームIDによってブートプログラムが上書きされない点が異なります。また、ディスクに誤ったブートセクタを配置するMSX-DOS 1.0の実装もあります。これらのディスクは、この機能によって修正されるまでMSX-DOS 2では使用できません。

"new boot sector"機能は主に "FIXDISK"ユーティリティプログラムを対象としていますが、他のプログラムが便利だと思う場合には他のプログラムで使用されるかもしれません。それが使用されるならば、「フォーマット選択を取得する」関数呼び出し(A = 0)が最初にされるべきであり、これがエラー(典型的には「.IFORM」)を返すならこれは好きではないドライブであるので操作は中止されるべきですフォーマットするとディスクがこの機能によって損傷する可能性があります。