50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// Mapper 96
							 | 
						||
| 
								 | 
							
								void NES_mapper96::Reset()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  // set CPU bank pointers
							 | 
						||
| 
								 | 
							
								  set_CPU_banks(0,1,2,3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // set PPU bank pointers
							 | 
						||
| 
								 | 
							
								  vbank0 = vbank1 = 0;
							 | 
						||
| 
								 | 
							
								  sync_PPU_banks();
							 | 
						||
| 
								 | 
							
								  parent_NES->ppu->vram_size = 0x8000;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  set_mirroring(0,0,0,0);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void NES_mapper96::PPU_Latch_Address(uint32 addr)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  if((addr & 0xF000) == 0x2000)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    vbank1 = (addr & 0x0300) >> 8;
							 | 
						||
| 
								 | 
							
								    sync_PPU_banks();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void NES_mapper96::MemoryWrite(uint32 addr, uint8 data)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  set_CPU_bank4((data & 0x03) * 4 + 0);
							 | 
						||
| 
								 | 
							
								  set_CPU_bank5((data & 0x03) * 4 + 1);
							 | 
						||
| 
								 | 
							
								  set_CPU_bank6((data & 0x03) * 4 + 2);
							 | 
						||
| 
								 | 
							
								  set_CPU_bank7((data & 0x03) * 4 + 3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  vbank0 = (data & 0x04) >> 2;
							 | 
						||
| 
								 | 
							
								  sync_PPU_banks();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void NES_mapper96::sync_PPU_banks()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  set_VRAM_bank(0, vbank0 * 16 + vbank1 * 4 + 0);
							 | 
						||
| 
								 | 
							
								  set_VRAM_bank(1, vbank0 * 16 + vbank1 * 4 + 1);
							 | 
						||
| 
								 | 
							
								  set_VRAM_bank(2, vbank0 * 16 + vbank1 * 4 + 2);
							 | 
						||
| 
								 | 
							
								  set_VRAM_bank(3, vbank0 * 16 + vbank1 * 4 + 3);
							 | 
						||
| 
								 | 
							
								  set_VRAM_bank(4, vbank0 * 16 + 12);
							 | 
						||
| 
								 | 
							
								  set_VRAM_bank(5, vbank0 * 16 + 13);
							 | 
						||
| 
								 | 
							
								  set_VRAM_bank(6, vbank0 * 16 + 14);
							 | 
						||
| 
								 | 
							
								  set_VRAM_bank(7, vbank0 * 16 + 15);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 |