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

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

[第132回]


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

前回からの続きです。

「TK−80とBSとを接続している、何か特別の信号はありませんか?」
とM様にお尋ねしたところ、M様からメールで返事がとどきました。

「コントロールに関係していると思われる下記の信号が、TK−80とBSとの間に接続されています。
1)HLDA+RESET
2)EXTINT(INT7)
3)RESET

3)はND80ZVのRESETOUTに接続しましたが、1)2)は接続していません。
1)はDMAに関係しているように思います。」

1)はRESETと抱き合わせになっているようですが、HLDAはM様が考えられたように、LED表示のためのDMAサイクル中にCPUがホルトしていることを示す信号です。
同様の回路はND80ZVにもあります。
その回路は前回お見せしましたが、もう一度お見せします。

回路図の左上に書いてありますDMAenblという信号が、TK−80のHLDAに相当すると思います。
この回路図ではA0〜A2だけではなくて、A10〜A14もDMAenblで制御する回路になっています。
TK−80はA0〜A2だけです。

1秒間に数百回、CPUにHOLD信号(Z80の場合はBUSRQ信号)を送ってほんのわずかな時間だけCPUを停止させておいて、その間にRAMのLED表示バッファの内容を読み出してLED表示回路に送るための回路です。
CPUはホルト期間中は全ての信号出力をハイインピーダンスにします。
アドレス線を抵抗でプルアップしておけばアドレス出力はFFFFになります。
そのときA0〜A2だけを強制的に変化させればFFF8〜FFFFの内容を読み出すことができます。
TK−80はアドレスをフルデコードしていませんから、A10〜A14がHであっても83F8〜83FFのRAMの内容が読み出されます。

しかしND80ZVには32KBのRAMが実装されていて8000〜FFFFのすべてのアドレスにRAMが割り当てられていますから、TK−80と同じようにはできません。
そこでDMAの期間にA0〜A2だけをコントロールするのではなくて、同時にA10〜A14を強制的にLにすることで、RAMの83F8〜83FFの内容を読み出せるようにしているのです。

つい説明が長くなってしまいました。

しかし。
もっとほかになにか特別の信号があるかと思ったのに、期待外れでした。
他には特別の信号は使われていないのか。
弱ったなあ…。

あ。
そうか。
ひょっとすると、メモリのアクセスタイムがからんでいるのかも。
なにしろ昔のマシンですから、メモリのアクセスタイムはかなり遅かったと思います。
BSのメモリに関する資料はありませんが、TK−80と同じタイプのものだったとすると。
TK−80のRAMは5101です。
あちこちいろいろ探ってみましたら、どうやらTK−80に搭載していた5101のアクセスタイムは800nsだったようです。

うう。
それは遅い!
クロック2MHzの8080でも、このRAMをアクセスするためにはクロックが速すぎたらしく、そのためTK−80はメモリアクセスに1ウェイトをかけていたとのことです。
2MHzの8080に1ウェイトをかけると、メモリのアクセスタイムは1100〜1200nsまで許容されます。

それに対してND80ZVはクロック6MHzです。
もちろんウェイトなどかけてはいません。
この場合メモリに要求されるアクセスタイムは330ns以内ということになります。
これじゃあとてもBSのメモリは読み出せません。
M様には「74HC74を使ってCPUクロックを1/4に落としてみてください」とメールいたしました。
そうすればCPUクロックはTK−80よりも遅い1.5MHzになりますから、それなら遅いメモリでも読み出せるようになると思いました。
同じメールで「A10〜A14に入れた74HC367は不要だと思います」とも書きました。

●A10〜A14が完全に0になってしまいました

M様から返事のメールがきました。

「74HC74を使って、ND80ZVのクロックを1/4にしましたが、やはりBSのメモリはアクセスできませんでした。
A10〜A14にバッファとしてつけていた74HC367を外したところ、A10〜A14のラインが完全にLになってしまいました。
BSのメモリアドレスをアクセスすると、74HC367を外す前はFFだったのですが、8000番地台のイメージが出るようになってしまいました。」

う。
おかしい!
しかし、74HC367をつけていたときは、つぶれた波形が観測されていたのに、それを外したら完全にLになってしまったというのはどういうことなのか?
現象からすると、おそらく出力ショートのようだが、そんなことがあるだろうか?
74HC367があってもなくてもそれほどラインの負荷が大きいとも思えないし…。

あとで落ち着いて考えてみましたら、それは有り得ることでした。
74HC367はH出力のとき、最大6mAまでH出力を維持できます。
これに対してZ80Aは1.5mA程度しか出力できません。
74HC367をバッファとしてつけていたときは、波形がつぶれる程度のものが、それを外したら、A10〜A14の出力ラインが0Vになってしまったということから、おそらくBS回路のA10からA14のラインの負荷がそれほど大きいということなのかも知れません。

まあ、なにせ昔の回路だから、スタンダードのTTLがいっぱいぶらさがっているとか…。
それにしても、ほかのアドレスラインは、特に負荷がかかっているということでもなさそうだが、なぜA10〜A14にだけそんなに大きな負荷がかかっているのだろう。

負荷というよりも、まるで出力ショートしているような…。
ここまで考えてきて。
やっとわかりました(われながら、気が付くのが遅い!もうろくしたなあ)。

あ。あ。あ。
わかったぁ。

今回のように、実物が目の前にはなくて、かつBSの回路もその情報も無いなかで、ただお客様からいただいたメールの情報だけから、なにがおきているのか、どうすればよいのかを考えるというのは、まるで推理小説の謎解きのようです。

推理小説も初期の「ホームズ」などの時代は、謎を解く鍵は作者が隠しておいて、読者には知らせずに、最後になってそれをホームズが超人的な推理力で見事に解決するという、アンフェアなものでありましたが、当時の読者はそれでもホームズのスーパーマンぶりに素直に納得していたのでありましょう。

しかし時代が進むにつれて、推理小説ファンもそれではだんだん我慢ができなくなってきて、おそらくは
「ずるいよ。そういうのは。ちゃんと鍵は隠さずに公開してよ。」
などとクレームをつけるようになったのでありましょう。

昔若い頃に好きでよく読んでいたエラリークイーンの小説では、途中に「読者への挑戦」などというページがあって、
「ここまでのページで、作者は犯人を指し示す手がかりを隠すことなく全て読者に公開しているのである。注意深い読者ならば、犯人が誰であるかわかったであろう。」
なんて書いてありましたけれど、そんなに簡単にわかるもんじゃありませんよお。

突然、推理小説のお話になってしまいましたけれど。

1)TK−80とBSとを接続したときには正常に動作していたのに、TK−80の代わりにND80ZVを接続したら、BS側のメモリの内容が読み出せませんでした。
2)アドレスがぶつからないように、ND80ZVのROMとRAMのセレクト回路には回路を追加して、TK−80と同じアドレス範囲しかアクティブにならないようにしてあります。
3)ND80ZVのCPUクロックは74HC74を追加して1/4の1.5MHzにしましたが、それでもBSのメモリは読み出せませんでした。
4)A10〜A14のラインがおかしいようなのでバッファとして74HC367を追加しましたが、波形がつぶれてしまいます。
5)その74HC367を外してもとの状態にしたところ、BSとつなぐと波形が出なくなって0Vのままになってしまいました。
6)74HC367をつけていたときはBSのメモリアドレスからのデータはFFでしたが、74HC367を外したら、ND80ZVの8000番地台の値がイメージとして読み出せる状態になりました。

M様からのメールを整理してみましたら、以上の内容になりました。

聡明なる読者諸賢におかれましては、
以上の内容と、前回と今回のページに書きましたこととを注意深くお読みいただければ、
そこでなにがおきていて、そしてどうすればよいか、
すでにおわかりのことと思います。

M様にはさっそくメールをいたしました。
「出力がショートしています。危険な状態です!」
そして、多分こうすればよいのでは、と私が推測した方法をM様に伝えて、試してもらうようにお願いしました。

2時間ほどたって、M様からメールが届きました。
「指示のとおりにしましたら、BSのメモリが読み出せるようになりました」

次回解決編。
乞御期待、であります。

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

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