この全体写真からわかるように、これはTK-80Eです。ただしCPUだけはなぜかセラミックパッケージになっていますが。
TK-80とTK-80Eの違いは
LED表示部拡大。LEDもトランジスタもICもNEC製だね。正直いってNECがLEDを作っていたなんて、TK-80が発売されるまで知らなかった。SN713Aです。部品屋の店頭で普通に購入できるのはもっぱら東芝製だったから。左側がアドレス表示で右側がデータ表示にもっぱら使われます。このデータ用が4桁あるというのが特徴で、おかげでファンクションキーの使い方がすべて後置式に統一されていて便利でした。つまり、普通に16進キーを押していくとデータ表示部にそのまま表示されますが、その後でWRITE INCRキーを押すとメモリに書き込まれ、そうではなくADRS SETキーを押すとアドレス表示に転送されるという仕組みになっています。これは置数表示が4桁分あるからで、2桁しか用意されていないLKit-8やMEK6800DIIなどでは先にアドレス入力を予告する使い方になります。
これらのLEDはDMAによってメインメモリの一部アドレス(83F8H - 83FFH)をくり返し読み出してリフレッシュすることで表示しています。他のシングルボードコンピュータではソフトウェアスキャンが多かったのですが、このTK-80はソフトウェアの介入なしに表示し続けることができました。逆に表示を禁止するのは8255のポート操作で行えます(PC7をLにすると表示オフ)。
キーの拡大がこれです。
キースイッチはLEDと異なりソフトウェアでスキャンしています。キーのすぐ左にある8255のPA0 - PA7とPC4 - PC6を用いて8×3のキースイッチマトリクスをスキャンします。25個のキーがあるのに不思議に思われるかもしれませんが、右上のRESETスイッチは8224にそのまま配線されていてハードウェア的にリセット信号を発生しますから、プログラムから操作するのは24個のスイッチだけです。
標準の8255はキーボードやLED表示が切り離されていればすべてのポートが使えますが、普通はそんなことをしないので(本当に配線を切断するという意味なので)、プログラムから自由に使えるポートはPB0 - PB7とPC0 - PC3です。ただし、オプションのオーディオカセットインターフェースを使用する場合、PB0とPC0を使用しますから、実質10本のI/Oしかユーザが使えませんし、オーディオカセットインターフェースを切り離すスイッチでも付けない限りPB1 - PB7は入力専用になってしまいます。まぁ、勝手に何とかしろって言われてそうできる人が使うべきトレーニングキットですから、問題はないんですが。TK-80で鉄道模型をコントロールしようと20年来の夢を追っている方は拡張バスに別の8255を増設すべきでしょう。なお、標準の8255はデコードがいいかげんでイメージばかりになっていますが、モニタプログラムからはI/Oアドレス0F8Hから0FBHにあるとしてアクセスしています。
ファンクションキーの意味ですが、RETはブレークポイントなんかで中断したユーザプログラムの継続再開です。STORE DATAとLOAD DATAはオーディオカセットテープレコーダへの録音再生コマンドですが、TK-80にはオーディオカセットテープインターフェースは付属しません。そのためのプログラムだけはROMに内蔵されています。ですから、オーディオカセットを利用したい場合には、マニュアルに書いてある部品を別に購入して、自分で(主にキーボード左のフリーエリアに)配線しなくてはなりません。なに、ICを2個と十数本の抵抗コンデンサ類とダイオードだけの回路です。110 bpsのトーンバースト方式の記録は遅いのだけど、1 KByteのメモリだけなら2分程度だからね。
このTK-80Eにはカセットインターフェースが付けられていないんだけど、使ってなかったのかなぁTK-80単体では。TK-80BSには高速オーディオカセットテープインターフェースが付属していたので、それと最初から組み合わせて使うには不要でしたね。
ADRS SETは前述の通りアドレス設定コマンドで、その番地から次々とメモリの内容を確認する場合にはREAD INCRキーを押すだけですみますし、内容を変更したいと思えば16進数キーを押して変更したいデータを打ち込んでからWRITE INCRキーです。このWRITE INCRキーも押した後にアドレスが+1されてその番地の内容が表示されるので、次々と書き換える場合には、数字、数字、WRITE INCRというリズムを繰り返します。
READ DECRキーがあるというのも特徴で、READ INCRしすぎて見たいメモリを行きすぎたときに逆向きにアドレスを進めながらメモリ内容の確認ができました。便利なんだけど、他のワンボードコンピュータには付いてないのが多かったのよ。
これがCPU周辺。左端に切れていますが、左中央部の金属ケースが水晶発振子で18.432 MHz、それを9分周して2.048 MHzクロックで動作していました。左下部のスイッチはメモリのバッテリバックアップ用のスイッチとステップ実行用のスイッチ。
CPUの右にゲルマニウムダイオードが2個見えますが、わかりますか。CPUの金属ふたの少し右にD2というマーキングがあって、ガラスビーズのようなものが見えますが、それです。そのすぐ下にD1とマークされたダイオードがもう一個あります。これはクロック信号を整流して負電圧を発生する回路で、CPUのVBB (-5 V)電源に使われます。このため、TK-80自体の電源は+5 Vと+12 Vだけが必要で、-5 Vは不要です。ROMに負電源の不要なuPD454/uPD464を使用していることも大きいですね。CPUのVBBには実際にはほとんど電流が流れませんから、この程度の回路で発生する負電圧で充分に満たされます。実測してみると、-3.8 Vしかなかったのですが、まぁVBBは規格よりもずっと幅のある範囲で動作するからね、なんとかなってるんだろうな。
このTK-80EにはRWMがフル実装されていますね。このとき、RWMはアドレス8000Hから83FFHに配置されています(アドレスデコードが不完全でイメージがあるので拡張時注意)。購入時は8200Hから83FFHまでの512 Byteです。83C7Hから83FFHまではモニタプログラムなどの作業領域となっていますから、ユーザは使用できません。通常、83C6Hがスタックの底になります。アドレスデコードが不完全なので、TK-80BSを使用する際には、そのまま拡張バスコネクタにTK-80BSの基板を接続するわけにはいかず、TK-80の一部パターンカットとジャンパ配線を行う必要があります。もっとも、外部にメモリを増設する際には必ず必要となる作業ですが。
あ、そうそう、このTK-80E構成だと、メモリアクセスタイムが間に合うんで、uPD8080AFに入れられているメモリウェイト1サイクルを安全に取り除くことができます。2割以上速くなりますが、改造方法について知りたい方は連絡ください。え、私?このTK-80Eはとりあえず改造しませんよ。TK-80BSなんかをご使用で遅くていらいらしている方にお薦めします。って、新しいコンピュータを使っているか。そんなだと。
トレーニングキットということで、ROMに納められたモニタプログラムも公開されています。当時の同種のマイクロコンピュータキットは原則としてみんな公開していましたね。やはりプログラムの勉強は他人が作成した(ある程度の規模の)プログラムをじっくり読むのが一番ということで、ちょうど適切なプログラム例がモニタプログラムだったわけです。TK-80に限らず、7セグメントLEDとキースイッチで操作するコンピュータキットの場合、マイクロコンピュータの技術者が必ず学ぶべきキースイッチのソフトウェアスキャンによる入力とか、LEDの表示法とか、ポインタやインデックスレジスタを用いた表引きやデータ操作なんかが、みんなモニタプログラムに含まれていましたから。キャッシュレジスタとか自動販売機の制御とか、あるいはビデオレコーダの制御なんかにも、これらのルーチンは必ず使われますので、有用だったわけです。
モニタプログラムで使用されているRWMのアドレスマップを以下に示します。
83C7Hから83D0Hまでがモニタ内部で使用されるスタック領域です。ユーザプログラムをRUNコマンドで実行されるときにはスタックポインタには83C7Hが入っていて、83C6Hからユーザスタックとして使われます。83C7 モニタスタックエリア 83D1 RST 2ジャンプアドレス 83D4 RST 3ジャンプアドレス 83D7 RST 4ジャンプアドレス 83DA RST 5ジャンプアドレス 83DD RST 6ジャンプアドレス 83E0 PC(LO) ステップ動作時のレジスタセーブエリア 83E1 PC(HI) (以下83EBまで) 83E2 SP(LO) 83E3 SP(HI) 83E4 L 83E5 H 83E6 E 83E7 D 83E8 C 83E9 B 83EA F 83EB A 83EC データレジスタ 83EE アドレスレジスタ 83F0 ブレークアドレスレジスタ 83F2 ブレークカウンタ 83F3 キーインプットフラグ 83F4 ディスプレイレジスタ 83F8 セグメントデータバッファ
このaからgまでは7セグメントLEDの各セグメントに一般的に割り当てられる記号で、7セグメントの一番上にある水平のセグメントがa、そこから時計回りにb, c, d, e, fとなって、中央の水平セグメントがgになります。dpは小数点です。ですから、1の形に表示させたければ06Hというデータを書き込みます。水平になっている3本のセグメントだけ光らせるなら、49Hというデータを書き込みます。D0-a, D1-b, D2-c, D3-d, D4-e, D5-f, D6-g, D7-dp
以上のワークエリアの知識とこれから説明するモニタプログラム内のサブルーチンの知識を組み合わせれば、昔風のTK-80の小アプリケーションを作成することができるでしょう。
アドレス01A1H アドレス・データレジスタ表示
このサブルーチンを呼び出すと、アドレスレジスタとデータレジスタに納められたデータをディスプレイレジスタに転送し、さらにセグメントデータ変換ルーチンを呼び出すことによって、LEDに表示します。
このルーチンは全レジスタを破壊します。
アドレス01C0H セグメントデータ変換
ディスプレイレジスタの内容をセグメントデータに変換してセグメントデータバッファに書き込みます。この結果、セグメントデータバッファの内容がハードウェアによって自動的に表示されます。数値データを16進数としてLEDに表示したい場合には便利なルーチンです。
このルーチンは全レジスタを破壊します。
アドレス0216H キー入力(入力があるまで待つ)
キースキャンを行ってキーコードを返します。何かキーが押されるまで待ち、それに対応したキーコードをAレジスタに入れて返します。キーコードは次のようになっています。左がキートップの文字、右がキーコードです。
このルーチンはA, F, B, D, Eレジスタを破壊します。0-00, 1-01, 2-02, 3-03, 4-04, 5-05, 6-06, 7-07 8-08, 9-09, A-0A, B-0B, C-0C, D-0D, E-0E, F-0F RET-11, RUN-10, STORE DATA-16, LOAD DATA-17 ADRS SET-12, READ INCR-14, READ DECR-13, WRITE INCR-15
アドレス0223H キー入力(入力がなくてもただちに戻る)
キースキャンを行ってキーコードを返します。ただし、呼び出されたときにキーが押されていない場合は待たずにAレジスタに0FFHを入れて返します。キーが押されていれば対応するキーコード(上と同じ)をAに入れて返します。リアルタイムのゲーム用の入力なんかに使えますね。
このルーチンはA, F, B, D, Eレジスタを破壊します。
アドレス02DDH 4.5112 msタイマ
このルーチンを呼び出すと、4.5112 ms後に戻ります。時間待ちに使ってください。
このルーチンはD, Eレジスタを破壊します。
アドレス02EAH 9.0171 msタイマ
待ち時間が異なる他は02DDHのルーチンと同一。
アドレス02EFH 27.176 msタイマ
待ち時間が異なる他は02DDHのルーチンと同一。
これだけわかれば、当時あったような小さなゲームを作成できると思います。ひとついかがですか。
Return to IC Collection