/************************************************* gb/gbc mbc1 rom dump script last update: 20220627 *************************************************/ function cpu_dump(d, rom_size, banksize) { //mmm01 code update 20200823 //cpu_write(d, 0x2000, 0x60);//starting block, 00000 //cpu_write(d, 0x6000, 0x00); //cpu_write(d, 0x4000, 0x70); //cpu_write(d, 0x0000, 0x40); if(rom_size>0x80000) cpu_write(d, 0x7000, 0x00); else cpu_write(d, 0x7000, 0x01); cpu_read (d, 0x0000, 0x4000); //0000-1FFF 00 Disable SRAM; 0A Enable SRAM //2000-3FFF 5Bit ROM BANK Numbers //4000-5FFF RAM or ROM Upper Bits Bank Numbers //6000-7FFF 00 4xxx Bank ROM; 01 4xxx Bank RAM for(local i = 1; i < rom_size/0x4000; i += 1) { cpu_write(d, 0x3000, i&0x1f); cpu_write(d, 0x4000, i>>5); cpu_read (d, 0x4000, 0x4000); } } function cpu_erase(d, rom_size, flash_chip_type) { local m_29f_flash = 0; local m_29lv_flash = 1; //local flash_chip_type = m_29lv_flash; //change to m_29f_flash here, if your gb //flash chip is 29f(mx29f016,amd29f016,amd29f080...) //detect chip here if(flash_chip_type==m_29f_flash) { cpu_write(d,0x555,0xF0); cpu_write(d,0x555,0xAA); cpu_write(d,0x2AA,0x55); cpu_write(d,0x555,0x80); cpu_write(d,0x555,0xAA); cpu_write(d,0x2AA,0x55); cpu_write(d,0x555,0x10); } else{ //erase mx29lv320 cpu_write(d,0xAAA,0xF0); cpu_write(d,0xAAA,0xAA); cpu_write(d,0x555,0x55); cpu_write(d,0xAAA,0x80); cpu_write(d,0xAAA,0xAA); cpu_write(d,0x555,0x55); cpu_write(d,0xAAA,0x10); } rom_flash_cfg(d,flash_chip_type); } function cpu_flash(d, rom_size, banksize) { rom_write(d, 0x0000, 0x4000); cpu_write(d, 0x6000, 0x00); for(local i = 1; i < rom_size/0x4000; i += 1) { cpu_write(d, 0x2000, i&0x1f); cpu_write(d, 0x4000, i>>5); rom_write(d, 0x4000, 0x4000); } } function save_dump(d, save_size, max_size) { cpu_write (d, 0x0000, 0x0A); cpu_write (d, 0x6000, 0x01); for(local i = 0; i < save_size/0x2000; i += 1) { cpu_write(d, 0x4000, i); cpu_read (d, 0xA000, 0x2000); } cpu_write (d, 0x0000, 0x00); } function save_erase(d, save_size, max_size) { //not need here } function save_write(d, save_size, max_size) { cpu_write (d, 0x0000, 0x0A); cpu_write (d, 0x6000, 0x01); for(local i = 0; i < save_size/0x2000; i += 1) { cpu_write(d, 0x4000, i); ram_write(d, 0xA000, 0x2000); } cpu_write (d, 0x0000, 0x00); }