void NES_mapper248::MMC3_set_CPU_banks() { if(prg_swap()) { set_CPU_banks(num_8k_ROM_banks-2,prg1,prg0,num_8k_ROM_banks-1); } else { set_CPU_banks(prg0,prg1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); } }
void NES_mapper1::MMC1_set_CPU_banks() { set_CPU_banks((MMC1_256K_base << 5) + (MMC1_bank1 & ((256/8)-1)), (MMC1_256K_base << 5) + (MMC1_bank2 & ((256/8)-1)), (MMC1_256K_base << 5) + (MMC1_bank3 & ((256/8)-1)), (MMC1_256K_base << 5) + (MMC1_bank4 & ((256/8)-1))); }
///////////////////////////////////////////////////////////////////// // Mapper 16 void NES_mapper16::Reset() { patch = 0; if(parent_NES->crc32() == 0x3f15d20d) // Famicom Jump 2 - Saikyou no 7 Nin { patch = 1; } if(!patch) { (nes6502_get_current_context())->mem_page[3] = serial_out; nes6502_setcontext(); eeprom_status = 0x00; barcode_status = 0x00; barcode_enabled = 0; //memset(serial_out, eeprom_status | barcode_status, 0x2000); serial_out[0] = eeprom_status | barcode_status; } // set CPU bank pointers set_CPU_banks(0,1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); regs[0] = 0; regs[1] = 0; regs[2] = 0; irq_enabled = 0; irq_counter = 0; irq_latch = 0; }
///////////////////////////////////////////////////////////////////// // Mapper 69 void NES_mapper69::Reset() { patch = 0; // for Dynamite Batman if(parent_NES->crc32() == 0xad28aef6) // Dynamite Batman { patch = 1; } // Init ExSound parent_NES->apu->SelectExSound(NES_APU_EXSOUND_FME7); // set CPU bank pointers set_CPU_banks(0,1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); // set PPU bank pointers if(num_1k_VROM_banks) { set_PPU_banks(0,1,2,3,4,5,6,7); } irq_enabled = 0; irq_counter = 0; }
///////////////////////////////////////////////////////////////////// // Mapper 25 void NES_mapper25::Reset() { patch = 0; if(parent_NES->crc32() == 0xea74c587 || // Teenage Mutant Ninja Turtles parent_NES->crc32() == 0x5f82cb7d || // Teenage Mutant Ninja Turtles 2 parent_NES->crc32() == 0xa2e68da8) // Racer Mini Yonku - Japan Cup { patch = 1; } // set CPU bank pointers set_CPU_banks(0,1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); // set PPU bank pointers if(num_1k_VROM_banks) { set_PPU_banks(0,1,2,3,4,5,6,7); } for(int i = 0; i < 8; i++) regs[i] = 0; regs[8] = 0; regs[9] = num_8k_ROM_banks-2; regs[10] = 0; irq_enabled = 0; irq_counter = 0; irq_latch = 0; }
///////////////////////////////////////////////////////////////////// // Mapper 188 void NES_mapper188::Reset() { // set CPU bank pointers if(num_8k_ROM_banks > 16) { set_CPU_banks(0,1,14,15); } else { set_CPU_banks(0,1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); } (nes6502_get_current_context ())->mem_page[3] = dummy; nes6502_setcontext(); dummy[0] = 0x03; // ? }
///////////////////////////////////////////////////////////////////// // Mapper 66 void NES_mapper66::Reset() { // set CPU bank pointers set_CPU_banks(0,1,2,3); set_PPU_banks(0,1,2,3,4,5,6,7); if(parent_NES->crc32() == 0xe30552db) // Paris-Dakar Rally Special { parent_NES->frame_irq_disenabled = 1; } }
///////////////////////////////////////////////////////////////////// // Mapper 92 void NES_mapper92::Reset() { // set CPU bank pointers set_CPU_banks(0,1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); // set PPU bank pointers if(num_1k_VROM_banks) { set_PPU_banks(0,1,2,3,4,5,6,7); } }
// Created by rinao void NES_mapper92::MemoryWrite(uint32 addr, uint8 data) { data = (uint8)addr & 0xff; uint8 c_bank = (data & 0x0f) << 1; uint8 p_bank = data & 0x0f; if (addr >= 0x9000){ // Moero!! ProSoccer if ((data & 0xf0) == 0xd0){ set_CPU_banks(0,1,c_bank,c_bank+1); } else if ((data & 0xf0) == 0xe0){ set_PPU_banks(p_bank*8,p_bank*8+1,p_bank*8+2,p_bank*8+3,p_bank*8+4,p_bank*8+5,p_bank*8+6,p_bank*8+7); } } else { // Moero!! Proyakyuu '88 ketteiban if ((data & 0xf0) == 0xb0){ set_CPU_banks(0,1,c_bank,c_bank+1); } else if ((data & 0xf0) == 0x70){ set_PPU_banks(p_bank*8,p_bank*8+1,p_bank*8+2,p_bank*8+3,p_bank*8+4,p_bank*8+5,p_bank*8+6,p_bank*8+7); } } }
void NES_mapper72::MemoryWrite(uint32 addr, uint8 data) { uint8 bank = data & 0x0f; if (data & 0x80) { set_CPU_banks(bank*2, bank*2+1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); } if (data & 0x40) { set_PPU_banks(bank*8, bank*8+1,bank*8+2,bank*8+3,bank*8+4,bank*8+5,bank*8+6,bank*8+7); } }
///////////////////////////////////////////////////////////////////// // Mapper 230 void NES_mapper230::Reset() { // Contra - 22 Games switch if(rom_switch) { rom_switch = 0; } else { rom_switch = 1; } // set CPU bank pointers if(rom_switch) { set_CPU_banks(0,1,14,15); } else { set_CPU_banks(16,17,num_8k_ROM_banks-2,num_8k_ROM_banks-1); } }
///////////////////////////////////////////////////////////////////// // Mapper 17 void NES_mapper17::Reset() { // set CPU bank pointers set_CPU_banks(0,1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); // set PPU bank pointers if(num_1k_VROM_banks) { set_PPU_banks(0,1,2,3,4,5,6,7); } irq_enabled = 0; irq_counter = 0; irq_latch = 0; }
void NES_mapper19::Reset() { patch = 0; if(parent_NES->crc32() == 0x761ccfb5 || // Digital Devil Story - Megami Tensei 2 parent_NES->crc32() == 0x1294ab5a) // Digital Devil Story - Megami Tensei 2 { patch = 1; } if(parent_NES->crc32() == 0x96533999 || // Dokuganryuu Masamune parent_NES->crc32() == 0x429fd177 || // Famista '90 parent_NES->crc32() == 0xdd454208 || // Hydlide 3 - Yami Kara no Houmonsha (J).nes parent_NES->crc32() == 0xb1b9e187 || // Kaijuu Monogatari parent_NES->crc32() == 0xaf15338f) // Mindseeker { patch = 2; } // Init ExSound parent_NES->apu->SelectExSound(NES_APU_EXSOUND_N106); if (parent_NES->crc32() == 0x14942c06 || // Wagyan Land 3 (j) parent_NES->crc32() == 0x02738c68) // Youkai Doutyu ki (j) { parent_NES->apu->SelectExSound(NES_APU_EXSOUND_NONE); } // set CPU bank pointers set_CPU_banks(0,1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); // set PPU bank pointers if(num_1k_VROM_banks >= 8) { set_PPU_bank0(num_1k_VROM_banks-8); set_PPU_bank1(num_1k_VROM_banks-7); set_PPU_bank2(num_1k_VROM_banks-6); set_PPU_bank3(num_1k_VROM_banks-5); set_PPU_bank4(num_1k_VROM_banks-4); set_PPU_bank5(num_1k_VROM_banks-3); set_PPU_bank6(num_1k_VROM_banks-2); set_PPU_bank7(num_1k_VROM_banks-1); } regs[0] = 0; regs[1] = 0; regs[2] = 0; }
///////////////////////////////////////////////////////////////////// // Mapper 105 void NES_mapper105::Reset() { set_CPU_banks(0,1,2,3); regs[0] = 0x0C; regs[1] = 0x00; regs[2] = 0x00; regs[3] = 0x10; bits = 0; write_count = 0; irq_counter = 0; irq_enabled = 0; init_state = 0; }
///////////////////////////////////////////////////////////////////// // Mapper 24 void NES_mapper24::Reset() { // set CPU bank pointers set_CPU_banks(0,1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); // set PPU bank pointers if(num_1k_VROM_banks) { set_PPU_banks(0,1,2,3,4,5,6,7); } irq_enabled = 0; irq_counter = 0; irq_latch = 0; // add the external sound hardware parent_NES->apu->hasExt_VRC6(); }
///////////////////////////////////////////////////////////////////// // Mapper 21 void NES_mapper21::Reset() { // set CPU bank pointers set_CPU_banks(0,1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); regs[0] = 0; regs[1] = 1; regs[2] = 2; regs[3] = 3; regs[4] = 4; regs[5] = 5; regs[6] = 6; regs[7] = 7; regs[8] = 0; irq_enabled = 0; irq_counter = 0; irq_latch = 0; }
///////////////////////////////////////////////////////////////////// // Mapper 65 void NES_mapper65::Reset() { patch = 0; // for Kaiketsu Yanchamaru 3 if(parent_NES->crc32() == 0xe30b7f64) // Kaiketsu Yanchamaru 3 - Taiketsu! Zouringen { patch = 1; } // set CPU bank pointers set_CPU_banks(0,1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); // set PPU bank pointers if(num_1k_VROM_banks) { set_PPU_banks(0,1,2,3,4,5,6,7); } irq_enabled = 0; irq_counter = 0; }
///////////////////////////////////////////////////////////////////// // Mapper 86 void NES_mapper86::Reset() { // set CPU bank pointers set_CPU_banks(0,1,2,3); set_PPU_banks(0,1,2,3,4,5,6,7); }
///////////////////////////////////////////////////////////////////// // Mapper 94 void NES_mapper94::Reset() { // set CPU bank pointers set_CPU_banks(0,1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); }
void NES_mapper248::MemoryWriteSaveRAM(uint32 addr, uint8 data) { set_CPU_banks(2*data,2*data+1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); }
///////////////////////////////////////////////////////////////////// // Mapper 237 void NES_mapper237::Reset() { set_CPU_banks(0,1,num_8k_ROM_banks-2,num_8k_ROM_banks-1); set_PPU_banks(0,1,2,3,4,5,6,7); }