オリジナルのTK-80は、ROM/RAMサイズが限られているため、16進入力でプログラム入力をする必要があります。そこで、SBC8080/SBC8085 ルーズキットの十分なROM/RAMサイズを活かし、簡易アセンブラ機能を備えた互換モニターを作成することにしました。
TK-80のキーボードのままでは、アルファベット入力ができません。そこで、海外の電話機で用いられている電話番号をアルファベットで表記するアイディアを拝借して、TK-80のキーコードに21種類にアルファベットを割り当てることにしました。
具体的には、下記左側キー配列に右オーバーレイキー配列を割り当てます。
C D E F {ADRS SET} --> V W X Y Z
8 9 A B {READ INCR} --> Q R S T U
4 5 6 7 {READ DECR} --> L M N O P
0 1 2 3 {WRITE INCR} --> G H I J K
さらに、区切り記号{SP}を{LOAD DATA}に割り当てます。
これで、アセンブラコードが入力可能になります。幸い、オーバーレイした文字によるニーモニックの重複は無いようです。
例えば、「MVI D,55」を入力する場合、オペコードとオペランドに区切り記号(SP)を用い、オペランドの「,」は、無くてもアセンブル可能なので省略し、最後に区切り記号(SP)を入れることにすると、「5 C 2 {LOAD DATA} D 5 5 {LOAD DATA}」キーを打てばよいことになります。キートップの端にアルファベットのラベルを貼れば簡単操作できます。
さて、このモニターをアセンブラで書くことはできますが、やはりC言語の方が簡単に済みます。そこで、C言語の開発環境を探すことにしました。
下記が要件になります。
①8080に対応していること
②アセンブラがインライン記述できること
③ROM化に対応できること
④できれば、Windows上で稼働可能であること
調査の結果、下記が最も要件に近いC言語の開発環境でした。
・Small-C "FUTURE FORUM"版 V3.0
・MACRO80アセンブラ
・LINK80リンカー
・CP/M-80 program EXEcutor for Win32 V0.4
とは言っても、いくつかの注意点があります。
①Small-Cは、C言語のサブセットになっているので、使用できる文法に注意する必要がある。
②Small-Cは、基本的にCP/Mを前提にしているので、いくつかの組込関数が、RAM領域の プログラムを書換えているので、使用する場合は、確認が必要になる。
③アセンブラからC言語を呼び出す必要ある公開サブルーチンは、都度、引数の変換・スタック消費量の制約からスタックの切替が必要になる。
④MACRO80は、通常、リロケータブルなプログラムの作成をおこなうため、固定的なRAM領域は、ASEG(絶対番地セグメント)を用いる必要がある。
⑤LINK80は、リンク順に結合するようになっているため、固定的なRAM領域を含むオブジェクトファイルを最後に配置する必要がある。
⑥リンクの設定で「Origin below loader memory, move anyway(Y or N)?n」を指定し、0番地からプログラムを配置する必要がある。
⑦出力されたHEXファイルは、固定的なRAM領域を含むすべての領域が含まれるため、ROM領域のみを抜き出し、不要な部分を削除する必要がある。
結構制約がありますが、他に良い環境が見つかりませんでした。ただ先人の成果を使えますので幸いです。現在、モニターコマンド・簡易アセンブラが動作し始めましたので、もうすぐです。
(再クロール更新:2022/12/22)