標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第177回]

●全回路完成!です

[第173回]で、CPUの回路+7segLED回路が完成したことをお知らせしましたが、その時点では、まだ実装していなかった、残りの回路も実装し、動作テストも全て完了しました。
今度こそ、本当に、全回路完成です。

写真をクリックすると、拡大画像を見られます。
拡大画像はサイズが大きい(約1.5MB)ので、インターネットの低速接続環境ではダウンロードに時間がかかります。ご注意ください。



なんたって480mm×313mmです。A3サイズのスキャナでも、しっかりはみ出してしまいます。
4回に分けてスキャンしたものを貼り合わせました。
ですからよく見ると、つなぎ目がありますけれど、まあまあ、割とうまく貼り合わせできたと思います。
こうやって、あらためて、写真を見ていると。
うーん。感無量です。

●キー入力回路と232C回路とROM回路

その後に実装したのは、TK80の5×5キー入力回路と、PICを使ったRS232C送受信回路、おまけとしてスピーカ出力回路です。
そうそう、もちろんROMも実装できるようにしましたよ。
簡単なプログラムをROMに書き込んで、ROMでもちゃんと動作することを確認しました。
これができなければ、TK80にはなりません。

キー入力回路は7segLED表示回路と同じで、とりあえずは正しく動作することだけを確認しました。
これから、TK80の機能として、キー入力と7segLED表示の全てのモニタプログラムを作成して、ROMに焼き付けることになりますが、部分としての動作は確認できましたので、あとは時間の問題でしょう。

TK80の時代には、作成したプログラムの保存には、カセットテープレコーダを利用しました。
今では、それはいくらなんでも時代遅れです。
せっかくWindowsパソコンがあるのですから、プログラムはパソコン上で、アセンブラで作成して、できたマシン語プログラムは、RS232Cで、RAMに書き込むようにできれば便利です。

その昔はRS232Cインタフェース回路も専用のLSIを使って作りましたが、今はPICという便利なICがあります。
これを利用しないテはありません。
PICはちょいとクセがありますけれど、うまく利用すれば、なかなか便利なICです。
8080やZ80に比べれば、マシン語の命令数もうんと少ないので、プログラミングは比較的簡単です。
今回は18pinのPIC16F88を使いました。
クロック発振回路も内臓していますから、クリスタルも不要です。
なんと、コンデンサと抵抗各1本のみで済んでしまいます。
シリアル送受信とASCII<>16進数の変換はPICにまかせて、CPUとPICとの間は8ビットパラレル、ハンドシェイクでデータを交換します。
このあたりの回路図は、[第129回]でお見せしました。

●割り込み回路

それから、CPU命令回路で、最後まで残っていたINT(割り込み、interrupt)の命令コード挿入動作のテストも昨日完了しました。
8080の割り込みは、INT端子にLパルスを入れることで行われます。
簡単な割り込み動作には、INT信号の入力のみで実現できる、RST7を利用した0038番地への割り込みジャンプを使うことが多いのですが、8080のINT割り込みの機能は、本来は、INT信号の入力と同時に、データバスに1バイトのマシン語命令コードを与えるように考えられています。
信号のタイミングは異なりますが、「つくるCPU」の回路も8080と同じように、INT信号入力時に、データバスから割り込み命令を読み込めるような回路にしてあります。

割り込み回路については、いずれ詳しく説明するつもりですから、ここでは簡単な説明にとどめます。

割り込み時のタイミングチャートです。


EI命令(割り込み許可)が実行されたあとは、INT信号は、各命令のT0のはじめのタイミングでラッチされます。
↑ブラウザの文字表示によっては、くっついてしまって、漢字の”曰”のように見えてしまいます。”曰”ではありません。”E”と”I”です。
Enable Interruptです。

INT信号がラッチされると、T0〜T3の間、アドレスバス、データバス、およびMEMRD、MEMWRなど全てのCPUの出力がハイインピーダンスになります。PC(プログラムカウンタ)のインクリメントも行われません。
その代わりにINTRD信号だけがアクティブ出力されます。
外部回路はこの期間に、INTRD信号を利用して、データバスに1バイトの命令コードを乗せます。
INTRDがアクティブな期間のみ、割り込み命令をデータバスに出力するためには、それなりの回路が必要になります。
8080はこのあたりの制御が複雑だったため、専用の割り込みコントローラが必要でした。
「つくるCPU」の回路はシンプルにできていますから、簡単な外部回路でもコントロールできますが、それでも全くなにもいらない、というわけにはいきません。それなりの回路は、やっぱり必要です。

この特殊な割り込みサイクルでも、T1のタイミングで、OPコードレジスタにOPコードがフェッチされます。
フェッチされた命令はT4以後、通常の命令の処理タイミングで実行されます。

INTRDが出力されている期間には、データバスに、理屈の上では、全ての1バイト命令の、命令コードを乗せることができます。
しかし、割り込み動作を意味あるものにするためには、このときにデータバスに乗せる命令は、RST命令になります。

RST命令には、RST0〜RST7の8種が有ることを、前回お話しました。
このうちのRST7は、16進コードがFFなので、INTRDが出力されている期間に、わざわざ外部回路を作って、命令コードをデータバスに乗せなくても、INT信号さえ出せば、データバスは何も出力されないときには、FFになっていますから、そのままでRST7命令になってしまいます。

8080では、簡単な割り込み制御をする場合に、もっぱらRST7が利用されたのは、そのような理由からです。

もともと割り込みはかなり高度なプログラムテクニックを必要としますから、この「つくるCPU」基板で、そんな難しいことまでやるかいな、と考えれば、割り込み機能などなくても構わないのですよね。
その意味では、INT割り込みでRST7のみできれば、それで上等じゃあないの、と澄ました顔をしていても、一向に構わなかったわけなのですが、そこはそれ、ホンモノ志向といいますか、できれば、そこまでこだわりたい(おばかなんですねぇ)。
で、作ってしまいました。

RST7割り込みだけではなくて、RST0〜RST6割り込みも実行できるように、動作テスト用に、それなりの外部回路も作ってテストをいたしました。
もちろん、しっかりと動作いたしましたよ。
そのあたりのところも、後日詳しく説明いたしますね。

●基板の裏側の写真です

写真をクリックすると、拡大画像を見られます。
拡大画像はサイズが大きい(約1.2MB)ので、インターネットの低速接続環境ではダウンロードに時間がかかります。ご注意ください。



一言で言うと、「頭が、痛い」、です。

自己満足ということでしたら、もう、十分、満足です。
目的達成。万歳!

ということで、今回の企画は、成功裏に無事終了いたしました。シャンシャン。
ならば、楽なのですけれど…。

ですけれど、それで終わってしまったら、せっかくここまで長々とつきあっていただいた皆様方に申し訳がありません。
皆様方にも、この満足感をお分けいたしたい。この満足感をぜひとも味わっていただきたい。
もっとも、その思いに応えていただける方が、はたして何人いらっしゃるかは、正直疑問ですけれど…。

でも、ここまでくれば、やるしかないじゃ、ありませんか。

となると、私的には、これからあとは、ひたすら長く苦しい退屈な作業…。
まずは、このクモの巣を張り巡らせたような配線を一本ずつ丁寧にたどりながら、基板配線を直していかなければなりません。
でも、もう基板サイズの限界まで広げてしまっていますから、これだけの追加配線を、どこに通せばいいのか…。
うー。ほんと、頭がいたい…。

そのかたわら、まだ説明の済んでいない命令回路について、説明を進めていかなくてはなりませぬ。
お、お、お。組立キットという、お約束でしたから。当然、組立説明書は必須ですよねぇ。
せめて、部品表と部品配置図は欠かせません。
ったって、ICだけでもおよそ250余りもあるんですよぉ。部品表だけでもハンパじゃありませんから…。

それに。お花見だって、行きたいですし…ねぇ。
2009.3.7upload

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