Exemplo n.º 1
0
void	Mapper110::WriteLow( WORD addr, BYTE data )
{
	switch( addr ) {
		case	0x4100:
			reg1 = data & 0x07;
			break;
		case	0x4101:
			switch( reg1 ) {
				case	5:
					SetPROM_32K_Bank( data );
					break;
				case	0:
					reg0 = data & 0x01;
					SetVROM_8K_Bank( reg0 );
					break;
				case	2:
					reg0 = data;
					SetVROM_8K_Bank( reg0 );
					break;
				case	4:
					reg0 = reg0 | (data<<1);
					SetVROM_8K_Bank( reg0 );
					break;
				case	6:
					reg0 = reg0 | (data<<2);
					SetVROM_8K_Bank( reg0 );
					break;
				default:
					break;
			}
			break;
		default:
			break;
	}
}
Exemplo n.º 2
0
void	Mapper004::SetBank_PPU()
{
	if( VROM_1K_SIZE ) {
		if( reg[0] & 0x80 ) {
			SetVROM_8K_Bank( chr4, chr5, chr6, chr7,
					 chr01, chr01+1, chr23, chr23+1 );
		} else {
			SetVROM_8K_Bank( chr01, chr01+1, chr23, chr23+1,
					 chr4, chr5, chr6, chr7 );
		}
	} else {
		if( reg[0] & 0x80 ) {
			SetCRAM_1K_Bank( 4, (chr01+0)&0x07 );
			SetCRAM_1K_Bank( 5, (chr01+1)&0x07 );
			SetCRAM_1K_Bank( 6, (chr23+0)&0x07 );
			SetCRAM_1K_Bank( 7, (chr23+1)&0x07 );
			SetCRAM_1K_Bank( 0, chr4&0x07 );
			SetCRAM_1K_Bank( 1, chr5&0x07 );
			SetCRAM_1K_Bank( 2, chr6&0x07 );
			SetCRAM_1K_Bank( 3, chr7&0x07 );
		} else {
			SetCRAM_1K_Bank( 0, (chr01+0)&0x07 );
			SetCRAM_1K_Bank( 1, (chr01+1)&0x07 );
			SetCRAM_1K_Bank( 2, (chr23+0)&0x07 );
			SetCRAM_1K_Bank( 3, (chr23+1)&0x07 );
			SetCRAM_1K_Bank( 4, chr4&0x07 );
			SetCRAM_1K_Bank( 5, chr5&0x07 );
			SetCRAM_1K_Bank( 6, chr6&0x07 );
			SetCRAM_1K_Bank( 7, chr7&0x07 );
		}
	}
}
Exemplo n.º 3
0
void	Mapper251::SetBank()
{
	INT	chr[6];
	INT	prg[4];

	for( INT i = 0; i < 6; i++ ) {
		chr[i] = (reg[i]|(breg[1]<<4)) & ((breg[2]<<4)|0x0F);
	}

	if( reg[8] & 0x80 ) {
		SetVROM_8K_Bank(chr[2],chr[3],chr[4],chr[5],chr[0],chr[0]+1,chr[1],chr[1]+1);
	} else {
		SetVROM_8K_Bank(chr[0],chr[0]+1,chr[1],chr[1]+1,chr[2],chr[3],chr[4],chr[5]);
	}

	prg[0] = (reg[6]&((breg[3]&0x3F)^0x3F))|(breg[1]);
	prg[1] = (reg[7]&((breg[3]&0x3F)^0x3F))|(breg[1]);
	prg[2] = prg[3] =((breg[3]&0x3F)^0x3F)|(breg[1]);
	prg[2] &= PROM_8K_SIZE-1;

	if( reg[8] & 0x40 ) {
		SetPROM_32K_Bank( prg[2],prg[1],prg[0],prg[3] );
	} else {
		SetPROM_32K_Bank( prg[0],prg[1],prg[2],prg[3] );
	}
}
Exemplo n.º 4
0
void	Mapper045::SetBank_PPU()
{
	BYTE	table[16] = {
		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
		0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF
	};

	c[0] = chr0;
	c[1] = chr1;
	c[2] = chr2;
	c[3] = chr3;
	c[4] = chr4;
	c[5] = chr5;
	c[6] = chr6;
	c[7] = chr7;

	for( INT i = 0; i < 8; i++ ) {
		c[i] &= table[reg[2] & 0x0F];
		c[i] |= reg[0] & ((patch!=1)?0xFF:0xC0);
		c[i] += (reg[2] & ((patch!=1)?0x10:0x30))<<4;
	}

	if( reg[6] & 0x80 ) {
		SetVROM_8K_Bank( c[4], c[5], c[6], c[7], c[0], c[1], c[2], c[3] );
	} else {
		SetVROM_8K_Bank( c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7] );
	}
}
Exemplo n.º 5
0
void	Mapper118::SetBank_PPU()
{
	if( VROM_1K_SIZE ) {
		if( reg[0] & 0x80 ) {
			SetVROM_8K_Bank( chr4, chr5, chr6, chr7,
					 chr01, chr01+1, chr23, chr23+1 );
		} else {
			SetVROM_8K_Bank( chr01, chr01+1, chr23, chr23+1,
					 chr4, chr5, chr6, chr7 );
		}
	}
}
Exemplo n.º 6
0
void	Mapper112::SetBank_PPU()
{
	if( reg[2] & 0x02 ) {
		SetVROM_8K_Bank( chr01, chr01+1, chr23, chr23+1, chr4, chr5, chr6, chr7 );
	} else {
		SetVROM_8K_Bank(((reg[3]<<6)&0x100)+chr01, 
				((reg[3]<<6)&0x100)+chr01+1, 
				((reg[3]<<5)&0x100)+chr23, 
				((reg[3]<<5)&0x100)+chr23+1, 
				((reg[3]<<4)&0x100)+chr4, 
				((reg[3]<<3)&0x100)+chr5, 
				((reg[3]<<2)&0x100)+chr6, 
				((reg[3]<<1)&0x100)+chr7 );
	}
}
Exemplo n.º 7
0
//////////////////////////////////////////////////////////////////////////
// Mapper058                                                            //
//////////////////////////////////////////////////////////////////////////
void	Mapper058::Reset()
{
	SetPROM_32K_Bank( 0, 1, 0, 1 );
	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}
}
Exemplo n.º 8
0
//////////////////////////////////////////////////////////////////////////
// Mapper069  SunSoft FME-7                                             //
//////////////////////////////////////////////////////////////////////////
void	Mapper069::Reset()
{
	reg = 0;
	irq_enable = 0;
	irq_counter = 0;

	SetPROM_32K_Bank( 0, 1, PROM_8K_SIZE-2, PROM_8K_SIZE-1 );

	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}

	nes->apu->SelectExSound(32);
	nes->SetIrqType( NES::IRQ_CLOCK );

	patch = 0;

	DWORD	crc = nes->rom->GetPROM_CRC();

	if( crc == 0xfeac6916 ) {	// Honoo no Toukyuuji - Dodge Danpei 2(J)
//		nes->SetIrqType( NES::IRQ_HSYNC );
		nes->SetRenderMethod( NES::TILE_RENDER );
	}

	if( crc == 0xad28aef6 ) {	// Dynamite Batman(J) / Dynamite Batman - Return of the Joker(U)
		patch = 1;
	}
}
Exemplo n.º 9
0
void    Mapper117::Reset()
{
	SetPROM_32K_Bank( 0, 1, PROM_8K_SIZE-2, PROM_8K_SIZE-1 );
	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}
}
Exemplo n.º 10
0
//////////////////////////////////////////////////////////////////////////
// Mapper083  Nintendo MMC3                                             //
//////////////////////////////////////////////////////////////////////////
void	Mapper083::Reset()
{
	for( INT i = 0; i < 3; i++ ) {
		reg[i] = 0x00;
	}

	if( PROM_8K_SIZE >= 32 ) {
		SetPROM_32K_Bank( 0, 1, 30, 31 );
		reg[1] = 0x30;
	} else {
		SetPROM_32K_Bank( 0, 1, PROM_8K_SIZE-2, PROM_8K_SIZE-1 );
	}

	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}

	chr_bank = 0;

	irq_enable = 0;	// Disable
	irq_counter = 0;

	patch = 0;
	if( nes->rom->GetPROM_CRC() == 0x1461D1F8 ) {
		patch = 1;
	}
}
Exemplo n.º 11
0
//////////////////////////////////////////////////////////////////////////
// Mapper025  Konami VRC4(Normal)                                       //
//////////////////////////////////////////////////////////////////////////
void	Mapper025::Reset()
{
	for( INT i = 0; i < 11; i++ ) {
		reg[i] = 0;
	}
	reg[9] = PROM_8K_SIZE-2;

	irq_enable = 0;
	irq_counter = 0;
	irq_latch = 0;
	irq_occur = 0;
	irq_clock = 0;

	SetPROM_32K_Bank( 0, 1, PROM_8K_SIZE-2, PROM_8K_SIZE-1 );

	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}

	DWORD	crc = nes->rom->GetPROM_CRC();
	if( crc == 0xc71d4ce7 ) {	// Gradius II(J)
//		nes->SetRenderMethod( NES::POST_RENDER );
	}
	if( crc == 0xa2e68da8 ) {	// For Racer Mini Yonku - Japan Cup(J)
		nes->SetRenderMethod( NES::TILE_RENDER );
	}
	if( crc == 0xea74c587 ) {	// For Teenage Mutant Ninja Turtles(J)
		nes->SetRenderMethod( NES::TILE_RENDER );
	}
	if( crc == 0x5f82cb7d ) {	// For Teenage Mutant Ninja Turtles 2(J)
	}
	if( crc == 0x0bbd85ff ) {	// For Bio Miracle Bokutte Upa(J)
		nes->SetRenderMethod( NES::PRE_ALL_RENDER );
	}
}
Exemplo n.º 12
0
//////////////////////////////////////////////////////////////////////////
// Mapper249  MMC3                                                      //
//////////////////////////////////////////////////////////////////////////
void	Mapper249::Reset()
{
	for( INT i = 0; i < 8; i++ ) {
		reg[i] = 0x00;
	}
	prg0 = 0;
	prg1 = 1;

	SetPROM_32K_Bank( 0,1, PROM_8K_SIZE-2, PROM_8K_SIZE-1 );

	chr01 = 0;
	chr23 = 2;
	chr4  = 4;
	chr5  = 5;
	chr6  = 6;
	chr7  = 7;

	SetVROM_8K_Bank( 0 );

	we_sram  = 0;	// Disable
	irq_enable = 0;	// Disable
	irq_counter = 0;
	irq_latch = 0;
	irq_request = 0;

	// IRQタイプ設定
	nes->SetIrqType( NES::IRQ_CLOCK );

	spdata = 0;
}
Exemplo n.º 13
0
void	Mapper201::Write( WORD addr, BYTE data )
{
	BYTE	bank = (BYTE)addr & 0x03;
	if( !(addr&0x08) )
		bank = 0;
	SetPROM_32K_Bank( bank );
	SetVROM_8K_Bank( bank );
}
Exemplo n.º 14
0
//////////////////////////////////////////////////////////////////////////
// Mapper110                                                            //
//////////////////////////////////////////////////////////////////////////
void	Mapper110::Reset()
{
	SetPROM_32K_Bank( 0 );
	SetVROM_8K_Bank( 0 );

	reg0 = 0;
	reg1 = 0;
}
Exemplo n.º 15
0
void	MapperUNL_KS7037::Sync()
{
  SetPROM_8K_Bank(4,reg[6]);//8000~9FFF
  SetPROM_8K_Bank(6,reg[7]);//C000~DFFF
  SetPROM_8K_Bank(7,PROM_8K_SIZE-1);//E000~FFFF
  SetVROM_8K_Bank( 0 );
  SetVRAM_Mirror(reg[2]&1,reg[4]&1,reg[3]&1,reg[5]&1);
}
Exemplo n.º 16
0
void	MapperUNL_BB::Reset()
{
	reg = ~0;
	chr = 0;
  SetPrg8(0x6000,reg&3);
  SetPrg32(0x8000,~0);
  SetVROM_8K_Bank(chr&3);
}
Exemplo n.º 17
0
//////////////////////////////////////////////////////////////////////////
// Mapper225  72-in-1                                                   //
//////////////////////////////////////////////////////////////////////////
void	Mapper225::Reset()
{
	SetPROM_32K_Bank( 0, 1, 2, 3 );

	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}
}
Exemplo n.º 18
0
//////////////////////////////////////////////////////////////////////////
// Mapper079  Nina-3                                                    //
//////////////////////////////////////////////////////////////////////////
void	Mapper079::Reset()
{
	SetPROM_32K_Bank( 0 );

	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}
}
Exemplo n.º 19
0
//////////////////////////////////////////////////////////////////////////
// Mapper202  150-in-1                                                  //
//////////////////////////////////////////////////////////////////////////
void	Mapper202::Reset()
{
    SetPROM_16K_Bank( 4, 6 );
    SetPROM_16K_Bank( 6, 7 );

    if( VROM_1K_SIZE ) {
        SetVROM_8K_Bank( 0 );
    }
}
Exemplo n.º 20
0
//////////////////////////////////////////////////////////////////////////
// Mapper058                                                            //
//////////////////////////////////////////////////////////////////////////
void	Mapper058::Reset()
{
	SetPROM_32K_Bank( 0, 1, 0, 1 );
	if( 0xbd50a90e == nes->rom->GetPROM_CRC() )
		SetPROM_32K_Bank(0);
	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}
}
Exemplo n.º 21
0
//////////////////////////////////////////////////////////////////////////
// Mapper201  21-in-1                                                   //
//////////////////////////////////////////////////////////////////////////
void	Mapper201::Reset()
{
//	SetPROM_32K_Bank( 0, 1, PROM_8K_SIZE-2, PROM_8K_SIZE-1 );
	SetPROM_16K_Bank( 4, 0 );
	SetPROM_16K_Bank( 6, 0 );

	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}
}
Exemplo n.º 22
0
//////////////////////////////////////////////////////////////////////////
// Mapper175  15-in-1 (Kaiser)                                          //
//////////////////////////////////////////////////////////////////////////
void	Mapper175::Reset()
{
	SetPROM_16K_Bank( 4, 0 );
	SetPROM_16K_Bank( 6, 0 );
	reg_dat = 0;

	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}
}
Exemplo n.º 23
0
void	Mapper244::Write( WORD addr, BYTE data )
{
	if( addr>=0x8065 && addr<=0x80A4 ) {
		SetPROM_32K_Bank( (addr-0x8065)&0x3 );
	}

	if( addr>=0x80A5 && addr<=0x80E4 ) {
		SetVROM_8K_Bank( (addr-0x80A5)&0x7 );
	}
}
Exemplo n.º 24
0
//////////////////////////////////////////////////////////////////////////
// Mapper045  1000000-in-1                                              //
//////////////////////////////////////////////////////////////////////////
void	Mapper045::Reset()
{
	patch = 0;
	for( INT i = 0; i < 8; i++ ) {
		reg[i] = 0;
	}

	prg0 = 0;
	prg1 = 1;
	prg2 = PROM_8K_SIZE-2;
	prg3 = PROM_8K_SIZE-1;

	DWORD	crc = nes->rom->GetPROM_CRC();
	if( crc == 0x58bcacf6		// Kunio 8-in-1 (Pirate Cart)
	 || crc == 0x9103cfd6		// HIK 7-in-1 (Pirate Cart)
	 || crc == 0xc082e6d3 ) {	// Super 8-in-1 (Pirate Cart)
		patch = 1;
		prg2 = 62;
		prg3 = 63;
	}
	if( crc == 0xe0dd259d ) {	// Super 3-in-1 (Pirate Cart)
		patch = 2;
	}
	SetPROM_32K_Bank( prg0, prg1, prg2, prg3 );
	p[0] = prg0;
	p[1] = prg1;
	p[2] = prg2;
	p[3] = prg3;

	SetVROM_8K_Bank( 0 );

//	chr0 = c[0] = 0;
//	chr1 = c[1] = 0
//	chr2 = c[2] = 0;
//	chr3 = c[3] = 0;
//	chr4 = c[4] = 0;
//	chr5 = c[5] = 0;
//	chr6 = c[6] = 0;
//	chr7 = c[7] = 0;

	chr0 = c[0] = 0;
	chr1 = c[1] = 1;
	chr2 = c[2] = 2;
	chr3 = c[3] = 3;
	chr4 = c[4] = 4;
	chr5 = c[5] = 5;
	chr6 = c[6] = 6;
	chr7 = c[7] = 7;

	irq_enable = 0;
	irq_counter = 0;
	irq_latch = 0;
	irq_latched = 0;
	irq_reset = 0;
}
Exemplo n.º 25
0
void	MapperUNL_BB::Write( WORD A, BYTE V )
{
  if((A & 0x9000) == 0x8000)
    reg=chr=V;
  else
    chr=V&1; 

  SetPrg8(0x6000,reg&3);
  SetPrg32(0x8000,~0);
  SetVROM_8K_Bank(chr&3);
}
Exemplo n.º 26
0
//////////////////////////////////////////////////////////////////////////
// Mapper255  110-in-1                                                  //
//////////////////////////////////////////////////////////////////////////
void	Mapper255::Reset()
{
	SetPROM_32K_Bank( 0 );
	SetVROM_8K_Bank( 0 );
	SetVRAM_Mirror( VRAM_VMIRROR );

	reg[0] = 0;
	reg[1] = 0;
	reg[2] = 0;
	reg[3] = 0;
}
Exemplo n.º 27
0
//////////////////////////////////////////////////////////////////////////
// Mapper075  Konami VRC1/Jaleco D65005                                 //
//////////////////////////////////////////////////////////////////////////
void	Mapper075::Reset()
{
	SetPROM_32K_Bank( 0, 1, PROM_8K_SIZE-2, PROM_8K_SIZE-1 );

	if( VROM_8K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}

	reg[0] = 0;
	reg[1] = 1;
}
Exemplo n.º 28
0
//////////////////////////////////////////////////////////////////////////
// Mapper050  SMB2J                                                     //
//////////////////////////////////////////////////////////////////////////
void	Mapper050::Reset()
{
	irq_enable = 0;
	SetPROM_8K_Bank( 3, 15 );
	SetPROM_8K_Bank( 4, 8 );
	SetPROM_8K_Bank( 5, 9 );
	SetPROM_8K_Bank( 6, 0 );
	SetPROM_8K_Bank( 7, 11 );
	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}
}
Exemplo n.º 29
0
//////////////////////////////////////////////////////////////////////////
// Mapper042  Mario Baby                                                //
//////////////////////////////////////////////////////////////////////////
void	Mapper042::Reset()
{
	irq_enable = 0;
	irq_counter = 0;

	SetPROM_8K_Bank( 3, 0 );
	SetPROM_32K_Bank( PROM_8K_SIZE-4, PROM_8K_SIZE-3, PROM_8K_SIZE-2, PROM_8K_SIZE-1 );

	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}
}
Exemplo n.º 30
0
//////////////////////////////////////////////////////////////////////////
// Mapper040  SMB2J                                                     //
//////////////////////////////////////////////////////////////////////////
void	Mapper040::Reset()
{
	irq_enable = 0;
	irq_line = 0;

	SetPROM_8K_Bank( 3, 6 );
	SetPROM_32K_Bank( 4, 5, 0, 7 );

	if( VROM_1K_SIZE ) {
		SetVROM_8K_Bank( 0 );
	}
}