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

●Z80の割込み応答

前回はTK80のステップ回路と、MYCPU80のTK80回路のステップ回路について説明をしました。
OPコードフェッチのタイミング信号(M1)と、INTイネーブル信号をもとにして、D−FFを使って、ユーザープログラムを1命令だけ実行したところでINT信号が発生するという仕組みについて説明をしました。

ところがZ80には、肝心の割込みが受付可能状態であることを外部に知らせるINTイネーブル信号がありません。
まあ、たしかにそんな信号はあってもなくても、とにかくINT信号を出して、それが受付けられればよいわけで、受付けられなければたいていは受付けられるまでINT信号を出しっぱなしにすることになると思いますから、Z80の開発チームは多分そのように考えて、INTE信号を出さないことにしてしまったのでしょう。

しかし、それではTK80で用いたステップ回路を使うことができません。
Z80を使ってTK80と同じようなステップ回路を実現するためには工夫が必要になってきます。

その工夫について考える前に、では一体Z80はどのようなタイミングで割込み処理を行うのでしょうか?
それについて少し調べてみたいと思います。

まずはこちらのタイミングチャートです。

これは[第435回]で紹介しました、Zilog社のサイトからダウンロードした簡単なZ80のDatasheetからの引用です。
しかし。これはひどい。手抜きもいいところです。
このドキュメントは既存のマニュアルから適当に抜き出して寄せ集めをしたとしか思えない、相当にいいかげんなしろもので、見習いの新入社員かバイトにでも編集させたのではあるまいか、といった類のドキュメントです。

で、こちらはその後に[第437回]で紹介しました、Z80 User’s Manualからの引用です。
こちらがタイミングチャートです。


そしてこちらが、その説明文です。


う。う。う。
率直に申し上げて、Zilogのマニュアルは、だめだなぁ、です。
肝心のところが抜け落ちています。
よーするに、INT信号が、(どの命令のときでも)その最後のクロックの上がりエッジでサンプリングされると、CPUは特別のM1サイクルを発生させます。そのM1サイクルで、MREQの代わりにIORQがアクティブになるので、そのときデータバスに割込みベクトルデータを乗せなさいよ、ということです。
文章に書いてあるのはそれだけ。

一言足りませんでしょう。
今回のタイミングチャートにはかろうじてついています。

そう。RD信号です。
OPコードフェッチのためのM1サイクルではMREQ信号とともにRD信号がアクティブになります。そうしなければメモリから命令やデータを読むことができません。
しかし割込みのためのM1のときにIORQ信号とともにRD信号がアクティブになったら、どこかのI/O回路がセレクトされて、そこからデータが出力されてしまうかもしれません。
ですからこのときはRD信号はアクティブにはなりません。IORQだけがアクティブになります。
そこのところははっきり書いておいていただきたかったですねえ。

そういえば、アラ捜しみたいですけれど、上の引用文の下から2行目のところに、「詳しくはChapter 6を参照されたし」とあるのですけれど、このUser’s Manualを全文検索してみた結果、「Chapter 6」は、この行の1箇所しかないのですよねえ。
そもそもこのManualには、Chapterなるものが全然ないのですよ。
いったいどうなっているのでしょ。

それはともかくとしまして、それならINTE信号の代わりに、このIORQ信号が使えるか、といいますと、それはどだい無理な話です。
なぜって、このIORQはINT信号が受付けられた結果としてアクティブになるものなので、そのINT信号を発生させるための信号としては使えるわけがないからです。

ともかくこのZ80の割込み応答のチャートからは、INTEに代わる信号をみつけだすことはできません。
で、発想の転換です。
INTE信号ではなくても、ステップ動作の仕組みから考えていくと、INTイネーブルのタイミングを知ることは、ほら、できるじゃありませんか。

INTイネーブルのタイミングはといいますと、モニタプログラムの終わりにEI命令が実行されて、そのあとRET命令が実行されて、ユーザープログラムに戻った、まさにそのときがINTイネーブルになったときなのです。
ということは、ROMがアクセスされているときはINT信号を出力するフリップフロップ回路を非アクティブにしておいて、RAMがアクセスされるときだけアクティブにすればよい、ということになります。

そのように考えたZ80CPUでのステップ回路が前回、[第457回]にお見せした、ND80ZHのステップ回路なのですが…。
その回路図をよく見ますと、ROMselect信号だけではなくて、RFSHなどというわけのわからない信号が抱き合わせになってしまっています。

それはまた一体どういうわけなのか、という説明につきましては、また次回にさせていただきます。
2010.3.17upload

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