第4章
最初のプログラム
この章では、サンプルのうち2つを作って実行します。1つのソース・ファイルからなるプログラムHELLOと、2章で取り上げた 2つのモジュールからなるプログラムTWOMODです。すべてのコマンドと、それに対してTATARAとTANRENが表示する内容を示します。
4.1 始める前に
3章のインストールが済んでいる必要があります。つまり、2つのプログラムがPATHに含まれ、環境変数TATARAが設定され、サンプルがA:\TATARA\EXAMPLESにある状態です。この章では、まずA:\TATARA\EXAMPLES\HELLOで、次にA:\TATARA\EXAMPLES\TWOMODで作業します。最初のディレクトリに移動します。
A:\>cd \tatara\examples\hello A:\TATARA\EXAMPLES\HELLO>
4.2 プログラム
HELLO.ASは、完全なプログラムとしてはもっとも小さなものです。1行を表示して、MSX-DOS2に戻ります。
; HELLO.AS - the smallest complete program. ; ; One source, one object, one .COM. It prints a line and gives the ; machine back to MSX-DOS. include msxdos.inc ; BDOS, _STROUT, _TERM0 and the ; "system" macro, found through ; TATARA - see BUILD.BAT cseg ; RELOCATABLE code. Nothing here ; knows its own address, and the ; linker chooses one - 0100h for a ; .COM, unless /P: says otherwise start: ld de,msg system _STROUT ld c,_TERM0 jp BDOS msg: db "Hello from Tatara.",13,10,"$" end start ; where it starts, for the linker
数行ずつ見ていきます。
- 最初の数行はセミコロンで始まっています。セミコロンはコメントの始まりを表し、TATARAはそこから行の終わりまでを無視します。コメントは、プログラムを読む人のためのものです。行の書き方は6章で説明します。
- include msxdos.incは、その位置でMSXDOS.INCを読み込み、その行がそこに書かれているのと同じように扱います。このファイルでは、BDOS、_STROUT、_TERM0という名前と、systemマクロが定義されています(13章と14章)。TATARAは、このファイルを環境変数 TATARAを使って見つけます。
- csegはコード・セグメントを始めます。これ以降はリロケータブルなコードで、どこに置くかはTANRENが決めます(10章)。
- start:とmsg:はラベルです。startは最初の命令のアドレス、msgは文字列のアドレスです。
- ld de,msgとsystem _STROUTは、msgにある文字列を、終わりを示す$の手前まで表示するよう、MSX-DOS2に頼みます。
- ld c,_TERM0とjp BDOSでプログラムが終わり、MSX-DOS2がプロンプトを再び表示します。
- dbはプログラムにバイトを置きます。まず文字列、次に次の行の先頭に移るための13と10、最後に$です(11章)。
- end startはソース・ファイルの終わりを表し、プログラムがstartから始まることをTANRENに伝えます。
4.3 アセンブルする
HELLO.ASをアセンブルして、オブジェクト・ファイルHELLO.TROを作ります。
A:\TATARA\EXAMPLES\HELLO>tatara hello.as hello.tro Tatara MSX Macro-Assembler v1.2.0 Copyright (C) 2026 Javier Lavandeira https://tatara.tools ended at HELLO.AS(22)
TATARAはバナーを表示し、ソース・ファイルを読んでから、要約を表示します。要約は、ソースがどこで終わったかを示します。ここでは、ENDのあるHELLO.ASの22行目です。これでHELLO.TROが書き出されました。2章で説明したオブジェクト・ファイル、つまり穴のあいたマシン語です。
警告. TATARAが設定されていないと、TATARAはMSXDOS.INCを見つけられず、次のように表示して止まります。
A:\TATARA\EXAMPLES\HELLO>tatara hello.as hello.tro Tatara MSX Macro-Assembler v1.2.0 Copyright (C) 2026 Javier Lavandeira https://tatara.tools ERROR: cannot open MSXDOS.INC included from HELLO.AS(6)2行目は、そのファイルがどこで取り込まれたか、つまりHELLO.ASの 6行目であることを示しています。3.4節のとおりに環境変数を設定し、もう一度アセンブルしてください。
4.4 リンクする
HELLO.TROをリンクして、プログラムHELLO.COMを作ります。
A:\TATARA\EXAMPLES\HELLO>tanren /o:hello.com hello.tro Tatara MSX Linker v1.2.0 Copyright (C) 2026 Javier Lavandeira https://tatara.tools 1 module, 7 records, ends at EOF. Wrote HELLO.COM, 0100-0121 (34 bytes), entry 0100.
/O:オプションは、プログラム・ファイルの名前を指定します。指定しなければ、TANRENは最初のオブジェクト・ファイルの名前をプログラムに付けるので、ここでもやはりHELLO.COMになります。このマニュアルでは、名前がコマンドから分かるように/O:を付けています。
要約の1行目は、TANRENが読んだものを示しています。1つのモジュールで、7つのレコードからなり、ファイルの終わりまで読んだということです(21章)。2行目は、書き出したものを示しています。HELLO.COMはアドレス0100hから0121hまでの34バイトで、0100hから始まります。これで、ディレクトリには3つのファイルがそろいました。
A:\TATARA\EXAMPLES\HELLO>dir hello.* Volume in drive A: is MAIN Directory of A:\TATARA\EXAMPLES\HELLO HELLO AS 603 26-09-28 17:32 HELLO TRO 93 26-09-29 1:27 HELLO COM 34 26-09-29 1:27 730 bytes in 3 files 12664K free
ボリュームの名前、日付、空き容量は、それぞれのMSXで異なります。
4.5 実行する
プログラムの名前を入力します。
A:\TATARA\EXAMPLES\HELLO>hello Hello from Tatara.
MSX-DOS2はHELLO.COMを、TANRENが配置したアドレス0100hに読み込み、そこから実行しました。2つのコマンドで、ソース・ファイルが実行できるプログラムになりました。
4.6 ビルド・ファイル
どのサンプルにも、ビルド・ファイル(build file)BUILD.BATがあります。これは、サンプルを作るためのコマンドを実行するバッチ・ファイルです。HELLOのビルド・ファイルは、この章の2つのコマンドを/Qオプション付きで実行します。/Qを付けると、バナーと要約が表示されません。エラーは/Qの有無にかかわらず表示されるので、何も表示されなければ成功したということです。内容を見るには type build.batと入力します。
警告. ビルド・ファイルは、始めに環境変数TATARAを設定し、終わりにそれを消します。ビルド・ファイルを実行すると、そのセッションでは TATARAが空になり、次にファイルを取り込むプログラムは cannot openと表示して止まります。3.4節のとおりに環境変数を設定し直すか、MSXをリセットしてAUTOEXEC.BATで設定されるようにしてください。
このマニュアルでは、ビルド・ファイルを使わずにコマンドを入力します。そのほうが、コマンドを覚えるにはよい方法です。
4.7 2つのモジュールからなるプログラム
TWOMODは2章のプログラムです。MAIN.ASは2行を表示するためにputstrを呼び出し、putstrはPUTSTR.ASで定義されています。このディレクトリに移動し、2つのソース・ファイルを1つずつアセンブルします。
A:\TATARA\EXAMPLES\HELLO>cd ..\twomod A:\TATARA\EXAMPLES\TWOMOD>tatara main.as main.tro Tatara MSX Macro-Assembler v1.2.0 Copyright (C) 2026 Javier Lavandeira https://tatara.tools ended at MAIN.AS(23) A:\TATARA\EXAMPLES\TWOMOD>tatara putstr.as putstr.tro Tatara MSX Macro-Assembler v1.2.0 Copyright (C) 2026 Javier Lavandeira https://tatara.tools ended at PUTSTR.AS(32)
2つのオブジェクト・ファイルは、HELLO.TROのときと同じように TANRENのコマンド・ラインに並べることもできます。このサンプルでは、代わりにリンク・ファイル(link file)を使います。リンク・ファイルとは、本来コマンド・ラインに入力する内容を書いておくテキスト・ファイルです。TWOMOD.LNKには、プログラムの名前と 2つのオブジェクト・ファイルが書かれています。
; TWOMOD.LNK - the link, in a file instead of on the command line. ; ; TANREN reads this when it is given @TWOMOD, and the words in it are ; the words it would have read from the command line. A ; starts a ; comment and the rest of the line is ignored. ; ; MSX-DOS gives a command line 127 characters and cuts a longer one ; without saying so. That is the whole reason this exists: the ; assembler is itself linked from a file of nineteen module names. /o:twomod.com main.tro putstr.tro
MSX-DOS2のコマンド・ラインには127文字までしか入らないので、モジュールの多いプログラムにはリンク・ファイルが必要です(22章)。TANRENは、@のあとに名前が書かれたリンク・ファイルを読みます。
A:\TATARA\EXAMPLES\TWOMOD>tanren @twomod Tatara MSX Linker v1.2.0 Copyright (C) 2026 Javier Lavandeira https://tatara.tools 2 modules, 14 records, ends at EOF. Wrote TWOMOD.COM, 0100-0154 (85 bytes), entry 0100.
これは表2.3の数字と同じです。MAINが0100hに、そのすぐあとにPUTSTRが置かれ、全体で85バイト、0154hで終わります。プログラムを実行します。
A:\TATARA\EXAMPLES\TWOMOD>twomod Two modules, one program. The linker joined them.
4.8 次に読む章
第II部では、アセンブラーについて、実行のしかた(5章)から順に詳しく説明します。第IV部では、ほかのサンプルを1つずつ取り上げて解説します。