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

●Z80のアドレスバス上位8ビットに出力されるデータ

[第460回]で書きましたが、TK80のステップ回路は、Z80では使えません。
TK80のステップ回路はINTE信号(割込許可状態であることを示す信号)を利用していますが、Z80にはINTEがないからです。
そこでINTEに代わるものとして、D−FFのクリア入力にROMselect信号を入れるという回路を考えました。
しかしリフレッシュ期間中にアドレスバスの上位8ビットにIレジスタの値が出力されてしまうため、RAM上の命令を実行しているのに、ROMselectがアクティブになって、D−FFがクリアされてしまいます。
Iレジスタの値は、リセット後は00になるので、その値が出力されるとアドレスバスのA15が0になって、ROMselectがアクティブになってしまいます。
そのことへの対策は、モニタプログラムの先頭でビット7が1になるような値をIレジスタに与えることで解決できました。
めでたし、めでたし、ということで[第459回]でお見せした回路に落ち着いたのでしたが…。

そのあたりの説明を書いていて、まてよ、確かZ80には、アドレスバスの上位におかしなものを出力する命令があったような…。
や、やばい。
そーすると、そういう命令を実行したら、ステップ動作がリセットされてしまうではないか!

よくよく回路を確認してみたところ、そういう心配はないということがわかって、ほっとしたのでしたが、なにしろ何でもすぐに忘れてしまうものですから、またしばらくしたら、うう、やばいっ、などと同じことで何回もうろたえることになりかねません。
ですから、そういうときのために、備忘録としてここに書いておくことにいたしました次第です。

どういうつもりでそのような設計になったのかわかりませんけれど、Z80ではアドレスバスの上位バイトに余計なデータを出力してくれる命令がいくつかあります。
I/O回路に対してデータを入出力するIN、OUT命令はアドレスバスの下位8ビットしか使いません。
じゃあ、そのとき使われないはずのアドレスバスの上位8ビットはどうなるかといいますと…。

IN A,(n) と、OUT (n),A では、アドレスバスの上位8ビット(A8〜A15)に、Aレジスタの値が出力されるのです。
なんでこんなおかしなことを考えたのでしょうねえ。
そして、IN r,(C)、INI、INIR、IND、INDR、OUT (C),r、OUTI、OUTIR、OUTD、OUTDRでは、アドレスバスの上位8ビット(A8〜A15)に、Bレジスタの値が出力されます。

参考までに。
Zilog社の、「Z80 CPU User Manual」から、IN A,(n)と、IN r,(C) の説明部分のコピーをお見せします。




さて、そうしますと、AレジスタあるいはBレジスタの値が、そのビット7が0であるような値であったときに、ステップ動作で、これらの命令を実行すると、リフレッシュのときと同じ問題がおきてしまうのではないか、という疑問がでてきます。
それで、や、やばいっ、と思ったのでした。

それについては、さきほど書きましたように、幸いなことに、やばくはありませんでした。
ステップ回路のD−FFのCLRに入力されているROMselect信号はA15=0のときにアクティブになるのですが、それだけではなくて、実はA15とMREQとのANDにしてあったのです([第434回]の回路図を参照してください)。
当然のことながら、IN、OUT命令でアドレスバスの上位8ビットにAレジスタまたはBレジスタの値が出力されるときは、IORQがアクティブになっているときなので、もちろんそのときにはMREQはアクティブになりません。
ですから、IN、OUT命令でROMselectがアクティブになってしまう、というようなことはおきませんから、そのような心配はする必要はありませんでした。

じつは、Z80については、アクセスタイムの問題があって、Z80を使い始めた当初から、I/Oアクセス回路に対しては、IORQ信号をアドレスバスではなくて、RD、WR信号と抱き合わせにして、IORD、IOWRという信号を作って使うようにしてきました(このあたりについても[第434回]の回路図を参照してください)。

なので、そこからの連想で、ひょっとして、MREQも、RD、WRのほうに抱き合わせにして、ROMselectのほうは、A15を単独で使ってしまったのではないか?
と思って、そこが心配になったのでした。
ちなみに、MYCPU80のROM、RAMのセレクト信号は、A15単独になっています(MYCPU80回路図bR0を参照してください)。

2010.3.30upload

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