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

●TK80のステップ回路

[第454回]で、TK80はINT割込みを利用してステップ動作をさせていた、というあたりの説明をしました。
モニタプログラムからユーザプログラムに制御が移った直後に割込みを発生させることができれば、ステップ動作ができるはずです。
MYCPU80のTK80回路では、CPU回路のOPコードフェッチ信号と、インタラプトイネーブル状態を保持するFF(フリップフロップ)の出力信号を利用して、ユーザープログラムを1命令だけ実行したところで割込みが受け付けられる回路を考えました。
しかしその仕組みをそのままZ80CPUで使うわけにはいきません。

Z80CPUでステップ回路を考える前に、TK80(8080CPU)ではどういう回路になっていたのでしょうか?
というところで[第454回]は終ってしまいました。
で、今回はそこからの続きです。

TK80のSTEP回路です。

回路図のSTEPに関係する部分だけを示してあります。
ちょいと複雑な回路になっています。
ここのところの動作について、タイミングチャートで説明することも考えたのですけれど、やめておくことにいたしました。

私自身も8080の信号タイミングなど全く記憶にも残っていませんし、いまさらそれについてUser’s Manualで確認しながらタイミングチャートを描いてみたとしても、それほどものの役に立つというものでもない、と思ったからです。

実際タイミングチャートを描くのは面倒ですものね。
まあ回路を考えるときにタイミングチャートもどきの落書き程度のものを描くことはあるのですが、きっちりしたタイミングチャートなどを描いているより、回路図を描いてしまった方が速い、と思っているものですから…。
で、この回路図の説明については、かなりいい加減な、あやしげなところもあるのですけれど、そんなわけでタイミングチャートなしで、文章にて片付けてしまいたいと思います。
早い話が、手抜きです。

8080は命令の各マシンサイクルのはじめのところでデータバスにCPUの状態を出力するようになっていました。
回路図で8224というICがあります。これは8080のクロックオシレータなのですが、そのpin7からは、CPUがステータスをデータバスに乗せるタイミングを示すストローブ信号が出されています。

図の下の方にあるのは7474タイプのDフリップフロップのようです。
TK80の回路にはNEC製のICが使われていたらしくて、回路図についているIC名は標準のTTL名ではないようです。
でも信号の接続と端子番号から推測すると、このICは7474と同じだなあ、と思います。

データバスのD5の出力がインバータを介して、D−FF(と思う)のD信号入力に入っています。
「反転入力」の「反転出力」を後ろのD−FFのCK入力に入れているところが、なんとも気持ちが悪いのですけれど、多分このインバータはバッファだったのではないか、と思います。
8080は出力信号のドライブ能力が小さかったらしい、ということが[第453回]でもご紹介させていただいた、 半導体コレクション展示会場さまのサイトに書いてあります。

そのデータバスのD5には、STSTBのタイミングで、CPUステータスとして、そのマシンサイクルがM1サイクルであるときには1が出力されます。
ロジックが反転しているのでわかりにくいのですが、このD−FFのQ_出力は、M1サイクル(つまりOPコードフェッチサイクル)のときだけ、Hが出力されます。
このQ_は後ろのD−FFのCK入力になっています。

後ろのD−FFのPR(プリセット)入力には、INTE(インタラプトイネーブル)信号が入力されています。ここにもバッファが使われています。
INTEはEI命令が実行されて、割込みが受付可能状態であることを外部回路に知らせる信号です。

後ろのD−FF回路のPR入力にはINTE(Hアクティブ)が入っているわけですから、EIが実行されて割込受付可能になったとき(RET命令が実行されたあと)以外はQ出力がHになっています。
Q出力を見ていくと、NANDゲートを介して(そこで反転して)8080のINT入力(Hアクティブ)につながっています。
つまり、後ろのD−FFのQ出力がLになると、それがINT信号になるのです。

ここまでのところで、後ろのD−FFは割込受付可能状態のときだけ、Q出力がLになるためのスタンバイ状態になることがわかりました。そのほかのときはずっとHのまま(PRがLのままなので)ですからINT信号は出力されません。
後ろのD−FFのD入力はGNDにつながっていますから、CKが入力されたら、Q出力はLになります。
そのCKには前のD−FFのQ_がつながっています。
そのQ_は、通常はLで、M1サイクルのときだけHになります。

以上を整理してみます。
まず、モニタプログラムがステップ動作に入るために、EI命令を実行して、そのあとRET命令を実行すると、割込みが受付け可能になって、INTEがHになります。
INTEがHになるので、それを受けて後ろのD−FFが、CK入力があればQ出力が変えられる状態(それまではQ=H固定)になります。
RET命令でユーザープログラムに戻ると、そこでユーザープログラムの命令がフェッチされます(M1サイクルが実行される)。
M1サイクルが実行されると、前のD−FFのQ_出力がLからHに変わるので、つまりそれは後ろのD−FFのCKがLからHになることなので、後ろのD−FFのQ出力がLになります。
すると、INT信号がアクティブ(H)になります。
このINT信号は、今実行中のユーザープログラム命令の最後のサイクルの終わりにCPUによって認識され、そこで割込みが発生することになります。
つまりモニタプログラムからユーザープログラムに制御が移って、ユーザープログラムが1命令だけ実行された直後に割込みが発生し、そこでステップ処理ルーチンが実行されるのです。

以上、文章だけで説明いたしましたが、ご理解いただけましたでしょうか?
2010.3.13upload

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