第1章
はじめに
1.1 TataraとTanrenとは
TataraとTanrenは、Z80のアセンブリ言語で書いたプログラムを、MSXで動くプログラムにするために必要な2つのツールです。
Tataraはアセンブラーです。ld a,5やcall 5のような命令を並べたテキスト・ファイル、つまり自分で書いたプログラムを読み込み、Z80プロセッサーが理解できるマシン語に変換します。
Tanrenはリンカーです。Tataraが作ったマシン語を1つまたは複数のファイルから受け取って結合し、それぞれの部分をメモリのどこに置くかを決めて、実行できる完成したプログラムを書き出します。
なぜツールが1つではなく2つなのか、それぞれが何をするのかについては、2章で詳しく説明します。
どちらのツールも、MSX-DOS2またはNextorのもとで、MSXそのものの上で動きます。プログラムを書き、アセンブルし、リンクし、実行するまでを同じマシンで行うことができ、ほかのコンピューターは必要ありません。MSXのエミュレーター上でも同じように動きます。
Tataraが読むアセンブリ言語は、MicrosoftのMACRO-80と同じものです。MACRO-80は、CP/Mや初期のMSXの時代に、多くのソフトウェアの開発に使われたアセンブラーです。そのため、MACRO-80向けに書かれたプログラムや書籍は、Tataraでも利用できます。両者の違いは付録Jにまとめてあります。
1.2 名前の由来
2つの名前は、日本刀を作る伝統的な方法から取ったものです。
たたらは、粘土で作った炉です。この炉に砂鉄と木炭を入れて燃やし、3日ほどかけて玉鋼(たまはがね)を作ります。玉鋼は強いものの形のない粗い鋼のかたまりで、まだ刀ではありません。
鍛錬は、そのあとに続く鍛造の作業です。刀匠は玉鋼を熱し、打ち、折り返すことを何度もくり返して、完成した刀に仕上げます。この言葉は、ふだんの日本語では訓練や修練という意味でも使われます。
2つのツールは、プログラムに対してこれと同じ2つの仕事をします(図1.1)。自分で書いたソース・ファイルが原料です。TATARAはそれをオブジェクト・ファイルにします。オブジェクト・ファイルは本物のマシン語ですが、まだ実行できるプログラムではありません。玉鋼がまだ刀ではないのと同じです。TANRENは1つ以上のオブジェクト・ファイルを受け取り、それを鍛えて完成したプログラムにします。2章では、このたとえをもとに説明を進めます。
1.3 できること
最初に読むときのために、主な機能を簡単に挙げておきます。それぞれの項目は、示した章で詳しく説明します。
- 長いシンボル名 ラベルのようなシンボルの名前には 255文字まで使えるので、その役目がわかる名前を付けることができます。また、/Cオプションを使うと名前の大文字と小文字が区別されるようになり、Countとcountは別の名前になります(7章)。
- マクロと条件付きアセンブル 一度書いたコードを何度でも使うことができ、アセンブルするときにプログラムの一部を含めたり除いたりすることもできます(15章~17章)。
- セグメント コードとデータを、セグメントと呼ばれるプログラムの別々の領域に分けて置くことができます。セグメントには名前を付けることもできます。また、プログラムのそれぞれ一部分でしか使わないデータ領域どうしは、同じメモリを共有できます(10章)。
- 多くのファイルとディレクトリにまたがるプログラム INCLUDE疑似命令で取り込むファイルは、3か所から探されます。さらに、環境変数TATARAとTANRENで、ほかに探す場所を指定できます(13章、23章)。
- 用意された名前 Tataraには、MSX-DOS2のファンクションとエラー・コード、BIOSのエントリー・アドレス、システム・ワーク・エリアなど、合わせて904個の名前を定義したインクルード・ファイルが付いています。そのため、プログラムでは_STROUTが09hであることを調べなくても、名前をそのまま書くことができます(14章)。
- 大きなプログラム どちらのツールも表をメモリ・マッパーに置き、Tanrenは作成中のプログラムもメモリ・マッパーに置きます。そのため、作れるプログラムの大きさは、MSX-DOSが空けておくメモリではなく、MSXに搭載されたメモリの量で決まります(26章、付録G)。
- リンカーへの指示をファイルに書ける MSX-DOSは、コマンドラインを127文字で打ち切ります。多くのファイルからなるプログラムでは、すぐにこの長さに達してしまいます。Tanrenは、ファイルの一覧をはじめ、コマンドラインで指定する内容を、テキスト・ファイルから読むことができます(22章)。
- 自分の書いた行を示すエラー エラーが起きると、メッセージには自分で書いたファイルと行が示されます。その行がマクロや取り込んだファイルから来たものであっても同じです(20章)。
- さまざまな出力形式 Tanrenは、MSX-DOS用のプログラム、MSX-BASICのBLOAD用のバイナリ、任意のアドレス用のコードのイメージ、ROMカートリッジのイメージを書き出すことができます(26章)。
- R800の命令 Tataraは、MSX turbo Rに搭載されている R800プロセッサーの乗算命令、MULUBとMULUWもアセンブルできます(9章)。
- 未公開命令 Tataraは、SLLや、IXHとIXLを使う命令など、MSXのプログラムが使うZ80の未公開命令もアセンブルできます(9.5節)。
1.4 必要なもの
TataraとTanrenを使うには、次のものが必要です。
- MSX-DOS2またはNextorが動いているMSX。MSX-DOS1では、どちらのプログラムもその旨のメッセージを表示して、すぐに終了します。
- メモリ・マッパー。MSX-DOS2はメモリ・マッパーがないと動かないので、MSX-DOS2が動いているMSXであれば、すでに備わっています。あるプログラムを作るのにツールが必要とするメモリの量は、付録Gで説明します。
- 2つのプログラム、TATARA.COMとTANREN.COM。これらは https://tatara.tools/downloadからダウンロードできます。インストールのしかたは3章で説明します。
- プログラムを書くための、プレーン・テキストのファイルを保存できるエディター。
MSX-DOS2またはNextorが動くMSX2以降の機種であれば、どれでも使えます。これらを動かせるMSXエミュレーターでもかまいません。
1.5 次に読むところ
2章では、アセンブラーとリンカーが何をするのか、なぜプログラムを2つの段階で作るのかを説明します。3章でツールをインストールし、4章でそれを使って最初のプログラムを作り、実行します。