ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.6.29
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆特注品Z80ボードND80ZHの機能説明
TK80コンパチブルで、その上中日電工オリジナルのND80Zとしても動作するというZ80CPUのワンボードマイコンを企画し、その開発準備をしていたところに、ND80Zの特注品の開発依頼をいただきました。製品名はND80ZHです。
新企画のZ80ボード(ND80ZV)はこのあとで製作することになりますが、基本的な機能はND80ZHと共通していますから、まずはND80ZHの機能を説明します。

[第26回]

●Z80の割込み応答

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

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

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

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

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

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

で、こちらはその後に[第6回]で紹介しました、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でのステップ回路が前回、[第25回]にお見せした、ND80ZHのステップ回路なのですが…。
その回路図をよく見ますと、ROMselect信号だけではなくて、RFSHなどというわけのわからない信号が抱き合わせになってしまっています。

それはまた一体どういうわけなのか、という説明につきましては、また次回にさせていただきます。
CPUをつくろう!第458回(2010.3.17upload)を再編集

ワンボードマイコンをつくろう![第26回]
2011.6.29upload

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