NEXTOR 03 06 02

From Z80 Machines Wiki
Jump to: navigation, search

3.6.2 DSKI$およびDSKO$コマンド

それぞれ1つのディスクセクタを読み書きできるDSKI $関数とDSKO $コマンドは、32ビットのセクタ番号を受け入れます。したがって、最初の65536セクタだけでなく、任意のドライブセクタにアクセスできます。

32767を超える番号のセクタにアクセスするには、セクタ番号を単精度または倍精度の定数、式、または変数として指定する必要があります。単精度値が指定されていて、その数が非常に大きいためにその数の1つ以上の最下位桁が切り捨てのために失われると、これらのコマンドは「オーバーフロー」エラーで失敗します。これは、誤ったセクターへの不注意によるアクセスを防ぐためにこのように設計されています。例えば:

10 DEFSNG S
20 S=12345678
30 PRINT S 'Prints "12345700"
40 PRINT DSKI$(0, S) 'Throws "Overflow"

10行目がDEFDBL Sに変更されている場合は、前の例は機能します(デバイスにセクターが存在する場合)。BASICコード内の任意のセクター番号にアクセスする場合は、常に倍精度変数を使用します。

指定されたセクタ番号が32ビットに収まらない場合、つまり4294967295より大きい場合も、 "オーバーフロー"エラーがスローされます。

MSX-DOSの同等のコマンドとの互換性を維持するために、負のセクタ番号が受け入れられます(実際のセクタ番号を取得するためには65536を加算します)。しかしこれはセクタ番号を整数(16ビット)式として評価できる場合に限ります。したがって、次のコマンドは同等であり、セクタがデバイスに存在する場合に機能します。

PRINT DSKI$(0, 65535)
PRINT DSKI$(0, &HFFFF)
PRINT DSKI$(0, -1)
DEFINT S: S=-1: PRINT DSKI$(0, S)

ただし、次のようにすると「ディスクI / Oエラー」が発生します。

PRINT DSKI$(0, CDBL(-1))
DEFDBL S: S=-1: PRINT DSKI$(0, S)

これはMSX-DOS 1モードには当てはまりません。このモードでは整数(16ビット)のセクター番号だけが受け入れられます。