Tatara

第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   

数行ずつ見ていきます。

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つずつ取り上げて解説します。