61 lines
1.1 KiB
C++
61 lines
1.1 KiB
C++
|
|
/////////////////////////////////////////////////////////////////////
|
|
// Mapper 40 (smb2j)
|
|
void NES_mapper40::Reset()
|
|
{
|
|
irq_enabled = 0;
|
|
lines_to_irq = 0;
|
|
|
|
// set CPU bank pointers
|
|
set_CPU_banks(6,4,5,0,7);
|
|
|
|
// set VROM banks
|
|
if(num_1k_VROM_banks)
|
|
{
|
|
set_PPU_banks(0,1,2,3,4,5,6,7);
|
|
}
|
|
}
|
|
|
|
void NES_mapper40::MemoryWrite(uint32 addr, uint8 data)
|
|
{
|
|
switch(addr & 0xE000)
|
|
{
|
|
case 0x8000:
|
|
irq_enabled = 0;
|
|
// LOG("MAP40: [$8000] = " << HEX(data,2) << endl);
|
|
break;
|
|
|
|
case 0xA000:
|
|
irq_enabled = 1;
|
|
lines_to_irq = 37;
|
|
|
|
// LOG("MAP40: [$A000] = " << HEX(data,2) << endl);
|
|
break;
|
|
|
|
case 0xC000:
|
|
// LOG("MAP40: [$C000] = " << HEX(data,2) << endl);
|
|
// LOG("MAP40: INVALID WRITE TO $C000" << endl);
|
|
break;
|
|
|
|
case 0xE000:
|
|
// LOG("MAP40: [$E000] = " << HEX(data,2) << endl);
|
|
|
|
set_CPU_bank6(data & 0x07);
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
void NES_mapper40::HSync(uint32 scanline)
|
|
{
|
|
if(irq_enabled)
|
|
{
|
|
if((--lines_to_irq) <= 0)
|
|
{
|
|
parent_NES->cpu->DoIRQ();
|
|
}
|
|
}
|
|
}
|
|
/////////////////////////////////////////////////////////////////////
|
|
|