TK-80BS
[Wikipedia|▼Menu]
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製は両者とも減算後の補正も行えたのである。[注 4]NEC製チップは加減算のBCD補正を行うために、直前に行ったのが加算であるか減算であるかを記憶するSUBフラグをPSW(フラグレジスタ)中に追加した。

プログラムを作る立場からすればNECによる拡張は便利なものだったのであるがオリジナルの8080Aとの命令の動作の違いフラグの構成の違いなどの問題があり[注 5]、後から販売されたTK-80EではBCD演算処理がインテルのオリジナルと同じになっているμPD8080AFC[注 6]に変更された。

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である。[12]

EE-PROMを使ったのは組み込み機器の実験などのためにユーザーがデータを書き換えて使えるようにするためだったと思われるが、アマチュアへの販売量が増えたために販売された後継の廉価版のTK-80EではμPD454DとピンコンパチブルなマスクROMのμPD464に変更された。

ROM用領域は、8080のアドレス空間の0000Hから03FFHの1Kバイト分である。TK-80/TK-80Eともマニュアル通りの組み立て完成時の状態ではPROM実装用スペースが1つ残っている[13]ので、自分で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命令)の実行後の割り込みが実行されるような回路になっている。
モニタプログラム

電源投入、あるいはRESETスイッチの操作によりTK-80はモニタプログラムの実行を開始する。モニタプログラムは、以下の操作を行うことができる。
RAMへのデータ書き込み
指定したアドレスに、プログラムやデータを書き込みことができる。
メモリデータの読み出し
指定したアドレスのメモリデータを読み出すことができる。
プログラムの実行
指定したアドレスからプログラムを実行する。
シングルステップ実行
STEPモードの際に、1命令ずつ実行する。あるいはブレークポイントとブレークカウンタを指定し、条件を満たすまでSTEPモードの実行を連続的に繰り返すことができる。STEPモードでモニタに戻ってきた際には、退避されたレジスタの内容を参照することができる。
プログラム/データのロードとセーブ
STORE DATAキーの操作によりメモリデータをシリアルポートに出力できる。これをオーディオ信号などの形で保存しておけば、後でLOAD DATAキーを使ってデータをロードすることができる。
ライブラリルーチンの提供
キーパッドからの入力、LEDへの16進の数値表示、タイマー、シリアル入出力などのサービスを提供する
サブルーチンを利用することができる。
拡張性

100ピンのエッジコネクタにはアドレスバスデータバス、メモリ/I/Oの読み書きの信号などが接続されていたので外部回路を接続することができる。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:50 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef