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(); }
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 ); }
// // 全メモリ/レジスタ等の初期化 // 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 ); } }
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 {