現状では書込みサイクルが約18msのため64kbitROM全面書き換えには18ms×8192で約2分30秒かかります。これでも待てる時間ではありますがやはりBUSY状態をポーリングして書込み処理を高速化してみます。
データシートを見ると/BUSYピンの状態を見る以外にも
①データバスD7に書き込みデータを反転した/D7が出るのでD7になるまで待つ
②データバスD6を読むたび/D6,D6状態がトグルするので同じ状態が続くまで待つ
方法が示されているので簡単な①でチェックするルーチンを組み込みました
これで書込みをすると書込みサイクルのほとんどが/BUSY時間となり約5msで終了します。この場合全面書き換えは5ms×8192で約40秒で済んでしまいます
EEPROMの書込みができるようになったのでモニタプログラムを書き込みボードに挿入したところ問題なく動作しました。このときのメモリマップは以下になります。
NSC810A内の128バイトのRAMを生かすため後半16kbyteものイメージができてしまうのはちょっともったいないですがスタックとモニタのワークエリアはこの128バイトに割り付けSRAM8kbyteはアプリケーションに丸々開放することにします
ただしこのEEPROMは通常のメモリサイクルと同じ手順で書込みができてしまう(つまりはバッテリバックアップされたSRAMと同じ)ので注意が必要です。
ボードに通電したまま信号のプロービングをしていたらバスをショートさせたか何かでプログラムが暴走したことがあり、その後リセット、電源OFF/ONしてもモニタが起動しなくなってしまいました。あせってEEPROMの中身を見たらデータがめちゃくちゃに破壊されてました。
これを防ぐにはEEPROMに特殊なコマンドチェインを書込んでライトプロテクトをかけることもできるようですが、ここでは単純にジャンパポストJP2からプラグを抜いて/WEを切り離しておきました。