Tatara

付録J
M80とのソースの互換性

この付録は、M80向けに書いたソースをTATARAでアセンブルしたい読者のためのものです。ここでは、TATARAをMSX-M80、つまりアスキーのMSX-DOS2 TOOLSに入っているM80と比べます。そのリスティングにはMSX.M-80 2.00と表示されます。

M80向けに書かれたZ80のソースのほとんどは、そのままTATARAでアセンブルできます。変更が必要な疑似命令や書き方はわずかで、以下に、代わりに何を書けばよいかとともに示します。オブジェクト・ファイルには互換性がありません。TATARAが書き出すのは独自のオブジェクト・ファイル(付録F)で、M80の.RELファイルではありません。

J.1 そのまま使えるもの

次のものは、TATARAでもM80と同じように使えます。

M80の疑似命令の別名も受け付けます。IFの別名のCONDとIFT、IFEの別名のIFF、DBの別名のDEFBとDEFM、DSの別名のDEFS、DWの別名のDEFW、PUBLICの別名のENTRY、EXTRNの別名のEXT、そして 1桁目に書いたPAGEの別名の*EJECTと$EJECTです(A.4節)。

J.2 TATARAが受け付けないM80の疑似命令

表J.1の疑似命令では、TATARAはnot a directive, a macro or an instruction.で止まります。2つの制御行では、only *EJECT and its dollar spelling are control lines.で止まります。

表 J.1: TATARAが受け付けないM80の疑似命令と、代わりに書くもの

M80

TATARAでは

SET

同じ働きをするDEFL(12.4節)。

GLOBAL

PUBLIC。

EXTERNAL

EXTRN。

ENDC

ENDIF。

MACLIB、$INCLUDE、*INCLUDE

INCLUDE。

*TITLE、$TITLE

SUBTTL。テキストはかっこと 引用符を付けずに書きます。

.Z80

削除します。TATARAはいつもZ80の命令をアセンブルします。

.8080

TATARAには8080モードがありません。ソースをZ80の ニーモニックで書き直す必要があります。

.RADIX

それぞれの数に接尾辞を付けて書きます。.radix 16のあとの0FFではなく、0FFhです。

COMMON

変数を1つのモジュールで定義し、PUBLICとEXTRNで共有します(12.5節)。同じメモリを 交代で使うブロックには、トランジェント・セグメントを使います (29章)。

NAME

削除します。モジュールの名前はソース・ファイルの名前です (F.1節)。

.COMMENT

コメントの各行を;で始めるか、ブロックをif 0とENDIFの間に置きます。

.PRINTX

相当するものはありません。削除します。

.REQUEST

ファイルをTANRENのコマンド・ラインかリンク・ファイルで 指定します(21章)。

.PHASE、.DEPHASE

相当するものはありません。

.CREF、.XCREF

削除します。TATARAはクロス・リファレンスの ファイルを作りません。

J.3 そのほかの書き方

表J.2に、ソースのそのほかの部分のうち、違いのあるものや、M80を知っている読者が気にしそうなものを比べます。

表 J.2: M80のソースのそのほかの書き方と、TATARAでの扱い

M80の書き方

TATARAでは

foo::

同じ。PUBLICでもあるラベルです。

far##

受け付けません(undefined symbol in an expression.)。 名前をEXTRNで宣言し、##を付けずに書きます。

X’41’

受け付けません(undefined symbol in an expression.)。41hと書きます。

NUL

受け付けません。引数はIFBやIFNBで 調べます(16.6節)。

TYPE

受け付けず、相当するものもありません。名前が定義されて いるかどうかはIFDEFでわかります。

マクロの引数の%lb

同じ。lbの値が10進数で渡されます。

a!;bと<a;b>

同じ。どちらもセミコロンを含むa;bを 渡します。

マクロの中の;;

同じ。そのコメントは展開に残りません。

1行に式だけ

受け付けません。M80は41hだけの行をdb 41hと して扱いますが、TATARAではDBを書きます。

8080のニーモニック

受け付けません。mvi a,1はld a,1です。

1桁目の*か$で始まる語

M80と同じく制御行です。受け付ける のは*EJECTと$EJECTだけで、それ以外ではTATARAは止まります。 そのため、$loop:はラベルにできません。

ほかの文字を含むラベル

拒否されます(a name may hold only letters, digits, ? @ . _ and the dollar sign.)。

名前の長さ

M80は名前の最初の6文字しか使いませんが、TATARAは255文字まで すべてを使います(7.2節)。buffer1とbuffer2のように、M80が1つの名前とみなした2つの名前は、TATARAでは 別の名前です。

大文字と小文字

デフォルトでは同じで、名前では区別されません。/Cで区別されるようになります(7.3節)。

行の長さ

M80は132文字、TATARAは255文字まで読みます。

IXH、IXL、IYH、IYLという名前のラベル

M80では使えますが、TATARAではこの4つはレジスターなので拒否されます(IXH, IXL, IYH and IYL are registers, not names.)。

J.4 TATARAが加えるもの

TATARAは、次の点でMSX-M80より多くのことができます。

J.5 そのほかの違い

コマンド・ライン

MSX-M80はm80 =hello/lのように、出力ファイルを=の前に書くコマンドを受け付けます。TATARAではソースを先に書きます。tatara /l hello.asです(5章)。

オブジェクト・ファイル

TATARAは、TANRENがリンクする.TROファイルを書き出します(付録F)。.RELファイルは書き出せず、TANRENも読めないので、プログラムのすべてのモジュールをTATARAでアセンブルします。

リスティング

レイアウトはM80のものに近く、違いは18章で説明しています。

メッセージ

M80はUやVのような文字で行に印を付け、ソースの最後まで続けます。TATARAは文でメッセージを表示し、最初のエラーで止まります(20.2節、付録D)。

J.6 ソースの変換

MSX-M80向けに書かれたソースをTATARAでアセンブルするには、次のようにします。

  1. .Z80、NAME、.PRINTX、.CREF、.XCREFを削除します。
  2. SETをDEFLに、GLOBALをPUBLICに、EXTERNALをEXTRNに、ENDCをENDIFに、MACLIB、$INCLUDE、*INCLUDEをINCLUDEに、$TITLEや*TITLEをSUBTTLに変えます。
  3. name##をEXTRNの宣言に、X’nn’をnnHに、.RADIXのあとに書いた数を接尾辞の付いた数に置き換えます。
  4. .COMMENTのブロック、COMMONのブロック、1行に式だけの行を、表J.1と表J.2のように書き直します。
  5. インクルード・ファイルがソースと同じディレクトリにもカレント・ディレクトリにもなければ、TATARAにそのディレクトリを設定します。TATARAはINCLUDEを読みません。
  6. IXH、IXL、IYH、IYLという名前のラベルを付け直します。
  7. 7文字目以降だけが違う名前を探します。M80はそれらを1つの名前とみなしましたが、TATARAはそうしません。
  8. アセンブルします。TATARAは受け付けられない最初の行で止まり、メッセージがそのファイルと行を示すので、残りも1つずつ見つけられます。
  9. プログラムのすべてのモジュールをTATARAでアセンブルし、TANRENでリンクします。