ROMライタ製作中
オーソドックスなROMライタというのがどんなものか分からないまま作ってます。データシートのタイミング通りに「コマンド書き込み→データ書き込み→書き込み完了をポーリング(異常検出したらリトライor終了)」を繰り返せばいいとは思うのですが。
- ターゲットROM EN29F002T-70JI
- PCからArduinoにバイナリを送信→ArduinoがI/Oを通してROMに書き込む
- PC側はRubyで通信ソフトを自作(serialportというgemでなんとかなりそう)
- ArduinoはMega2560を使う(バスと制御信号を自前のI/Oで全てカバー可能)
Z80基準で考えるとどれもこれもオーバーテクノロジーですね…。現在はArduino側のコーディング中で、バスと制御信号を操作するところまでできています。
Analog Discovery 2 のロジックアナライザーで信号をキャプチャしたものです(線が足りないのでバスはそれぞれ下位4bit)。
- アドレス・データバスにそれぞれ 5555H, AAH の書き込みコマンドを出力
- WE#のアクティブパルスを入れてROMにコマンド書き込み
- 書き込み先アドレス、書き込みデータをバスに出力
- WE#のアクティブパルスを入れてROMにデータ書き込み
なんとなくなんとかなってる雰囲気あります。2回目のWE#が短いのが謎ですが…。まぁ最適化で何か起こってるんでしょうね。これはこれで興味深いトピックですが、Z80のシステムを作ってZ80のアセンブラを書いていこうという時にAVRのバイナリコードに執着するのはやめておきます。
ちなみにタイミングについて。Arduinoが16MHz動作なので何をするにも1クロック周期の62.5nsはかかります。これだけでEN29F002T-70JIの書き込みに関わる主要なタイミング30~40nsより十分長いので、特に何も考えなくても(NOPを入れて動作を遅延させたりしなくても)書き込みは可能という見込みです。
便利です Analog Discovery 2。ほんとうに買っててよかった。