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

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第289回]


●Z8S180のST信号

前回は、E−80(仮称)ミニコンのフロントパネル回路がZ80で追加された命令が原因で誤動作する可能性がある、という問題をクリアするための回路について説明をいたしました。
実は昨年暮れに、その問題をクリアするための回路を考えようと思い立った当初、頭の隅のどこかでちらちらするものがありました。

そもそもは、Z80で追加された命令群が2バイトのOPコードで構成されていて、CPUがその命令コードを読み込むときに、通常は1回だけ行われるOPコードフェッチサイクルが2回連続して行われ、OPコードフェッチサイクルであることを示すM1信号も2回連続して出力される、というところに問題がありました。
その2回のM1信号とは別に、それが最初のOPコードフェッチサイクルである、という信号があれば話は早いのだが、とそこまで考えたときに、頭の隅でちらちらしていたものがちょいとクローズアップされました。

まてよ、以前にZ8S180のMANUALを読んだときに、どこかにそんなようなことが書いてあったのではなかったか?

あらためてZ8S180のUSER MANUALを読んでみましたら。
おお。
書いてあるじゃありませんか。


出典: Zilog Inc. Z8018x Family MPU User Manual

ST(Status)というまさにそのものずばりの信号です。
これによりますと、M1=0でかつST=0ならば1st OP Code fetchなんですと。
えっ。
3rd OP Codeなんてのもあるの?
ひょっとして、DDCBXXとかFDCBXXのことか?
ま。それはともかくといたしまして、そんな有難い信号ならば、面倒な回路を組む必要などありません。

ああ。
しかし。
なんということでありましょうか。
まさに悪魔の仕業といいましょうか、ここで私は信じられない痛恨のミスをおかしてしまったのであります。

なんと私はその有難いST端子が、E−80(仮称)ミニコンに搭載予定のZ8S180(68pinPLCC)では省略されている、と思い込んでしまいました。
もうこうなりますと、もはやうっかりなどというものではなくて、明白な病気というべきでありますね。
名づけて認識障害とでも申しましょうか。
ええ。
Z8S180には別にラージサイズのチップもありまして(80pinQFP)そちらにはST端子が存在していることは認識いたしました。
だから(ここでどーして「だから」が出てくるのかが本人としても謎なのでありますが)。
PIN数の少ない68pinPLCCにはそのような有難い端子はついていないかもしれない。
という思い込みが、突然眼前のシャッターをおろしてしまったのでありましょうか。
ええ。
そのときには、確か68pinPLCCのpinレイアウトもしっかり確認したはずなのでありますよ。

うう。
ほら。68pinには、やっぱり無いんだ(繰り返し見たはずなのですが)。
そうか、80pinならよかったんだなあ。
ま。仕方がないか。

いま、あらためて68pinPLCCのpinレイアウトを確認してみましたら。



ちゃんとあるじゃありませんか。
端子番号13にSTが。
いったいぜんたいどこを見ていたのでありましょうか。

う?
13!
おお。呪われた数字だぁ。
こ、これは、やっぱり悪魔の祟りに違いない!
むむ。悪霊退散んん。シオまかなきゃ。

さらに、さらに。
念のために確認してみましたら。
Z8S180のオリジナルであります、日立の64180にもこのST端子があることがわかりました(ZilogのZ8S180は日立の64180のセカンドソースですから当たり前といえば当たり前のことなのですが)。
当時64180の開発にあたった日立のエンジニアが、Z80で追加された命令の解読のためにM1が2回連続して出力されることが、あるいは何らかの不都合に結びつくかも知れないと判断し(あるいはZ80である回路を組んだ場合にそれが問題になるということが認識されていたのかもしれません)、そこでこのST端子の機能が組み込まれた、ということだったかもしれません。
いやあ。
さすがに、昔のエンジニアは優秀でありました。

●ST信号を利用したSTOP回路

ST信号を利用したらこんなに簡単な回路になってしまいました。


●ロジアナ波形

今回の回路もロジアナで観測してみました。
上の回路図にロジアナのプローブを接続したポイントをプロットしました。

STOPスイッチを押すとHになる信号(プローブ00)の立ち上がりをロジアナの測定開始のトリガにしました。
プローブ01がMREQ、02がM1、そして03がSTです。
MREQとM1とSTが同時にL(アクティブ)になったときに立ち下がる信号(プローブ04)で、スイッチ入力信号のH(プローブ00)が74HC73のQ_出力として出力され(プローブ05)、最終的にはWAIT信号(プローブ06)になります。

こちらがロジアナで測定した波形です。

前回の波形で IN A,(C) 命令コードED78 の実行によってかなり長いブランクが観測されています。
その期間はI/Oリードが実行されているのですが、そのままではちょっと気持ちが悪いので、今回はプローブ07をIORDに接続しました。
D0〜D7にプローブ08〜15を、A0〜A7にプローブ16〜23を接続しました。

STOPスイッチ信号(プローブ00)の立ち上がり@よりも少し前に IN A,(C) の第一OPコード ED がデータバスに出力されています。
このときMREQ、M1、STが同時にLになったため74HC73のクロック信号(プローブ04)もLになったのですが、74HC73はクロックの立ち下りAのときにJ入力(プローブ00)がHでなければ、Q_出力をLにしません。
結果的にこのときにはWAITがアクティブにならずにスルーされましたが、そのときデータバスに出力されたコードEDは命令の第一コードとしてCPUに認識されています。
そこでCPUはEDに続く第二OPコードを読むために再度MREQとM1をLにします(B)。
しかしこのときは第二OPコードなのでSTはアクティブにならず、そのため74HC73のQ_出力もLにはなりません。
このロジアナ波形のタイミングが、未対策のSTOP回路だったとしましたら、第二OPコードである 78 がデータバスに出力されたタイミングでSTOP信号が認識されてWAIT信号がアクティブになっているところです。
しかし今回の回路ではMREQとM1に加えてST信号でも判断されるために、このタイミングでも第二OPコードはスルーされています。
結局STOP信号の入力が認識されてWAITがアクティブになるのは、その次のMREQ=M1=ST=Lのとき(C)です。
データバスには次の命令 JP M の命令コード FA が出力されています。

これにて一件落着、といきたいところなのですが、実はこのお話にはまだもう少し続きがあります。
それにつきましては、次回にて。

ワンボードマイコンでCP/Mを![第289回]
2013.1.10upload

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