FORTRAN80

コンパイラとリンカで COM ファイルを作ります。 IO操作やメモリ操作の関数が追加されていますが リンカが L80 なので M80 によってアセンブリ言語で作ったファイルと連結できます。 本コンパイラの準拠するFORTRANはまったく構造化されていない時期のものでBASICよりも 構造化されていませんが論理演算がビット単位なのでアセンブリ言語で書くようなプログ ラムも可能です。
コンパイラのオプションでアセンブリ言語によるリストが得られるのでコンパイラ出力と アセンブリ言語で書いたプログラムを連結する子細が分かります。
下から入手できるものはZ80のアセンブリ言語によるリストを出力します旧版は8080のア センブリ言語を出力していました。

このツールの入手は http://www.retroarchive.org/ の下の所からできます。

FIG1.jpg(2971 byte)
 
   使い方

FIG2.jpg(17912 byte)

FIG3.jpg(41778 byte)

FIG4.jpg(17579 byte)
 
   IO直接操作

FORTRAN80の言語仕様は構造化プログラミングを取り入れる前のものなので書き方が堅苦しいですが アセンブリ言語だと思へば、ほぼ同じような感覚で書けます。 実際にアセンブリ言語との連結もせずにここまで書けました、他の言語 ではインラインアセンブラなどで補助が必要なものもあります。 また、下のプログラムの場合はコンパイラのライブラリをほとんど何も使っていないので 768 バイトなのですが普通のコンパイラではこの大きさで出力するものは珍しく組み込み用 途のコンパイラなみの大きさで出力していると思います。

FIG5.jpg(22968 byte)

FIG6.jpg(15271 byte)
 
   アセンブリ言語との接続

FOTRAN言語の関数の形でアセンブリ言語に連結してみます。 まずFORTRANのプログラムの方を先に書いてコンパイルしてみます、 ファイル名を TEST2S .FOR とすると =TEST2S/L のコマンドでコンパイルリストが得られます。

FIG7.jpg(10831 byte)    FIG8.jpg(17873 byte)

アセンブリ言語で書くプログラムは BITOR で2個の引数の論理和を返す関数です、 FORTRAN80 では論理演算はビット単位で行うので必要のないものです。
下のリストの CALL BITOR の上を見ると引数の渡され方が下を見ると戻り値の受け取り方が分かりますので これに合うように BITOR のアセンブリ言語のプログラム本体を書きます。


FIG9.jpg(65629 byte)

下はコンパイルリストとアセンブルリストが得られるコマンド操作です。

FIG10.jpg(35742 byte)

出来たプログラムを実行してみると 24 の論理和が 6 となっています。

引数と戻り値の受け渡しが合えばアセンブリ言語のプログラムは自由にかけますから プログラム全体の構造やアセンブリ言語で書きたくない計算などはFORTRANのほうで 書けばよいでしょう、アセンブリ言語のコンパイルリストが出力されるおかげで逆ア センブラやデバッガを使って解析する必要がないのは助かります。