付録D
エラーメッセージ
この付録では、TATARAとTANRENが表示するすべてのメッセージについて、その意味、対処のしかた、例を示している節を示します。D.1節ではメッセージの形を説明し、D.2節とD.3節ではそれぞれのツールのメッセージを、表示されるとおりにアルファベット順で示します。D.4節では、エラーではないTANRENの警告とお知らせを示します。
D.1 メッセージの形
TATARAのエラーは、ファイルと行を示し、そのあとのERROR:に続けてメッセージを表示します(20.1節)。
LERR.AS(5): ERROR: not a form this instruction has.
その行がインクルード・ファイル、マクロ、繰り返しブロックの中にあると、メッセージのあとの行、つまり経路が、TATARAがそこにどうたどり着いたかを示します。インクルード・ファイルではincluded from FILE(line)、マクロではin NAME, called from FILE(line)です(20.3節)。コマンド・ラインの誤りや、MSX-DOS2やメモリ・マッパーがない場合は、示す行がないので、バナーの前にERROR:とメッセージだけを表示します。
TANRENのエラーは行を示しません。誤りが1つのオブジェクト・ファイルにあるときは、BAD.TRO: ERROR: not a Tatara object file.のようにメッセージがファイルの名前で始まります。そうでなければ、ERROR:とメッセージだけです(27.1節)。
どちらのツールも、エラーを1つ表示して止まります(20.2節、27.2節)。誤りを直してもう一度実行すると、次の誤りが見つかります。/Qでエラーが隠れることはありません。メッセージの中のファイル名は大文字で表示されます。
下の一覧では、それぞれのメッセージをERROR:のあとに表示されるとおりに示し、斜体の語は変わる名前を表します。一覧は、表示されるメッセージのアルファベット順なので、a PUBLIC name was never defined.はAの位置にあります。
D.2 TATARAのメッセージ
-
a bit number must be 0 to 7.
BIT、SET、RESのビット番号が0から7の範囲にありません。9.6節。
-
a JR or DJNZ can only reach -128 to 127.
相対ジャンプの飛び先が遠すぎます。どのアドレスにも届くJPを使ってください。9.3節。
-
a macro name may be at most 64 characters.
MACROの前の名前が64文字を超えています。7.2節。
-
a name may hold only letters, digits, ? @ . _ and the dollar sign.
foo*barの*のように、ラベルに名前に使えない文字が含まれています。7.1節。
-
a PAGE length must be 10 to 255.
PAGEのあとの数がその範囲にありません。18.2節。
-
a PUBLIC name was never defined.
PUBLICで宣言した名前が、ソースのどこにも定義されていません。オブジェクト・ファイルを書き出すときに見つかるので、オブジェクト・ファイルを作らなければソースは受け付けられます。12.5節。
-
a segment or group name may be at most 16 characters.
CSEG、DSEG、GROUPのあとのセグメントやグループの名前が16文字を超えています。7.2節。
-
an external symbol may not be used here.
EXTRNで宣言した名前が、TANRENが仕上げられない場所で使われています。EQUの中、1つの式で2回、または2-farのように数を足すか引く以外の使い方です。8.6節。
-
an index displacement must be -128 to 127.
(IX+d)や(IY+d)のディスプレースメントdがその範囲にありません。9.2節。
-
bad ASEG, CSEG or DSEG line.
セグメントの疑似命令に、名前のあとのTRANSIENT以外の語のような、受け付けないオペランドがあります。10.7節。
-
bad DB, DW or DC operand.
db 1„2のように項目が抜けているか、DWの文字列が3文字以上あるか、DCに文字列がないか空です。11.4節。
-
bad expression.
式が読めません。基数にない数字、名前に使えない文字、オペランドを書けない場所のオペランド、または値が必要な場所に何もない場合です。8.2節。
-
bad macro parameter list.
MACROのパラメーター、またはIRPやIRPCのパラメーターとリストが、コンマで区切った名前になっていません。16.9節。
-
bad PUBLIC or EXTRN list.
PUBLICやEXTRNに名前がないか、名前でないものがあります。12.7節。
-
cannot create name
オブジェクト・ファイルやリスティングを作れません。たとえば、ディレクトリがない、ディスクがいっぱい、書き込み禁止の場合です。5.6節。
-
cannot open name
ソース、またはINCLUDEで指定したファイルが見つかりません。インクルード・ファイルの場合は、メッセージのあとの行がそれを求めた行を示します。TATARAは13.2節の3つの場所を探しています。13.8節。
-
cannot write to the output file.
ディスクがいっぱいか書き込み禁止のため、オブジェクト・ファイルやリスティングを書き込めませんでした。第2パスでのほかのエラーと同じように、TATARAはオブジェクト・ファイルを削除します。ディスクに空きを作るか別のディスクを使って、もう一度アセンブルしてください。20.2節。
-
conditional not closed by ENDIF.
IFにENDIFがありません。メッセージはIFの行を示します。15.7節。
-
conditionals nested too deeply.
同時に開いている条件付きアセンブルが16を超えています。15.7節。
-
ELSE or ENDIF without a matching IF.
IFが開いていないのにELSEやENDIFがあるか、1つのIFに2つ目のELSEがあります。15.7節。
-
ENDM without a macro definition.
マクロも繰り返しブロックも開いていないのにENDMがあります。16.9節。
-
EQU, DEFL and MACRO take a name, not a label.
EQU、DEFL、MACROの前の名前にコロンが付いています。コロンを取ってください。12.3節。
-
EXITM outside a macro or repeat block.
EXITMがマクロや繰り返しブロックの中にありません。16.9節。
-
GROUP needs a name, no label, and a transient DSEG.
GROUPに名前がないか、ラベルが付いているか、トランジェント・データ・セグメントの中にありません。10.7節。
-
IM takes 0, 1 or 2.
IMのオペランドが0、1、2のどれでもありません。9.6節。
-
INCLUDE without a filename.
INCLUDEのあとに何もありません。13.8節。
-
internal - an instruction emitted nothing.
-
internal - this line emitted more bytes than fit.
上と同じく内部エラーです。20.5節。
-
IXH, IXL, IYH and IYL are registers, not names.
ラベル、PUBLIC、EXTRNが、インデックス・ハーフの4つの名前のどれかを使っています。これらはバージョン1.2.0からレジスターです。M80はこれらを名前として受け付けます。9.5節。
-
LOCAL must come before the macro body.
LOCALの行が、本体のほかの行のあとにあります。16.5節。
-
macro definition not closed by ENDM.
マクロや繰り返しブロックにENDMがありません。メッセージはそれを始めた行を示します。16.9節。
-
macro line too long.
マクロや繰り返しブロックの行が、パラメーターを引数に置き換えると255文字を超えます。経路がマクロを示します。16.2節。
-
MACRO without a name.
MACROの前に名前がありません。16.9節。
-
not a directive, a macro or an instruction.
オペレーションの語が、そのどれでもありません。つづりの誤り、TATARAにないM80の疑似命令(付録J)、まだ定義されていないマクロ、または1桁目から始まらずコロンもないラベルかもしれません。6.3節。
-
not a form this instruction has.
-
only *EJECT and its dollar spelling are control lines.
1桁目の語が*か$で始まっているので、M80と同じように制御行になりますが、それが*EJECTや$EJECTではありません。M80の*TITLEと$TITLEは、TATARAではSUBTTLと書きます。付録J。
-
out of mapper memory.
TATARAの表のための空きがメモリ・マッパーにありません。内部エラーではなく、ソースがMSXのメモリーより多くを必要としています。20.5節。
-
phase error - this label had a different value on pass 1.
ラベルが第2パスで別のアドレスになりました。たいていは、条件付きアセンブルの答えがパスごとに違ったためです。15.2節。
-
relocation error - a segment-relative value is not allowed here.
TANRENが仕上げるアドレスや外部の名前が、使えない場所で使われています。1バイトの中、かけ算、REPTの回数、ほかのセグメントのアドレスを使ったORG、ほかのセグメントのラベルとの引き算です。8.6節。
-
RST takes 0, 8, 10h and so on to 38h.
RSTのオペランドが、8つのリスタート・アドレスのどれでもありません。9.6節。
-
source line too long.
ソース・ファイルの行が255文字を超えています。6.6節。
-
sources nested too deeply.
インクルード・ファイル、マクロの展開、繰り返しブロックの入れ子が16段を超えています。自分自身を終わりなく使うマクロが原因のことがよくあります。16.7節。
-
Tatara needs a memory mapper.
MSXにメモリ・マッパーがありません。バナーの前に表示されます。5.6節。
-
Tatara needs MSX-DOS2 or Nextor.
MSXがMSX-DOS1で動いています。バナーの前に表示されます。5.6節。
-
the output file is the input file.
オブジェクト・ファイルがソースと同じ名前です。5.2節。
-
the TATARA variable is too long.
TATARAの値が127文字を超えています。MSX-DOSはコマンドに127文字しか与えないので、プロンプトやバッチ・ファイルのsetではこれほど長い値は設定できません。設定できるのはプログラムだけです。13.3節。
-
this label was defined on pass 1 and not on pass 2 - a conditional skipped it.
条件付きアセンブルが、第1パスではラベルをアセンブルし、第2パスでは飛ばしました。たとえばIF1の中のラベルや、2回読まれたインクルード・ファイルです。15.2節。
-
this name already has a value.
名前が2回定義されています。ラベルやEQUの名前をもう一度定義した、DEFLの名前がラベルやEQUの名前でもある、EXTRNで宣言した名前を定義した、のどれかです。マクロの中のラベルにはLOCALを使ってください。12.2節。
-
this segment was declared differently before.
あるセグメントが、ある場所ではトランジェントとして、別の場所ではそうでなく選ばれています。10.7節。
-
this transient DSEG needs a GROUP first.
トランジェント・データ・セグメントで、最初のGROUPより前に場所を確保している行があります。10.7節。
-
too many different source files.
TATARAが名前を覚えておけるのは、ソースを含めて32回のファイルのオープンまでで、33回目が求められました。同じファイルを2回取り込むと2回と数えます。付録E。
-
too many filenames.
コマンド・ラインにファイル名が4つ以上あります。5.6節。
-
too many macro parameters.
マクロのパラメーターが16を超えています。16.9節。
-
too many segments, groups or externals.
-
too many source files open at once.
同時に開いているファイルが4つを超えています。インクルード・ファイルがさらにほかのファイルを取り込んでいるか、ファイルが自分自身を取り込んでいます。13.5節。
-
undefined symbol in an expression.
式の中の名前がどこにも定義されていないか、IFやREPTではその行でまだ定義されていません。文字で始まる16進数には前に0が必要です。15.2節。
-
unknown option.
スラッシュのあとが、TATARAのオプションにない文字か、何もありません。バナーの前に表示されます。5.6節。
D.3 TANRENのメッセージ
-
/D: would put the data on top of the code.
/D:で指定したアドレスがコードの中にあります。24.3節。
-
a file list may not name another one.
リンク・ファイルの中の語が@で始まっています。22.4節。
-
cannot create NAME
出力ファイルを作れません。たとえば、そのディレクトリがない場合です。26.9節。
-
cannot open NAME.TRO
その名前のオブジェクト・ファイルが、TANRENの探す場所に見つかりません。23.1節。
-
cannot open the file list NAME.LNK
その名前のリンク・ファイルがないか、@のあとに名前がありません。22.4節。
-
cannot write the output file - the disk may be full.
出力ファイルは作られましたが、書き込みに失敗しました。TANRENはすぐに止まり、書いた部分はそのまま残ります。もう一度リンクする前に削除してください。27.2節。
-
not a Tatara object file.
メッセージはオブジェクト・ファイルの名前で始まります。ファイルがオブジェクト・ファイルの形で始まっていません。27.1節。
-
one module was assembled /C and another was not.
モジュールはすべて/C付きか、すべて/Cなしでアセンブルしなければなりません。25.5節。
-
only one file list may be given.
コマンド・ラインに2つ以上のリンク・ファイルがあります。22.4節。
-
out of mapper memory.
プログラムのイメージやTANRENの表のための空きがメモリ・マッパーにありません。26.7節。
-
segment NAME is declared differently.
メッセージはオブジェクト・ファイルの名前で始まります。そのセグメントの種類が、このファイルと前のファイルで違います。27.4節。
-
Tanren needs a memory mapper.
MSXにメモリ・マッパーがありません。バナーの前に表示されます。21.6節。
-
Tanren needs MSX-DOS2 or Nextor.
MSXがMSX-DOS1で動いています。バナーの前に表示されます。21.6節。
-
that public symbol is already defined.
2つのモジュールが同じ公開の名前を定義しています。メッセージの前の行、NAME is defined again in module MODがその名前を示します。25.4節。
-
the linked image would run past FFFFh.
プログラムが、始まるアドレスからFFFFhまでに収まりません。24.6節。
-
the object file ends inside a record.
メッセージはオブジェクト・ファイルの名前で始まります。ファイルが内容の途中で終わっています。モジュールをアセンブルし直してください。27.3節。
-
the output file NAME is also an input file.
出力ファイルがオブジェクト・ファイルの1つを上書きしてしまいます。21.2節。
-
the symbols above were never defined.
Never defined:の下に並んだ名前は、どこかのモジュールが外部と宣言していますが、どのモジュールも定義していません。25.3節。
-
the TANREN variable is too long.
TANRENが127文字を超えています。23.5節。
-
this object file was made by another version.
メッセージはオブジェクト・ファイルの名前で始まります。ファイルの形式が、このTANRENの読むものではありません。同じバージョンのTATARAでモジュールをアセンブルし直してください。27.3節。
-
too many external symbols in one module.
1つのモジュールが512を超える外部の名前を宣言しています。TATARA自身は254で止まるので、TATARAが作ったオブジェクト・ファイルではこうなりません。付録E。
-
too many segments or groups in one module.
メッセージはオブジェクト・ファイルの名前で始まります。モジュールのセグメントかグループが、2つのデフォルトのセグメントを含めて16を超えています。27.4節。
-
too many words on the command line or in the file list.
語が全部で4096文字を超えるか、1つの語が128文字を超えています。22.4節。
-
unknown option.
TANRENにないオプションか、コロンのない/D、/O、/Pです。バナーの前に表示されます。21.3節。
D.4 TANRENの警告とお知らせ
これらはエラーではありません。TANRENは続けて、リンクは成功します。
-
FILE: bytes follow the END record.
エラーではありません。オブジェクト・ファイルの最後のレコードのあとにバイトがあります。このとき要約行はends at EOF.ではなくAND BYTES AFTER THEM.で終わります。/Qを付けるとどちらも表示されません。TATARAはこのようなファイルを作らないので、モジュールをアセンブルし直してください。27.3節。
-
Nothing to write: no module has any content.
エラーではありません。内容のあるバイトを持つモジュールがないので、ファイルは作られません。26.8節。
-
WARNING: NAME is entered at XXXX, not at YYYY.
ファイルは/Bなしで書き出されたので、最初のアドレスXXXXから実行されますが、ENDの行のアドレスはYYYYです。.COMプログラムでは、ENDで示すコードを先頭に置いてください。/Qを付けても表示されます。26.5節。
-
WARNING: the command line is 127 characters, which is all MSX-DOS gives - anything past it was dropped in silence.
3行目にUse @<file> if a module is missing.が続きます。コマンド・ラインがちょうど127文字なので、一部が切り捨てられたかもしれません。リンクをリンク・ファイルに書いてください。21.5節。