public void Write(ushort address, byte data) { if ((address & 0xFFF0) == 0xFF00) { Map.Switch16kPrgRom(((data >> 2) & 0x7) * 4, 0); } }
public void Write(ushort address, byte data) { if (address >= 0x8000 & address <= 0xFFFF) { _Map.Switch16kPrgRom((data & 0x7) * 4, 0); _Map.Switch8kChrRom(((data & 0xF0) >> 4) * 8); if ((address & 0xFE00) != 0xFE00) { if (IREM) { if ((data & 0x8) != 0) { _Map.Cartridge.Mirroring = Mirroring.Horizontal; } else { _Map.Cartridge.Mirroring = Mirroring.Vertical; } } else { _Map.Cartridge.Mirroring = Mirroring.One_Screen; if ((data & 0x8) != 0) { _Map.Cartridge.MirroringBase = 0x2000; } else { _Map.Cartridge.MirroringBase = 0x2400; } } _Map.ApplayMirroring(); } } }
public void SetUpMapperDefaults() { mem.Switch16kPrgRom((mem.Cartridge.PRG_PAGES - 2) * 4, 0); mem.Switch16kPrgRom((mem.Cartridge.PRG_PAGES - 1) * 4, 1); if (mem.Cartridge.IsVRAM) { mem.FillCHR(16); } mem.Switch8kChrRom(0); for (int i = 0; i < 4; i++) { prg_reg[i] = (byte)(mem.Cartridge.PRG_PAGES - 4 + i); ntl_reg[i] = 0; nth_reg[i] = 0; chl_reg[i] = (byte)i; chh_reg[i] = 0; chl_reg[i + 4] = (byte)(i + 4); chh_reg[i + 4] = 0; } if (sw_val != 0) { sw_val = 0x00; } else { sw_val = 0xFF; } }
public void Write(ushort address, byte data) { if (address == 0x6000) { Map.Switch16kPrgRom(data * 4, 0); } }
public void Write(ushort address, byte data) { data = (byte)(address & 0xFF); if (address >= 0x9000) { if ((data & 0xF0) == 0xD0) { MEM.Switch16kPrgRom((data & 0x0F) * 4, 1); } else if ((data & 0xF0) == 0xE0) { MEM.Switch8kChrRom((data & 0x0F) * 8); } } else { if ((data & 0xF0) == 0xB0) { MEM.Switch16kPrgRom((data & 0x0F) * 4, 1); } else if ((data & 0xF0) == 0x70) { MEM.Switch8kChrRom((data & 0x0F) * 8); } } }
public void Write(ushort address, byte data) { if ((address >= 0x8000) && (address <= 0xFFFF)) { Map.Switch16kPrgRom(data * 4, 0); } }
public void Write(ushort address, byte data) { switch (address) { case 0xF000: _Map.Switch16kPrgRom((data & 0x0F) * 4, 0); break; case 0x8000: irq_counter = (irq_counter & 0xFFF0) | (data & 0x0F); break; case 0x9000: irq_counter = (irq_counter & 0xFF0F) | ((data & 0x0F) << 4); break; case 0xA000: irq_counter = (irq_counter & 0xF0FF) | ((data & 0x0F) << 8); break; case 0xB000: irq_counter = (irq_counter & 0x0FFF) | ((data & 0x0F) << 12); break; case 0xC000: irq_enable = data & 0x02; break; } }
public void SetUpMapperDefaults() { Map.Switch16kPrgRom((Map.Cartridge.PRG_PAGES - 1) * 4, 1); Map.Switch16kPrgRom((Map.Cartridge.PRG_PAGES - 2) * 4, 0); if (Map.Cartridge.IsVRAM) { Map.FillCHR(8); } Map.Switch8kChrRom(0); }
public void SetUpMapperDefaults() { Map.Switch16kPrgRom(0, 0); Map.Switch16kPrgRom((Map.Cartridge.PRG_PAGES - 1) * 4, 1); Map.FillCRAM(32);//we'll need these 32k if (Map.Cartridge.IsVRAM) { Map.FillCHR(16); } Map.Switch8kChrRom(0); }
public void Write(ushort address, byte data) { address &= 0xF000; if (address == 0xA000) { map.Switch16kPrgRom(data * 4, 0); } else if (address == 0xB000) { reg[0] = data; if (latch_a == 0xFD) { map.Switch4kChrRom(reg[0] * 4, 0); } } else if (address == 0xC000) { reg[1] = data; if (latch_a == 0xFE) { map.Switch4kChrRom(reg[1] * 4, 0); } } else if (address == 0xD000) { reg[2] = data; if (latch_b == 0xFD) { map.Switch4kChrRom(reg[2] * 4, 1); } } else if (address == 0xE000) { reg[3] = data; if (latch_b == 0xFE) { map.Switch4kChrRom(reg[3] * 4, 1); } } else if (address == 0xF000) { if ((data & 1) == 1) { map.Cartridge.Mirroring = Mirroring.Horizontal; } else { map.Cartridge.Mirroring = Mirroring.Vertical; } map.ApplayMirroring(); } }
public void Write(ushort address, byte data) { mem.Cartridge.Mirroring = ((address & 0x8) != 0) ? Mirroring.Horizontal : Mirroring.Vertical; mem.ApplayMirroring(); mem.Switch8kChrRom((address & 0x7) * 8); if ((address & 0x4000) != 0) { mem.Switch32kPrgRom(((address & 0x6) >> 1) * 8); } else { mem.Switch16kPrgRom((address & 0x7) * 4, 0); mem.Switch16kPrgRom((address & 0x7) * 4, 1); } }
public void Write(ushort address, byte data) { if (address < 0xC000) { MEM.Switch16kPrgRom((data & 0x0F) * 4, 1); if ((data & 0x80) != 0) { MEM.Cartridge.Mirroring = Mirroring.Vertical; } else { MEM.Cartridge.Mirroring = Mirroring.Horizontal; } MEM.ApplayMirroring(); } }
public void Write(ushort address, byte data) { if (address >= 0x8000 & address <= 0xFFFF) { if ((address & 0x10) == 0) { _Map.Switch32kPrgRom((address & 0xF) * 8); } else { _Map.Switch16kPrgRom((((address & 0xF) << 1) | (((address & 0x20) >> 5))) * 4, 0); _Map.Switch16kPrgRom((((address & 0xF) << 1) | (((address & 0x20) >> 5))) * 4, 1); } _Map.Cartridge.Mirroring = ((address & 0x80) != 0) ? Mirroring.Horizontal : Mirroring.Vertical; _Map.ApplayMirroring(); } }
public void Write(ushort address, byte data) { if (address >= 0x8000 & address <= 0xFFFF) { Map.Switch16kPrgRom(((data & 0x3C) >> 2) * 4, 0); Map.Switch8kChrRom((data & 0x3) * 8); } else { switch (address) { case 0x42FE: Map.Cartridge.Mirroring = Mirroring.One_Screen; if ((data & 0x10) != 0) { Map.Cartridge.MirroringBase = 0x2400; } else { Map.Cartridge.MirroringBase = 0x2000; } Map.ApplayMirroring(); break; case 0x42FF: if ((data & 0x10) != 0) { Map.Cartridge.Mirroring = Mirroring.Horizontal; } else { Map.Cartridge.Mirroring = Mirroring.Vertical; } Map.ApplayMirroring(); break; case 0x4501: IRQEnabled = false; break; case 0x4502: irq_counter = (short)((irq_counter & 0xFF00) | data); break; case 0x4503: irq_counter = (short)((data << 8) | (irq_counter & 0x00FF)); IRQEnabled = true; break; } } }
public void Write(ushort address, byte data) { if ((address >= 0x8000) && (address <= 0xFFFF)) { int banks = ((address & 0x4000) != 0) ? 1 : 0; ushort wher = (ushort)((address & 0x0Fc0) >> 7); _Map.Switch8kChrRom(((address & 0x003F) + (banks << 6)) * 8); if ((address & 0x1000) != 0) //A12 { if ((address & 0x0040) != 0) //A6 { _Map.Switch16kPrgRom((((wher + (banks << 5)) << 1) + 1) * 4, 0); _Map.Switch16kPrgRom((((wher + (banks << 5)) << 1) + 1) * 4, 1); } else { _Map.Switch16kPrgRom(((wher + (banks << 5)) << 1) * 4, 0); _Map.Switch16kPrgRom(((wher + (banks << 5)) << 1) * 4, 1); } } else { _Map.Switch32kPrgRom((wher + (banks << 5)) * 8);//ignore A6 } _Map.Cartridge.Mirroring = ((address >> 13) & 1) == 0 ? Mirroring.Vertical : Mirroring.Horizontal; _Map.ApplayMirroring(); } else if ((address >= 0x5800) && (address <= 0x5FFF)) { switch (address & 0x3) { case 0: Mapper225_reg0 = (byte)(data & 0xf); break; case 1: Mapper225_reg1 = (byte)(data & 0xf); break; case 2: Mapper225_reg2 = (byte)(data & 0xf); break; case 3: Mapper225_reg3 = (byte)(data & 0xf); break; } } }
public void Write(ushort address, byte data) { if ((address >= 0x8000) && (address <= 0xFFFF)) { byte X = (byte)(data & 0x3F); Map.Cartridge.Mirroring = ((data & 0x40) == 0) ? Mirroring.Vertical : Mirroring.Horizontal; Map.ApplayMirroring(); byte Y = (byte)(data & 0x80); Y >>= 7; switch (address & 0x3) { case 0: //0=32K Map.Switch16kPrgRom(X * 4, 0); Map.Switch16kPrgRom((X + 1) * 4, 1); break; case 1: //1=128K Map.Switch16kPrgRom(X * 4, 0); Map.Switch16kPrgRom((Map.Cartridge.PRG_PAGES - 1) * 4, 1); break; case 2: //2=8K Map.Switch8kPrgRom(((X * 2) + Y) * 2, 0); Map.Switch8kPrgRom(((X * 2) + Y) * 2, 1); Map.Switch8kPrgRom(((X * 2) + Y) * 2, 2); Map.Switch8kPrgRom(((X * 2) + Y) * 2, 3); break; case 3: //3=16K Map.Switch16kPrgRom(X * 4, 0); Map.Switch16kPrgRom(X * 4, 1); break; } } }
public void SetUpMapperDefaults() { MEM.Switch32kPrgRom(0); if (MEM.Cartridge.IsVRAM) { MEM.FillCHR(16); } MEM.Switch8kChrRom(0); if (MEM.Cartridge.PRG_PAGES == 1) { MEM.Switch16kPrgRom(0, 1); } }
public void Write(ushort address, byte data) { switch (address & 0xF000) { case 0xF000: case 0xE000: case 0xD000: case 0xC000: Map.Switch16kPrgRom(data * 4, 0); break; case 0x9000: if ((data & 0x10) != 0) { Map.Cartridge.MirroringBase = 0x2000; } else { Map.Cartridge.MirroringBase = 0x2400; } Map.ApplayMirroring(); break; } }
public void Write(ushort address, byte data) { switch (address) { case 0x8000: //case 0x8003: _Map.Switch16kPrgRom(data * 4, 0); break; case 0xC000: //case 0xC003: _Map.Switch8kPrgRom(data * 2, 2); break; case 0xB003: int mm = data & 0x7F; if (mm == 0x20) { _Map.Cartridge.Mirroring = Mirroring.Vertical; } else if (mm == 0x24) { _Map.Cartridge.Mirroring = Mirroring.Horizontal; } else if (mm == 0x28) { _Map.Cartridge.Mirroring = Mirroring.One_Screen; _Map.Cartridge.MirroringBase = 0x2000; } else if (mm == 0x08 || mm == 0x2C) { _Map.Cartridge.Mirroring = Mirroring.One_Screen; _Map.Cartridge.MirroringBase = 0x2400; } _Map.ApplayMirroring(); break; case 0xD000: _Map.Switch1kChrRom(data, 0); break; case 0xD001: _Map.Switch1kChrRom(data, 2); break; case 0xD002: _Map.Switch1kChrRom(data, 1); break; case 0xD003: _Map.Switch1kChrRom(data, 3); break; case 0xE000: _Map.Switch1kChrRom(data, 4); break; case 0xE001: _Map.Switch1kChrRom(data, 6); break; case 0xE002: _Map.Switch1kChrRom(data, 5); break; case 0xE003: _Map.Switch1kChrRom(data, 7); break; case 0xF000: irq_latch = data; break; case 0xF001: irq_enable = (irq_enable & 0x01) * 3; break; case 0xF002: irq_enable = data & 0x03; if ((irq_enable & 0x02) != 0) { irq_counter = irq_latch; irq_clock = 0; } break; //Sound //Pulse 1 case 0x9000: _Map.apu.VRC6PULSE1.Write9000(data); break; case 0x9001: _Map.apu.VRC6PULSE1.Write9001(data); break; case 0x9002: _Map.apu.VRC6PULSE1.Write9002(data); break; //Pulse 2 case 0xA000: _Map.apu.VRC6PULSE2.WriteA000(data); break; case 0xA001: _Map.apu.VRC6PULSE2.WriteA001(data); break; case 0xA002: _Map.apu.VRC6PULSE2.WriteA002(data); break; //Sawtooth case 0xB000: _Map.apu.VRC6SAWTOOTH.WriteB000(data); break; case 0xB001: _Map.apu.VRC6SAWTOOTH.WriteB001(data); break; case 0xB002: _Map.apu.VRC6SAWTOOTH.WriteB002(data); break; } }
public void Write(ushort address, byte data) { if ((address >= 0x8000) && (address <= 0x9FFF)) { if ((data & 0x80) == 0x80) { //Reset mapper1_register8000BitPosition = 0; mapper1_register8000Value = 0; mapper1_mirroringFlag = 0; mapper1_onePageMirroring = 1; mapper1_prgSwitchingArea = 1; mapper1_prgSwitchingSize = 1; mapper1_vromSwitchingSize = 0; } else { mapper1_register8000Value += (data & 0x1) << mapper1_register8000BitPosition; mapper1_register8000BitPosition++; if (mapper1_register8000BitPosition == 5) { mapper1_mirroringFlag = (byte)(mapper1_register8000Value & 0x1); if (mapper1_mirroringFlag == 0) { Map.Cartridge.Mirroring = Mirroring.Vertical; Map.ApplayMirroring(); } else { Map.Cartridge.Mirroring = Mirroring.Horizontal; Map.ApplayMirroring(); } mapper1_onePageMirroring = (byte)((mapper1_register8000Value >> 1) & 0x1); if (mapper1_onePageMirroring == 0) { Map.Cartridge.Mirroring = Mirroring.One_Screen; Map.Cartridge.MirroringBase = 0x2000; Map.ApplayMirroring(); } mapper1_prgSwitchingArea = (byte)((mapper1_register8000Value >> 2) & 0x1); mapper1_prgSwitchingSize = (byte)((mapper1_register8000Value >> 3) & 0x1); mapper1_vromSwitchingSize = (byte)((mapper1_register8000Value >> 4) & 0x1); mapper1_register8000BitPosition = 0; mapper1_register8000Value = 0; mapper1_registerA000BitPosition = 0; mapper1_registerA000Value = 0; mapper1_registerC000BitPosition = 0; mapper1_registerC000Value = 0; mapper1_registerE000BitPosition = 0; mapper1_registerE000Value = 0; } } } else if ((address >= 0xA000) && (address <= 0xBFFF)) { if ((data & 0x80) == 0x80) { //Reset mapper1_registerA000BitPosition = 0; mapper1_registerA000Value = 0; } else { mapper1_registerA000Value += (data & 0x1) << mapper1_registerA000BitPosition; mapper1_registerA000BitPosition++; if (mapper1_registerA000BitPosition == 5) { if (Map.Cartridge.CHR_PAGES > 0) { if (mapper1_vromSwitchingSize == 1) { Map.Switch4kChrRom(mapper1_registerA000Value * 4, 0); } else { Map.Switch8kChrRom((mapper1_registerA000Value >> 1) * 8); } } mapper1_registerA000BitPosition = 0; mapper1_registerA000Value = 0; } } } else if ((address >= 0xC000) && (address <= 0xDFFF)) { if ((data & 0x80) == 0x80) { //Reset mapper1_registerC000BitPosition = 0; mapper1_registerC000Value = 0; } else { mapper1_registerC000Value += (data & 0x1) << mapper1_registerC000BitPosition; mapper1_registerC000BitPosition++; if (mapper1_registerC000BitPosition == 5) { if (Map.Cartridge.CHR_PAGES > 0) { if (mapper1_vromSwitchingSize == 1) { Map.Switch4kChrRom(mapper1_registerC000Value * 4, 1); } } mapper1_registerC000BitPosition = 0; mapper1_registerC000Value = 0; } } } else if ((address >= 0xE000) && (address <= 0xFFFF)) { if ((data & 0x80) == 0x80) { //Reset mapper1_registerE000BitPosition = 0; mapper1_registerE000Value = 0; mapper1_registerA000BitPosition = 0; mapper1_registerA000Value = 0; mapper1_registerC000BitPosition = 0; mapper1_registerC000Value = 0; mapper1_register8000BitPosition = 0; mapper1_register8000Value = 0; } else { mapper1_registerE000Value += (data & 0x1) << mapper1_registerE000BitPosition; mapper1_registerE000BitPosition++; if (mapper1_registerE000BitPosition == 5) { if (mapper1_prgSwitchingSize == 1) { if (mapper1_prgSwitchingArea == 1) { // Switch bank at 0x8000 and reset 0xC000 Map.Switch16kPrgRom(mapper1_registerE000Value * 4, 0); Map.Switch16kPrgRom((Map.Cartridge.PRG_PAGES - 1) * 4, 1); } else { // Switch bank at 0xC000 and reset 0x8000 Map.Switch16kPrgRom(mapper1_registerE000Value * 4, 1); Map.Switch16kPrgRom(0, 0); } } else { //Full 32k switch Map.Switch32kPrgRom((mapper1_registerE000Value >> 1) * 8); } mapper1_registerE000BitPosition = 0; mapper1_registerE000Value = 0; } } } }
public void Write(ushort address, byte data) { switch (address) { case 0x8000: Map.Switch16kPrgRom(data * 4, 0); break; case 0xB003: switch (data & 0x3) { case 0: Map.Cartridge.Mirroring = Mirroring.Vertical; break; case 1: Map.Cartridge.Mirroring = Mirroring.Horizontal; break; case 2: Map.Cartridge.Mirroring = Mirroring.One_Screen; Map.Cartridge.MirroringBase = 0x2000; break; case 3: Map.Cartridge.Mirroring = Mirroring.One_Screen; Map.Cartridge.MirroringBase = 0x2400; break; } Map.ApplayMirroring(); break; case 0xC000: Map.Switch8kPrgRom(data * 2, 2); break; case 0xD000: Map.Switch1kChrRom(data, 0); break; case 0xD001: Map.Switch1kChrRom(data, 1); break; case 0xD002: Map.Switch1kChrRom(data, 2); break; case 0xD003: Map.Switch1kChrRom(data, 3); break; case 0xE000: Map.Switch1kChrRom(data, 4); break; case 0xE001: Map.Switch1kChrRom(data, 5); break; case 0xE002: Map.Switch1kChrRom(data, 6); break; case 0xE003: Map.Switch1kChrRom(data, 7); break; case 0xF000: irq_latch = data; break; case 0xF001: irq_enable = (data & 0x01) != 0; break; case 0xF002: irq_counter = irq_latch; break; //Sound //Pulse 1 case 0x9000: Map.apu.VRC6PULSE1.Write9000(data); break; case 0x9001: Map.apu.VRC6PULSE1.Write9001(data); break; case 0x9002: Map.apu.VRC6PULSE1.Write9002(data); break; //Pulse 2 case 0xA000: Map.apu.VRC6PULSE2.WriteA000(data); break; case 0xA001: Map.apu.VRC6PULSE2.WriteA001(data); break; case 0xA002: Map.apu.VRC6PULSE2.WriteA002(data); break; //Sawtooth case 0xB000: Map.apu.VRC6SAWTOOTH.WriteB000(data); break; case 0xB001: Map.apu.VRC6SAWTOOTH.WriteB001(data); break; case 0xB002: Map.apu.VRC6SAWTOOTH.WriteB002(data); break; } }
public void Write(ushort address, byte data) { switch (address) { /*Swap mode*/ case 0x9001: case 0x9004: SwapMode = (data & 0X2) == 0X2; break; /*prg selection 1*/ case 0x8000: case 0x8002: case 0x8004: case 0x8006: if (!SwapMode) { _Map.Switch16kPrgRom((_Map.Cartridge.PRG_PAGES - 1) * 4, 1); _Map.Switch8kPrgRom((data & 0X1f) * 2, 0); } else { _Map.Switch16kPrgRom((_Map.Cartridge.PRG_PAGES - 1) * 4, 1); _Map.Switch8kPrgRom((data & 0X1f) * 2, 2); } break; /*prg selection 2*/ case 0xA000: case 0xA002: case 0xA004: case 0xA006: _Map.Switch8kPrgRom((data & 0X1f) * 2, 1); break; /*Mirroring Control*/ case 0x9000: case 0x9002: data &= 0x03; if (data == 0) { _Map.Cartridge.Mirroring = Mirroring.Vertical; } else if (data == 1) { _Map.Cartridge.Mirroring = Mirroring.Horizontal; } else if (data == 2) { _Map.Cartridge.Mirroring = Mirroring.One_Screen; _Map.Cartridge.MirroringBase = 0x2000; } else { _Map.Cartridge.Mirroring = Mirroring.One_Screen; _Map.Cartridge.MirroringBase = 0x2400; } _Map.ApplayMirroring(); break; /*CHR Selection*/ case 0xB000: reg[0] = (byte)((reg[0] & 0xF0) | (data & 0x0F)); _Map.Switch1kChrRom(reg[0], 0); break; case 0xB002: case 0xB008: reg[0] = (byte)((reg[0] & 0x0F) | ((data & 0x0F) << 4)); _Map.Switch1kChrRom(reg[0], 0); break; case 0xB001: case 0xB004: reg[1] = (byte)((reg[1] & 0xF0) | (data & 0x0F)); _Map.Switch1kChrRom(reg[1], 1); break; case 0xB003: case 0xB00C: reg[1] = (byte)((reg[1] & 0x0F) | ((data & 0x0F) << 4)); _Map.Switch1kChrRom(reg[1], 1); break; case 0xC000: reg[2] = (byte)((reg[2] & 0xF0) | (data & 0x0F)); _Map.Switch1kChrRom(reg[2], 2); break; case 0xC002: case 0xC008: reg[2] = (byte)((reg[2] & 0x0F) | ((data & 0x0F) << 4)); _Map.Switch1kChrRom(reg[2], 2); break; case 0xC001: case 0xC004: reg[3] = (byte)((reg[3] & 0xF0) | (data & 0x0F)); _Map.Switch1kChrRom(reg[3], 3); break; case 0xC003: case 0xC00C: reg[3] = (byte)((reg[3] & 0x0F) | ((data & 0x0F) << 4)); _Map.Switch1kChrRom(reg[3], 3); break; case 0xD000: reg[4] = (byte)((reg[4] & 0xF0) | (data & 0x0F)); _Map.Switch1kChrRom(reg[4], 4); break; case 0xD002: case 0xD008: reg[4] = (byte)((reg[4] & 0x0F) | ((data & 0x0F) << 4)); _Map.Switch1kChrRom(reg[4], 4); break; case 0xD001: case 0xD004: reg[5] = (byte)((reg[5] & 0xF0) | (data & 0x0F)); _Map.Switch1kChrRom(reg[5], 5); break; case 0xD003: case 0xD00C: reg[5] = (byte)((reg[5] & 0x0F) | ((data & 0x0F) << 4)); _Map.Switch1kChrRom(reg[5], 5); break; case 0xE000: reg[6] = (byte)((reg[6] & 0xF0) | (data & 0x0F)); _Map.Switch1kChrRom(reg[6], 6); break; case 0xE002: case 0xE008: reg[6] = (byte)((reg[6] & 0x0F) | ((data & 0x0F) << 4)); _Map.Switch1kChrRom(reg[6], 6); break; case 0xE001: case 0xE004: reg[7] = (byte)((reg[7] & 0xF0) | (data & 0x0F)); _Map.Switch1kChrRom(reg[7], 7); break; case 0xE003: case 0xE00C: reg[7] = (byte)((reg[7] & 0x0F) | ((data & 0x0F) << 4)); _Map.Switch1kChrRom(reg[7], 7); break; /*IRQs*/ case 0xF000: irq_latch = (irq_latch & 0xF0) | (data & 0x0F); break; case 0xF002: case 0xF008: irq_latch = (irq_latch & 0x0F) | ((data & 0x0F) << 4); break; case 0xF001: case 0xF004: irq_enable = (byte)(data & 0x03); irq_counter = irq_latch; irq_clock = 0; break; case 0xF003: case 0xF00C: irq_enable = (byte)((irq_enable & 0x01) * 3); break; } }
public void Write(ushort address, byte data) { switch (address & 0xF) { case 0: Map.Switch1kChrRom(data, 0); break; case 1: Map.Switch1kChrRom(data, 1); break; case 2: Map.Switch1kChrRom(data, 2); break; case 3: Map.Switch1kChrRom(data, 3); break; case 4: Map.Switch1kChrRom(data, 4); break; case 5: Map.Switch1kChrRom(data, 5); break; case 6: Map.Switch1kChrRom(data, 6); break; case 7: Map.Switch1kChrRom(data, 7); break; case 8: Map.Switch16kPrgRom(data * 4, 0); break; case 9: switch (data & 0x3) { case 0: Map.Cartridge.Mirroring = Mirroring.Vertical; break; case 1: Map.Cartridge.Mirroring = Mirroring.Horizontal; break; case 2: Map.Cartridge.Mirroring = Mirroring.One_Screen; Map.Cartridge.MirroringBase = 0x2000; break; case 3: Map.Cartridge.Mirroring = Mirroring.One_Screen; Map.Cartridge.MirroringBase = 0x2400; break; } Map.ApplayMirroring(); break; case 0xA: timer_irq_enabled = ((data & 0x1) != 0); timer_irq_counter_16 = timer_irq_Latch_16; break; case 0xB: timer_irq_Latch_16 = (short)((timer_irq_Latch_16 & 0xFF00) | data); break; case 0xC: timer_irq_Latch_16 = (short)((data << 8) | (timer_irq_Latch_16 & 0x00FF)); break; case 0xD: break; // } }