示例#1
0
void nes_exrom_device::update_prg()
{
	int bank0, bank1, bank2, bank3;

	switch (m_prg_mode)
	{
		case 0: // 32k banks
			bank3 = m_prg_regs[3] >> 2;
			prg32(bank3);
			break;

		case 1: // 16k banks
			bank1 = m_prg_regs[1] >> 1;
			bank3 = m_prg_regs[3] >> 1;

			if (m_prg_ram_mapped[1])
			{
				prgram_bank8_x(0, ((bank1 << 1) & 0x07));
				prgram_bank8_x(1, ((bank1 << 1) & 0x07) | 1);
			}
			else
				prg16_89ab(bank1);

			prg16_cdef(bank3);
			break;

		case 2: // 16k-8k banks
			bank1 = m_prg_regs[1] >> 1;
			bank2 = m_prg_regs[2];
			bank3 = m_prg_regs[3];

			if (m_prg_ram_mapped[1])
			{
				prgram_bank8_x(0, ((bank1 << 1) & 0x07));
				prgram_bank8_x(1, ((bank1 << 1) & 0x07) | 1);
			}
			else
				prg16_89ab(bank1);

			if (m_prg_ram_mapped[2])
				prgram_bank8_x(2, bank2 & 0x07);
			else
				prg8_cd(bank2);

			prg8_ef(bank3);
			break;

		case 3: // 8k banks
			bank0 = m_prg_regs[0];
			bank1 = m_prg_regs[1];
			bank2 = m_prg_regs[2];
			bank3 = m_prg_regs[3];

			if (m_prg_ram_mapped[0])
				prgram_bank8_x(0, bank0 & 0x07);
			else
				prg8_89(bank0);

			if (m_prg_ram_mapped[1])
				prgram_bank8_x(1, bank1 & 0x07);
			else
				prg8_ab(bank1);

			if (m_prg_ram_mapped[2])
				prgram_bank8_x(2, bank2 & 0x07);
			else
				prg8_cd(bank2);

			prg8_ef(bank3);
			break;
	}
}
示例#2
0
void nes_exrom_device::update_prg()
{
	int bank0, bank1, bank2, bank3;

	switch (m_prg_mode)
	{
		case 0: // 32k banks
			bank3 = m_prg_regs[3];
			prg32(bank3 >> 2);
			break;

		case 1: // 16k banks
			bank1 = m_prg_regs[1];
			bank3 = m_prg_regs[3];

			if (!BIT(bank1, 7)) // PRG RAM
			{
				prgram_bank8_x(0, (bank1 & 0x06));
				prgram_bank8_x(1, (bank1 & 0x06) + 1);
			}
			else
				prg16_89ab(bank1 >> 1);

			prg16_cdef(bank3);
			break;

		case 2: // 16k-8k banks
			bank1 = m_prg_regs[1];
			bank2 = m_prg_regs[2];
			bank3 = m_prg_regs[3];

			if (!BIT(bank1, 7))
			{
				prgram_bank8_x(0, (bank1 & 0x06));
				prgram_bank8_x(1, (bank1 & 0x06) + 1);
			}
			else
				prg16_89ab((bank1 & 0x7f) >> 1);

			if (!BIT(bank2, 7))
				prgram_bank8_x(2, bank2 & 0x07);
			else
				prg8_cd(bank2 & 0x7f);

			prg8_ef(bank3);
			break;

		case 3: // 8k banks
			bank0 = m_prg_regs[0];
			bank1 = m_prg_regs[1];
			bank2 = m_prg_regs[2];
			bank3 = m_prg_regs[3];

			if (!BIT(bank0, 7))
				prgram_bank8_x(0, bank0 & 0x07);
			else
				prg8_89(bank0 & 0x7f);

			if (!BIT(bank1, 7))
				prgram_bank8_x(1, bank1 & 0x07);
			else
				prg8_ab(bank1 & 0x7f);

			if (!BIT(bank2, 7))
				prgram_bank8_x(2, bank2 & 0x07);
			else
				prg8_cd(bank2 & 0x7f);

			prg8_ef(bank3);
			break;
	}
}