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

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

[第316回]


●前回の訂正

前回の終わり近くで命令のクロック数を計算していますが、OUT命令のクロック数が違っていることがわかりました。
当初の説明では10クロックとしていたのですが、その後のさらなる動作テストの過程でその値が間違いであることがわかりました。
Z8S180は日立のHD64180のセカンドソース品である、という認識から(これも正しくないということがわかりました)主にY様から送っていただいたHD64180の解説書を参照してきました。
やっぱり日本語のほうが読み易いものですから、オリジナルもセカンドソースも同じという認識で、ついZ8S180のMANUALではなくてHD64180の解説書のほうを参照してしまいました。

で。
そのHD64180の解説書では、OUT命令のクロックは確かに10クロックと書いてあります。
手元にHD64180の実物がありませんから、本当のところがどうなのかはわかりません。
とにかくZ8S180を使って前回に引き続いてさらに詳しくI/Oアクセスのテストを行ないましたが、その結果を分析する過程で、どうしてもOUT命令(およびIN命令)のクロック数がHD64180の解説書にある数値よりも1クロック多くないと計算が合わないことに気が付きました。

前回の説明でも、オシロで確認した結果からは、OUT命令が11クロックであるとしたほうがよりぴったりするのですが、なにしろ解説書に10クロックと書いてあるものですから、見た結果よりも計算結果のほうを優先してしまいました。
世の中にはこういう事例もよくありまして、どうしても実験結果よりも理論値を優先してしまいがちです。

下は前回お見せした写真です。



この写真の説明ではちゃんと「出力Lの期間は約1.3μsです」と書いているのですよねえ。
CH2のLの期間は右端がちょっと陰に隠れてしまっていますが、CH1の2つのWRパルスの間隔のほうがはっきりわかります。
どう見てもしっかり1.3μsあるようにしか見えません。
それなら合計クロックは26クロックでなくてはいけない計算です。

そこであらためてZ8S180の英文MANUALをさぐってみたのですが。
どうも今ひとつはっきりしないのですよねえ。
いろいろさぐっていってだんだんわかってきましたことは。

そもそももとは日立のHD64180がオリジナルでありまして、それのセカンドソースとしてZilogが生産しましたのがZ80180というナンバーの石らしいのですが。
それからがちょいとややこしくて、その後にZilogが独自のバージョンアップを施したのがZ8S180ということになっております。
ところがZilogやその他のサイトで入手できるMANUAL類は、そのZ80180とZ8S180がごちゃまぜになってしまっておりまして、正確なところがよくわかりません。
困ったものです。

ま。
Zilog社もZ8S180はZ80と同じくClassic Productsのカテゴリに置いていらっしゃるようですので、MANUAL類もあまり期待できそうにありません。
とにかくZ8S180そのもののInstruction Manualはみつけることができませんでした。
やっとみつけましたのが、このZ80185 User’s Manualです。


[出典]Zilog社 Z80185 USER’S MANUAL

Z80185は100pinのコントローラらしいのですが、Z8S180 coreを使っているとのことなので、それならこのManualに記載されているタイミングはZ8S180として読んでもよいのでは、と思います。

そこで、問題のOUT (n),Aのクロックについてなのですが。
やっぱりOUT (n),Aは11クロックのようでありました。


[出典]Zilog社 Z80185 USER’S MANUAL

ここには3つのクロックが記載されています。
左側のZ80 T Statesというのは、参考として記載されているZ80のクロック数です。
次のZ180 Register T Statesは内蔵のI/Oレジスタをアクセスするときのクロック数で、その右にあるZ18x Other Register T Statesというのが、外部I/Oアクセス時のクロック数のようです。

●IN命令のクロック

実は以上のことはIN A,(n)命令にもあてはまります。
IN命令は今までのテストプログラムでは使っておりませんが、実際にはそのテストもしておりまして、その検証の過程で、やはりIN命令のクロックもHD64180の解説書に記載されている数値と異なっているらしいことに気が付きました。
HD64180の解説書ではIN A,(A)のクロック数は9クロックになっていますが、Z80185 User’s Manualでは10クロックになっています。


[出典]Zilog社 Z80185 USER’S MANUAL

●RDとCSの信号波形

しかし前回も書きましたようにIN命令の場合には、クロック数などよりも、82C55のCSからRDパルスまでのセットアップタイムが最低25ns必要である、ということが何よりも問題でありました。
CPUクロックが20MHzでは、その値は一体どのくらいになるものか、とにもかくにもまずは確認してみることにいたしました。

CPUクロック20MHzで、
LOOP:IN A,(FA)
     JP LOOP
を実行し、82C55のRD端子とCS端子の入力信号をオシロで観測してみました。

上側(CH1)がRDで下側(CH2)がCSです。
上でクロック数について考察してきましたので、まずIN命令のクロック数を確認してみることにいたします。
RDからRDまでは0.95μsのようです。
ここから逆算すると、0.95/0.05=19(クロック)です。
JP命令は9クロックですから、おお、IN A,(n)はやっぱり上のManualにある通り、10クロックでした。
納得です。

それはよいのですけれど。
肝心の、CSとRDの間のセットアップタイムはどうでしょうか?
時間軸を拡大してみました。

うむむ。
とても20nsはなさそうです。

もう少し拡大してみました。

おおお。
やっと、10nsというところでしょうか。

これでは、とても駄目なようですねえ。
なんたって、ここは最低20ns必要というところなのですから。
まともに動くわけはない。

しかし。
何事もやってみるまで、結果はわからないものなのです。
次回。
必見でありますよ。

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

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