Esempio n. 1
0
 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);
     }
 }
Esempio n. 2
0
 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);
     }
 }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
 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;
     }
 }
Esempio n. 5
0
 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);
     }
 }
Esempio n. 6
0
 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();
     }
 }
Esempio n. 7
0
 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();
     }
 }