ロジアナだしてないんですが、スクリプトいじって様子を眺めてみてわかったことがあります。箇条書きにするとこんな感じです。
- Program ROM enable に R/W をいれないと ROM からデータがでてくるので、ソフトの使い方を見るとそれはありえない
- どういうわけかどのバンク(固定領域も含む)、どのページを指定しても必ず ROM offset 0x00000-0x01fff に影響がでる
2つ目のバンク切り替えの不備ですが、おそらく FME-7 への φ2 が L のときはどのバンクも選択されてないとして、Program ROM の A17:13 が 5'h00 が出力されている気がします。なんちゃって HDL で書くと下記の感じではないかと思います。
program_rom_a[17:13] = cpu_phi2 == 1'b0 ? 5'h00 : {~ROMCS, cpu_a[14:13], 1'b0} == 4'h6 ? reg8[4:0] : {~ROMCS, cpu_a[14:13], 1'b0} == 4'h8 ? reg9[4:0] : {~ROMCS, cpu_a[14:13], 1'b0} == 4'ha ? regA[4:0] : {~ROMCS, cpu_a[14:13], 1'b0} == 4'hc ? regB[4:0] : 5'h1f;
この仮定が正しいとなると φ2 を HIGH にして flash への program command を送るわけですが、 FME-7 へも write cycle と認識されるとバンク切り替えが暴発するのでその時点で flash 化は不可能という残念なお知らせをしなければならないと思います。
仮にこれで改善したとなるとファームウェアとホストのクライアント両方に改修が必要でしていろいろ大変なことになります。また CPU A12 の不備とこれがどうつながるのかが説明できないです。
いままでのメモリコントローラでこういうことはなくて単純に CPU のアドレスバスだけをみてメモリコントローラはバンクを選択していたので気にも留めてませんでした。普通はこんな感じです。
program_rom_a[17:13] = {~ROMCS, cpu_a[14:13], 1'b0} == 4'h8 ? reg8000 : {~ROMCS, cpu_a[14:13], 1'b0} == 4'ha ? regA000 : {~ROMCS, cpu_a[14:13], 1'b0} == 4'hc ? regC000 : 5'h1f;