////////////////////////////////////////////////////////////////////////// // Mapper095 Namcot 106M (Dragon Buster) // ////////////////////////////////////////////////////////////////////////// void Mapper095::Reset() { reg = 0x00; prg0 = 0; prg1 = 1; SetBank_CPU(); if( VROM_1K_SIZE ) { chr01 = 0; chr23 = 2; chr4 = 4; chr5 = 5; chr6 = 6; chr7 = 7; } else { chr01 = chr23 = chr4 = chr5 = chr6 = chr7 = 0; } SetBank_PPU(); nes->SetRenderMethod( NES::POST_RENDER ); } void Mapper095::Write( WORD addr, BYTE data ) { switch( addr & 0xE001 ) { case 0x8000: reg = data; SetBank_CPU(); SetBank_PPU(); break; case 0x8001: if( reg <= 0x05 ) { if( data & 0x20 ) SetVRAM_Mirror( VRAM_MIRROR4H ); else SetVRAM_Mirror( VRAM_MIRROR4L ); data &= 0x1F; } switch( reg & 0x07 ) { case 0x00: if( VROM_1K_SIZE ) { chr01 = data & 0xFE; SetBank_PPU(); } break; case 0x01: if( VROM_1K_SIZE ) { chr23 = data & 0xFE; SetBank_PPU(); } break; case 0x02: if( VROM_1K_SIZE ) { chr4 = data; SetBank_PPU(); } break; case 0x03: if( VROM_1K_SIZE ) { chr5 = data; SetBank_PPU(); } break; case 0x04: if( VROM_1K_SIZE ) { chr6 = data; SetBank_PPU(); } break; case 0x05: if( VROM_1K_SIZE ) { chr7 = data; SetBank_PPU(); } break; case 0x06: prg0 = data; SetBank_CPU(); break; case 0x07: prg1 = data; SetBank_CPU(); break; } break; } } void Mapper095::SetBank_CPU() { if( reg & 0x40 ) { SetPROM_32K_Bank( PROM_8K_SIZE-2, prg1, prg0, PROM_8K_SIZE-1 ); } else { SetPROM_32K_Bank( prg0, prg1, PROM_8K_SIZE-2, PROM_8K_SIZE-1 ); } } void Mapper095::SetBank_PPU() { if( VROM_1K_SIZE ) { if( reg & 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 ); } } } void Mapper095::SaveState( LPBYTE p ) { p[0] = reg; p[1] = prg0; p[2] = prg1; p[3] = chr01; p[4] = chr23; p[5] = chr4; p[6] = chr5; p[7] = chr6; p[8] = chr7; } void Mapper095::LoadState( LPBYTE p ) { reg = p[0]; prg0 = p[1]; prg1 = p[2]; chr01 = p[3]; chr23 = p[4]; chr4 = p[5]; chr5 = p[6]; chr6 = p[7]; chr7 = p[8]; }