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

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

[第295回]


●READ DECは?

長々と書いてまいりましたE−80(仮称)ミニコンのフロントパネル回路の説明もいよいよ大詰めです。
今回はとっておきの隠し玉の公開です。

今まで説明をしてきましたように、E−80(仮称)ミニコンのフロントパネルを操作して、メモリにデータ(プログラム)を書き込むには、まずSTOPスイッチを押してCPUを停止させます。
次に書き込みを開始したいメモリアドレスをパネルスイッチに設定したあと、READスイッチを押します。
これでパネルスイッチで設定したアドレス値がアドレスLEDに表示されて、RAMのそのアドレスの値がデータLEDに表示されます。
最初にRAMに書き込む値をパネルスイッチの下位8ビットに設定してWRITEスイッチを押します。
その値がRAMに書き込まれて、データLEDにその値が表示されます。
このときアドレスLEDの表示は変わりません。
引き続いて次のアドレスにデータ(プログラム)を書き込むには、上と同じようにして、書き込むべき値をパネルスイッチの下位8ビットに設定したあと、今度はWRITE NEXTスイッチを押します。
WRITE NEXTは「READ NEXT & WRITE」の操作と同じです。
アドレスを+1進めた後で、パネルスイッチの値がRAMに書き込まれます。
誤入力したことに気がついたら、正しい値をパネルスイッチに設定してWRITEスイッチを押します。
以後そのようにしてパネルスイッチに値を設定してWRITE NEXTスイッチを押すことを繰り返すことで、連続したメモリアドレスにデータ(プログラム)を書き込んでいくことができます。

上にも書きましたように、値を書き込んだ直後に、設定した値が違っていたことに気がついたなら、そこで正しい値をパネルスイッチに設定し直してWRITEスイッチを押すことで何回でも書き込み直しをすることができます。
WRITEは書き込み後にアドレスは変化しません。
またWRITE NEXTは書き込み前にアドレスが+1されますが、書き込み後にはアドレスは変化しません。
ですからWRITE、WRITE NEXTの操作後には、WRITEスイッチによる書き込み直しが可能です(書き込み直しのときにはWRITE NEXTを使ってはいけません)。

そういう操作ですから普通にゆっくりと操作している場合には、誤書き込みをしても大抵はその場で書き込み直しが可能です。
また全部書き込んでしまってから、あとであらためてREADスイッチで最初のアドレスを設定してから、READ NEXTスイッチを操作して1バイトずつアドレスを+1しながらチェックしていって、入力誤りに気がついたときも、その場で正しい値をパネルスイッチに設定してWRITEスイッチを押すことで書き込み直しをすることができます。

しかし、数多く操作をしていると、時としてひとつ前、ふたつ前のアドレスに戻りたいときが出てきます。
READ DECの操作です。
ところが、IMSAI8080には、その機能はありませんでした。
私は実際にIMSAI8080をさわっておりませんので、ここは正しくは「IMSAI8080にはREAD DECの機能は無かったと思います」と書くべきでありましょう。

ということはE−80(仮称)ミニコンのフロントパネルにもその機能は無い、ということです。
それでは前に戻りたい時にはどう操作するか?
といいますと、仕方がありませんから、(たとえ1バイト前のアドレスであっても)あらためて16個のパネルスイッチを使ってその戻りたいアドレスを設定して、READスイッチを押さなければなりません。
ここにもしREAD DEC(READ DECREMENT)スイッチがあったならば、ひとつ前のアドレスに戻るのならば、そのREAD DECスイッチをたった1回押すだけで済んでしまいます。
2つ前に戻る場合でもREAD DECスイッチをたった2回連続して押すだけで、戻ることができてしまいます。
そのようにあれば役に立つ機能ですからND80ZV(ND80Z3.5)にはちゃんとREAD DECキーがついています。
もちろんTK−80にもREAD DECキーがありました。

もしもフロントパネル回路の機能がロジックICで作られていましたら、おそらくそれはアップダウンカウンタによって実現できたでありましょう。
しかしIMSAI8080のフロントパネルの機能はソフトウェアをハードウェアによって実現したワイアードプログラム方式でありましたために、これは実現がきわめて困難な機能であっただろうと思われます。

すでに説明しましたように、READ NEXT (アドレスインクリメント&READ)はCPUにNOP命令(コード00H)を実行させることで実現しています。
READ(アドレスセット&READ)は同様にCPUにJP命令(コードC3H)を実行させることで実現しています。
しからばREAD DECは?
といいますと。
残念ながら8080にはそういう命令はありません。
どうしてもあえてするということでしたなら。

310000  LXI SP,$0000
FF      RST 7*
E3      XTHL*
2B      DCX H
2B      DCX H
2B      DCX H
2B      DCX H
2B      DCX H
E9      PCHL

*この命令のOPコードフェッチサイクル実行後のマシンサイクル期間のみ、メモリアクセスを可能にする

と、それだけの命令を実行させなければいけません。
あ。
これは今ちょっと考えてみただけで、実際にやってみたわけではありませんから、本当にこれでよいかどうかは保証の限りではありません。
とにかく。
NOPやJPのように簡単にはいかないということだけは間違いありませんでしょう。
おそらくそういう理由もあってだと思いますが、IMSAI8080にはREAD DECの機能はありませんでした(と思います)。


さて。
しからば。
Z80なら、そこのところは果たしてできるのでありましょうか?

ええ。
できるのです。
しかもわりと簡単に、です。
READ NEXTは1命令、NOP(1バイト)を使いました。
READは同じく1命令、JP(3バイト)を使いました。
では、READ DECはといいますと。
やはり1命令(2バイト)を使って実現できます。

どうすればよいのでしょうか(どの命令を使えばよいのでしょうか)?
あ。
これは次回までの宿題といたしましょう。
ちょいとZ80のプログラムができる方でしたらおわかりになると思います。

前回お見せしました、この写真のジャノ目基板の部分が、そのREAD DEC回路です。
ええ。
ちゃんと実際に動作することを確認済みなのです。


ところで。
READ DECの回路につきましては、上の写真のように、動作する回路を組み付けるところまでは、できたのでありますが。
実はREAD DECにつきましては、ちょっと困った問題がありました。
READ DECの機能について考え出した当初は、結局実際に組み込むのは無理か、と半ばあきらめかけました。

それは。
READ DECの機能を割り当てるスイッチが無い、という現実です。
もともとIMSAI8080には無かったはずの機能ですから、IMSAI8080の仕様に準拠してデザインされたE−80(仮称)ミニコンのフロントパネルにも、READ DECキーは当然のことながら準備されておりません。

実は。
オリジナルのIMSAI8080では、STEPスイッチだけが単機能で、それを2接点のモメンタリスイッチに割り当てていましたから、そこにならREAD DECを割り当てることもできました。
しかし。
E−80(仮称)ミニコンでは、その空きにできる片方の接点にAUTO STEPの機能を割り当ててしまいました。

もうY様のところではシルク印刷済みのフロントパネルが完成してしまっていますから、今更そこに新しいスイッチを追加することはできません。
いえ。
そもそもフロントパネルのレイアウトを見ますと、ここにあと1個スイッチを追加するのはスペース的に困難なようでもありました。

おしいなあ。
せっかくREAD DECの回路までできたといいますのに。
やっぱりあきらめなくてはなりませんでしょうか。

ときどき書いておりますように、人間そこであきらめてしまったのでは何もできません。
だめ、絶対無理。どーしようもない。
と、思うところから、スタートして、そして考えて考えて考え抜くのですよねえ。
すると、八方ふさがりと思えたところに一条の光明が差し込みまして、突如として問題が解決してしまうのです。
ああ。
なんだか、やっぱりどーしても神がかり的になってきてしまいますですねえ。

さてその方法は。
あ。
それにつきましても、次回までのお楽しみといたしましょう。
われこそはとお思いのお方はぜひ一度どうすればよいか、お考えになってくださいまし。
参考までに、下にE−80(仮称)ミニコンのフロントパネルの回路図(部分)をお見せします。


○で囲んだところが検討の対象になるスイッチです。
アドレス、データ設定スイッチは今回は無関係です。
パワーON/OFFスイッチも対象外です。
この回路図にあるスイッチをうまく工夫すると、READ DECの機能を割り当てることができます。

こちらがフロントパネルのスイッチ部分の写真です。

試作作業中ですのでスイッチはパネルから外してありますが、READ、READ NEXT…というマーキングのところにスイッチが入ります。

ヒントです。
すでに各スイッチに割り当てられている機能は、移動したり削除したりは一切しません。
つまり今までの機能は全くそのままで一切変更することなく使います。

ええっ?
そんなの無理だよお。

そこがそれ、コロンブスの卵なのです。

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

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