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

●ND80ZHのステップ回路

Z80版TK80ボード(ND80ZH)の回路図は、[第434回]でお見せしました。
そのうちの、ステップ回路の部分だけ切り取って下に示します。

TK80のステップ回路については、前回説明をしました。
MYCPU80のステップ回路については、[第241回]から[第255回]あたりにかけて説明をしています。
MYCPU80の最終的なステップ回路図は[第255回]にあります。

TK80のステップ回路も、MYCPU80のステップ回路も、そしてND80ZHのステップ回路もD−FFを使っています。
8080もZ80も命令の長さ(クロック数)は命令によって異なっていて、しかも1バイトだけの命令(コード)もあれば、2バイト、3バイトの長さの命令もあります(Z80は4バイトの命令もあります)。
INT(割込み)信号は、どの長さの命令でも、その命令の一番最後のクロックのときに(つまりその命令が実行されてしまった終わりのタイミング)で受け付けられます。

ステップ動作の回路は、どの長さの命令であっても、1命令が実行されたあとでINT割込み信号が受け付けられるように考えられています。
CPUが1命令を実行したあとでちょうど割込みが受け付けられるようなタイミングでINT信号を発生させるのには、フリップフロップを利用すると都合がよいのです。

フリップフロップはクロックに同期して出力を変化させることができます。
ステップ回路に使うフリップフロップのクロックとしては、OPコードフェッチサイクルであることを示す信号を使います。
命令の長さ(バイト数)は異なっていても、OPコードフェッチサイクルはどの命令でも、命令の最初に必ずあります。
OPコードフェッチサイクルを示す信号をトリガにしてINT信号を発生させれば、1命令を実行したあとで、割込みを受け付けさせることができます。

前回は、タイミングチャートを描くのは面倒なので手抜きをします、と書きましたが、やっぱり百聞は一見にしかず、という言葉もあることですから、簡単なタイミングチャートを描いてしまいました。

INTEはEI命令が実行された結果、割込みが受け付けられるようになったことを外部に知らせる信号です。
図の破線は、命令の終わりに割込み信号が受け付けられるタイミングを示しています。

EI命令を実行しても、EI命令の終わりのタイミング(1)では、INTEはアクティブにはなりません。
EIの次の命令(通常はRET命令)の終わりのタイミング(2)に間に合うあたりのところでINTEがアクティブになります。
(2)のときには、RET命令の実行は完了していますから、そこで割込みが受け付けられても、多重に割込みが受け付けられることにはならないからです。
でもここで割込みが受け付けられてしまったのではステップ動作にはなりません。
この(2)はパスしなければなりません。
そこでフリップフロップ回路が生きてくるのです。

INTEをD−FFのD入力に入れて、M1(OPコードフェッチサイクルを示す信号)をCK入力に入れることで、1命令分を遅延させてINT信号を発生させることができます。
RET命令のM1の立ち上がり時点では、INTEはまだLですからINT信号は出力されません。
その次の、ユーザープログラムの命令のOPコードフェッチサイクル(M1信号)によって、D−FFの出力が変化し、INT信号が出されます。

前置きが長くなりました。
そのように、TK80のステップ回路は、INTE信号とM1信号をD−FFに入力することで、ステップ動作のためのINT割込み信号を発生させていました。

ところが。
Z80には、肝心のINTE信号がなかったのです。
うう。そりゃあ、困る。

なんとかしなければ、ということで考えたのが、最初のところでお見せした、ND80ZHのステップ回路です。
じつはこの回路は、その昔、CPUを8080からZ80に変更して、ネーミングもND80からND80Zにリネームして、バージョンアップ版として売り出したときの回路でした。
Z80にはINTE信号がなかったために、図のような回路を考えたのです。

で、今回もそのままその回路を利用したのですが、あらためてよくよくこの回路について考えてみましたところ、もう少し簡単にできることがわかりましたので、最終的な回路は、この回路図とは少し変わってしまいました。

また時間がなくなってしまいました。そのあたりの説明は次回にすることにいたします。
2010.3.15upload

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