2015.12.31
前へ
次へ
ホームページトップへ戻る

トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


[第143回]


●[HC373]組立キットの製作(3)RD_、WR_、ビット7回路(動作テスト)

今回は[HC373]の動作テストを行ないます。
[HC373]は8ビットのデータレジスタです。
[HC373]だけを単独でテストをすることにはちょっと無理があります。
本来の使い方を意識して、[HC139]と接続したうえで、ND80Z3.5(ND80ZV)と接続しての動作テストを行ないます。

[HC373]には[HC139]と同じ端子配列の16pinフラットケーブル用コネクタがあって、[HC139]とフラットケーブルでつなぐことで、CPUのデータバスとRD_、WR_の信号線がつながります。
16pinコネクタの端子接続図は[第115回]にあります。
CS_信号は基板右上の2pin丸ピンソケットと[HC139]の右上の8pin丸ピンソケットの1pin〜8pinのいずれかとをジャンパーケーブルで接続することで得られます。
[HC139]の8pin丸ピンソケットにはアドレスバス信号をデコードして得られたセレクト信号が出ています。

ND80Z3.5(ND80ZVでも同じです)の26pinバスコネクタと[HC139]の26pinコネクタを26pinフラットケーブルで接続し、[HC139]と[HC373]とは16pinフラットケーブルで接続して、さらに[HC139]の右上の8pin丸ピンソケットの1pinと[HC373]の2pin丸ピンソケットをジャンパーケーブルで接続しました。

[HC139]の基板左下側にある2列シングル丸ピンソケットには[第140回]と同じようにジャンパーケーブルでの接続を行ないます。
ただし[HC139]だけのときのテストと今回のように[HC139]と[HC373]を接続してテストをするときとでは、IORD、IOWRの扱いが異なります。
[HC139]だけのテストではIORD(またはIOWR)をG1_に接続しました。
特定のIOアドレスに対してIN命令、OUT命令を実行したときだけセレクト出力が出るようにするためです。
今回はIORD、IOWRは16pinフラットケーブルを通して[HC373]に供給されます。
[HC139]のG1_にはA7を、G2_にはA6を接続します(CにはA2、BにはA1、AにはA0を接続します)。
そのようにすることで[HC139]のセレクト信号の出力はIN、OUTに関係なくアドレスバスの組み合わせによって出力されることになります。
G1_にA7、G2_にA6を接続しましたから、[HC139]のセレクト出力はアドレスが00XXX000〜00XXX111のときに有効になります。
今回は[HC139]のY0出力(右上の8pin丸ピンソケットの1pin)を[HC373]のCS_に接続しましたから、[HC373]のアドレスは00XXX000になります。

[第120回]で行なったテストでは今回と同じ接続をして、ND80Z3.5から、
LD A,FF
OUT (00),A
および
LD A,00
OUT (00),A
を実行しました。
具体的にはアドレス8000から
8000 3EFF
8002 D300
8004 76
と書いて8000[ADRSSET][RUN]を実行するというような方法でテストを行ないました。


今回同じようにしてテストをしようとして、まてよ?こんなことをしなくてももっと簡単ににできたのでは?と、やっと気が付きました。
全くうかつな話でありました。
ND80Z3.5(ND80ZV)にはこういうときに役立つ便利な機能があることを完全に失念しておりました。
全く歳は取りたくないものであります。

ND80Zモニタではメモリアクセスで[ADRSSET][WRITEINC][READINC]キーを操作するのと同様にして、[*(I/O)][OUT][IN]キーを操作することで、簡単にI/O操作ができます。

これは便利な機能です。
こんな便利な機能があったことを忘れてしまっていたとは…(ええ。自分でそのように設計しておいてですよ)。

[OUT]は[E]に、[IN]は[F]に割り当てられています。
[*(I/O)]キーに続けて[E]キーを押すと、現在7セグメントLEDのアドレス表示部の下位2桁に表示されているアドレスがI/Oアドレスとなって、そのI/Oアドレスにデータ表示部の下位2桁に表示されているデータが出力(OUT)されます。
[WRITEINC]と異なり、アドレスはインクリメントされません。
[*(I/O)][OUT]のキー操作をするたびに同じI/Oアドレスに対してOUT命令が実行されます。

また同様にして[*(I/O)]キーに続けて[F]キーを押すと、アドレス表示部の下位2桁に表示されているアドレスに対してIN命令が実行され、読み込まれたデータがデータ表示部の下位2桁に表示されます。
データ表示部の下位2桁以外の表示は変わりません。
[*(I/O)][IN]のキー操作をするたびに同じI/Oアドレスに対してIN命令が実行され、読み込まれたデータがデータ表示部の下位2桁に表示されます。

今回はその機能を使ってテストをしてみました。
7セグメントLEDが00000000のときに[F][F]とキー入力して下の表示にします。

この写真は続けて[*(I/O)][OUT]とキー入力したあとの状態を撮ったものです。
I/Oアドレス00に対してFFがOUTされた結果、[HC373]のビット7のLEDが点灯しました。

次は[HC373]からデータを読み込んでみます。
といってもまだビット7しか実装していませんから、データの最上位ビットしか有効ではありませんが。
[0][0]とキー入力してデータ表示部の下位2桁の表示を00にしました。

こうしておかないと、もとから表示されていた値と読み込んだ値との区別がつかないからです。

[*(I/O)][IN]とキー入力しました。

データ表示部の下位2桁がFFになりました。
しかし、これだけではこのFFが本当に[HC373]から読み込まれた値なのかどうか、ちょっと疑問が残ります。

ですので、今度は[0][0]とキー入力しておいて、[*(I/O)][OUT]とキー入力しました。

[HC373]のビット7のLEDが消灯しました。
[HC373]のビット7に”0”が書き込まれたことが確認できました。

[*(I/O)][IN]とキー入力しました。

7セグメントLEDのデータ表示部の下位2桁が7Fになりました。
[HC373]から値が読み込まれた結果、ビット7だけが”0”になりました。
これで[HC373]から正しく値が読み出せたことが確認できました。

手前味噌ですけれど、ND80Zモニタの[*(I/O)][OUT]、[*(I/O)][IN]はなかなかに便利な機能なのであります。

今年一年、拙文にお付き合いくださり有難うございました。
来年もよろしくお願いいたします。
皆様よいお年をお迎えください。

トランジスタでCPUをつくろう![第143回]
2015.12.31upload

前へ
次へ
ホームページトップへ戻る