バンク切り替えについてEnriさんのところに詳しく書かれています。74161は同期4ビットカウンターですが、プリロードを使って4ビット分D0、D1、D4、D5をラッチしているような感じです。Wでロード設定、ROMSELの立ち上がりでD0->A13、D1->A14としてラッチしますから、バンク切り替えするためにはD0とD1とで切り替えたいバンクを指定してwriteすればいいことになります。Enriさんのところにはグラディウスについて、こう書かれています。
バンク#00を選択するには$8ACEに$30を書き込めばCHR$0000~$1FFFがバンク#00になります バンク#01を選択するには$8AD0に$31を書き込めばCHR$0000~$1FFFがバンク#01になります バンク#02を選択するには$8ACFに$32を書き込めばCHR$0000~$1FFFがバンク#02になります バンク#03を選択するには$8AD1に$33を書き込めばCHR$0000~$1FFFがバンク#03になります
そのとおりにanagoのスクリプトを書きます。D4とD5はダイオードがついているので昨日の図で右向きならLowに、左向きならHighにしておけばアドレスバスで競合しないです。グラディウスは2本のダイオードが左向きについているのでしょう、たぶん。バンク切り替えのデータ書き込みはどのアドレスでも良いというわけではなく、グラディウスの場合、ROMがD4、D5ともHighのデータを格納しているところでwriteしないとデータバスで競合します。
/* グラディウス */ board <- { mappernum = 3, cpu_rom = { size_base = 0x8000, size_max = 0x8000 banksize = 0x8000 }, ppu_rom= { size_base = 0x8000, size_max = 0x8000, banksize = 0x2000 }, ppu_ramfind = false, vram_mirrorfind = true }; function cpu_dump(d, pagesize, banksize) { cpu_read(d, 0x8000, 0x4000); cpu_read(d, 0xc000, 0x4000); } function ppu_dump(d, pagesize, banksize) { cpu_write(d, 0x8ace, 0x30); ppu_read(d, 0, 0x2000); cpu_write(d, 0x8ad0, 0x31); ppu_read(d, 0, 0x2000); cpu_write(d, 0x8acf, 0x32); ppu_read(d, 0, 0x2000); cpu_write(d, 0x8ad1, 0x33); ppu_read(d, 0, 0x2000); }
これで吸い出せました。