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