Beispiel #1
0
void	MapperUNL_KS7037::Reset()
{
	reg[0]=reg[1]=reg[2]=reg[3]=reg[4]=reg[5]=0;
	reg[7] = reg[6]=PROM_8K_SIZE-1;

	ZeroMemory(MRAM,0x2000*2);	
	memcpy(&MRAM[0x1000],PROM+0x3c*0x400,0x1000);//ok 
	SetPROM_Bank(3, MRAM, BANKTYPE_ROM);//6000~7FFF

	memcpy(&MRAM[0x2000],PROM+0x70*0x400,0x1000);//ok
	SetPROM_Bank(5, &MRAM[0x2000], BANKTYPE_ROM);//A000~BFFF

	Sync();
}
Beispiel #2
0
void	MapperUNL_LE05::Reset()
{
	SetPROM_Bank(3, PROM+0x6800, BANKTYPE_ROM);
	SetPROM_Bank(4, PROM +0x800, BANKTYPE_ROM);
	SetPROM_Bank(5, PROM+0x2800, BANKTYPE_ROM);
	SetPROM_Bank(6, PROM+0x4800, BANKTYPE_ROM);
	memcpy(&MRAM[  0x0],PROM,0x800);
	memcpy(&MRAM[0x800],PROM,0x800);
	memcpy(&MRAM[0x1000],PROM,0x800);
	memcpy(&MRAM[0x1800],PROM,0x800);
	SetPROM_Bank(7, MRAM, BANKTYPE_ROM);
	
	SetVROM_8K_Bank( 0 );
}
Beispiel #3
0
//
// 全メモリ/レジスタ等の初期化
//
void	NesSub_MemoryInitial()
{
INT	i;

	// メモリクリア
	ZEROMEMORY( RAM,  sizeof(RAM) );
	ZEROMEMORY( WRAM, sizeof(WRAM) );
	ZEROMEMORY( DRAM, sizeof(DRAM) );
	ZEROMEMORY( ERAM, sizeof(ERAM) );
	ZEROMEMORY( XRAM, sizeof(XRAM) );
	ZEROMEMORY( CRAM, sizeof(CRAM) );
	ZEROMEMORY( VRAM, sizeof(VRAM) );

	ZEROMEMORY( SPRAM, sizeof(SPRAM) );
	ZEROMEMORY( BGPAL, sizeof(BGPAL) );
	ZEROMEMORY( SPPAL, sizeof(SPPAL) );

	ZEROMEMORY( CPUREG, sizeof(CPUREG) );
	ZEROMEMORY( PPUREG, sizeof(PPUREG) );

	FrameIRQ = 0xC0;

	PROM = VROM = NULL;

	// 0 除算防止対策
	PROM_8K_SIZE = PROM_16K_SIZE = PROM_32K_SIZE = 1;
	VROM_1K_SIZE = VROM_2K_SIZE = VROM_4K_SIZE = VROM_8K_SIZE = 1;

	// デフォルトバンク設定
	for( i = 0; i < 8; i++ ) {
		CPU_MEM_BANK[i] = NULL;
		CPU_MEM_TYPE[i] = BANKTYPE_ROM;
		CPU_MEM_PAGE[i] = 0;
	}

	// 内臓RAM/WRAM
	SetPROM_Bank( 0, RAM,  BANKTYPE_RAM );
	SetPROM_Bank( 3, WRAM, BANKTYPE_RAM );

	// ダミー
	SetPROM_Bank( 1, XRAM, BANKTYPE_ROM );
	SetPROM_Bank( 2, XRAM, BANKTYPE_ROM );

	for( i = 0; i < 8; i++ ) {
		CRAM_USED[i] = 0;
	}

	// PPU VROMバンク設定
//	SetVRAM_Mirror( VRAM_MIRROR4 );
}
//////////////////////////////////////////////////////////////////////////
// Mapper189  Street Fighter 2 Yoko/Master Fighter 2                    //
//            快打傅説 Street Fighter IV (GOUDER)                       //
//////////////////////////////////////////////////////////////////////////
void	Mapper189::Reset()
{
	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 );
	}

	reg[0] = reg[1] = 0;

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

	irq_enable  = 0;
	irq_counter = 0;
	irq_latch   = 0;

	for( INT i = 0; i < 4; i++ ) {
		protect_dat[i] = 0;
	}
	lwd = 0xFF;

	patch = 0;
	DWORD	crc = nes->rom->GetPROM_CRC();
	if( crc == 0x20ca2ad3 ) {	// Street Fighter IV (GOUDER)
		patch = 1;
		SetPROM_32K_Bank( 0 );

		// $4000-$5FFF
		SetPROM_Bank( 2, XRAM, BANKTYPE_ROM );
	}
}
Beispiel #5
0
void	Mapper001::Write( WORD addr, BYTE data )
{
//	DEBUGOUT( "MMC1 %04X=%02X\n", addr&0xFFFF,data&0xFF );

	if( wram_patch == 1 && addr == 0xBFFF ) {
		wram_count++;
		wram_bank += data&0x01;
		if( wram_count == 5 ) {
			if( wram_bank ) {
				SetPROM_Bank( 3, &WRAM[0x2000], BANKTYPE_RAM );
			} else {
				SetPROM_Bank( 3, &WRAM[0x0000], BANKTYPE_RAM );
			}
			wram_bank = wram_count = 0;
		}
	}

	if( patch != 1 ) {
		if((addr & 0x6000) != (last_addr & 0x6000)) {
			shift = regbuf = 0;
		}
		last_addr = addr;
	}

	if( data & 0x80 ) {
		shift = regbuf = 0;
//		reg[0] = 0x0C;		// D3=1,D2=1
		reg[0] |= 0x0C;		// D3=1,D2=1 残りはリセットされない
		return;
	}

	if( data&0x01 ) regbuf |= 1<<shift;
	if( ++shift < 5 )
		return;
	addr = (addr&0x7FFF)>>13;
	reg[addr] = regbuf;

//	DEBUGOUT( "MMC1 %d=%02X\n", addr&0xFFFF,regbuf&0xFF );

	regbuf = 0;
	shift = 0;

	if( patch != 1 ) {
	// For Normal Cartridge
		switch( addr ) {
			case	0:
				if( reg[0] & 0x02 ) {
					if( reg[0] & 0x01 ) SetVRAM_Mirror( VRAM_HMIRROR );
					else		    SetVRAM_Mirror( VRAM_VMIRROR );
				} else {
					if( reg[0] & 0x01 ) SetVRAM_Mirror( VRAM_MIRROR4H );
					else		    SetVRAM_Mirror( VRAM_MIRROR4L );
				}
				break;
			case	1:
				// Register #1
				if( VROM_1K_SIZE ) {
					if( reg[0] & 0x10 ) {
						// CHR 4K bank lower($0000-$0FFF)
						SetVROM_4K_Bank( 0, reg[1] );
						// CHR 4K bank higher($1000-$1FFF)
						SetVROM_4K_Bank( 4, reg[2] );
					} else {
						// CHR 8K bank($0000-$1FFF)
						SetVROM_8K_Bank( reg[1]>>1 );
					}
				} else {
					// For Romancia
					if( reg[0] & 0x10 ) {
						SetCRAM_4K_Bank( 0, reg[1] );
					}
				}
				break;
			case	2:
				// Register #2
				if( VROM_1K_SIZE ) {
					if( reg[0] & 0x10 ) {
						// CHR 4K bank lower($0000-$0FFF)
						SetVROM_4K_Bank( 0, reg[1] );
						// CHR 4K bank higher($1000-$1FFF)
						SetVROM_4K_Bank( 4, reg[2] );
					} else {
						// CHR 8K bank($0000-$1FFF)
						SetVROM_8K_Bank( reg[1]>>1 );
					}
				} else {
					// For Romancia
					if( reg[0] & 0x10 ) {
						SetCRAM_4K_Bank( 4, reg[2] );
					}
				}
				break;
			case	3:
				if( !(reg[0] & 0x08) ) {
				// PRG 32K bank ($8000-$FFFF)
					SetPROM_32K_Bank( reg[3]>>1 );
				} else {