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

ワンボードマイコンをつくろう!(パソコンの原点はここから始まった) TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます

[第136回]


●ND80ZVをBSに接続する(6)

このところ毎日CP/Mについて書いておりまして、本日も前回の続きを書くつもりでしたが、見出しの件について進展がありましたので、本日はそれについて書くことにいたします。
[第135回]からの続きになります。

ND80ZVをBSに接続すると、キーボード入力ができず、8255が奇妙な状態になるという、M様からの報告のメールを読んでも、私にはどうにも納得ができませんでした。
「どう考えてもそんなことは有り得ない」としか思えません。

長い間、この仕事をやっておりますと、ときどきそういうことに出くわすことがあります。
お客様から問い合わせのメールなり電話なりをいただいて、そこで何がおきているのか考えてみると、結論は「そんなことは有り得ない」ということになってしまうことがあります。

そういう場合に私はいつも決まって同じ返事をいたします。
「お聞きした情報からだけで判断してみると、そんなことは有り得ない、という結論になってしまいます。
決してお客様が嘘をついている、ということではありません。
お客様からいただいた情報に、お客様の思い違いによる誤謬が含まれているか、あるいはお聞きしていない大切な情報が落ちているか、のどちらかだと思います。」

M様から今までにいただいたメールからの情報をつなぎ合わせてみますと、とにかくどこかが矛盾している、あるいはどこかがノーマルではない(異常が発生している)という結論になってしまいます。

どこがおかしいのかをさぐるために、M様からいただいた情報を整理してみますと、次のようになります。

1)TK−80をBSに接続すると、キーボードから入力した文字は正常に画面に表示されるが、ND80ZVをBSに接続すると、全く表示されずにそこでハングアップしてしまう。
これは表示に問題があるのではなくて、キーボードからの入力に問題があるのはほぼ間違いはない。
2)さらに追求したところ、キーボード入力には8255が使われており、それはモード1(ストローブ入力モード)で使われていることがわかった。
3)8255にはキーボードから入力された文字コードは正しく入力されているのだが、文字コードが入力されたことを示す信号(PC5)がアクティブにならないために、キー入力ルーチンがそこでその信号を待ち続けているらしい。
4)試しに、PC5を無視してキーボードからのデータを読んでみると(キーボードからのデータはポートAに読み込まれる)、キーを押すごとにちゃんと読み取れることがわかった。
5)この段階で、おそらく何らかの理由で8255がモード1に設定されていないらしいと、推測した。
なんらかの理由でポートAはただの入力モードに設定されてしまうらしい。
なぜモード1に設定できないのか?
6)しかし、モード1に設定できないとすると、その場合はキーボード入力からのハンドシェークは成立しないので、キーを押すごとにキーコードがキー入力回路から送られてくるのはおかしいのではないか?

この6)につきましては、真相がわかった後で考えてみると、どうもBSのキーボード回路は、はなからハンドシェークなどは無視するような回路だったようです。
単に8255がキーデータを勝手にラッチしてくれるように、というだけの理由でモード1が使われたようです。

さてそのようにあらためて整理してみても、どう考えても、そのような8255の振舞いは「有り得ない」としか思えません。
実際にこの目で、実物を見てみれば、きっとわかることだと思いますが、とにかくM様からいただいた情報だけでは解決できない、何か重要な鍵がまだ隠れているとしか思えません。
とにかくキーボードと8255の周辺の回路さえわかれば、きっとなにかがつかめるはず、と思いました。
そこで私はM様に、こうメールをしました。
「キーボードと8255周りの回路がはっきりすれば解決できるような気がします」

それからも、この8255の奇妙な振舞いは、なんとなく気になって私の頭から離れませんでした。
どう考えてもおかしい。
ありえないことがおきている…。

そんなときに、ときおりふっと私の頭をよぎるものがありました。
私はZ80と8255の組み合わせをずっと使い続けてきたのですが、いつのころからか8255のリセット端子をGNDに落して使うことが習慣のようになっていました。
それは私が独自に考えた回路で、そうすることが都合がいい、と考えた何かがあったはずなのですが。

さて、あれはどういう理由からそうするようになったのだろうか?
おそらく、BSの8255のリセット端子には普通にリセット信号が入っているはずだが、しかし、そうだとしても、リセット端子の処理ぐらいで、あんな奇妙な動作をするとは思われないし…。

ひょっとしてND80ZVからのリセット信号が接続されていないというようなことがあって、それが何か原因になっているのでは?
そう思ってM様からのメールを読み返してみたのですが、そこには「ND80ZVのリセット信号をBSのリセット端子に接続し…」とはっきり書いてありました。

82C55を接続したときは普通の8255のときよりも、より不安定な、まるでノイズを受けているかのような動作から、ひょっとするとリセット信号が入力されていなくて、入力端子がオープンにでもなっているのではないか?とも考えたのですが、リセット信号はちゃんと接続されているということになりますと、リセットが原因ということでもなさそうです。
しかし、8255のリセット端子をGNDに落として使っているいつもの回路が、残像のように、ときおり頭の隅にちらつきます。
「なにかが気になる…」

しかし、私はそれ以上、そこから先に進んで考えることはしませんでした。

●「原因がわかりました!」

結局私自身ではそれ以上何も思いつかなかったのですが、とうとうM様自身がこの問題を解決されました。
M様から「原因がわかりました!」というメールが届きました。

M様もなんとかこの問題を解決しようと努力してみえたようです。
「何か参考になるものでもないかと思い、昔のノートを探し出してきて、懐かしく思いながら読んでみました」
「昔(昭和58年頃)のノートの中に、Z80のリセットに関して、8255のリセットにインバータが通してある図を発見しました」

そこには「ND80Zハードウェア解説書より」とメモしてあったとのことです。
おお。
中日電工のボードではありませんか。

「自分で書き写した回路ですが、なぜインバータを強調して書いたのかと思っていたら、ハッと気が付きました」
「Z80のリセットはロウアクティブですが、8080も8255もリセットはハイアクティブだということを…」
「ひょっとしたら…、と思って、8255のリセット端子にオシロをつないで、ND80ZVのリセットキーを押したら、見事に信号が立ち下がりました!」

そういうことだったのか!

TK−80からBSに入力されていたリセット信号は正論理(ハイアクティブ)だったようです。
そこにND80ZVのロウアクティブのリセット信号を接続したため、BSの8255が常時リセット状態になっていたのでした!

それにしても、常時リセット状態になっていたにもかかわらず(そして8255はリセットによって、全ポートが入力に設定されるとしても)、その状態でなお、ポートAに入力されたデータを読み出すことができる、などということは全く想定外でありました。

M様がND80ZVからのリセット信号をインバータ(74HC04)を通してBSのリセット入力に接続したところ、正常にキーボードからの入力ができるようになったとのことです。

M様。お見事です!

私はと言えば。
もうあと一歩のところまで解決に近付いていましたのに。
なぜ8255のリセットをGNDに落とすようになったか、というあたりのことを、もう少し追及していたら、ひょっとしたら私もそこに気が付いたのかも、と思うと。
残念です。
まことにお馬鹿でありました。

遅まきながら、過去を探訪いたしました。
これはND80ZUの8255A周りの回路図です。
M様のノートには「昭和58年当時の、ND80Zの説明書から」とのメモがあったとのことですから、この前のモデルだったかもしれません。

8255のRESET回路には74LS04が入っています。

これはトランジスタ技術に連載した「つくるパーソナルコンピュータ」のCPU部分の回路図です(「トランジスタ技術」1984年1月号)。

保存が悪くてかなり日焼けしてしまっています。
8255AのRESETにはZ80Aとは逆極性のリセット信号が入っています。
そして、この回路図の説明文で、下のように書いています。

Z80と8255を組み合わせた場合、8255にリセット信号を入れようとすると、インバータが必要になります。
回路の都合でインバータに空きがなくて、そのためだけにわざわざ74HC04などを追加するくらいなら、GNDに落としてしまえばいい、という意味のことを書いていたのです。

むむ。
そういうわけで。
8255のリセット端子をGNDに落とすようになったのでした。
すっかり忘れてしまっておりました。

やっぱりトラブルなどで、原因がわからずに悩んでしまうようなときには、とにかく元の元までさかのぼって考えてみるということがいかに大切か、ということを思い知らされた「事件」でありました。

なおM様には、ND80ZV組立キットをもう1セット新たにご購入いただきました。
「BSに接続するためにND80ZVにはかなり手を加えて、ほぼBS専用機状態になっていますので、この際このND80ZVはBSとの合体専用にしたいと思います。」
「そこでND80ZVを新たにもう1台購入したいと思いますが、在庫はありますでしょうか?」

M様。有難うございます!
今回お届けするND80ZVでは、ぜひCP/Mに挑戦なさってください!
今後ともよろしくお願いいたします。

ワンボードマイコンをつくろう![第136回]
2012.1.18upload

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