void map_init_217(void) { EXTCL_CPU_WR_MEM(217); EXTCL_SAVE_MAPPER(217); EXTCL_CPU_EVERY_CYCLE(MMC3); EXTCL_PPU_000_TO_34X(MMC3); EXTCL_PPU_000_TO_255(MMC3); EXTCL_PPU_256_TO_319(MMC3); EXTCL_PPU_320_TO_34X(MMC3); EXTCL_UPDATE_R2006(MMC3); mapper.internal_struct[0] = (BYTE *) &m217; mapper.internal_struct_size[0] = sizeof(m217); mapper.internal_struct[1] = (BYTE *) &mmc3; mapper.internal_struct_size[1] = sizeof(mmc3); if (info.reset >= HARD) { memset(&mmc3, 0x00, sizeof(mmc3)); memset(&irqA12, 0x00, sizeof(irqA12)); m217.reg[0] = 0x00; m217.reg[1] = 0xFF; m217.reg[2] = 0x03; } m217.reg[3] = FALSE; m217.prg_8k_bank[0] = 0; m217.prg_8k_bank[1] = 1; m217.prg_8k_bank[2] = info.prg.rom.max.banks_8k_before_last; m217.prg_8k_bank[3] = info.prg.rom.max.banks_8k; info.mapper.extend_wr = TRUE; irqA12.present = TRUE; irqA12_delay = 1; }
void map_init_Irem(BYTE model) { switch (model) { case G101: EXTCL_CPU_WR_MEM(Irem_G101); EXTCL_SAVE_MAPPER(Irem_G101); mapper.internal_struct[0] = (BYTE *) &irem_G101; mapper.internal_struct_size[0] = sizeof(irem_G101); if (info.reset >= HARD) { memset(&irem_G101, 0x00, sizeof(irem_G101)); mapper.rom_map_to[0] = 0; mapper.rom_map_to[1] = info.prg.rom[0].max.banks_8k; mapper.rom_map_to[2] = info.prg.rom[0].max.banks_8k_before_last; mapper.rom_map_to[3] = info.prg.rom[0].max.banks_8k; if (info.id == MAJORLEAGUE) { mirroring_SCR0(); } } break; case H3000: EXTCL_CPU_WR_MEM(Irem_H3000); EXTCL_SAVE_MAPPER(Irem_H3000); EXTCL_CPU_EVERY_CYCLE(Irem_H3000); mapper.internal_struct[0] = (BYTE *) &irem_H3000; mapper.internal_struct_size[0] = sizeof(irem_H3000); if (info.reset >= HARD) { memset(&irem_H3000, 0x00, sizeof(irem_H3000)); } break; case LROG017: EXTCL_CPU_WR_MEM(Irem_LROG017); EXTCL_SAVE_MAPPER(Irem_LROG017); EXTCL_WR_CHR(Irem_LROG017); mapper.internal_struct[0] = (BYTE *) &irem_LROG017; mapper.internal_struct_size[0] = sizeof(irem_LROG017); /* utilizza 0x1800 di CHR RAM extra */ map_chr_ram_extra_init(0x1800); if (info.reset >= HARD) { memset(&irem_LROG017, 0x00, sizeof(irem_LROG017)); map_chr_ram_extra_reset(); map_prg_rom_8k(4, 0, 0); } irem_LROG017_chr_ram(); break; case TAMS1: EXTCL_CPU_WR_MEM(Irem_TAMS1); if (info.reset >= HARD) { map_prg_rom_8k(2, 0, info.prg.rom[0].max.banks_16k); map_prg_rom_8k(2, 2, 0); } break; } }
void map_init_121(void) { EXTCL_CPU_WR_MEM(121); EXTCL_CPU_RD_MEM(121); EXTCL_SAVE_MAPPER(121); EXTCL_CPU_EVERY_CYCLE(MMC3); EXTCL_PPU_000_TO_34X(MMC3); EXTCL_PPU_000_TO_255(MMC3); EXTCL_PPU_256_TO_319(MMC3); EXTCL_PPU_320_TO_34X(MMC3); EXTCL_UPDATE_R2006(MMC3); mapper.internal_struct[0] = (BYTE *) &m121; mapper.internal_struct_size[0] = sizeof(m121); mapper.internal_struct[1] = (BYTE *) &mmc3; mapper.internal_struct_size[1] = sizeof(mmc3); info.mapper.extend_wr = TRUE; if (info.reset >= HARD) { memset(&m121, 0x00, sizeof(m121)); memset(&mmc3, 0x00, sizeof(mmc3)); m121.bck[0] = mapper.rom_map_to[0]; m121.bck[1] = mapper.rom_map_to[2]; } memset(&irqA12, 0x00, sizeof(irqA12)); irqA12.present = TRUE; irqA12_delay = 1; }
void map_init_83(void) { EXTCL_CPU_WR_MEM(83); EXTCL_CPU_RD_MEM(83); EXTCL_SAVE_MAPPER(83); EXTCL_CPU_EVERY_CYCLE(83); mapper.internal_struct[0] = (BYTE *) &m83; mapper.internal_struct_size[0] = sizeof(m83); if (info.reset >= HARD) { memset(&m83, 0x00, sizeof(m83)); } sync_83(); switch(info.id) { case MAP83_REG0: m83.dip = 0; break; case MAP83_DGP: m83.dip = 0xFF; info.prg.ram.banks_8k_plus = 1; break; default: m83.dip = 0xFF; break; } info.mapper.extend_wr = TRUE; }
void map_init_VRC3(void) { EXTCL_CPU_WR_MEM(VRC3); EXTCL_SAVE_MAPPER(VRC3); EXTCL_CPU_EVERY_CYCLE(VRC3); mapper.internal_struct[0] = (BYTE *) &vrc3; mapper.internal_struct_size[0] = sizeof(vrc3); info.prg.ram.banks_8k_plus = 1; if (info.reset) { memset(&vrc3, 0x00, sizeof(vrc3)); vrc3.mask = 0xFFFF; } }
void map_init_BMC411120C(void) { EXTCL_CPU_WR_MEM(BMC411120C); EXTCL_SAVE_MAPPER(BMC411120C); EXTCL_CPU_EVERY_CYCLE(MMC3); EXTCL_PPU_000_TO_34X(MMC3); EXTCL_PPU_000_TO_255(MMC3); EXTCL_PPU_256_TO_319(MMC3); EXTCL_PPU_320_TO_34X(MMC3); EXTCL_UPDATE_R2006(MMC3); mapper.internal_struct[0] = (BYTE *) &bmc411120c; mapper.internal_struct_size[0] = sizeof(bmc411120c); mapper.internal_struct[1] = (BYTE *) &mmc3; mapper.internal_struct_size[1] = sizeof(mmc3); memset(&bmc411120c, 0x00, sizeof(bmc411120c)); memset(&mmc3, 0x00, sizeof(mmc3)); memset(&irqA12, 0x00, sizeof(irqA12)); { BYTE i; map_prg_rom_8k_reset(); map_chr_bank_1k_reset(); for (i = 0; i < 8; i++) { if (i < 4) { bmc411120c.prg_map[i] = mapper.rom_map_to[i]; } bmc411120c.chr_map[i] = i; } } if (info.reset >= HARD) { bmc411120c_reset = 0; } else if (info.reset == RESET) { bmc411120c_reset ^= 0x04; } bmc411120c_update_prg(); bmc411120c_update_chr(); info.mapper.extend_wr = TRUE; irqA12.present = TRUE; irqA12_delay = 1; }
void map_init_182(void) { EXTCL_CPU_WR_MEM(182); EXTCL_SAVE_MAPPER(MMC3); EXTCL_CPU_EVERY_CYCLE(MMC3); EXTCL_PPU_000_TO_34X(MMC3); EXTCL_PPU_000_TO_255(MMC3); EXTCL_PPU_256_TO_319(MMC3); EXTCL_PPU_320_TO_34X(MMC3); EXTCL_UPDATE_R2006(MMC3); mapper.internal_struct[0] = (BYTE *) &mmc3; mapper.internal_struct_size[0] = sizeof(mmc3); if (info.reset >= HARD) { memset(&mmc3, 0x00, sizeof(mmc3)); memset(&irqA12, 0x00, sizeof(irqA12)); } irqA12.present = TRUE; irqA12_delay = 1; }
void map_init_SL1632(void) { EXTCL_CPU_WR_MEM(SL1632); EXTCL_SAVE_MAPPER(SL1632); EXTCL_CPU_EVERY_CYCLE(MMC3); EXTCL_PPU_000_TO_34X(MMC3); EXTCL_PPU_000_TO_255(MMC3); EXTCL_PPU_256_TO_319(MMC3); EXTCL_PPU_320_TO_34X(MMC3); EXTCL_UPDATE_R2006(MMC3); mapper.internal_struct[0] = (BYTE *) &sl1632; mapper.internal_struct_size[0] = sizeof(sl1632); mapper.internal_struct[1] = (BYTE *) &mmc3; mapper.internal_struct_size[1] = sizeof(mmc3); memset(&sl1632, 0x00, sizeof(sl1632)); memset(&mmc3, 0x00, sizeof(mmc3)); memset(&irqA12, 0x00, sizeof(irqA12)); { BYTE i; map_prg_rom_8k_reset(); map_chr_bank_1k_reset(); for (i = 0; i < 8; i++) { if (i < 4) { sl1632.mmc3.prg_map[i] = mapper.rom_map_to[i]; } sl1632.mmc3.chr_map[i] = sl1632.chr_map[i] = i; } sl1632.prg_map[0] = mapper.rom_map_to[0]; sl1632.prg_map[1] = mapper.rom_map_to[1]; } info.mapper.extend_wr = TRUE; irqA12.present = TRUE; irqA12_delay = 1; }
void map_init_254(void) { EXTCL_CPU_WR_MEM(254); EXTCL_CPU_RD_MEM(254); EXTCL_SAVE_MAPPER(254); EXTCL_CPU_EVERY_CYCLE(MMC3); EXTCL_PPU_000_TO_34X(MMC3); EXTCL_PPU_000_TO_255(MMC3); EXTCL_PPU_256_TO_319(MMC3); EXTCL_PPU_320_TO_34X(MMC3); EXTCL_UPDATE_R2006(MMC3); mapper.internal_struct[0] = (BYTE *) &m254; mapper.internal_struct_size[0] = sizeof(m254); mapper.internal_struct[1] = (BYTE *) &mmc3; mapper.internal_struct_size[1] = sizeof(mmc3); memset(&m254, 0x00, sizeof(m254)); memset(&mmc3, 0x00, sizeof(mmc3)); memset(&irqA12, 0x00, sizeof(irqA12)); irqA12.present = TRUE; irqA12_delay = 1; }
void map_init_Bandai(BYTE model) { chr_ram_4k_max = info.chr.rom[0].banks_4k - 1; switch (model) { case B161X02X74: EXTCL_CPU_WR_MEM(Bandai_161x02x74); EXTCL_SAVE_MAPPER(Bandai_161x02x74); EXTCL_UPDATE_R2006(Bandai_161x02x74); EXTCL_RD_NMT(Bandai_161x02x74); mapper.internal_struct[0] = (BYTE *) &b161x02x74; mapper.internal_struct_size[0] = sizeof(b161x02x74); if (info.reset >= HARD) { b161x02x74.chr_rom_bank = 0; map_prg_rom_8k(4, 0, 0); { BYTE value, save = 0; DBWORD bank; b161x02x74_chr_4k_update(); } } break; case FCGx: case E24C01: case E24C02: case DATACH: { EXTCL_CPU_WR_MEM(Bandai_FCGX); EXTCL_CPU_RD_MEM(Bandai_FCGX); EXTCL_SAVE_MAPPER(Bandai_FCGX); EXTCL_BATTERY_IO(Bandai_FCGX); EXTCL_CPU_EVERY_CYCLE(Bandai_FCGX); mapper.internal_struct[0] = (BYTE *) &FCGX; mapper.internal_struct_size[0] = sizeof(FCGX); info.mapper.extend_wr = TRUE; if (info.reset >= HARD) { memset(&FCGX, 0x00, sizeof(FCGX)); FCGX.e0.output = FCGX.e1.output = 0x10; if (info.prg.rom[0].banks_16k >= 32) { map_prg_rom_8k(2, 2, info.prg.rom[0].max.banks_16k); } } else { BYTE i; for (i = 0; i < 8; i++) { FCGX.reg[i] = 0; } } switch (model) { case E24C01: info.prg.ram.bat.banks = TRUE; FCGX.e0.size = 128; break; case E24C02: info.prg.ram.bat.banks = TRUE; FCGX.e0.size = 256; break; case DATACH: info.prg.ram.bat.banks = TRUE; FCGX.e0.size = 256; FCGX.e1.size = 128; break; } break; } } switch (info.id) { case FAMICOMJUMPII: info.prg.ram.banks_8k_plus = 1; info.prg.ram.bat.banks = 1; break; } type = model; }
void map_init_Waixing(BYTE model) { switch (model) { case WPSX: EXTCL_CPU_WR_MEM(Waixing_PSx); map_prg_rom_8k(4, 0, 0); break; case WTB: EXTCL_CPU_WR_MEM(Waixing_type_B); EXTCL_SAVE_MAPPER(Waixing_type_B); EXTCL_WR_CHR(Waixing_type_B); EXTCL_CPU_EVERY_CYCLE(MMC3); EXTCL_PPU_000_TO_34X(MMC3); EXTCL_PPU_000_TO_255(MMC3); EXTCL_PPU_256_TO_319(MMC3); EXTCL_PPU_320_TO_34X(MMC3); EXTCL_UPDATE_R2006(MMC3); mapper.internal_struct[0] = (BYTE *) &waixing; mapper.internal_struct_size[0] = sizeof(waixing); mapper.internal_struct[1] = (BYTE *) &mmc3; mapper.internal_struct_size[1] = sizeof(mmc3); /* utilizza 0x2000 di CHR RAM extra */ map_chr_ram_extra_init(0x2000); if (info.reset >= HARD) { memset(&mmc3, 0x00, sizeof(mmc3)); memset(&irqA12, 0x00, sizeof(irqA12)); memset(&waixing, 0x00, sizeof(waixing)); map_chr_ram_extra_reset(); { BYTE i; map_chr_bank_1k_reset(); for (i = 0; i < 8; i++) { waixing.chr_map[i] = i; } } } irqA12.present = TRUE; irqA12_delay = 1; break; case WTA: case WTC: case WTD: case WTE: if (model == WTA) { min = 0x08; max = 0x09; } else if (model == WTC) { min = 0x08; max = 0x0B; } else if (model == WTD) { min = 0x00; max = 0x01; } else if (model == WTE) { min = 0x00; max = 0x03; } EXTCL_CPU_WR_MEM(Waixing_type_ACDE); EXTCL_SAVE_MAPPER(Waixing_type_ACDE); EXTCL_WR_CHR(Waixing_type_ACDE); EXTCL_CPU_EVERY_CYCLE(MMC3); EXTCL_PPU_000_TO_34X(MMC3); EXTCL_PPU_000_TO_255(MMC3); EXTCL_PPU_256_TO_319(MMC3); EXTCL_PPU_320_TO_34X(MMC3); EXTCL_UPDATE_R2006(MMC3); mapper.internal_struct[0] = (BYTE *) &waixing; mapper.internal_struct_size[0] = sizeof(waixing); mapper.internal_struct[1] = (BYTE *) &mmc3; mapper.internal_struct_size[1] = sizeof(mmc3); /* utilizza 0x2000 di CHR RAM extra */ map_chr_ram_extra_init(0x2000); if (info.reset >= HARD) { memset(&mmc3, 0x00, sizeof(mmc3)); memset(&irqA12, 0x00, sizeof(irqA12)); memset(&waixing, 0x00, sizeof(waixing)); map_chr_ram_extra_reset(); { BYTE i; map_chr_bank_1k_reset(); for (i = 0; i < 8; i++) { waixing.chr_map[i] = i; if ((waixing.chr_map[i] >= min) && (waixing.chr_map[i] <= max)) { chr.bank_1k[i] = &chr.extra.data[(waixing.chr_map[i] - min) << 10]; } } } } irqA12.present = TRUE; irqA12_delay = 1; break; case WTG: EXTCL_CPU_WR_MEM(Waixing_type_G); EXTCL_SAVE_MAPPER(Waixing_type_G); EXTCL_WR_CHR(Waixing_type_G); EXTCL_CPU_EVERY_CYCLE(MMC3); EXTCL_PPU_000_TO_34X(MMC3); EXTCL_PPU_000_TO_255(MMC3); EXTCL_PPU_256_TO_319(MMC3); EXTCL_PPU_320_TO_34X(MMC3); EXTCL_UPDATE_R2006(MMC3); mapper.internal_struct[0] = (BYTE *) &waixing; mapper.internal_struct_size[0] = sizeof(waixing); mapper.internal_struct[1] = (BYTE *) &mmc3; mapper.internal_struct_size[1] = sizeof(mmc3); /* utilizza 0x2000 di CHR RAM extra */ map_chr_ram_extra_init(0x2000); if (info.reset >= HARD) { memset(&mmc3, 0x00, sizeof(mmc3)); memset(&irqA12, 0x00, sizeof(irqA12)); memset(&waixing, 0x00, sizeof(waixing)); map_chr_ram_extra_reset(); { BYTE i; map_chr_bank_1k_reset(); for (i = 0; i < 8; i++) { waixing.chr_map[i] = i; if (waixing.chr_map[i] < 8) { chr.bank_1k[i] = &chr.extra.data[waixing.chr_map[i] << 10]; } } } } irqA12.present = TRUE; irqA12_delay = 1; break; case WTH: EXTCL_CPU_WR_MEM(Waixing_type_H); EXTCL_SAVE_MAPPER(Waixing_type_H); EXTCL_CPU_EVERY_CYCLE(MMC3); EXTCL_PPU_000_TO_34X(MMC3); EXTCL_PPU_000_TO_255(MMC3); EXTCL_PPU_256_TO_319(MMC3); EXTCL_PPU_320_TO_34X(MMC3); EXTCL_UPDATE_R2006(MMC3); mapper.internal_struct[0] = (BYTE *) &waixing; mapper.internal_struct_size[0] = sizeof(waixing); mapper.internal_struct[1] = (BYTE *) &mmc3; mapper.internal_struct_size[1] = sizeof(mmc3); /* utilizza 0x2000 di CHR RAM extra */ map_chr_ram_extra_init(0x2000); if (info.reset >= HARD) { memset(&mmc3, 0x00, sizeof(mmc3)); memset(&irqA12, 0x00, sizeof(irqA12)); memset(&waixing, 0x00, sizeof(waixing)); map_chr_ram_extra_reset(); { BYTE i, value; map_prg_rom_8k_reset(); map_chr_bank_1k_reset(); for (i = 0; i < 8; i++) { if (i < 4) { waixing.prg_map[i] = mapper.rom_map_to[i]; } waixing.chr_map[i] = i; if (mapper.write_vram) { chr.bank_1k[i] = &chr.extra.data[waixing.chr_map[i] << 10]; } } waixing_type_H_prg_8k_update() } } irqA12.present = TRUE; irqA12_delay = 1; break; case SH2: EXTCL_CPU_WR_MEM(Waixing_SH2); EXTCL_SAVE_MAPPER(Waixing_SH2); EXTCL_AFTER_RD_CHR(Waixing_SH2); EXTCL_UPDATE_R2006(Waixing_SH2); EXTCL_WR_CHR(Waixing_SH2); EXTCL_CPU_EVERY_CYCLE(MMC3); EXTCL_PPU_000_TO_34X(MMC3); EXTCL_PPU_000_TO_255(MMC3); EXTCL_PPU_256_TO_319(MMC3); EXTCL_PPU_320_TO_34X(MMC3); mapper.internal_struct[0] = (BYTE *) &waixing; mapper.internal_struct_size[0] = sizeof(waixing); mapper.internal_struct[1] = (BYTE *) &mmc3; mapper.internal_struct_size[1] = sizeof(mmc3); /* utilizza 0x2000 di CHR RAM extra */ map_chr_ram_extra_init(0x2000); if (info.reset >= HARD) { memset(&mmc3, 0x00, sizeof(mmc3)); memset(&irqA12, 0x00, sizeof(irqA12)); memset(&waixing, 0x00, sizeof(waixing)); map_chr_ram_extra_reset(); waixing.reg = 0xFD; waixing.ctrl[0] = 1; waixing.ctrl[1] = 1; map_prg_rom_8k_reset(); map_chr_bank_1k_reset(); waixing.chr_map[0] = 0; waixing.chr_map[1] = 0; waixing.chr_map[2] = 0; waixing.chr_map[4] = 0; waixing_SH2_PPUFD(); } irqA12.present = TRUE; irqA12_delay = 1; break; }