復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第313回]
●Z8S18020のタイミングチャート
前回からの続きです。
Z8S180は電源ONまたはリセット直後には、デフォルトでメモリアクセスに3クロック、I/Oアクセスに4クロックのウェイトが挿入されます。
通常の命令ではメモリアクセスは3クロックなので、そこにさらに3クロックのウェイトが加わると、倍の6クロックになってしまいます。
前回のテストではCPUクロックが10MHzであるにもかかわらず、実際の動作速度は4.5MHzという結果になってしまいました。
おそらくH64180(Z8S180のオリジナル)が開発された当時にはメモリのアクセスタイムは遅いものが一般的で、アクセスタイムが速いメモリはあったとしても高価であったために、そのような仕様がデフォルトになっていたのだろうと思われます。
当時に比べると現在ではメモリの集積度も上がり、アクセスタイムもうんと速くなりました。
そういうことからしますと、デフォルトのように3クロックものウェイトはおそらく不要であると推測されます。
しかし、それならばノンウェイトでもよいか、ということになりますと、それはやっぱり確認しておくに越したことはないでしょう。
そこで実際のテストに先立ってまずはデータシートによって確かめてみることにします。
E−80(仮称)ミニコンではCPUにZ8S180の20MHz版(Z8S18020)を使います。
当初Y様と打ち合わせておりました基本仕様では、CPUクロックは10MHzあれば十分ということでした。
ではなぜ20MHzかといいますと、たまたま仕入れの都合で、10MHz版よりも20MHz版のほうが入手し易かったというだけの理由でした(これは現在でも同じ状況のようです)。
しかし実際に20MHzで動くCPUが搭載されているということになりますと、やっぱり20MHzでも動かしてみたい、と考えたくなるのが人情でありまして、結局隠し機能としてではありますが、20MHzクロック回路(CPUへの入力周波数は40MHz)も作ってしまいました([第267回]参照)。
ということで見出しにもありますように、まずはZ8S18020のタイミングチャートを確認してみました。
Z8S180のDatasheetです。
タイミングチャートにはびっしりと細かいタイミングの数値が記載されています。
しかし大体が25ns−30ns程度の小さい値で、しかもそれはワーストの場合の数値ですから、とりあえずはそれらは0と考えて、クロックの立ち上がりから○クロック、とか立ち下りから○クロックというようにすると、分かりやすいと思います。
そのようにCPUクロック(上のチャートではPHIと記されている)を尺度にして考えてみることにします。
すると、OPコードフェッチサイクルが一番きびしくて、MREQ、RDの立下りからDATA INまでが1.5クロックです。
クロックが10MHz(1クロック=100ns)のときに150ns、20MHz(1クロック=50ns)のときに75nsです。
DATA READのタイミングはそれよりも0.5クロックゆるくなります。
DATA WRITEについてはWRITEパルス幅が決め手になると思います。
WRITEパルス幅も1.5クロックですから10MHzでは150ns、20MHzでは75nsです。
I/Oについては後で検討をしますが、図の下部のNoteを見ますと、I/O READ、I/O WRITEは、MEMORY READ、MEMORY WRITEと同じである、と書いてあります。
ただMEMORYアクセスとI/Oアクセスで異なっているのは、I/Oアクセスでは自動的に1クロックのウェイト(TW)が挿入される点である、とも書いてあります。
つまりI/Oアクセス時には少なくとも1クロックのウェイトが挿入されることになります。
ということになりますと、I/Oに対するREADパルス幅は3クロックですから、CPUクロックが10MHzのときは300ns、20MHzのときは150nsになります。
またI/Oに対するWRITEパルス幅は2.5クロックですから10MHzでは250ns、20MHzでは125nsです。
●IS61C5128AS−25のアクセスタイミング
次にメモリのアクセスタイムについて確認してみることにします。
E−80(仮称)ミニコンに搭載するRAMはIS61C5128AS−25です。
IS61C5128ASのDatasheetです。
まずはREADのタイミングから見てみます。
昔のメモリからはとても想像もできないほど速い数値です。
OE、CEが立ち下がってからデータが出力されるまでの時間が最大で25nsですから、CPUクロック20MHzでのOPコードフェッチタイミング75nsにも十分間に合います。
次はWRITEのタイミングです。
WRITEパルス幅は、なんとたったの15nsですから、CPUクロックが20MHzのときのWRITEパルス幅75nsでも十分な値でしょう。
どうやらメモリについてはCPUクロック20MHzで、かつノンウェイトで動作しても大丈夫そうです。
しかしI/Oについてはどうでしょうか?
●82C55A−2のタイミングチャート
E−80(仮称)ミニコンでは沖電気のMSM82C55A−2を使います。
MSM82C55A−2のDatasheetです。
昔を知る人でしたら、おそらく82C55といえばNECか東芝の製品を思い浮かべることと思います。
なぜ沖なのか?
はっきり言いまして、もうモノがないのですよ。
各社が生産を中止してしまって久しいものですから、いわゆる流通在庫に頼るしかないのです。
実は、NECも東芝も生産を中止してしまって、さてどうしようか、と困っていたときにみつけたのが沖電気の82C55でした。
最初は沖電気の82C55なんて使えるのか?
と少々疑ったものでしたが、ためしに使ってみましたら、十分使えます。
以来ずっと沖電気の82C55を使ってきました。
その沖電気も今ではやはり生産を中止してしまいました。
しかしまだ今のところ当社の仕入れルートでは入手できています。
なんといってもZ80と組み合わせてずっと82C55を使ってきたものですから、入手できる限り使っていきたいのですよねえ。
たしか海外のメーカーで生産しているところもあったと思いましたが、沖の82C55もかなり長いこと使ってきていますから、やっぱりこれが入手できるならば、このままでいきたいと思っています。
ですので、当社も一度の発注で、金額にしてン十万円単位で仕入れています。
でもさすがにちょっと心配になって、今回仕入れましたときに、ついでに仕入れ元に聞いてみました。
そこもその先の取引業者から仕入れていて、その先の取引業者もまたどこか別の業者から仕入れているようです。
まあ。
ジャの道はヘビといいますものねえ。
で。
「ほんとのところ、どうなの?ぼちぼち底を尽きそうってことはない?」
「大丈夫みたいですよ。なんでも、まだ○万個ぐらい持っているらしいってことですから」
まだ当分は大丈夫なようです。
そういうわけで、沖電気の82C55A−2を使います。
それでお話を元に戻しまして、82C55A−2のタイミングチャートについての検討です。
まずはREADのタイミングについて見てみましょう。
READパルス幅(tRR)は100nsですから、CPUクロックが20MHzのときの150nsでもいけそうです。
またREADの立ち下りからDATAの出力までの遅延時間(tRD)が最大120nsというのも、なんとかセーフということになります。
問題はアドレスセットアップタイム(tAR)の20nsです。
この存在がZ80と8255との相性を悪くしていました。
8255(82C55でも同じ)のCSを作るときに、メモリ回路のときのMREQと同じ扱いで、IORQとアドレスを抱き合わせにしてデコードしてしまいがちですが、それをやりますと、8255(82C55)が正しく反応してくれなくなります。
8255(82C55)に対してはIORQはCSに入れるのではなくて、RD、WRに入れなくてはいけません。
CSはアドレスA0〜A7のみをデコードして作ります。
そのようにしたとしても、tAR=20nsはきびしい値です。
もう一度Z8S180のタイミングチャートを見てみましょう。
アドレスは第1クロックの立ち上がりで変化しますが、IORQ、RDは第1クロックの立ち下りでアクティブになります。
その差は0.5クロックです。
CPUクロックが10MHzのときは0.5クロックは50nsですから、なんとか間に合いますが、20MHzということになりますと、0.5クロックは25nsですからぎりぎりの値です。
しかもその0.5クロックというのは、各信号の遅延時間を無視しての話です。
こういうぎりぎりの値になってきますと、10nsずれてもアウトということになります。
おまけにこの値は、ウェイトクロックの挿入には関係しないのです。
つまりいくらウェイトを挿入してもダメなものはダメということになります。
このあたりのところが、人によってはZ80で82C55がうまくコントロールできない、と言わしめるもとになっているのではないかと思います。
え?
私はどうか?
ですか。
私はZ80の初期のころから8255をくっつけて設計してきていますので。
ええ。
Z80と8255、82C55が不仲になったというようなことは記憶にありません。
ずっと仲良しです。
ま。
それはともかく、この数値からはちょっと20MHzはきびしいかも、という気がいたします。
それではWRITEのほうはどうでしょうか。
WRITEパルス幅(tWW)は150nsです。
CPUクロックが10MHzのときのWRITEパルス幅は250nsですから、これは問題はありませんでしょう。
しかし20MHzのときは125nsですから25ns足りません。
むむ。アウトですなあ。
なおWRITEのときのアドレスセットアップタイム(tAW)は0になっています。
さて以上の結果からいたしますと、82C55に対する入出力プログラムにおいても、多分CPUクロックが10MHzならば、メモリアクセスだけではなくて、I/Oアクセスについてもノンウェイトでもいけそうです。
しかし20MHzではメモリについてはノンウェイトでも多分いけるでしょうが、82C55に対するアクセスについては、READが間に合わない可能性があって、それはウェイトの有無とは無関係です。
またWRITEについては1ウェイトが必要なようです。
以上でタイミングチャートの上での検討はだいたいできましたので、次回はいよいよ実際にノンウェイトでのテストをしてみることにいたします。
ワンボードマイコンでCP/Mを![第313回]
2013.2.9upload
前へ
次へ
ホームページトップへ戻る