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

前回までで、やっとZ80版TK80ボード(ND80ZH)についての説明がほぼ終わりました(じつは終わっていませんでした)。
で、お話が、どこからどのようになっていったのかを、過去にさかのぼって読み直してみました。

うう。
なんだかお話が途中で完全に中断したままになっておりました。
われながら、ひどいものだと思います。

え…と。
2010.2.8の[第432回]で、Win98DDKを入手して、そのWin98DDKフォルダにあったHidsdi.hとHidpi.hを組み込んでみたのですけれど、それでもHidプログラムのコンパイル(実はリンク)時の「未解決」エラーは「解決」できませんでした。
というところで終わってしまっていました。
なんと、それからもう1ヶ月以上経ってしまいました。
いいかげんに軌道修正して、元に戻って続きを書かなければいけないのですけれど…。

実は…。
さらに読み進んでいきましたところ、ND80ZHのところで、ステップ回路についての説明を完全にすっぽかしたままになっていることがわかりました。
[第437回]で、ステップ回路の説明に入りかけたところで、INT信号とNMI信号の説明に行って、そこで終わってしまって、その続きについて、書いてありませんでした。
そういえば、NMIについても、まだもう少し書くことがありました。
あちこちずいぶんやりっぱなしで、きてしまっています。

何から書いていっていいのやら、いささか混乱してしまいます。

●ふたたびステップ回路の説明です

でもまあ、順序として、やっぱりここから再開することにいたしましょう。
結局のところ、今回も引き続いて、Z80版TK80ボード(ND80ZH)のお話です。
お話の流れとしては[第437回]の続き、ということになります。

TK80のステップ動作はINT信号入力による割込みを利用していました。
TK80は、INT信号と同時にデータバスに乗せられるRST7命令(16進コードはFF)によって、0038番地からの割込み処理プログラムが実行されることで、ステップ動作の処理をおこなっていました。
その仕組みについては[第241回]あたりで説明をしています(ここの説明はTK80のステップ動作というよりも、MYCPU80の「TK80回路」のステップ動作の説明、ということなのですけれど)。

8080は、INT信号を受け付けると、その直後にデータバスから8ビットの命令コード(RST命令)を読み込みます。
そのRST命令によって、0000〜0038に、8バイトおきに配置された割込み処理ルーチンを実行します。

Z80も8080のINT割込み処理と全く同じ動作をさせることができます。
ただし、8080のINT信号はHアクティブでしたが、Z80のINT信号入力はLアクティブであることだけが異なっています。

さらに、Z80では、この8080互換の割込み処理のほかに、2つの異なる割り込み機能を備えています(NMI割り込みのことではありません)。
ですがそれについての説明をはじめると、また話が横にそれていってしまいます。
ですから、Z80の、8080互換の割込み以外の割込みについてはもう少し後で説明することにいたします。

Z80は8080の全ての命令をそのまま実行できます。
またTK80のステップ動作で使われている、RST7割込みも、Z80は同じように実行することができます。
それなら、ステップ動作の回路も、TK80と同じ回路にすればよいか、といいますと、そういうわけにはいかないのです。

RST7割込みの動作や、ステップ動作の仕組みはTK80と同じですけれど、8080とZ80とでは、そのステップ動作で使う信号が異なっているために、TK80と同じ回路は使うことができません。
そのことを説明するために、まずMYCPU80でのTK80回路のステップ動作について復習をしてみましょう。

MYCPU80のTK80回路のステップ動作の説明は[第248回]にあります。
回路図とタイミングチャートを使って説明をしています。

RST7命令の割込み動作をさせるためには、EI命令を実行して割込みを受付可能にしておかなければなりません。
このEI命令の実行と、それによって実際に割込みが受付可能になるタイミングとの間には、1命令のタイミングラグがとられています。

割込みが受け付けられると、自動的に割込み禁止状態になってしまうため、割込み処理が終わって、次の割込みを受付可能にするためには、割込み処理ルーチンの終わりのところで、EI命令を実行することになります。
通常の割込み処理ルーチンはサブルーチンになっているはずなので、割込み処理ルーチンの最後の命令はRET命令になります。
するとEI命令は、そのRET命令の前に置くことになります。

ところで、もしEI命令の実行直後に割込みが受付可能にされたとすると、そのときまでにINT信号がすでに入力されていた場合、割込み処理プログラムの最後のRET命令の実行前に、次の割込みが受け付けられてしまいます。
これでは多重割込みが発生してしまいますから、EI命令の実行によって、割込みが受付可能になるのは、そのEI命令の次の命令(つまりRET命令)が実行されたあと、になるようにCPU内部の回路が組まれているのです。

ながながと割込み許可のタイミングについて説明をしたのにはわけがあります。
じつは、TK80回路のステップ動作の仕組みは、その割込み許可のタイミングをもう1命令延長することによって実現しているからです。

ステップ動作の処理プログラム(じつはRST7割込みプログラム)の終わりに、EI命令が実行されて、最後のRET命令で、ユーザプログラムに戻った直後に、次の割込みが受け付けられるのではなくて、そこでユーザープログラムが1命令実行されたあとに、次の割込みが受け付けられるようにできれば、ステップ動作をさせることができます。

[第248回]で説明をしたMYCPU80のTK80回路のステップ動作は、割込み許可状態を保持しているフリップフロップの出力信号と、OPコードフェッチ信号をもとにフリップフロップを使って、さらにもう1命令分の遅延回路を構成しています。

しかしこの仕組みをそのままZ80CPU回路で使うわけにはいきません。
なぜなら、[第248回]で説明をした、MYCPU80のTK80回路のステップ回路で使用した、割込み許可状態を保持しているフリップフロップの出力信号も、OPコードフェッチ信号もCPU内部の信号だからです。
MYCPU80はCPUそのものの回路ですから、そのCPU回路の内部にTK80のステップ回路を組み込んでしまうことができたのですが、そのステップ回路をCPUの外に作るためには、当然それなりの工夫が必要になってきます。

では、8080CPUのTK80では、ステップ回路をどのようにして実現していたのでしょうか?
というところまで、やっとのことでお話をしてきましたが、本日はタイムアウトになってしまいました。
この続きは、また次回にいたします。
2010.3.11upload

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