104 lines
2.0 KiB
C++
104 lines
2.0 KiB
C++
//////////////////////////////////////////////////////////////////////////
|
|
// Mapper191 SACHEN Super Cartridge Xin1 (Ver.1-9) //
|
|
// SACHEN Q-BOY Support //
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void Mapper191::Reset()
|
|
{
|
|
for( INT i = 0; i < 8; i++ ) {
|
|
reg[i] = 0x00;
|
|
}
|
|
|
|
prg0 = 0;
|
|
// prg1 = 1;
|
|
SetBank_CPU();
|
|
|
|
chr0 = 0;
|
|
chr1 = 0;
|
|
chr2 = 0;
|
|
chr3 = 0;
|
|
highbank = 0;
|
|
SetBank_PPU();
|
|
}
|
|
|
|
void Mapper191::WriteLow( WORD addr, BYTE data )
|
|
{
|
|
switch( addr ) {
|
|
case 0x4100:
|
|
reg[0]=data;
|
|
break;
|
|
case 0x4101:
|
|
reg[1]=data;
|
|
switch( reg[0] ) {
|
|
case 0:
|
|
chr0=data&7;
|
|
SetBank_PPU();
|
|
break;
|
|
case 1:
|
|
chr1=data&7;
|
|
SetBank_PPU();
|
|
break;
|
|
case 2:
|
|
chr2=data&7;
|
|
SetBank_PPU();
|
|
break;
|
|
case 3:
|
|
chr3=data&7;
|
|
SetBank_PPU();
|
|
break;
|
|
case 4:
|
|
highbank=data&7;
|
|
SetBank_PPU();
|
|
break;
|
|
case 5:
|
|
prg0=data&7;
|
|
SetBank_CPU();
|
|
break;
|
|
case 7:
|
|
if( data & 0x02 ) SetVRAM_Mirror( VRAM_HMIRROR );
|
|
else SetVRAM_Mirror( VRAM_VMIRROR );
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Mapper191::SetBank_CPU()
|
|
{
|
|
SetPROM_32K_Bank( prg0 );
|
|
}
|
|
|
|
void Mapper191::SetBank_PPU()
|
|
{
|
|
if( VROM_1K_SIZE ) {
|
|
SetVROM_1K_Bank( 0, (((highbank<<3)+chr0)<<2)+0 );
|
|
SetVROM_1K_Bank( 1, (((highbank<<3)+chr0)<<2)+1 );
|
|
SetVROM_1K_Bank( 2, (((highbank<<3)+chr1)<<2)+2 );
|
|
SetVROM_1K_Bank( 3, (((highbank<<3)+chr1)<<2)+3 );
|
|
SetVROM_1K_Bank( 4, (((highbank<<3)+chr2)<<2)+0 );
|
|
SetVROM_1K_Bank( 5, (((highbank<<3)+chr2)<<2)+1 );
|
|
SetVROM_1K_Bank( 6, (((highbank<<3)+chr3)<<2)+2 );
|
|
SetVROM_1K_Bank( 7, (((highbank<<3)+chr3)<<2)+3 );
|
|
}
|
|
}
|
|
|
|
void Mapper191::SaveState( LPBYTE p )
|
|
{
|
|
p[0] = prg0;
|
|
p[1] = chr0;
|
|
p[2] = chr1;
|
|
p[3] = chr2;
|
|
p[4] = chr3;
|
|
p[5] = highbank;
|
|
}
|
|
|
|
void Mapper191::LoadState( LPBYTE p )
|
|
{
|
|
prg0 = p[0];
|
|
chr0 = p[1];
|
|
chr1 = p[2];
|
|
chr2 = p[3];
|
|
chr3 = p[4];
|
|
highbank = p[5];
|
|
}
|