4

私は楽しみのために、多くの周辺機器を備えたより複雑な Z80 CP/M システムを設計しようとしています。ドキュメントを読んでいるときに、IM0 で割り込みを受け入れるときの Z80 CPU の (ドキュメント化されていない?) 動作に出くわしました。

割り込みが発生すると、Z80 は M1 と IORQ をアクティブにして、外部デバイスに「オペコードをくれ」という信号を送ります。オペコードが rst 00 またはこのようなものであれば、すべて問題ありません。ドキュメンテーションによると、CALL など、任意のコマンドの任意のオペコードを CPU に与えることができます。

しかし、文書化されていない部分があります。「マルチバイト命令の最初のバイトは、割り込み応答サイクル中に読み取られます。後続のバイトは、通常のメモリ読み取りシーケンスによって読み取られます。」

「通常のメモリ読み取りシーケンス」。CPU がメモリからバイトを取得したいのか、デバイスから次のバイトを取得したいのかを判断するにはどうすればよいですか?

編集:私は、(良い?) 解決策を見つけたと思います: IORQ と M1 を分析することで、割り込み確認サイクルの開始を検出できます。また、MREQ と M1 を分析することで、次の「通常の」オペコード フェッチを検出できます。このようにして、これら 2 つの AND 信号によってトリガーされるフリップフロップをインストールできます。つまり、CPU が io デバイスからデータを読み取る限り、フリップフロップは 1 です。この 1 を使用して、メモリとの間でバス ドライバを禁止できます。

私の意図?CPLD で 8 つの優先入力を備えた割り込みコントローラーを設計しています。そのレジスタは、各割り込みピンの 16 ビット アドレスを保持します。楽しみのためだけに:-)

4

2 に答える 2

4

私の理解では、周辺機器が必要です。

  • フィードする必要があるバイト数を知る。
  • IORQ サイクルに続く通常の読み取りサイクルに応答する。と
  • 通常、メモリ読み取りサイクルに応答するものは何でも、その間応答しないように調整します。

また、この動作はアプリケーション ノートでZilog によって文書化されており、そこから引用が行われました (おそらく信用されていません)。

実際には、IM0 ユーザーのRST99.99% が を使用し、残りの 99.99% が のような既知のサイズの命令を使用していると思いCALL xxxxます。

(また、割り込みサイクル中にバスに何も置かないことを効果的に保証するいくつかのマイクロを認識しているため、オープンコレクタ出力によるIM0同義語になります)。IM1

于 2014-12-07T00:16:04.510 に答える