13 |
FM-7 ROM吸出し器の改版 |
FM-7 ROM吸出し器にDRAMリフレッシュ回路を追加
過去記事において、表記のボードを開発しましたが、DRAMのリフレッシュを失念していました。そこで、前回のオールソフトウエア(?)回路に対して、ハードウエアでリフレッシュ回路を追加します。バイトアクセスはオールソフトウエアで可能なことを実証できたのですが、DRAMリフレッシュは2msec以内に128カラムアドレスにアクセスが必要、という制約があるため、ソフトウエアでは厳しいと思われます。従って、ハードウエアで構成しますが、タイミング回路なので意外に回路規模を必要とします。せっかくArduino 1個で済ませたので、最小の回路構成としたいところです。
アナログタイマーIC 555
最初に思いついたのは小型のタイマーICである555です。ところがこれはアナログICであり、時定数設定のためにRやCを複数必要とします。さらに、リフレッシュ周期だけでなくリフレッシュパルス幅を確保しようとすると、555の2個入りを使用する必要があるだけでなく、外付けCRも倍の数になり、シンプルになりません。設計してみたものの嫌になりました。
プログラマブルタイマーPIC
そこで、プログラマブルタイマーで検討したところ、PICマイコンを使用すれば、開発環境その他は必要となりますが、8pinのIC1個で行けそうです。デジタルのほうがシンプルで、かつ調整も無くて好きです。
PICのリフレッシュアルゴリズム
リフレッシュアルゴリズムは以下のように考えています。
- 6809が\$FD05に1を書き、Z80W信号をLにします(Z80W=$6809/\overline{\text{Z80}}$)。
- ArduinoはPICからのバス権の要求RFREQが無ければ、RFGNTをLにしてバスを獲得します。バスアクセスはQB/EBをアサートすることで行います(RFGNT=$\text{PIC}/\overline{\text{Arduino}}$)。
- Z80W信号がLの際に、PICから周期的にRFREQをHとしてバス権要求をArduinoに通知します。
- Arduinoはバスアクセス中であれば終了後にバス権を放し、PICにRFGNTをHとして通知します。
- PICはRFGNTがHであればリフレッシュ可能と判断し、*REFCKをLとします。
- バス調停のオーバヘッドを削減するため、PICは*REFCKは4回アサートします。その代わり、リフレッシュ周期は1/4の16KHzとなります。
- リフレッシュが終了すると、PICはRFREQをLにします。
- ArduinoはPICがバス権を放したと判断してRFGNTをLにしてバスを獲得します。