私の手元にはATmega88は一個しかなく、やたら使い回ししまくって壊すのも怖いので、先日買ってきたATtiny2313で実験を始めました。
まず、ラッチを使わずにデータをハンドルできるかどうかです。 次のような試験回路を使いました。
使っているORゲートはHC32です。 この回路では3段入れているので、遅延は50nsに近くなります。 この数値は20MHzの1クロック分にもなるため、結構無視できません。 AHCなどの高速品も考慮に入れるべきでしょうね。
とりあえずPC-6001の15.7944MHzをクロックにして試した結果は次のようになりました。
- 以前の実験でINT信号が活性化している時間はおよそ630nsである
- 割り込みルーチンスタート後にINT信号が活性化している時間は2クロック分程度(割り込みベクタにあるrjmp命令の実行時間を除く)
- よって、AVRの割り込み処理内ではinを2回使ってデータを読み込むのはぎりぎり可能
- この時間ではAVRからのデータ出力は不可能。データを出力する際は、そのときだけデータバスを占有するための設定(出力設定)をしてからデータを出力しなければならないため
- 同様の理由で、データ出力を有効にしている時間にも気を使う必要がある。短すぎると出力データを読まないし、長すぎると本体が次の命令を実行するときにコンフリクトしてハングアップする
- 計算上は、20MHzにすると4~5クロック分になりそう
- 処理自体は時間がかかってもそれほど問題はない。Z80が次のin/outを行うまではかなりの時間的余裕があるため
以上のことから、とりあえずAVRから見て入力側はラッチがなくてもいけそうです。 出力側はちょっと厳しそうですね。
今回はロジアナでの計測まではしていません。
いずれやるつもりです。
次に、WAIT信号(拡張スロットの7番ピン)についても調べました。 実はPC-6001のWAIT入力はちゃんと機能します。 実行時間がわかるほどのWAITを入れると、画面が乱れます。 これは、CPUが止まることによってVDG(MC6847)からのDMAも止まるためでしょう。
ただし、あまりに長時間止めると、本体がハングアップします。 これはおそらく、WAIT中はメモリリフレッシュを行わないため、DRAMの内容が消えてしまうのが原因だと思います。 まぁ、AVR内部のタイマ割り込みと組み合わせて使えば問題はないでしょう。
いずれにしても、ブートアップ時にきわめて有効に使える手段です。
と、言いたいのですが...。
ちょっとだけ追試したところ、どうもPC-6001mkIIでは有効に機能していないようです。 初代では回路上でもWAIT入力はちゃんとバッファリングするなど正式な入力端子としての扱いをしているのですが...。
匿名
画面が真っ暗、でもカーソルは出てる状況。
探して、ここにたどり着きました。
パスワード入力で、復活!
修理に出す寸前でした。ホントにありがとう!