MSX-DOS2 TOOLS のマニュアルはきっちり読めば必要なことはほとんどひととおり書いてある、優秀なマニュアルの部類にはいると思います。ええ、某A1GTのマニュアルとかそこらのフリーウェアやWebページに比べても。
しかし、M80、L80の解説にあたる第3部は約140ページある代物で、そこからCREF80、LIB80の部分を引いても結構な分量になります。なので、理解の助けになるようなことを書いてみる、そういう試み。
鈴見咲は冷たい男です。マニュアル読んでもわからないっていう人にマニュアル読めっていいます。ですが、きちんと書いてある物にはきちんと読んで対応してほしい。そんな願いをこめて。
さっき優秀なマニュアルです、って書いたけれども、かの本にZ80の命令そのものの解説とかMSXの各種機能の解説はないので念のため。そーいうのは別口で調達してください。
「コード相対モードは実行時にメモリ領域の書き換えの可能性がないプログラムについて指定します。したがって ROM / PROM 上に置くこともできます」(115頁)
結論から言うと、ROMカートリッジを作る人以外は特に意識する必要なし。
ついでに言うなら実行アドレスはL80の方で指定するのでORG命令も通常使いません。もちろん ASEG の場合はORG命令が必要ですが、 ASEG をどうしても使う必要がある、というパターンは非常に限られています。BASIC の BLOAD で扱うファイルを作るときでさえ使いません。「CSEGはMSX・M-80のデフォルトのモード」
(138頁)ですので、通常M80ではORG命令は使うはずがないということになります。M80がうまく使えないという人の中でORG命令を書いてる人は直ちにそれを削除すること。命令。
それはさておき。
CSEG , DSEG といった命令を指定しようとしまいとその後に書くプログラムやデータに特定の制限がつけられるわけではありません。また CSEG , DSEG を指定しても、L80で /P や /D を指定しなければ CSEG と DSEG は全く区別無しで扱われます。
で、冒頭の引用なんですが、ROM上に置く場合に限って「メモリ書き換えの可能性がある部分」と「ない部分」を意識しなければならないのであって、ディスクから読み込んで実行するようなプログラムはどっちがどうでもかまいません。
なお、 COMMON に関してはちょっと事情がちがうので注意。使ったことないけど。考えてみたら COMMON を使わない場合は ROM 製作の場合でもコード相対とデータ相対をひっくり返して使っても問題ないわけですわな。
各々のソースファイルの中で、他のファイルの中で定義されているラベルを EXTRN 、他のファイルから参照されるラベルを PUBLIC で指定します。ソースファイルをそれぞれM80でRELファイルにしたら、あとはL80でそのRELファイルの名前をコンマ区切りで全部並べて最後を「最終的に作りたいCOMファイル名/N/E」とかで締めればいいのです。ほかにすることはありません。
もちろん上記 /E の後に「:最初に実行するラベル名」を指定しなくてはならない場合があるのでそのへんはマニュアルのL80の説明を参照のこと。
「ソース分割」と上記の「コード相対がどーのこーの」は一切関係がありません。 CSEG 命令なんぞ理解できなくてもソース分割は実行できます。