復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第297回]
●READ DEC回路(2)
前回からの続きです。
前回は、E−80(仮称)ミニコンに新たに追加することにしましたREAD DEC(READ DECREMENT)の回路図の一部をお見せしました。
今回はスイッチ部分を含めて全体の回路図をお見せした上でその動作について説明をいたします。
下の図はREAD DEC部分を追加したあとのフロントパネル回路図です。
READ DECに関係しない部分は省略してあります。
今回追加を行ないましたのは○で囲んだところです。
その追加されたゲートのセレクトラインを前に追っていきますと、STOPスイッチ回路につながっています。
このSTOPスイッチがコロンブスの卵です。
ま。それほど大げさに言うほどのこともありませんでしょう。
おそらくお気付きになられた方も多いかと思います。
すでに割り当て済みのスイッチに別の機能を割り当てるとしましたら、それはパソコンでお馴染みのSHIFTキーもしくはCTRLキーと同じ方法を使うしかありません。
今回の回路の場合、その役目に使えるスイッチはただひとつありました。
それがSTOPスイッチです。
STOPスイッチは、READ〜WRITE NEXT、STEPなどの操作の前に、1回だけ操作します。
これがトグルスイッチのように入れっぱなしで固定して使うスイッチでしたならば、こういう使い方はできませんでした。
幸い押している間だけONになるモメンタリスイッチでしたから、SHIFTキーのように使える可能性がでてきたのです。
さてそのSTOP回路なのですが、STOP状態を維持するためにJKフリップフロップが使われています。
K入力はGNDにつながっていますから常時Lです。
J入力にはSTOPスイッチ信号を反転したものがつながっています。
STOPスイッチを押すとJ=Hになります。
離すとJ=Lになります。
クロックが入力されたとき、J=H、K=Lですと、出力QはH(Q_はL)になります。
JKフリップフロップのQ_がWAIT出力につながっていますから、このときWAIT信号がアクティブになります。
ところでその状態になったあと、STOPスイッチが離されてJ=Lになったとき、出力はどうなるのでしょうか?
クロックが入力されたとき、J=L、K=Lですと出力は変化しません。
つまり、一旦STOPスイッチが入力されると、それ以後はRUNスイッチが押されない限り、STOP状態は続きます。
その間はSTOPスイッチは押しても押さなくてもSTOPである状態には変化はありません。
ということは、STOP状態の間はSTOPスイッチをSHIFTキーと同じ役割のスイッチにできるということになります。
さて、そこで、回路に戻ります。
READ DECの動作は、最初に18Hを命令コードとしてデータバスに挿入して、それをCPUに実行させます。
次にオペランド部分のFDHをCPUに読み取らせて、JR FDを実行させます。
この動作は、最初に命令コードC3HをCPUに読み取らせ、ジャンプ先の下位アドレスを読み取らせ、最後に上位アドレスを読み取らせてJP命令を実行させる、READスイッチの動作と途中までは同じになります。
そこでさきほど説明しましたSTOPスイッチが押されている、押されていない、という信号で、”C3H”と”18H”を切り換え、”下位アドレス”と”FDH”を切り換えます。
それだけですと、READのときの”上位アドレス”がREAD DECでもデータバスに出力されて、それが命令コードとして読み取られてしまいますから、READ DECのときは(STOPスイッチが押されているときは)、フリップフロップ74HC73(2)の出力を利用して、3番目のマシンサイクルに入った瞬間に再びWAIT信号をアクティブにしてCPUを停止させます。
READ NEXT(READ INC)に対してREAD DECの機能があるわけですから、当初はSTOPスイッチを押しながらREAD NEXTを押したら、READ DECの働きになるのがよい、と考えたのですが。
そうすると、”NOP”の回路になってしまうために、上のように都合よくはいきません。
そこで今回のように、READのほうを使うことにしました。
そのようにして実際に使ってみますと、なかなかに使い勝手がよいことがわかりました。
ずっとSTOPスイッチを押したままにしておいて、READ/READ NEXTスイッチを押し上げるとREAD DECの動作になって、そのたびにアドレスがデクリメントされます。
逆にREAD/READ NEXTスイッチを押し下げるとREAD NEXTの動作になりますから、そのたびにアドレスがインクリメントされていきます。
メモリのある範囲をインクリメント、デクリメントしながら確認するのにとても便利です。
これが当初考えましたようにREAD DECをREAD NEXTに割り当てたとしますと、STOPスイッチとともにREAD/READ NEXTスイッチを押し下げてデクリメント、STOPスイッチを離してREAD/READ NEXTを押し下げてインクリメント、というようにそのたびにSTOPスイッチとREAD/READ NEXTスイッチの両方を操作しなければなりません。
しかし、それは私の感想でありまして、Y様は別の感想をお持ちになるかもしれません。
READ DECをREAD NEXTスイッチに割り当てることができないわけではありません。
なんですか、最近始まりました大河ドラマでは「ならぬことはなりませぬ」がキャッチフレーズのようでありますが、それは倫理、道徳の上での考え方でありましょう。
しかし、論理の上ではならぬものをなるようにするのがウデなのであります。
どうすればよいか?
その場合には、STOPスイッチが押されているときにはREAD/READ NEXTスイッチからの信号を逆接すればよいのです。
それだけ余分な回路を追加することになりますが、どちらにするかはY様とご相談のうえ決定することになるかと思います。
ワンボードマイコンでCP/Mを![第297回]
2013.1.18upload
前へ
次へ
ホームページトップへ戻る