TK-80サブボード基板の製作(モニター公開編)

2019/05/03

 少し手間取りましたが、TK-80サブボード用モニターの動作確認がとれましたので、公開します。

非商用の範囲で自己責任でご使用ください。なお、オリジナル・改訂版を含め、再配布される場合は、ソースコード・ライセンス条件を同梱していただけるようお願いします。


今回のモニターは、C言語(Small-C)で作成しましたので、サイズが約8KBとオリジナルに比べると大きくなりましたが、下記の特徴を備えています。


①SBC8080 2・3MHz、SBC8085 2・3・4・5MHzに対応(4・5MHz動作には高速メモリが必要)

②簡易アセンブラを搭載

③ブレーク時にレジスタ内容の参照・修正が簡単

④自動トレース機能(0.5秒/命令で自動実行)


①SBC8080 2・3MHz、SBC8085 2・3・4・5MHzに対応


電源立ち上げ時のLED表示
8080 2.0MHz 1-Wait "8080" "2.0-1" (TK-80オリジナル設定)
8080 2.0MHz 0-Wait "8080" "2.0-0" (SBC8080標準設定)
8080 3.0MHz "8085" "3.0 "
8085 2.0MHz "8085" "2.0 "
8085 3.0MHz "8085" "3.0 " (SBC8085標準設定)
8085 4.0MHz "8085" "4.0 "
8085 5.0MHz "8085" "5.0 "

CPUが変わってもモニター内のタイマーの待ち時間が変わらないように自動切り替えします。


②簡易アセンブラを搭載


下記のようにキーボードにアルファベット文字をオーバーレイさせることで、


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

{LOAD DATA} --> {sp}(区切り記号)


下記は、キーボードにオーバーレイシールを貼った例です。



8080/8085のプログラムをニーモニックで入力できるようになります。<ADRS SET}keyを2回連続入力させると、アセンブラに入れます。アセンブラに入ると、プロンプトとして、アドレス最下位桁の小数点が点灯します。ニーモニックが誤っていたり、レジスタ指定が誤っていると、"...."が表示されます。アセンブラから出るには、小数点が点灯しているとき{sp}のみ入力します。


下記が基本入力フォーマットです。

1) {opcode}{sp}

2) {opcode}{sp}{register operand}

3) {opcode}{sp}{data address perand}{sp}

ここで、オペランド部の区切り記号","は、入力不要です。


なお、オペランドの種類は、


{dd} 8 bit data
{rp}{dddd} regiter pair, 16 bit data
{d}{dd} distination register, 8 bit data
{dddd} 16 bit data
{aaaa} 16 bit address({READ INCR},{READ DECR}keyで相対指定)
{s} source register
{d} destination register
{d}{s} source, distination register
{rp} register pair
{rp} register pair for PUSH/POP
{rp} B or D register
{n} 0-7 number
none no operand

また、16ビットアドレスは、命令アドレスに近い範囲であれば、相対入力が可能にしています。誤った入力を検出するとLEDに「....」が表示されます。


③ブレーク時にレジスタ内容の参照・修正が簡単


TK-80は、ブレーク機能でデバックやプログラム動作を学習できる機能がありますが、命令実行前後のレジスタの設定・確認は、絶対メモリアドレスしか使えないので手間がかかり、使い勝手が良くありません。そこで、この領域は、アドレス表示ではなく16bitレジスタ名表示で、設定・確認ができるようにしました。併せてブレークアドレス・回数も簡単に設定できるようにしてみました。


具体的には、ブレーク停止直後に下記のように、{READ INCR}key,{READ DECR}keyで表示できます。さらに、{READ INCR}key,{READ DECR}keyで、アップ・ダウンできます。内容を変更する場合は、{WRITE INCR}keyで可能です。


Program Counter "PC"
Stack Pointer "SP"
HL register "HL" <-- br="" incr="" key="">DE register "DE"
BC register "BC"
Processor Status word "PS"
Break Address "BA"
break Address Counter "AC" <-- br="" decr="" key="">

④自動トレース機能(0.5秒/命令で自動実行)


一旦、ステップ状態でブレークさせ、上記のbreak Address Counter=FFと設定後、{RET}keyで、0.5秒/命令で実行中のアドレスを表示しながら動作を確認できます。実行中に適当なキーを押し続けると、break Address Counter=0となり、再ブレークします。


現在、ベータ版として、V0.90(ZIPファイル)を公開します。

不具合があれば、随時修正していきたいと思います。


併せて、Twitter(jr2xzy)を始めましたので、必要な方は、フォローしていただけます。

(再クロール更新:2022/12/22)

TK-80サブボード基板の製作(モニター作成編)

2019/04/27

 オリジナルの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)

TK-80サブボード基板の製作(頒布編)

2019/04/25

 今回、オレンジピコショップさんから「TK-80互換機 TK-80サブボード 専用基板」としてRev0.91を頒布していただけるようになりました。オリジナルのTK-80は、現存するものの希少となっています。電子工作のファンや教育的な利用など、興味を持っていただける方に提供できたらと思います。


動作させるためには、TK-80サブボード基板の組み立て以外に下記が必要になります。

①SBC8080 CPUルーズキットまたは、SBC8085 CPUルーズキット

②SBC8080 SUBルーズキット

③TK-80サブボード用モニターROM

④ZK-80-KB 組立てキット(オレンジピコショップさんより)


SBC8080ルーズキットでは、SBC8080システムROM「機械語モード付きタイニーBASIC」が標準ですが、TK-80サブボードを動作させるためには、SBC8080 SUBルーズキットに「TK-80モニター」が必要になります。


「復活!TK-80」をお持ちの方は、付属CDの「TK‐80ユーザーズ・マニュアル」に記載された「TK-80モニター」を以前のブログに紹介したように、私的利用の範囲でROMに焼く必要があります。


「復活!TK-80」は、すでに絶版状態で、ヤフオク・メルカリに時々出品されていますが、入手が難しい状況です。そのため、現在、オープンソース版「簡易アセンブラ付TK-80モニター」を作成中ですので動作確認が済めば、公開したいと思います。


いずれにしても、TK-80サブボード基板の組み立て~動作は、難易度が高いとは思いますが、チャレンジしてみてください。電脳伝説さん、オレンジピコさん、ご協力ありがとうございました。


まずは、回路図(PDF)部品表(PDF)を掲載します。

(再クロール更新:2022/12/22)