┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏ ┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛ -- 基礎から学ぶコンピュータ -- 《第四十二号》 ┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓ ┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗┛┗ ┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━ ┃マイクロプロセッサ┃ ┻━━━━━━━━━┻ ∈≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡∋ Z80 の割り込み(4) ∈≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡∋ ■ 優先順位制御 ■  モード2の割り込みでは、割り込み要求を出した装置が割り込みアクノリッ ジサイクルに対して応答する必要があります。割り込み要求は複数の装置が同 時に出す可能性がありますが、複数の装置が同時に割り込みアクノリッジサイ クルに応答してしまうと困ったことになってしまうので、必ずどれかひとつだ けが応答するようにしなければなりません。といっても割り込み信号線は1本 だけなので Z80 にはどの装置が応答すべきなのか分かりませんし、装置にも 分かりません。モード1ではこのような問題は ISR、つまりソフトウェアが判 断することで解決していましたが、モード2ではハードウェア的に解決する必 要があります。  ハードウェア的に解決とは、つまるところ同時に複数の装置が割り込み要求 を出さないような回路にするということです。同時に出るという可能性自体は どうにもならないので、ひとつの要求だけを CPU に伝えて、他のものは待っ てもらうという制御を行います。つまり割り込み要求に優先順位を付け、その 順位順に割り込み要求を消化していくというわけです。  通常このような制御をするためには割り込みコントローラを用いたりします が、Z80 のファミリ IC では、IC 同士を配線で接続するだけで優先順位の制 御を行うことができるようになっています。その接続方法はこんな感じです: #INT ───┬────────┬────────┐ │ │ │ ┌──────┐ ┌──────┐ ┌──────┐ ┬ │#INT │ │#INT │ │#INT │ │ │ 装置1 │ │ 装置2 │ │ 装置3 │ └─│IEI IEO│─│IEI IEO│─│IEI IEO│ └──────┘ └──────┘ └──────┘  IEI(Interrupt Enable In) は割り込み可を示す入力信号で、これが真の時 に装置が割り込み要求を出すことができます。IEO(Interrupt Enable Out) は 出力信号で、装置が割り込み要求を出しておらず、なおかつIEI が真の時に真 を出力します。この2つの信号を数珠繋ぎにすると優先順位制御ができるとい う仕組みです。図では装置1の優先順位が最も高く、装置3が最も低くなってい ます。ちなみにこのような接続方法は、雛菊を編んで作った輪っかみたいな感 じから「デイジーチェーン(daisy chain)」と言われます。  IEO と IEI がそのまま接続されていることに注目してください。これによ り IEO の出力条件がそのまま割り込み要求を出せる条件となります。つまり IEI に接続されている装置が割り込み要求を出していないか、またはその上位 の装置が割り込み要求を出していなければ、自身が割り込み要求を出せるわけ です。最も上位の装置は誰に気兼ねなく割り込み要求を出せるので、常に許可 ということで IEI を常に真(プルアップ)しておきます。 自身が割り込み要求を出している時には、IEO に接続されている装置以下が全 て割り込み要求を出すことができなくなります。上位の装置が割り込み要求を 出している時には下位は割り込み要求を出せません。ということで優先順位制 御ができていることになります。  IEO による割り込み禁止状態が解除されない限り、下位の装置は割り込み要 求を出すことができません。Z80 ファミリ IC では、RETI 命令の実行により IEO による割り込み禁止状態を解除し、保留されていた(かもしれない)割り込 み要求の処理を行えるようにします。もし RETI 命令を実行しないで ISR か ら戻った場合、割り込み要求を受けた装置より下位の装置からの割り込み要求 が一切出なくなってしまいますから、モード2での RETI 命令の実行は大変意 味のあるものになります。  RETI 命令を実行することによってバスが特有の変化をするわけでも無いの に、なぜただの周辺装置に RETI 命令を実行したということが分かるのでしょ うか。実は Z80 のファミリ IC はバスを常に監視していて、Z80 がフェッチ した命令が RETI であるかどうかをチェックしています。つまり M1 サイクル の時にデータバスに乗った内容が RETI のオペコードである ED 4D であれば ISR が終了したと判断するわけです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 編集発行:りゅう 感想、質問、お問い合せなどは rryu@t3.rim.or.jp へ 配信先の変更や解除はこちらで行えます。 http://white.sakura.ne.jp/~rryu/compfund/index.html ━━━━━━━━━━━━┥A computer to learn from the foundation ┝━