MSX Datapack wiki化計画

16章 エラー

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※

 新しいMSX-DOS2ファンクション(40H以上のファンクションコール)は「エラーコード」をAレジスタに返します。処理が成功するとゼロになります。ゼロでない場合、エラーコードはエラーの種類を示します。

 MSX-DOS2はファンクションコールからリターンする直前に「OR A」命令を実行するため、エラーが起こったかどうかをテストするためには、外部プログラムの「CALL 5」命令の直後に「JR NZ」命令を使用します。このエラージャンプの飛び先では通常Bレジスタにエラーコードをロードして、「エラーコードを返して終了」ファンクション(P.320参照)を実行します。これはエラーコードをコマンドインタープリタに返し、そこで適当なメッセージが表示されます。

 外部プログラムはMSX-DOS2のファンクションコールで返されたすべてのエラーについて、「エラーコードの説明」ファンクション(P.323参照)を利用して自分自身で実際のメッセージを得ることもできます。詳細については17.3「ファンクションの説明」を参照して下さい。

 エラーコードは0FFHで始まり、値が下がってきます。40H未満の値は「ユーザエラー」で、システムでは使用されず、外部プログラムが独自のエラーを返すために使用することができます。コマンドインタープリタに返された20H未満のユーザエラーはメッセージを出力しません。

 「エラーコードの説明」ファンクションコールがメッセージを持たないエラーコードを説明するように要求された場合、返される文字列は「System error <n>」「システムエラー<n>」または「User error <n>」「ユーザエラー <n>」です。ここで<n>はエラー番号を示します。

 以下に現在定義されているすべてのエラー番号とそのメッセージおよび意味を示します。またニーモニックも示されますが、これは通常ソースファイル中のシンボルとして使用され、特定のエラーを参照するためにMSX-DOS2のシステム全体を通して使用しているものです。

 16.1 ディスクエラー

 このグループのエラーはディスクエラー処理ルーチンに渡されるものです。デフォルトでは、「中止、再試行」エラーとして報告されます。これらのエラーは「ディスクのフォーマット」以外のMSX-DOSファンクションコールでは、エラー処理ルーチンに渡されますので、BDOSからの戻り値としては返されません。

表2.20 ディスクエラー一覧

エラーコードニーモニック英語エラーメッセージ日本語エラーメッセージ
0FFH .NCOMP Incompatible disk このディスクは使用できません
そのドライブではディスクがアクセスできません(例えば片面ドライブで両面ディスクを読もうとしたとき)。
0FEH .WRERR Write error 書き込み異常です
ディスク書き込み中に起こるエラー。
0FDH .DISK Disk error ディスクが異常です
原因不明のディスクエラー。
0FCH .NRDY Not ready ディスクが入っていません
ディスクドライブが応答しません。通常ドライブ中にディスクがないことを表します。
0FBH .VERFYVerify error 正しく書き込まれませんでした
VERIFYが有効のとき、書き込みの後にセクタが正しく読めませんでした。
0FAH .DATA Data error ディスクのデータが異常です
CRCエラーチェックが不正なためディスクセクタが読めませんでした。通常ディスクの損傷を表します。CRCは、ディスクの読み取りエラーを検出するために、データと一緒にディスクセクタに書き込まれます。このCRCによりディスクからデータが正しく読み取れたかを調べるのが、CRCエラーチェックです。
0F9H .RNF Sector not found セクターが見つかりません
要求されたセクタがディスク上で見つかりませんでした。通常ディスクの損傷を表します。
0F8H .WPROT Write protected disk ディスクが書き込み保護されています
書き込み禁止状態のディスクに書き込もうとしました。
0F7H .UFORM Unformatted disk ディスクがフォーマットされていません
ディスクがフォーマットされていない、あるいは異なった記録方法を使用しています。
0F6H .NDOS Not a DOS disk MSX-DOSディスクではありません
ディスクが別のオペレーティングシステム用にフォーマットされており、MSX-DOSではアクセスできません。
0F5H .WDISK Wrong disk ディスクが違います
ディスクがアクセスしている最中に他のディスクに交換されました。正しいディスクに交換しなければなりません。
0F4H .WFILE Wrong disk for file このファイル用のディスクではありません
オープンされたファイルがディスク上にあるときに別のディスクに交換されました。正しいディスクに交換しなければなりません。
0F3H .SEEK Seek error シークエラーです
ディスクの要求されたトラックが見つかりませんでした。
0F2H .IFAT Bad file allocation table FAT異常です
ディスク上のファイルアロケーションテーブルが破壊されています。CHKDSKでディスク上のデータのいくつかを復活することができる場合があります。
0F1H .NOUPB
このエラーはディスク交換処理の一部としてMSX-DOS内部で常にトラップされユーザーに渡ることはないため、メッセージを持ちません。
0F0H .IFORM Cannot format this drive このドライブはフォーマットできません
フォーマットできないドライブをフォーマットしようとしました。通常RAMディスクをフォーマットしようとして起こります。

 16.2 MSX-DOSファンクションエラー

 以下のエラーは通常MSX-DOSのファンクションコールで返されるものです。特定のMSX-DOSのファンクションから返されるエラーの詳細については17.3「ファンクションの説明」を参照して下さい。

表2.21 MSX-DOSファンクションエラー一覧

エラーコードニーモニック英語エラーメッセージ日本語エラーメッセージ
0DFH .INTER Internal error DOSが異常です
起こってはならないエラー。
0DEH .NORAM Not enough memory メモリー不足です
MSX-DOSがその16Kのカーネルデータセグメントでメモリを使いつくしました。セクタバッファ数を減らすか、いくつかの環境変数を削除して下さい。RAMディスクを作成するための未使用セグメントがない場合にも起こります。
0DCH .IBDOS Invalid MSX-DOS call 無効なMSX-DOSファンクション番号です
MSX-DOSのコールが不正なファンクション番号で行われました。大部分の不正なファンクションコールはエラーを返しませんが、このエラーは「直前のエラーコードの獲得」ファンクションコール(P.249参照)が実行されると返される場合があります。
0DBH .IDRV Invalid drive 無効なドライブ名です
ドライブ番号のパラメータ、あるいはドライブ・パス・ファイル文字列中のドライブ文字が現在のシステムで存在しません。
0DAH .IFNM Invalid filename 不正なファイル名です
ファイル名文字列が不正です。これは、ドライブ・パス・ファイル文字列ではなく、純粋なファイル名文字列についてのみ生成されます。
0D9H .IPATH Invalid pathname 無効なパス名です
ASCIIZドライブ・パス・ファイル文字列が渡されるすべてのファンクションコールによって返される可能性があります。文字列の構文がなんらかの形で不正であることを示します。
0D8H .PLONG Pathname too long パス名が長過ぎます
ASCIIZドライブ・パス・ファイル文字列が渡されるすべてのファンクションコールによって返される可能性があります。指定された完全なパス(使用されている場合にはカレントディレクトリも含む)が63文字よりも長いことを示します。
0D7H .NOFIL File not found ファイルが見つかりません
ディスク上のファイルを検索するすべてのファンクションによって、ファイルが見つからなかった場合に返されます。このエラーはディレクトリが指定され、それが見つからなかったときにも返されます。それ以外では次の.NODIRエラーが返されます。
0D6H .NODIR Directory not found ディレクトリが見つかりません
ドライブ・パス・ファイル文字列中の途中のディレクトリが見つからなかった場合に返されます。
0D5H .DRFUL Root directory full ルートディレクトリがいっぱいです
新しいエントリがルートディレクトリ中で要求され、それが既にいっぱいである場合に、「作成」あるいは「移動」のファンクションによって返されます。ルートディレクトリは拡張できません。
0D4H .DKFUL Disk full ディレクトリがいっぱいです
書き込まれようとしているデータの量に対してディスク上に十分な領域がない場合に、書き込み処理によって返されます。ディスクが一杯の場合にサブディレクトリを作成あるいは拡張しようとした場合にも起こります。
0D3H .DUPF Duplicate filename ファイル名が重複しています
目的のファイル名が既に目的のディレクトリ中にある場合、「名前の変更」あるいは「移動」ファンクションで起こります。
0D2H .DIRE Invalid directory move ディレクトリが移動できません
サブディレクトリをそれ自体の下に移動しようとしました。これはディレクトリ構造中で孤立したループを作成することになるため許されません。
0D1H .FILRO Read only file ファイルが読み出し専用です
「読み出し専用」属性ビットがセットされているファイルに書き込みあるいは削除しようとしました。
0D0H .DIRNE Directory not empty ディレクトリが空ではありません
空でないサブディレクトリを削除しようとしました。
0CFH .IATTR Invalid attributes 無効な属性です
ファイルの属性を不正な方法で変更しようとしたか、あるいはサブディレクトリに対してのみ可能な処理をファイルに行おうとした場合に起こります。また、ボリューム名のFIB(File Information Block)の不正な使用によっても起こります。
0CEH .DOT Invalid . or .. operation .や..に対しては操作できません
サブディレクトリ中の「.」あるいは「..」エントリに対して、名前の変更や移動などと言った不正な操作をしようとしました。
0CDH .SYSX System file exists システムファイルが既にあります
既存のシステムファイルと同じ名前のファイルあるいはサブディレクトリを作成しようとしました。システムファイルは自動的には削除されません。
0CCH .DIRX Directory exists ディレクトリが既にあります
既存のサブディレクトリと同じ名前のファイルあるいはサブディレクトリを作成しようとしました。サブディレクトリは自動的には削除されません。
0CBH .FILEX File exists ファイルが既にあります
既存のファイルと同じ名前のサブディレクトリを作成しようとしました。ファイルはサブディレクトリを作成するときは自動的には削除されません。
0CAH .FOPEN File is allready in use ファイルが使用中です
そのファイルに対して既にオープンされているファイルハンドルがあるファイルの削除、名前の変更、移動、あるいはその属性や日付や時刻の変更を、そのファイルハンドルを使用せずに行おうとしました。
0C9H .OV64K Cannot transfer above 64K 64Kを超える転送はできません
ディスク転送領域が0FFFFHを超えてしまいます。
0C8H .FILE File allocation error ファイルの割当異常です
ファイルのクラスタチェインが破壊されました。CHKDSKを使用して可能な限りファイルを復活させる必要があります。
0C7H .EOF End of fileファイルの終わりです
ファイルポインタが既にエンドオブファイルにある、あるいはそれを超えている場合に、さらにファイルから読み込もうとしました。
0C6H .ACCV File access violation ファイルアクセス異常です
適切なアクセスビットをセットしてオープンされたファイルハンドルに対して読み出し・書き込みを行おうとしました。標準ファイルハンドルのいくつかは読み出し専用あるいは書き込み専用モードでオープンされています。
0C5H .IPROCK Invalid process id 無効なプロセスIDです
「親プロセスに戻る」ファンクション(P.318参照)に渡されたプロセスIDが不正です。
0C4H .NHAND No spare file handles ファイルハンドルが足りません
すべてのファイルハンドルが既に使用中である場合にファイルハンドルをオープンあるいは作成しようとしました。現バージョンでは64までファイルハンドルが利用できます。
0C3H .IHAND Invalid file handle 無効なファイルハンドルです
指定のファイルハンドルが、システムで許される最大のファイルハンドル番号よりも大きいです。
0C2H .NOPEN File handle not open ファイルハンドルがオープンされていません
指定のファイルハンドルは現在オープンされていません。
0C1H .IDEV Invalid device operation 無効なデバイスオペレーションです
デバイスのファイルハンドルやFIBを、検索や移動などの不正な操作に使用しようとしました。
0C0H .IENV Invalid environment string 無効な環境変数です
環境変数名の文字列に不正な文字があります。
0BFH .ELONG Environment string too long 環境変数が長過ぎます
環境変数名あるいはその値の文字列が最大の255文字の長さを超えた、あるいは長すぎてユーザーバッファが足りません。
0BEH .IDATE Invalid date 無効な日付です
「日付のセット」に渡された日付のパラメータが不正です。
0BDH .ITIME Invalid time 無効な時間です
「時刻のセット」に渡された時刻のパラメータが不正です。
0BCH .RAMDX RAM disk(drive H:) already RAM DISK(ドライブ H:)は既にあります
RAMディスクが既に存在しているのにRAMディスクを作成しようとした場合、「RAMディスク」ファンクション(P.326参照)から返されます。
0BBH .NRAMD RAM disk does not exist RAM DISKがありません
RAMディスクが存在していないときに、ファンクションでRAMディスクを削除しようとしました。存在しないRAMディスクをアクセスしようとするファンクションでは、.IDRVエラーとなります。
0BAH .HDEAD File handle has been deleted ファイルが消去されています
ファイルハンドルに関連したファイルが削除されたため、ファイルハンドルはもう使用できません。
0B9H .EOL
起こってはならない内部エラー。
0B8H .ISBFN Invalid sub-function number 無効なサブファンクション番号です
「デバイスI/Oの制御」ファンクション(P.302参照)に渡されたサブファンクション番号が不正です。
0B7H .IFCB Invalid File Control Block 無効なFCBです
FCBを使ったファイルアクセスの際、_FOPENなどをコールせずに、無効なFCBを使用して読み書きした際に起きるエラーです。

 16.3 プログラム終了エラー

 以下のエラーはシステムによって内部的に生成され、「中断」ルーチンに渡されるエラーです。これは通常ファンクションコールからは返されません。中断ルーチンには外部プログラムが「エラーコードを返して終了」ファンクションコール(P.320参照)に渡す任意のエラーが渡されることに注意して下さい。

表2.22 プログラム終了エラー一覧

エラーコードニーモニック英語エラーメッセージ日本語エラーメッセージ
09FH .STOP Cntl-STOP pressed Ctrl-STOPが押されました
CTRL+STOPキーは、すべての文字I/Oなどのほとんどのシステムコールでチェックされます。
09EH .CTRLC Cntl-C pressed Ctrl-Cが押されました
CTRL+Cは、ステータスチェックを実行する文字ファンクションの場合にのみチェックされます。
09DH .ABORT Disk operation aborted ディスク入出力が打ち切られました
このエラーはディスクエラーが、ユーザーによって、あるいはシステムによって自動的に、中断されたときに起こります。元のディスクエラーコードは2次エラーコードとしてBレジスタから中断ルーチンに渡されます。
09CH .OUTERR Error on standard output 標準出力でエラーが起きました
標準出力チャンネルが文字ファンクション(ファンクション01H〜0BH)を通してアクセスされている間に、エラーが起こった場合に返されます。元のエラーコードは2次エラーコードとしてBレジスタに入れられてアボートルーチンに渡されます。このエラーは通常、プログラムが標準ハンドルを変更している場合にのみ起こります。
09BH .INERR Error on standard input 標準入力でエラーが起きました
標準入力チャンネルが文字ファンクション(ファンクション01H〜0BH)を通してアクセスされている間に、エラーが起こった場合に返されます。元のエラーコードは2次エラーコードとしてBレジスタに入れられてアボートルーチンに渡されます。最も起こり得るエラーは「.EOF」エラーです。このエラーは通常、プログラムが標準ファイルハンドルを変更している場合にのみ起こります。

 16.4 コマンドエラー

 以下のエラーはMSX-DOSのファンクションコールからは返されませんが、コマンドインタープリタによって使用されます。これらは外部プログラムから利用できますので、ここにのせてあります。9章「エラーおよびメッセージ」ではコマンドインタープリタでこれらのエラーが持つ意味の詳細が記述されています。

表2.23 コマンドエラー一覧

エラーコードニーモニック英語エラーメッセージ日本語エラーメッセージ
08FH .BADCOM Wrong version of command コマンドのバージョンが違います
COMMAND2.COMがディスクからその非常駐部分をロードしたが、そのチェックサムが期待通りの値ではありません。
08EH .BADCM Unrecognized command コマンドが違います
指定のコマンドが内部コマンドでなく、その名前の.COMおよび.BATファイルも見つかりませんでした。
08DH .BUFUL Command too long コマンドが長すぎます
バッチファイル中のコマンドが127文字の長さを超えています。
08CH .OKCMD
COMMAND2.COMにコマンド行で渡したコマンドが終了した際に返される内部エラーコード(このエラーコードにはメッセージがありません)。
08BH .IPARM Invalid parameter 無効なパラメータです
コマンドへのパラメータが、なんらかの形で不正です。例えば範囲外の数値であるなど。
08AH .INP Too many parameters パラメータが多すぎます
コマンドが要求するすべてのパラメータを解析した後で、コマンド行上にまだ区切り文字でない文字が残っています。
089H .NOPAR Missing parameter パラメータが不足しています
パラメータがあるべきところでエンドオブラインが見つかりました。
088H .IOPT Invalid option 無効なオプションです
コマンド行で/の後に指定された文字はそのコマンドでは不正です。
087H .BADNO Invalid number 無効な数値です
数値が求められているところに、数字以外の文字が入っています。
086H .NOHELP File for HELP not found HELPファイルが見つかりません
ヘルプファイルが見つからなかった、あるいはパラメータが有効なHELPパラメータではありませんでした。
085H .BADVER Wrong version of MSX-DOS MSX-DOSのバージョンが違います
このエラーはコマンドインタープリタで使用されることはありません。コマンドインタープリタでこのエラーが発生した場合は自分自身で持っているメッセージを使用します。しかし、このエラーを返すことが有用な場合には、外部プログラムで使用することができます。
084H .NOCAT Cannot concatenate destination file 複写先ファイルは結合できません
CONCATコマンドの目的のファイルがソースの指定に一致しています。
083H .BADEST Cannot create destination file ファイルを作成できません
COPYコマンドで目的のファイルが作成されると、ソースファイルの一つ(あるいは既に使用中の別のファイル)を重ね書きしてしまいます。
082H .COPY File cannot be copied onto itself 自分自身にはコピーできません
COPYコマンドで目的のファイルが作成されるとソースファイルを重ね書きしてしまいます。
081H .OVDEST Cannot overwrite previous destination file ファイルの重ね書きができません
COPYコマンドでワイルドカードを使ったソースが、ワイルドカードを使っておらず、ディレクトリでなく、デバイスでもない目的ファイルとともに指定されました。