77 lines
1.6 KiB
C++
77 lines
1.6 KiB
C++
//////////////////////////////////////////////////////////////////////////
|
|
// Mapper162 WaiXing FS304/FS301_1 //
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void Mapper162::Reset()
|
|
{
|
|
reg5000 = 3;
|
|
reg5100 = 0;
|
|
reg5200 = 0;
|
|
reg5300 = 7;
|
|
SetBank_CPU();
|
|
SetBank_PPU();
|
|
}
|
|
|
|
void Mapper162::WriteLow(WORD addr, BYTE data)
|
|
{
|
|
// DEBUGOUT("Address=%04X Data=%02X\n", addr&0xFFFF, data&0xFF );
|
|
|
|
if(addr==0x5000){
|
|
reg5000 = data;
|
|
SetBank_CPU();
|
|
SetBank_PPU();
|
|
}else if(addr==0x5100){
|
|
reg5100 = data;
|
|
SetBank_CPU();
|
|
SetBank_PPU();
|
|
}else if(addr==0x5200){
|
|
reg5200 = data;
|
|
SetBank_CPU();
|
|
SetBank_PPU();
|
|
}else if(addr==0x5300){
|
|
reg5300 = data;
|
|
}else if(addr>=0x6000){
|
|
CPU_MEM_BANK[addr>>13][addr&0x1FFF] = data;
|
|
}else{
|
|
DEBUGOUT("write to %04x:%02x\n", addr, data);
|
|
}
|
|
}
|
|
|
|
void Mapper162::Write(WORD addr, BYTE data)
|
|
{
|
|
// DEBUGOUT("Address=%04X Data=%02X\n", addr&0xFFFF, data&0xFF );
|
|
}
|
|
|
|
void Mapper162::SetBank_CPU()
|
|
{
|
|
BYTE bank;
|
|
switch (reg5300)
|
|
{
|
|
case 4:
|
|
bank = (((reg5000 & 0xF) + ((reg5100 & 3) >> 1) ) | ((reg5200 & 3) << 4));
|
|
break;
|
|
case 7:
|
|
bank = (((reg5000 & 0xF) + ((reg5100 & 1) << 4) ) | ((reg5200 & 3) << 4));
|
|
// bank = ((reg5000 & 0xF) | ((reg5200 & 1) << 4));
|
|
break;
|
|
}
|
|
// DEBUGOUT("Bank=%02X\n", bank&0xFF );
|
|
SetPROM_32K_Bank(bank);
|
|
}
|
|
|
|
void Mapper162::SetBank_PPU()
|
|
{
|
|
SetCRAM_8K_Bank(0);
|
|
}
|
|
|
|
void Mapper162::HSync(int scanline)
|
|
{
|
|
if( (reg5000&0x80) && nes->ppu->IsDispON() ) {
|
|
if(scanline<127){
|
|
SetCRAM_4K_Bank(4, 0);
|
|
}else if(scanline<240){
|
|
SetCRAM_4K_Bank(4, 1);
|
|
}
|
|
}
|
|
}
|