ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.6.29
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆特注品Z80ボードND80ZHの機能説明
TK80コンパチブルで、その上中日電工オリジナルのND80Zとしても動作するというZ80CPUのワンボードマイコンを企画し、その開発準備をしていたところに、ND80Zの特注品の開発依頼をいただきました。製品名はND80ZHです。
新企画のZ80ボード(ND80ZV)はこのあとで製作することになりますが、基本的な機能はND80ZHと共通していますから、まずはND80ZHの機能を説明します。

[第33回]

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

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

そのあたりの説明を書いていて、まてよ、確か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にしてあったのです([第3回]の回路図を参照してください)。
当然のことながら、IN、OUT命令でアドレスバスの上位8ビットにAレジスタまたはBレジスタの値が出力されるときは、IORQがアクティブになっているときなので、もちろんそのときにはMREQはアクティブになりません。
ですから、IN、OUT命令でROMselectがアクティブになってしまう、というようなことはおきませんから、そのような心配はする必要はありませんでした。

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

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

ワンボードマイコンをつくろう![第33回]
2011.6.29upload

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