/*************************************** VRC4A Mapper21 last update 20201108 ***************************************/ function vrc4_cpu_dump(d, pagesize, banksize, r0, r1) { local a2 = 1 << r1; cpu_write(d, 0x9000 | a2, 0); for(local i = 0; i < pagesize - 2; i += 2){ cpu_write(d, 0x8000, i); cpu_write(d, 0xa000, i | 1); cpu_read(d, 0x8000, banksize * 2); } cpu_write(d, 0x9000 | a2, 0x02); cpu_write(d, 0x8000, 0x1e); cpu_read(d, 0xc000, banksize * 2); } function cpu_dump(d,prg_size,crc) { //Ganbare Goemon Gaiden 2 - Tenka no Zaihou // // //9080:01 //9000:00 //8000:xx BANK:8000-9fff //A000:xx BANK:a000-Bfff if(0x186C4366==crc) { show_log(d, "Ganbare Goemon Gaiden 2 - Tenka no Zaihou"); //vrc4_cpu_dump(d,prg_size/0x2000,0x2000, 6, 7); cpu_write(d, 0x9080, 0x1); for(local i = 0; i < prg_size/0x2000 - 1; i += 1){ cpu_write(d, 0xa000, i); cpu_read(d, 0xA000, 0x2000); } cpu_read(d, 0xE000, 0x2000); } else vrc4_cpu_dump(d,prg_size/0x2000,0x2000, 1, 2); } function ppu_bank_set(d, addr, i, j, r0, r1) { local a1 = (1 << r0); local a2 = (1 << r1); local a3 = a1 | a2; //cpu_write(d, addr | a1, i >> 4); //cpu_write(d, addr, i & 0xf); //cpu_write(d, addr | a3, j >> 4); //cpu_write(d, addr | a2, j & 0xf); cpu_write(d, addr | a1, i >> 4,addr, i & 0xf,addr | a3, j >> 4,addr | a2, j & 0xf); } function vrc4_ppu_dump(d, pagesize, banksize, r0, r1) { for(local i = 0; i < pagesize; i += 8){ ppu_bank_set(d, 0xb000, i | 0, i | 1, r0, r1); ppu_bank_set(d, 0xc000, i | 2, i | 3, r0, r1); ppu_bank_set(d, 0xd000, i | 4, i | 5, r0, r1); ppu_bank_set(d, 0xe000, i | 6, i | 7, r0, r1); ppu_read(d, 0x0000, banksize * 8); } } function ppu_dump(d,chr_size,reset_crc) { if(reset_crc==0x4a0132df)//wai wai world 2 vrc4_ppu_dump(d, chr_size/0x400, 0x400, 1, 2); else vrc4_ppu_dump(d, chr_size/0x400, 0x400, 6, 7); }