TTM8のI/Oの製作

TTM8は電子ライダーさんが開発され、みやこ電子工房で販売している8ビットCPUキットです。CPU自体のキットですのでマイクロプロセッサは使わず、ほとんどすべてをロジックICで作ってあるため、組み立てには1000か所以上のハンダ付けが必要という大変作りがいのあるキットです。

(表はTTM8マニュアルより引用)

CPUの構造と動作原理を学習するキットのため、付属するプログラム入力ボード(これだけにはマイコンが使ってあります)のボタンと7セグLED以外のI/Oが全くありません。何か外部のものを接続するにはI/Oポートから自作する必要があるという、これまたやりがいのある仕様になっています。

TTM8はデータ8ビット、メモリ空間も8ビット(256バイト分)の仕様で、データバス、アドレスバスともに8本用意されています。バスの信号線は電源や制御信号線とともに、拡張用コネクタからアクセスできるようになっています。

拡張用コネクタにはプログラム入力ボードが接続されていますが、プログラム入力用ボードにも接続用のコネクタがあり、26ピンのフラットケーブルコネクタで数珠繋ぎに外部装置を接続できます。

今回はとりあえず汎用の出力専用ポートと入力専用ポートを一つずつ作ることにしました。

作成の方針と実装

TTM8のメモリマップは以下の図のようになっていて、D0〜DFの16個のアドレスが外部接続用に確保されています。

(図はTTM8マニュアルより引用)
これらのアドレスが選択されると、制御信号線に外部接続許可の信号が出ます。外部装置は接続許可されたらアドレスバスを見て、自分に割り当てられたアドレスであるか判断し、そうであればデータバスに読み取り、あるいは書き込みの動作を行います。

アドレスは、アドレスバスの下位3ビットで判断します。3ビットだとアドレス8個分ですが当面は十分な数です。

以下に実装した回路を示します。

拡張用コネクタのアドレスバスの下位3ビット(A0~A2)を、デコーダ(74HC138)でY 0~Y7の8本の信号線に振り分けます。例えばアドレスがD0ならY0の信号線がONに、D7ならY7がONになります(負論理なのでON=Low)。
外部装置をD0のアドレスに割り当てたのであれば、Y0がONになれば自分が指定されたと判断し、データバスへのアクセスを開始します。

出力ポートにするには、自分が指定された瞬間のデータバスの状態を保存する必要があるためデータバスにレジスタを接続します。レジスタにはD-フリップフロップ(74HC273)を利用します。
ポートの状態を視認するために、1ビットごとにLEDをぶら下げてあります。

入力ポートは自分が指定された瞬間のポートの状態を、バッファ(74HC245)を介してデータバスに反映させます。
入力はプルダウンしますが、任意の値を設定できるように1ビットごとにスイッチでHigh/Lowを切り替えられるようにしてあります。ポートに外部の入力装置を接続する場合は、スイッチをすべてLow側にしておきます。

(実装したもの。クリックすると動画を表示します)

上の動画のプログラムは入力側のDIPスイッチの値を取得して、出力に反映させているだけで、以下のようなコードになります。

C2は汎用レジスタ(CR)のアドレス、D0は出力ポートのレジスタのアドレスになります。

応用例

出力ポートの信号で1分ごとにソレノイドを制御して、機械的な時計を作るプロジェクトの例