TK-80
TK-80
TK-80 (Training Kit μCOM80) とは、日本電気 (NEC) の半導体部門が1976年8月3日に発売した、マイクロコンピューター(マイコン)システム開発のための「トレーニングキット」である。
NECのμCOM80つまり8bitプロセッサのトレーニングキット(※)である。
NEC側はもともとはあくまでトレーニングキット(※)のつもりで当キットを構想・設計・発売、つまり当時まだ知る人がほとんどおらずそもそも需要すら無かったマイクロプロセッサというものの需要を掘り起こすために、マイコンシステムを業務として開発する可能性のある技術部門や企業の技術者などが購入することを想定していたが、実際には公表された仕様を見て、基本となる入出力装置を備えているので高価な端末を別途用意せずこのまま本体だけでも使え、しかも入出力が最初から一体化された仕様で設計されているので(バラバラのものを組み合わせるのとは違って)確実に動く、ということに気付いた人々も多く、NEC側の想定とは異なりTK-80は相当の割合、探究心旺盛なアマチュアたちやこれを一個人で単体のコンピュータとして使ってみようと思う人々などに購入されることになった。購入層がNECの想定以上に広がり、当初の想定数の10倍ほど売れてゆくことにもなった。
(※)マイクロプロセッサのトレーニングキットというものは、TK-80が登場するまではどういう性質のものだったか? ということについては当記事末尾の節で解説。
TK-80の特徴はデータの入出力のために、他の機器を必要としなかったことである。当時の他社のトレーニングキット(インテル製やモトローラ製など)の多くはデータ入出力を行うために、シリアル通信機能を備えた端末装置(テレタイプやVDT装置など)を接続する必要があった。それに対しTK-80は16進入力キーパッドと8桁の7セグメントLEDを基板上に備えており、端末装置なしでシステムを使うことができたのである。
当キットの構想にいたる経緯、設計者たち、仕様決定の経緯、発売と売れ行き
1970年代、NECの半導体部門はインテル互換プロセッサを含むいくつかのマイクロプロセッサを開発し、1976年にはインテルとセカンドソース契約を結んだ。しかし、部門はそれらの販売に苦労していた。日本ではマイクロプロセッサに興味を持っている技術者はほとんど見つからず、NECの営業マンは大きな利益をもたらす需要を見つけることができなかった。
1976年2月、半導体・集積回路販売事業部はマイクロコンピュータ販売部を設立し、マイクロプロセッサの販売を促進するために開発環境の供給を開始した。しかし、顧客の元へ訪れて説明するも、なかなかマイクロプロセッサを理解してもらえない状況にあった。同じ頃、NECは日本電信電話公社横須賀通信研究所のある研究室から、新人教育用のマイクロコンピュータ製品の開発を受注することになった。同部門の後藤富雄は部長の渡辺和也に教育用キットの開発を提案した。このキットに基づいて、TK-80は一般の技術者向けに開発され、マイクロプロセッサの需要を産業分野以外に創出することを目的としていた。
後藤富雄が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といったコンピュータ雑誌が創刊された。
加藤がBit-INNで販売・修理のサポートをしていたとき、ある医者からTK-80を医療点数計算に使う方法について質問され、また商店主からTK-80で販売伝票を整理できるか質問された。加藤は、ユーザーがTK-80を教育キットではなくコンピュータとして使おうとしていることに気付いた。しかし、TK-80は実用で使用するためにはメモリと拡張性が不足していた。同じ頃、サードパーティのメーカーより、テレビ出力とBASICインタプリタを搭載した拡張ボードが提案された。このボードをTK-80に組み込んだバージョンが、1977年末にTK-80BSとして発売された。搭載されたBASICは4KBのROMに収まるように設計され、いくつかの機能やステートメントの違いを除いて王理瑱のTiny BASICと同じであった。その機能や速度はユーザーを満足させるには至らなかった。このことが後のPC-8001の開発に繋がった。
日本では、Altair 8800は1975年に販売されていたが、輸入仲介手数料が高かったため売れなかった。Apple IIやPET 2001も同様であった。こうしてワンボードマイコンは人気を博した。
TK-80やTK-80BSなどのおかげで、コンピュータやソフトウェアに関するいわゆる「しきい」が一気に下がり、日本でコンピュータを熱心に利用する人々が多数誕生し、こうした人々が1979年のPC-8001が発売によってさらにその購入者・ユーザとなるなど、日本のパーソナルコンピュータ業界の盛り上がりへと真っ直ぐに繋がってゆくことになる。
最初に発売された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を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領域となる。
基板には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ではこのウェイトは不要なため、基板のパターンカットにより速度を向上させることができた。ただしタイマールーチンの待ち時間が変わるため、シリアル通信の伝送レートが変化してしまうという問題がある。
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そのものにはこのようなオーディオ変調/復調回路は含まれていないが、マニュアルには回路例が記載されており多くのユーザーは基板上のフリースペースにこの回路を組み込んでいた。
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命令)の実行後の割り込みが実行されるような回路になっている。
電源投入、あるいはRESETスイッチの操作によりTK-80はモニタプログラムの実行を開始する。モニタプログラムは、以下の操作を行うことができる。
指定したアドレスに、プログラムやデータを書き込みことができる。
指定したアドレスのメモリデータを読み出すことができる。
指定したアドレスからプログラムを実行する。
STEPモードの際に、1命令ずつ実行する。あるいはブレークポイントとブレークカウンタを指定し、条件を満たすまでSTEPモードの実行を連続的に繰り返すことができる。STEPモードでモニタに戻ってきた際には、退避されたレジスタの内容を参照することができる。
プログラム/データのロードとセーブ
STORE DATAキーの操作によりメモリデータをシリアルポートに出力できる。これをオーディオ信号などの形で保存しておけば、後でLOAD DATAキーを使ってデータをロードすることができる。
キーパッドからの入力、LEDへの16進の数値表示、タイマー、シリアル入出力などのサービスを提供するサブルーチンを利用することができる。
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側ではパターンをカットした後、この信号をメモリチップ用のデコーダに接続しなければならなかった。
TK-80には初期モデルμPD8080A(減算時の10進補正が可能でインテルと非互換)とμPD454D(EEPROM)、uPD5101E(バッテリーバックアップ可能)、低価格化後期モデル(TK-80E:Economy)μPD8080AFCとuPD464(マスクROM)、uPD2101AL-4 がある。
純正オプションとしてメモリーボードTK-M20K(RAM:12kBytes実装済、ROM:8kBytes実装可能、パラレルI/Oポート:8ビット×6組(μPD8255×2個)実装済、シリアルI/Oポート:μPD8251×1個 実装済)とμCOM BASIC STATION TK-80BS(Level1BASIC:整数BASIC、Level2BASIC:実数BASIC)があった。
TK-80E
EはEconomicのEつまり簡易品。値段と機能が少々落とされていた下位バージョンである。1977年12月発売。
TK-80BS
下の節 #TK-80BSとCOMPO BS/80で詳説。
COMPO BS/80-A
TK-80BSとCPUボードとインターフェースボード付カセットデッキと電源装置を内蔵した製品で、ワンボードとデスクパソコンの過渡的存在。1978年10月発表。
TK-85
CPU:μPD8085AC(動作クロック:2.4576MHz)、ROM:2Kバイト、RAM:1Kバイト、パラレルI/O:μPD8255AC-5×1個、カンサスシティースタンダード1200ボーCMTインターフェースが標準実装され、8進LED部には赤いアクリル板が付いていた。この頃は既にワンボードからデスクパソコンに移行が完了していた時期で、ホビー向けのワンボードとしては勿論最後の機種となった。1980年5月発売。
上述の通りTK-80は本来μCOM80プロセッサを売り込むための「お試しキット」であるため、高級言語への対応などは、まったく想定されていなかった。しかしながらホビイストからの熱狂的アプローチで、専門誌でTK-80でBASICを動かす記事が掲載されるようになり、さらにはサードパーティからTK-80用と称した拡張機器が(NECとは関係無しに)販売されるようになると、NECも事態を静観できなくなり、ついにはメーカー公式のBASICキットを発売する運びとなった。
そのメーカー公式BASICキットは、広く一般に型番で「TK-80BS」と呼ばれ(なおメーカー内部の品名としては「μCOM Basic Station」という名称が一応はあったが、メーカー関係者の大多数も、販売店の人々も、ユーザーたちも「TK-80BS」としか呼んでおらず、雑誌記事でも通常「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の両方を利用することができた。
Level-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が起動するようになっていた。TK-80BSとCOMPO BS/80の大きな違いとしてはカセットテープのボーレートの違いがあり、TK-80BSは300bpsだったのがCOMPO BS/80は1200bpsにアップされた。
完成品のCOMPO BS/80とは別にケース、電源は部品としても販売されていた。部品のケースを購入し、TK-80基板とベーシック・ステーションボードを重ねてバックプレーンで接続したユニットとキーボードを内部に装着すると完成品のCOMPO BS/80と同等のものにできた。この構成ではBASIC環境を起動するためにTK-80のキーパッドを操作する必要があるが、このケースはキーパッドの上部が開閉可能なフタになっており自由にTK-80基板を操作することができた(完成品のCOMPO BS/80も同じケースを使っていたので、このフタもあった。もちろん、開けても下の基板が見えるだけである)。