Exemple #1
0
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;
}
Exemple #2
0
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;
	}
}
Exemple #3
0
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;
}
Exemple #4
0
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;
}
Exemple #5
0
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;
	}
}
Exemple #6
0
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;
}
Exemple #7
0
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;
}
Exemple #8
0
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;
}
Exemple #9
0
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;
}
Exemple #10
0
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;
}
Exemple #11
0
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;
	}