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

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

[第284回]


●ステップ回路

あっという間にお正月も終わってしまいましたので、ぼちぼち昨年からのお話の続きに戻ることにいたします。
ここしばらくはE−80(仮称)ミニコンのコンソールパネルについての説明をしてきました。
当初の予定ではこのあたりでぼちぼち終わることになっていたのでありますが。
それが終わらないのでありますね。私の場合は。
なぜ終わらないのかにつきましては、後ほど。
まずは、今回のテーマであります、ステップ回路について説明をいたします。
下の図は[第274回]でお見せしましたE−80(仮称)ミニコンのフロントパネル回路図からステップ回路に関係する部分だけを取り出したものです。

実はこのステップ回路は[第274回]でお見せしました回路図とは一部が異なっています。
[第274回]の回路図ではRSフリップフロップ(74HC00で構成)だったところが今回の回路図では74HC74になっています。
うーん。
なんであんな回路にしたのでしょうかねえ。
当初はなにかそれなりの理由があったのでしょうが、そこのところはもう忘れてしまいました。
何回かカットアンドトライをしていくなかで[第274回]のような回路になってしまったのでしょうけれど(なんてまるで他人ごとですな)、ここにRSフリップフロップはちょいと気持ちが悪いです。
そこで今回の回路図に改めました。
74HC74の代わりに74HC73を使うこともできますが、実は他にも変更した部分がありまして、そこで74HC74の1/2を使っている関係で、ここではその残りの1/2を使っています。

回路の動作はごくごくシンプルなものです。
ステップスイッチを押すことで74HC74のQ出力がHになって、CPUを停止させていたWAIT信号が外れてHになり、CPUはそれまで停止させられていた現在のマシンサイクルを完了します。
ステップ動作ではステップ(マシンサイクル)毎にCPUを停止させなければなりません。
いままでWAIT信号のために停止していたCPUが動いてそのマシンサイクルを完了した直後に再びWAIT信号をアクティブにすることでCPUを再び停止させます。
74HC74のCLR信号によってQ出力をLにすればWAIT信号がアクティブになります。
74HC74のCLRに入れる信号として8080では各マシンサイクルごとに出されるSYNC信号を利用できましたが、Z80にはそのようなマシンサイクル毎の出力信号はありません。
ステップ動作の対象となるステップ=マシンサイクルではRDかWRが必ずアクティブになります。
ここではそれを利用しています。
CPUがマシンサイクルを完了すると必ず次のマシンサイクルに入るまでの間、RDもWRもHの期間があります。
そのRDもWRもない期間(RD=H&WR=H)を使って74HC74をクリアしてQ出力をLにします。
もともとはSTOP回路によってWAIT信号が常時アクティブになっているところをSTEP信号によって(74HC74のQ出力をHにすることで)一瞬だけWAIT信号が解除されます。
しかしCPUが動作してそのマシンサイクルが完了し、RDもWRもHになった瞬間に再びWAIT信号がアクティブになります。
するとCPUは次のマシンサイクルに入ったところでそのWAIT信号によって再び停止することになります。
これがステップ動作です。

●AUTO STEP回路

IMSAI8080のステップ動作は上で説明をしました単純なステップ動作のみでした。
したがってステップ動作のための入力スイッチは単入力で済みます。
しかし、IMSAI8080の回路図を見ますとSTEPスイッチにもREADやWRITEと同じ2接点の中点復帰式(momentaly。押している間だけ接点が閉じ、離すと元に戻る)スイッチが使われていたようです。


[出典 IMSAI8080 USER MANUAL(IMS ASSOCIATES,INC.)]

この回路の場合、スイッチを押し上げても、押し下げても同じシングルステップ動作になります。
まあ、言ってみればどちらか片方でも済むところを、たまたま両接点のスイッチなのでそのようにしているだけということになりましょう。
で。
Y様のご希望で、その空いている片方のスイッチを利用してAUTO STEP動作の回路を組み込むように考えました。
具体的には、スイッチを下に押し下げたときはシングルステップ動作をし、上に押し上げたときは、そのようにしている間、0.5秒に1ステップずつ自動的にステップが進むようにします。

そのAUTO STEPの動作を、定番の555を使って実現しましたのがこのページのトップでお見せしました回路図です。
これはあらためて説明する必要もありませんでしょう。
スイッチを手入力で操作する代わりに555を使って連続したパルスを74HC123に送るようにしているだけです。

以上で昨年暮れから長々と続いてまいりましたE−80(仮称)ミニコンのフロントパネルについての説明は終わりです…。
といきたいところなのでありますが。
今回の初めのところにも書きましたように、そういうわけにはいかないのですよねえ。
実はまだとんでもない続きがあるのです。

●Z80を使うことの問題点

[第274回]でお見せしましたE−80(仮称)ミニコンのフロントパネル回路図をご覧いただいて、それからその後に続きましたREAD、READ NEXTなどの動作についての説明をお読みいただいて、
「あれえ。それって、ちょっとまずいんじゃないの?」
とお気付きになられた方がもしいらっしゃいましたならば、その方は相当にZ80(およびその眷族)のハードウェアについて造詣が深い方でいらっしゃいます。
ソフトウェアのみをやってこられた方とか普通にZ80回路を自作などしてこられた方はまずお気付きにはならないかと。

あ。
でも非常に勉強熱心なお方でかつ注意深いお方でしたならば、私が書いてきましたREAD、READ NEXTの動作原理をZ80CPUの出力信号(のタイミングチャート)と照らし合わせて思考していただきましたならば、あるいはすでにお気付きかも知れません。
そう。
[第274回]でお見せしましたREAD、READ NEXT回路は、8080ならよいのですけれど、Z80では問題があるのです。

実は。
このところちょいと心穏やかではありませんでした。
「この回路だめだよお」
なんてメールが来てしまうのではないかと思ったりいたしまして。
ま。
幸いにして、今のところそういうメールはいただいてはおりませんけれど。

ええ。
私はプロでありますから、その問題点につきましては当初から気がついてはおりましたです。
「いや。これは。ちょっとまずいんじゃないの?」

ですけれど。
そもそもの当初から、Y様のご希望で、IMSAI8080のフロントパネルの回路を踏襲する、という基本方針でスタートしたことでもありますから、ここはとりあえずそういうことでやってしまいましょう、と。
なかなかに複雑な回路でもありますから、私としてもとにかくはまず動くものを作り上げてしまって、それからじっくり検証を行って、さて、どうするか、を判断することにいたしましょう(ま。いっか。意外と、案ずるより産むが易しで、それほど目立って問題にはならなかったりして)。
と、まあ、そういう気持ちでここまで進んできましたのです。

とにかくやらなければならないことが目白押しで、落ち着いて検証しているだけの余裕がありませんでした。
やっと少し落ち着いてきましたので、その問題につきましては先日しっかり検証いたしまして、ちゃんとウラを取りました。
なにしろウラを取ってからでないと、いい加減なことを書くわけにはまいりませんので。

あ。
正月早々から、余り持って回ったようなことばかり書いておりますと、欲求不満でいらいらしてしまいますですね。
ですので、このあたりで大ヒントを出しまして、次回へつなぐことといたします。

今まで説明をしてきましたREAD、READ NEXTの回路は私が考え出したものではありません。
その回路の基本的なところ(JMP、NOP命令コードを強制的にデータバスに挿入するという仕組みの回路)は、IMSAI8080、さらにさかのぼればALTAIR8800において使われていた回路です。
これはなかなかによく考えられたアイデアでありまして、CPUが8080でしたならば、さすが、と思わずひざをたたいてしまうような回路なのであります。
が。
それをそのままZ80でやろうということになりますと、実は、Z80で追加された○○○のために(ここが大ヒント)、ある条件のときに限ってですが、確実に誤動作いたします。

さて。皆様。
○○○に何が入るか、ひとつ、じっくり考えてみてくださいませ。
そして、そのとき一体何がおきるのか。
次回、必見であります。

これで終わりにするつもりだったのでありますが。
またちょいとあることを思い出してしまいましたので、大ヒントの補足をしておきたいと思います(正月でありますから大サービスであります)。
実は、過日その大ヒントのウラを取っておこうといたしまして、手持ちの参考書をひっくり返してみたのでありますが。
どこにも書いてないのでありますね。
それで、Googleで検索してみたのですけれど、それでもなかなか出てきませんのです。
でも。
おお。
ありました。
ついに。
見つけましたよ。

えっ。
これって…(しばし絶句)。

昔、私が書いたページじゃありませんか。
ふむむむ。
大ヒントの大ヒントはここに書いてありますです。
「標準TTLだけで!CPUをつくろう[第435回]」

あれえ。
ここまで書いて、またちょいとおかしなことに気がついてしまいました。
たしかにGoogleで検索したところ、上のページがひっかかってきたのでありますけれど。
でもこのページはTTLで8080をつくろう、という記事だったはず。
なんで、こんなところにZ80の解説が?

さらによくよく調べてみましたら。
やっと納得いたしました。
もう、自分で書いておいてそれをすっかり忘れてしまうものですから、どーしようもありませんです。
上のページは、内容としては「ワンボードマイコンをつくろう」というテーマにすべきところを前からの成り行きで、当初はこのタイトルのままUPしたものでありました。

後になってから「ワンボードマイコンをつくろう」のテーマで再編集いたしました。
内容は同じですが、こちら(ワンボードマイコンをつくろう[第4回])のほうが読み易いと思います。

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

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