public void Write(ushort address, byte data) { if (address == 0x7EF0) { Map.Switch2kChrRom(((data >> 1) & 0x3F) * 2, 0); } else if (address == 0x7EF1) { Map.Switch2kChrRom(((data >> 1) & 0x3F) * 2, 1); } else if (address == 0x7EF2) { Map.Switch1kChrRom(data, 4); } else if (address == 0x7EF3) { Map.Switch1kChrRom(data, 5); } else if (address == 0x7EF4) { Map.Switch1kChrRom(data, 6); } else if (address == 0x7EF5) { Map.Switch1kChrRom(data, 7); } else if (address == 0x7EF6) { if ((address & 0x1) == 0) { Map.Cartridge.Mirroring = Mirroring.Vertical; } else { Map.Cartridge.Mirroring = Mirroring.Horizontal; } Map.ApplayMirroring(); } else if (address == 0x7EF8) { //if (data == 0xA3) // Map.IsSRAMReadOnly = true; //else if (data == 0xFF) // Map.IsSRAMReadOnly = false; } else if (address == 0x7EFA) { Map.Switch8kPrgRom(data * 2, 0); } else if (address == 0x7EFC) { Map.Switch8kPrgRom(data * 2, 1); } else if (address == 0x7EFE) { Map.Switch8kPrgRom(data * 2, 2); } }
void SetCHR() { if (mapper4_chrAddressSelect == 0) { _Map.Switch2kChrRom(chr0, 0); _Map.Switch2kChrRom(chr1, 1); _Map.Switch1kChrRom(chr2, 4); _Map.Switch1kChrRom(chr3, 5); _Map.Switch1kChrRom(chr4, 6); _Map.Switch1kChrRom(chr5, 7); } else { _Map.Switch2kChrRom(chr0, 2); _Map.Switch2kChrRom(chr1, 3); _Map.Switch1kChrRom(chr2, 0); _Map.Switch1kChrRom(chr3, 1); _Map.Switch1kChrRom(chr4, 2); _Map.Switch1kChrRom(chr5, 3); } }
void SetCHR() { int[] bank = new int[8]; for (int i = 0; i < 8; i++) { bank[i] = (chh_reg[i] << 8) | (chl_reg[i]); } if (chr_size == 0) { mem.Switch8kChrRom(bank[0] * 8); } else if (chr_size == 1) { mem.Switch4kChrRom(bank[0] * 4, 0); mem.Switch4kChrRom(bank[4] * 4, 1); } else if (chr_size == 2) { mem.Switch2kChrRom(bank[0] * 2, 0); mem.Switch2kChrRom(bank[2] * 2, 1); mem.Switch2kChrRom(bank[4] * 2, 2); mem.Switch2kChrRom(bank[6] * 2, 3); } else { mem.Switch1kChrRom(bank[0], 0); mem.Switch1kChrRom(bank[1], 1); mem.Switch1kChrRom(bank[2], 2); mem.Switch1kChrRom(bank[3], 3); mem.Switch1kChrRom(bank[4], 4); mem.Switch1kChrRom(bank[5], 5); mem.Switch1kChrRom(bank[6], 6); mem.Switch1kChrRom(bank[7], 7); } }
public void Write(ushort address, byte data) { if (address == 0x6000) { Map.Switch2kChrRom(data * 2, 0); } else if (address == 0x6001) { Map.Switch2kChrRom(data * 2, 1); } else if (address == 0x6002) { Map.Switch2kChrRom(data * 2, 2); } else if (address == 0x6003) { Map.Switch2kChrRom(data * 2, 3); } else if (address == 0x7000) { Map.Switch8kPrgRom(data * 2, 0); } else if (address == 0x7001) { Map.Switch8kPrgRom(data * 2, 1); } else if (address == 0x7006) { IRQEnabled = false; IRQCount = 0; } else if (address == 0x7007) { IRQEnabled = true; } }
public void Write(ushort address, byte data) { if (address == 0x7EF0) { if (Swapped) { Map.Switch2kChrRom((data >> 1) * 2, 2); } else { Map.Switch2kChrRom((data >> 1) * 2, 0); } } else if (address == 0x7EF1) { if (Swapped) { Map.Switch2kChrRom((data >> 1) * 2, 3); } else { Map.Switch2kChrRom((data >> 1) * 2, 1); } } else if (address == 0x7EF2) { if (Swapped) { Map.Switch1kChrRom(data, 0); } else { Map.Switch1kChrRom(data, 4); } } else if (address == 0x7EF3) { if (Swapped) { Map.Switch1kChrRom(data, 1); } else { Map.Switch1kChrRom(data, 5); } } else if (address == 0x7EF4) { if (Swapped) { Map.Switch1kChrRom(data, 2); } else { Map.Switch1kChrRom(data, 6); } } else if (address == 0x7EF5) { if (Swapped) { Map.Switch1kChrRom(data, 3); } else { Map.Switch1kChrRom(data, 7); } } else if (address == 0x7EF6) { Swapped = ((data & 0x2) >> 1) != 0; if ((data & 0x01) == 0) { Map.Cartridge.Mirroring = Mirroring.Horizontal; } else { Map.Cartridge.Mirroring = Mirroring.Vertical; } Map.ApplayMirroring(); } else if (address == 0x7EFA) { Map.Switch8kPrgRom((data >> 2) * 2, 0); } else if (address == 0x7EFB) { Map.Switch8kPrgRom((data >> 2) * 2, 1); } else if (address == 0x7EFC) { Map.Switch8kPrgRom((data >> 2) * 2, 2); } }
public void Write(ushort address, byte data) { if (address == 0x8000) { Map.Switch8kPrgRom((data & 0x1F) * 2, 0); if (type1) { if ((data & 0x40) == 0x40) { Map.Cartridge.Mirroring = Mirroring.Horizontal; } else { Map.Cartridge.Mirroring = Mirroring.Vertical; } Map.ApplayMirroring(); } } else if (address == 0x8001) { Map.Switch8kPrgRom(data * 2, 1); } else if (address == 0x8002) { Map.Switch2kChrRom(data * 2, 0); } else if (address == 0x8003) { Map.Switch2kChrRom(data * 2, 1); } else if (address == 0xA000) { Map.Switch1kChrRom(data, 4); } else if (address == 0xA001) { Map.Switch1kChrRom(data, 5); } else if (address == 0xA002) { Map.Switch1kChrRom(data, 6); } else if (address == 0xA003) { Map.Switch1kChrRom(data, 7); } //Type 2 registers else if (address == 0xC000) { type1 = false; IRQCounter = data; } else if (address == 0xC001) { type1 = false; IRQCounter = data; } else if (address == 0xC002) { type1 = false; IRQEabled = true; } else if (address == 0xC003) { type1 = false; IRQEabled = false; } else if (address == 0xE000) { type1 = false; if ((data & 0x40) == 0x40) { Map.Cartridge.Mirroring = Mirroring.Horizontal; } else { Map.Cartridge.Mirroring = Mirroring.Vertical; } Map.ApplayMirroring(); } }
public void Write(ushort address, byte data) { if (address == 0x8000) { mapper64_commandNumber = data; mapper64_prgAddressSelect = (byte)(data & 0x40); mapper64_chrAddressSelect = (byte)(data & 0x80); } else if (address == 0x8001) { if ((mapper64_commandNumber & 0xf) == 0) { //Swap 2 1k chr roms data = (byte)(data - (data % 2)); if (mapper64_chrAddressSelect == 0) { Map.Switch2kChrRom(data, 0); } else { Map.Switch2kChrRom(data, 2); } } else if ((mapper64_commandNumber & 0xf) == 1) { //Swap 2 1k chr roms data = (byte)(data - (data % 2)); if (mapper64_chrAddressSelect == 0) { Map.Switch2kChrRom(data, 1); } else { Map.Switch2kChrRom(data, 3); } } else if ((mapper64_commandNumber & 0xf) == 2) { //Swap 1k chr rom if (mapper64_chrAddressSelect == 0) { Map.Switch1kChrRom(data, 4); } else { Map.Switch1kChrRom(data, 0); } } else if ((mapper64_commandNumber & 0xf) == 3) { //Swap 1k chr rom if (mapper64_chrAddressSelect == 0) { Map.Switch1kChrRom(data, 5); } else { Map.Switch1kChrRom(data, 1); } } else if ((mapper64_commandNumber & 0xf) == 4) { //Swap 1k chr rom if (mapper64_chrAddressSelect == 0) { Map.Switch1kChrRom(data, 6); } else { Map.Switch1kChrRom(data, 2); } } else if ((mapper64_commandNumber & 0xf) == 5) { //Swap 1k chr rom if (mapper64_chrAddressSelect == 0) { Map.Switch1kChrRom(data, 7); } else { Map.Switch1kChrRom(data, 3); } } else if ((mapper64_commandNumber & 0xf) == 6) { if (mapper64_prgAddressSelect == 0) { Map.Switch8kPrgRom(data * 2, 0); } else { Map.Switch8kPrgRom(data * 2, 1); } } else if ((mapper64_commandNumber & 0xf) == 7) { if (mapper64_prgAddressSelect == 0) { Map.Switch8kPrgRom(data * 2, 1); } else { Map.Switch8kPrgRom(data * 2, 2); } } else if ((mapper64_commandNumber & 0xf) == 8) { Map.Switch1kChrRom(data, 1); } else if ((mapper64_commandNumber & 0xf) == 9) { Map.Switch1kChrRom(data, 3); } else if ((mapper64_commandNumber & 0xf) == 0xf) { if (mapper64_prgAddressSelect == 0) { Map.Switch8kPrgRom(data * 2, 2); } else { Map.Switch8kPrgRom(data * 2, 0); } } } else if (address == 0xA000) { if ((data & 1) == 1) { Map.Cartridge.Mirroring = Mirroring.Vertical; } else { Map.Cartridge.Mirroring = Mirroring.Horizontal; } Map.ApplayMirroring(); } }