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();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 |