104 lines
4.1 KiB
C++
104 lines
4.1 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];
|
||
}
|