public void Write(ushort address, byte data) { /*IRQ controls*/ if (address >= 0x5000 & address <= 0x57FF) { irq_counter = (short)((irq_counter & 0xFF00) | data); } else if (address >= 0x5800 & address <= 0x5FFF) { IRQEnabled = (data & 0x80) != 0; irq_counter = (short)((irq_counter & 0x00FF) | (data & 0x7F) << 8); } /*Pattern Table Control*/ else if (address >= 0x8000 & address <= 0x87FF) { if (!VROMRAMfor0000 | data < 0xE0) { Map.Switch1kChrRom(data, 0); } else { Map.Switch1kCRAM(data, 0); } } else if (address >= 0x8800 & address <= 0x8FFF) { if (!VROMRAMfor0000 | data < 0xE0) { Map.Switch1kChrRom(data, 1); } else { Map.Switch1kCRAM(data, 1); } } else if (address >= 0x9000 & address <= 0x97FF) { if (!VROMRAMfor0000 | data < 0xE0) { Map.Switch1kChrRom(data, 2); } else { Map.Switch1kCRAM(data, 2); } } else if (address >= 0x9800 & address <= 0x9FFF) { if (!VROMRAMfor0000 | data < 0xE0) { Map.Switch1kChrRom(data, 3); } else { Map.Switch1kCRAM(data, 3); } } else if (address >= 0xA000 & address <= 0xA7FF) { if (!VROMRAMfor1000 | data < 0xE0) { Map.Switch1kChrRom(data, 4); } else { Map.Switch1kCRAM(data, 4); } } else if (address >= 0xA800 & address <= 0xAFFF) { if (!VROMRAMfor1000 | data < 0xE0) { Map.Switch1kChrRom(data, 5); } else { Map.Switch1kCRAM(data, 5); } } else if (address >= 0xB000 & address <= 0xB7FF) { if (!VROMRAMfor1000 | data < 0xE0) { Map.Switch1kChrRom(data, 6); } else { Map.Switch1kCRAM(data, 6); } } else if (address >= 0xB800 & address <= 0xBFFF) { if (!VROMRAMfor1000 | data < 0xE0) { Map.Switch1kChrRom(data, 7); } else { Map.Switch1kCRAM(data, 7); } } /*Name Table Control*/ else if (address >= 0xC000 & address <= 0xC7FF) { if (data < 0xE0) { Map.Switch1kCHRToVRAM(data, 0); } else { Map.SwitchVRAMToVRAM(data, 0); } } else if (address >= 0xC800 & address <= 0xCFFF) { if (data < 0xE0) { Map.Switch1kCHRToVRAM(data, 1); } else { Map.SwitchVRAMToVRAM(data, 1); } } else if (address >= 0xD000 & address <= 0xD7FF) { if (data < 0xE0) { Map.Switch1kCHRToVRAM(data, 2); } else { Map.SwitchVRAMToVRAM(data, 2); } } else if (address >= 0xD800 & address <= 0xDFFF) { if (data < 0xE0) { Map.Switch1kCHRToVRAM(data, 3); } else { Map.SwitchVRAMToVRAM(data, 3); } } /*CPU Memory Control*/ else if (address >= 0xE000 & address <= 0xE7FF) { Map.Switch8kPrgRom(data * 2, 0); } else if (address >= 0xE800 & address <= 0xEFFF) { if (address == 0xE800) { VROMRAMfor0000 = (data & 0x40) == 0x40; VROMRAMfor1000 = (data & 0x80) == 0x80; } Map.Switch8kPrgRom(data * 2, 1); } else if (address >= 0xF000 & address <= 0xF7FF) { Map.Switch8kPrgRom(data * 2, 2); } }