TK-80

歴史

1976年2月、NECは半導体事業部にマイクロコンピュータ販売部を設立し、マイクロプロセッサの販売のために開発環境の供給を開始した。しかし、顧客の元へ訪れて説明するも、なかなかマイクロプロセッサを理解してもらえない状況にあった。同じ頃、NECは日本電信電話公社横須賀通信研究所のある研究室から、新人教育用のマイクロコンピュータ製品の開発を受注することになった。同部門の後藤富雄は部長の渡辺和也に教育用キットの開発を提案した。
後藤はTK-80の主要部分を設計し、加藤明が詳細設計を行った。後藤はKIM-1の写真からアイデアを取り入れた。KIM-1はソフトウェアで現在のアドレスを表示するようになっていたが、CPUがハングするとディスプレイが消えてしまう。TK-80は555タイマーICを使ってCPUに割り込みをかけるダイナミックディスプレイを採用したことで、常に現在のアドレスを表示できるようになった。それに加え、TK-80はCMOSバッテリ機構を搭載していた。後藤はオープンアーキテクチャであったPDP-8の影響を受けて、TK-80のマニュアルに回路図やデバッグ・モニタのアセンブリコードを掲載することにした。
TK-80は1976年8月3日に発売された。当時の技術者の課長が決済できる88,500円の価格が設定された。NECは1976年9月13日に秋葉原ラジオ会館にてサポートセンター (Bit-INN) を開設した。すると、多くのTK-80が電気技術者だけでなく経営者、好事家や学生などにも売れていることが判明した。TK-80は月200台の販売予測に反して、月2,000台を販売した。
この成功を受けてすぐに、他の日本のマイクロプロセッサメーカーはそれぞれのマイクロプロセッサ用に評価キットを開発した。サードパーティからは電源や周辺機器などが登場した。渡辺とその部下は1977年7月に入門書『マイコン入門』を執筆すると、それは大ヒットして20万冊以上を売り上げた。また、月刊アスキー、I/O、月刊マイコン、RAMといったコンピュータ雑誌が創刊された。
日本では、Altair 8800は1975年に販売されていたが、輸入仲介手数料が高かったため売れなかった。Apple IIやPET 2001も同様であった。ワンボードマイコンは1979年にPC-8001が登場するまで人気を博した。

特徴

TK-80の特徴はデータの入出力のために、他の機器を必要としなかったことである。当時の他社のトレーニングキット（インテル製やモトローラ製など）の多くはデータ入出力を行うために、シリアル通信機能を備えた端末装置（テレタイプやVDT装置など）を接続する必要があった。それに対しTK-80は16進入力キーパッドと8桁の7セグメントLEDを基板上に備えており、端末装置なしでシステムを使うことができたのである。

トレーニングキット／エバリュエーションキット

初期のマイクロプロセッサは、電卓などのアプリケーションを意図していた。その後、マイクロプロセッサの能力の向上により電卓とは別のアプリケーションも想定されるようになった。従来ワイヤードロジック回路、リレー回路、アナログ回路、機械機構などで実現されていた複雑な動作を行う機器をソフトウェア制御化し機器のコストダウン、小型化を図ろうとしたのである。
マイクロプロセッサを使ったソフトウェア制御を行うためには、機器を設計する技術者がそれまでの回路設計などの技術とは別にソフトウェア開発技術を習得する必要がある。そのためマイクロプロセッサを製造、販売する会社は技術者がマイクロプロセッサのハードウェア、ソフトウェア技術を習得するための教材としてトレーニングキット、あるいはエバリュエーションキット（評価用キット）を提供するようになった。
この種のキットはCPU、ROM、RAM、I/Oチップなどの構成部品を1枚の基板上に実装し最小構成のマイクロプロセッサシステムを構成していた（このような構造から、ワンボードマイコンと呼ばれた）。通常ROMにはモニタ／デバッグプログラムが置かれていたが、ユーザーが自分用のプログラムに置き換えて各種の実験を行ったりあるいはそのままそのボードを制御用部品として製品に組み込むこともできた。

システムの構成

最初に発売されたTK-80とその後廉価版として販売されたTK-80Eでは一部の使用部品が変更されているが、ここでは初代のTK-80を中心に説明する。
TK-80はプロセッサ、モニタプログラムを収めたROM、RAM、DMAにより表示される8桁の7セグメントLED、プログラマブルパラレルポートから構成されている。

プロセッサ

TK-80は、インテルの8080A互換のNEC製マイクロプロセッサμPD8080AをCPUとして使用している。
μPD8080Aは同社製μPD753（μCOM-8）とのソフトウェア互換品であり、8080Aとは完全互換ではなかった。10進加算後のBCD補正を行うDAA命令がインテル製のチップは加算後の補正しかできなかったのに対し、NEC製は両者とも減算後の補正も行えたのである。NEC製チップは加減算のBCD補正を行うために、直前に行ったのが加算であるか減算であるかを記憶するSUBフラグをPSW（フラグレジスタ）中に追加した。
プログラムを作る立場からすればNECによる拡張は便利なものだったのであるがオリジナルの8080Aとの命令の動作の違いフラグの構成の違いなどの問題があり、後から販売されたTK-80EではBCD演算処理がインテルのオリジナルと同じになっているμPD8080AFCに変更された。
8080プロセッサは、TTLレベルではない2相クロックを必要とする。また周辺回路を制御するための信号（メモリ-I/Oアクセスの識別、リード/ライトの識別など）の信号は特定のタイミングでデータバスに出力されるという構成であったため、そのままでは簡単に周辺チップを接続することができなかった。インテル製の8080Aファミリではクロックジェネレータ8224、システムコントローラ8228というチップが用意されており8080Aとあわせて3チップでプロセッサユニットとして機能するという設計だった。
NEC製のμCOM-80ファミリも同じ構成でCPUがμPD8080AD、クロックジェネレータμPB8224、システムコントローラがμPB8228という構成である。

ROM

基板上にはROMを4個実装することができる。キットではμPD454Dを3個装着し、モニタプログラムが実行されるようになっている。μPD454DはROMライターを使ってデータの書き込み、電気的なデータ消去を行える256ワード×8ビット構成のパラレルバス型EE-PROMである。
EE-PROMを使ったのは組み込み機器の実験などのためにユーザーがデータを書き換えて使えるようにするためだったと思われるが、アマチュアへの販売量が増えたために販売された後継の廉価版のTK-80EではμPD454DとピンコンパチブルなマスクROMのμPD464に変更された。
ROM用領域は、8080のアドレス空間の0000Hから03FFHの1Kバイト分である。TK-80/TK-80Eともマニュアル通りの組み立て完成時の状態ではPROM実装用スペースが1つ残っているので、自分でROMチップを用意しプログラムやデータを置くことができる。つまり、TK-80/TK-80E標準実装モニタプログラム用ROM領域は0000Hから02FFHの768バイトで、0300Hから03FFHの256バイト分はユーザー用拡張ROM領域となる。

RAM

基板には1Kビット（4ビット×256）のS-RAMを最大8個、つまり1KバイトのRAMを装着できる。TK-80では、μPD5101Eというバッテリーバックアップ可能なC-MOSのS-RAMを使っていた。μPD5101Eは3Vのスタンバイ電圧でデータを保持できるためTK-80の基板に外部の3V電源（単三電池2本）を接続し、さらにスイッチで主電源のVccからバックアップのVccに切り替えられるようになっていた。
スイッチでバッテリーバックアップモード（基板上の表示ではPROTECT）に切り替えるとRAMのVcc電源がバッテリー側に切り替わるとともにRAMチップの制御信号が変化してディセーブル状態になり、メモリアクセスが一切禁止される。そのため、動作中にPROTECTに切り替えると（また、PROTECTを解除すると）プログラム（モニタプログラムも含む）は暴走する。このスイッチを切り替える際は、RESETボタンを押しながら行わなければならない。
TK-80Eではコストを低下させるために、n-MOSのμPD2101AL-4が使われた。こちらは消費電力や電圧の定格の問題があるため、バッテリーバックアップはできなかった。
TK-80ではRAMのメモリアドレスは8000Hから83FFHまでの1Kバイトであるがキットに含まれるRAMチップは4個だけで、この空間のうち8200Hから83FFHに実装するようになっている。上位アドレスに実装するのは、最上位アドレスがモニタプログラムやLEDディスプレイ用のワークエリアとして予約されているためである。ユーザーがRAMチップを増設することで、フルに1Kバイトを利用することが可能になる（マニュアルや各種プログラムライブラリに記載されていたプログラムの多くは、標準の8200Hからのメモリ実装に対応していた）。
C-MOSの5101はピン互換のn-MOSの2101と比較しアクセスタイムが長かったため、CPUによるメモリアクセスの際に1クロック分のウェイトが挿入された。マスクROMとn-MOSの2101を使っているTK-80Eではこのウェイトは不要なため、基板のパターンカットにより速度を向上させることができた。ただしタイマールーチンの待ち時間が変わるため、シリアル通信の伝送レートが変化してしまうという問題がある。

I/Oポート

TK-80は、8080ファミリーのプログラマプルなパラレルI/OポートμPD8255を1個実装している（シリアルI/Oポートの8251は、TK-80には実装されていない）。8255は8ビットポートを3ポート備え（PA、PB、PC）、各ポートの入出力、動作モードなどをプログラムから設定できる。単純な8ポート×3、2ポート+制御信号、ビット単位の入出力指定（PCポートのみ）などの動作が可能だ。
TK-80は8255をキーパッドのスキャン、シリアル入出力、LEDディスプレイの制御に使っている。このチップのアドレスは、I/Oアドレス空間の0F8Hである（ただし、フルデコードされていない）。
キーパッドは回路に直結しているRESETを除くと24キーであり、これが3×8のマトリクス接続になっている。8255のPCポートの3ビット（PC4からPC6）とPAポートがこのマトリクスに接続されておりモニタープログラム内のキースキャンルーチンが8255のポートを制御し、キーの押し下げ状態を検出する。スイッチ操作の際にはチャタリング（断続的なスイッチのオン／オフ）が発生するがキースキャンルーチン内でのタイマー処理により、誤動作を防いでいる。
TK-80モニタプログラムは、110bpsでのシリアル入出力をサポートしている。これはシリアル入出力LSIを使わずソフトウェアでタイミング処理を行い、8255のパラレルポートのビットを使用して行う。使用しているのはPC0（シリアル出力）とPB0（シリアル入力）である。タイミング生成はソフトウェアのタイマールーチン（空ループにより時間をつぶすという方法）を使っているため、この処理中はDMAによるLEDディスプレイを停止させる必要がある。このための制御は、8255のPC7ポートで行われる。
TK-80モニタプログラムはSTORE DATAキー、LOAD DATAキーを使いメモリデータをシリアル出力し、また外部からシリアルデータをロードできる。一般的な用法はシリアル出力ポートのビット出力を数kHzのオーディオ信号でトーンバースト変調し、このデータをカセットテープレコーダに出力するというものである。またこのオーディオ信号を復調し、シリアル入力ポートに与えることで保存したデータをロードすることができる。TK-80そのものにはこのようなオーディオ変調／復調回路は含まれていないが、マニュアルには回路例が記載されており多くのユーザーは基板上のフリースペースにこの回路を組み込んでいた。

LEDディスプレイ

8桁の7セグメントLEDはパラレルポートなどを介して表示されるという構造ではなくRAM中の特定のアドレス（83F8Hから83FFの8バイト）のデータをDMAで読み出し、各バイトの8ビットデータの値に応じて7セグメントLEDの小数点を含めた8セグメントを点灯／消灯する。これにより、小数点を含む8個のセグメントを任意のパターンで表示することができた。
データバスから読み出したメモリデータは、8212チップでラッチされる。これは8ビットラッチ/3ステートバッファのバイポーラICで、非プログラマブルI/Oポートとして8080ファミリーに含まれているチップである。回路構成からすると8212ではなく単純なラッチでも済むのであるが、トレーニングキットという性格からこのチップを使ったものと考えられる。
LEDの点灯はプログラムの動作とは関係なく555タイマーチップを使った数百Hzの信号でCPUをホールドし、そして前述の範囲でアドレスを1つずつ進め（555の出力で、3ビットのアドレス用カウンタが動作する）RAM中のデータを1バイトずつ読み出しラッチで保持し、該当桁のLEDを点灯させるというダイナミック点灯構造である。
このような構造により、プログラムは83F8Hから83FFの8バイトに適当なデータを書き込むだけで出力ルーチンを呼び出すことなくLED表示を行うことができる。またデータを16進数で表示するというルーチンがモニタ内にあり、これを使うことで簡単に数値表示を行うこともできる。
8080のような単純なプロセッサの場合、プログラムの実行ステップ数を数えることでかなり正確に時間を測ることができるがこのようなDMA処理を行うとCPUの実行速度が多少低下し時間を正確に測れなくなる。そのため110bpsの入出力処理中など、厳密な時間測定が必要な時にはDMAによるLED表示を停止することができる。これは、8255の特定のビットで制御できる。

シングルステップ実行

TK-80モニタプログラムは、プログラムをデバッグするためのシングルステップ実行をサポートしている。シングルステップスイッチをAUTOモードからSTEPモードにするとプロセッサから得られるM1信号（インストラクションのフェッチ、つまり1つの命令の実行開始を示す信号）が、プロセッサの割り込み要求に入力される。これにより、8080プロセッサは割り込み処理を開始する。
8080プロセッサは割り込み要求があると、データバスから割り込みのための命令を読み込むという動作をする。TK-80で採用されている8080用システム・コントローラ/バッファ8228はINTA端子の使い方により2種類の動作を選べる。
1番目の使い方は8228のINTA端子を割り込み応答出力端子として使う方法である。INTA端子がアクティブになったときにシステムデータバス（8228からメモリやI/Oが接続されている側のデータバス）に接続されている割り込みコントローラ（8212、8214、8259等）がRST 0～7命令やCALL命令をシステムデータバスに乗せ8228はそれをCPUデータバスに伝えるというものである。プロセッサはこの命令を実行する。
2番目の使い方は8228のINTA端子を1KΩの抵抗器を介して+12Vにプルアップするというものである。このような処理をすると8228は、このフェーズにおいてシステムデータバスの状態とは関係なくRST 7命令をCPUデータバスに送る。プロセッサは0038Hへのサブルーチン呼び出しを実行する。
TK-80では2番目の8228を1レベルの割り込みコントローラとして使う方法を採用している。この8228のINTA端子に対す処理はTK-80の回路図によって確認できる。
割り込み処理が開始されると割り込み許可フラグがディセーブルされるので、モニタープログラム内の処理が連続実行される。モニタープログラム内ではこの割り込みエントリから実行が始まるとPC（プログラムカウンタ）、Aレジスタ、PSW（フラグ）レジスタの内容をLEDに表示する。その後、RETキーを押すとこのサブルーチンコールがリターンしユーザープログラムにリターンし、命令の実行を継続する。このリターンの直前に割り込みが許可されるのでユーザープログラムが1命令だけ実行され、再びモニタープログラムに戻ってくる。EI（割り込み許可）命令の後、RET（サブルーチン／割り込みからのリターン）命令を実行するが、単純にM1信号を割り込み要求に接続するとRET命令の実行後に割り込みがかかりユーザープログラムが実行されない。そのためTK-80のシングルステップ実行機能は割り込み許可後、1命令（RET命令）を実行しその次の命令（ユーザープログラムの1命令）の実行後の割り込みが実行されるような回路になっている。

拡張性

100ピンのエッジコネクタにはアドレスバス、データバス、メモリ／I/Oの読み書きの信号などが接続されていたので外部回路を接続することができる。またバックプレーンを用意すれば同型の基板を重ねるように使用し、システムを拡張することも可能である。後から発売されたTK-80 Basic Station、メモリカードなどは、このような構成で接続する。また、自由に回路を作成できるユニバーサル基板も販売されていた。
しかしTK-80はトレーニングキットとして設計されたものであったため、本格的な拡張まで考えて設計されていた訳ではなかった。
たとえば、メモリアドレスのデコードである。TK-80のROMとRAMはそれぞれ最大で1KBなので、アドレスの下位10ビットはデコーダとメモリチップに接続されていた。そしてROMとRAMの切り替えを最上位1ビットで行い、A10からA14まではデコードされていなかった。そのため0000Hから7FFFHまでは先頭1KBのROMイメージが繰り返し現れ、8000HからFFFFHまではRAMイメージが繰り返し現れることになった。
外部にメモリを増設する場合は、まずこのゴーストイメージ対策を行う必要がある。具体的には、アドレスをきちんとデコードするということである。TK-80の基板はフルデコードするために、パターンをカットしてデコード信号を接続できるようになっていた。
Basic Station基板はROMとRAMを搭載しているため、BS基板とTK-80を接続する際にはこのフルデコード改造を行う必要があった。そのためBasic Station基板上にはTK-80基板上のROMとRAMのアドレスをデコードする回路が載っており、このデコード信号がエッジコネクタ経由でTK-80基板に送られるようになっていた。TK-80側ではパターンをカットした後、この信号をメモリチップ用のデコーダに接続しなければならなかった。

μCOM Basic Station TK-80BSとCOMPO BS/80

上述の通りTK-80は本来μCOM80プロセッサを売り込むための「お試しキット」であるため、高級言語への対応などは、まったく想定されていなかった。しかしながらホビイストからの熱狂的アプローチで、専門誌でTK-80でBASICを動かす記事が掲載されるようになり、さらにはサードパーティからTK-80用と称した拡張機器が（NECとは関係無しに）販売されるようになると、NECも事態を静観できなくなり、ついにはメーカー公式のBASICキットを発売する運びとなった。
TK-80BSとして販売されていたのはベーシック・ステーションボード、基板を接続するバックプレーン、キーボード等がセットになったものである。ベーシック・ステーションボードはTK-80と重ねて実装できる基板で拡張RAM、BASICインタープリタのROM、キーボードインターフェイス、キャラクタディスプレイ用V-RAM、カセットインターフェイスを装備していた。
BASIC ROMは初期は整数BASICであるLevel-1 BASICであったが、後に実数BASICであるLevel-2 BASICが標準となり、Level-1 BASIC購入者にはLevel-2のBASIC ROMが無償配布された。この際、Level-1 BASICのROMは回収されなかったので、配布対象ユーザーはROMを差し替えることでLevel-1 BASICとLevel-2 BASICの両方を利用することができた。
Lvel-1とLevel-2のBASICには互換性が無いから、Level-2のROMを装着するとLevel-1で作ったプログラムが実行できなくなってしまう。どうしても必要なときはプログラムを書き換えるかROMを差し替えるしかない。そこでスイッチで切り替える方法が考えられた。BASICが入っているROM (μPD2332) には2つのチップセレクト端子 (CS1,CS2) がある。CS2 がhigh (5V)、CS1 がlow (0V) のときこのROMがセレクトされる。基板のパターンの特徴を生かして表にLevel-2のROM、裏にLevel-1のROM (逆も可) を装着するとすべての対応する端子を追加配線無しに並列に接続することができる。そこでCS1だけを横に曲げ、残りの端子をすべて並列に接続する。CS1の端子から引き出した配線を切り替えスイッチに接続すればLevel-1とLevel-2を切り替えられるようになる。
その後、BASICマシンとして販売されたCOMPO BS/80は電源、カセットテープドライブを装備したケースにTK-80BSを収めた完成製品であるがこれにはTK-80基板は含まれていない。プロセッサユニットは、バックプレーンボード上に実装されていた。このプロセッサ基板には当然LEDディスプレイ、キーパッド、TK-80モニタープログラムなどは実装されておらず電源投入でBASICが起動するようになっていた。
完成品のCOMPO BS/80とは別にケース、電源は部品としても販売されていた。部品のケースを購入し、TK-80基板とベーシック・ステーションボードを重ねてバックプレーンで接続したユニットとキーボードを内部に装着すると完成品のCOMPO BS/80と同等のものにできた。この構成ではBASIC環境を起動するためにTK-80のキーパッドを操作する必要があるが、このケースはキーパッドの上部が開閉可能なフタになっており自由にTK-80基板を操作することができた（完成品のCOMPO BS/80も同じケースを使っていたので、このフタもあった。もちろん、開けても下の基板が見えるだけである）。
日本のホビーパソコンとしては珍しく、COMPO BS/80は電源スイッチがキースイッチであった。また、キーボード右側部分に内蔵可能な専用カセットデッキは、BASICからテープの早送りや巻き戻しをコントロールすることができた。
元々COMPO BS/80は「始めから完成されたTK-80BSが欲しい」というニーズに答えて、既製のTK-80BS相当品に電源とカバーを付けただけの即席品である（売れ残ったらケースを取っ払ってキットとして発売するつもりでいた）。この頃は既に別ラインでPCX-1（PC-8001のコードネーム）の開発が進められていた。