/*************************************** MMC3 Base Mapper45 ***************************************/ function mmc3_prg_dump(d, size) { local banks = size/0x2000; for(local i = 0; i < banks - 2; i += 2){ cpu_write(d, 0x8000, 6); cpu_write(d, 0x8001, i); cpu_write(d, 0x8000, 7); cpu_write(d, 0x8001, i | 1); cpu_read(d, 0x8000, 0x4000); } cpu_read(d, 0xc000, 0x2000 * 2); } function mmc3_chr_dump(d, size) { for(local i = 0; i < size/0x400; i+=8){ cpu_write(d, 0x8000,0,0x8001, i|0, 0x8000, 1,0x8001, i | 2); cpu_write(d, 0x8000,2,0x8001, i|4, 0x8000, 3,0x8001, i | 5); cpu_write(d, 0x8000,4,0x8001, i|6, 0x8000, 5,0x8001, i | 7); ppu_read(d, 0x0000, 0x400 * 8); } } function cpu_dump(d, prg_size, banksize) { for(local i = 0; i < (prg_size/0x40000); i += 1){ local val = (i&7)<<5; cpu_write(d, 0x6000, 0); cpu_write(d, 0x6000, val); val = ((i&0xF)<<4)|0xF; cpu_write(d, 0x6000, val); cpu_write(d, 0x6000, 0xa0); mmc3_prg_dump(d,0x40000); } } function ppu_dump(d, chr_size, banksize) { for(local i = 0; i < (chr_size/0x40000); i += 1){ local val = (i&7)<<5; cpu_write(d, 0x6000, 0); cpu_write(d, 0x6000, val); val = ((i&0xF)<<4)|0xF; cpu_write(d, 0x6000, val); cpu_write(d, 0x6000, 0xa0); mmc3_chr_dump(d,0x40000); } }