public CartridgeMapCrimeBusters(Cartridge cartridge)
     : base(cartridge)
 {
     programBankCount = cartridge.ProgramRom.Count / 0x8000;
     programBank      = 0;
     characterBank    = 0;
 }
Beispiel #2
0
        public CartridgeMapKonamiVrc6(Cartridge cartridge, Variant variant) : base(cartridge)
        {
            this.variant = variant;
            if (variant == Variant.Vrc6a)
            {
                mapperName = "VRC6 Rev A";
            }
            else
            {
                mapperName = "VRC6 Rev B";
            }

            programBankCount16K      = cartridge.ProgramRom.Count / 0x4000;
            programBankCount8K       = programBankCount16K * 2;
            programBank8kLastAddress = cartridge.ProgramRom.Count - 0x2000;

            characterBankCount = cartridge.CharacterRom.Length / 0x400;
            characterBank      = new int[8];

            nameTableBankIndex    = new int[4];
            nameTableBankIndex[0] = 6;
            nameTableBankIndex[1] = 6;
            nameTableBankIndex[2] = 7;
            nameTableBankIndex[3] = 7;
        }
Beispiel #3
0
 public CartridgeMapCpRom(Cartridge cartridge)
     : base(cartridge)
 {
     characterBank = 0;
     // CHR bank 2 and 3
     characterRam = new byte[0x2000];
 }
        public CartridgeMapUnrom512(Cartridge cartridge) : base(cartridge)
        {
            // note - self flashing functionality not implemented
            programLastAddress16k = Cartridge.ProgramRom.Count - 0x4000;

            flashMemory = new FlashMemory(Cartridge.ProgramRom.ToArray());
        }
Beispiel #5
0
        public CartridgeMapColourDreams(Cartridge cartridge)
            : base(cartridge)
        {
            int programBankCount = cartridge.ProgramRom.Count / 0x4000;

            characterBank = 0;
            programBank   = 0;
        }
Beispiel #6
0
        public CartridgeMapCnRom(Cartridge cartridge)
            : base(cartridge)
        {
            int programBankCount = cartridge.ProgramRom.Count / 0x4000;

            characterBank = 0;
            programBank1  = 0;
            programBank2  = programBankCount - 1;
        }
Beispiel #7
0
 public CartridgeMapMmc2(Cartridge cartridge)
     : base(cartridge)
 {
     programBankCount = (byte)(Cartridge.ProgramRom.Count / 0x2000);
     programBank      = 0;
     characterBank1   = 0;
     characterBank2   = 0;
     latch0           = 0xFD;
     latch1           = 0xFE;
 }
Beispiel #8
0
        public CartridgeMapAxRom(Cartridge cartridge)
            : base(cartridge)
        {
            programBank = 0;

            if (Cartridge.Crc == 0x279710DC)
            {
                battleToadsHack = new PpuStatusSpinHack();
            }
        }
Beispiel #9
0
        public CartridgeMapTaitoTc0190(Cartridge cartridge) : base(cartridge)
        {
            programBankCount          = Cartridge.ProgramRom.Count / 0x2000;
            programBankLast16kAddress = Cartridge.ProgramRom.Count - 0x4000;

            characterBankCount2k = Cartridge.CharacterRom.Length / 0x800;
            characterBankCount1k = characterBankCount2k * 2;
            characterBank2k      = new int[2];
            characterBank1k      = new int[4];
        }
        public CartridgeMapMicroGenius36(Cartridge cartridge) : base(cartridge)
        {
            programBankCount   = Cartridge.ProgramRom.Count / 0x8000;
            characterBankCount = Cartridge.CharacterRom.Length / 0x2000;

            programBank = programBankCount - 1;

            if (Cartridge.Crc == 0x143DF524)
            {
                strikeWolfHack = new PpuStatusSpinHack();
            }
        }
Beispiel #11
0
        public CartridgeMap(Cartridge cartridge)
        {
            Cartridge = cartridge;

            // set initial mirror mode
            MirrorMode = cartridge.MirrorMode;

            // basic nametable ram supports 2 actual pages
            nameTableRam = new byte[0x800];

            // default implementation provides no samples
            WriteAudioSample = (sample) => { };
        }
Beispiel #12
0
        public CartridgeMapJalecoSs88006(Cartridge cartridge)
            : base(cartridge)
        {
            programRomBank   = new int[4];
            characterRomBank = new int[8];

            int programBankCount = cartridge.ProgramRom.Count / 0x2000;

            programRomBank[0] = 0;
            programRomBank[1] = 1;
            programRomBank[2] = programBankCount - 2;
            programRomBank[3] = programBankCount - 1;
        }
        public CartridgeMapKonamiVrc2(Cartridge cartridge, Variant variant) : base(cartridge)
        {
            this.variant = variant;
            mapperName   = variant == Variant.Vrc2a ? "Konami VRC2 Rev A" : "Konami VRC2 Rev B";

            programRam = new byte[0x2000];

            programBankCount           = Cartridge.ProgramRom.Count / 0x2000;
            programLastTwoBanksAddress = (programBankCount - 2) * 0x2000;

            characterBankCount = Cartridge.CharacterRom.Length / 0x400;
            characterBank      = new int[8];
        }
Beispiel #14
0
        public CartridgeMapMmc3(Cartridge cartridge, bool mmc3AVariant = false)
            : base(cartridge)
        {
            this.mmc3AVariant = mmc3AVariant;

            registers            = new byte[8];
            programBankOffsets   = new int[4];
            characterBankOffsets = new int[8];

            programBankOffsets[0] = GetProgramBankOffset(0);
            programBankOffsets[1] = GetProgramBankOffset(1);
            programBankOffsets[2] = GetProgramBankOffset(-2);
            programBankOffsets[3] = GetProgramBankOffset(-1);
        }
Beispiel #15
0
        public CartridgeMapMultiMmc3(Cartridge cartridge)
            : base(cartridge)
        {
            registers            = new byte[8];
            programBankOffsets   = new int[4];
            characterBankOffsets = new int[8];

            SelectOuterBank(0);

            programBankOffsets[0] = GetProgramBankOffset(0);
            programBankOffsets[1] = GetProgramBankOffset(1);
            programBankOffsets[2] = GetProgramBankOffset(-2);
            programBankOffsets[3] = GetProgramBankOffset(-1);
        }
Beispiel #16
0
        public CartridgeMapMmc5(Cartridge cartridge)
            : base(cartridge)
        {
            // 64K ram total (switchable 8 banks of 8K)
            programRam = new byte[0x10000];

            // 1K expansion ram
            extendedRam = new byte[0x400];

            programBankMode = 3;
            SetCharacterBankMode(0);
            programRomBank = (byte)(Cartridge.ProgramRom.Count / 0x2000 - 1);

            characterBanks = new ushort[12];
        }
Beispiel #17
0
        public CartridgeMapMmc1(Cartridge cartridge)
            : base(cartridge)
        {
            programBankOffsets   = new int[2];
            characterBankOffsets = new int[2];

            outerProgramRomBankSupported = cartridge.ProgramRom.Count > 0x40000;
            programRamBanksSupported     = cartridge.CharacterRom.Count() == 0x2000;
            if (programRamBanksSupported)
            {
                programRam = new byte[0x2000 * 0x04];
            }

            shiftRegister         = 0x10;
            programBankOffsets[1] = GetProgramBankOffset(-1);
        }
        public CartridgeMapBandaiFcg(Cartridge cartridge, Variant variants)
            : base(cartridge)
        {
            this.variants = variants;

            // build name dynamically from variants
            // and determine variant characteristics
            outerProgramBankSupported = false;
            characterBanksSupported   = true;
            registerBase = 0x6000; // mapper 16 lumps FCG1/2, LZ93D50 and LZ93D50with24C02 together, so assume $6000 to catch all register cases
            List <String> variantNames = new List <string>();

            foreach (Variant variant in Enum.GetValues(typeof(Variant)))
            {
                if ((variants & variant) != 0)
                {
                    variantNames.Add(variant.ToString().Replace("_", " "));
                    if (variant == Variant.Datach_Joint_Rom_System)
                    {
                        characterBanksSupported = false;
                        registerBase            = 0x8000; // Datach has registers based at $8000
                    }
                    if (variant == Variant.LZ93D50_with_SRAM)
                    {
                        outerProgramBankSupported = true;
                        characterBanksSupported   = false;
                        registerBase = 0x8000; // SRAM variant has registers based at $8000 so that SRAM us based in $6000-$7FFF
                    }
                }
            }
            this.variantName      = string.Join(" / ", variantNames);
            this.saveRamSupported = this.variants == Variant.LZ93D50_with_SRAM;

            programBankCount = cartridge.ProgramRom.Count / 0x4000;
            programBank      = 0;
            if (outerProgramBankSupported)
            {
                lastProgramBankBase = (programBankCount / 2 - 1) * 0x4000;
            }
            else
            {
                lastProgramBankBase = (programBankCount - 1) * 0x4000;
            }

            characterBank = new int[8];
        }
        public CartridgeMapBnRomNina001(Cartridge cartridge)
            : base(cartridge)
        {
            board = Cartridge.CharacterRom.Length > 0x2000 ? Board.Nina001 : Board.BnRom;

            programBankCount = Cartridge.ProgramRom.Count / 0x8000;
            programBank      = programBankCount - 1;

            if (board == Board.BnRom)
            {
                mapperName = "BNROM";
            }
            else //if (board == Board.Nina001)
            {
                mapperName    = "NINA-001";
                characterBank = new int[2];
                programRam    = new byte[0x2000];
            }
        }
 public CartridgeMapCaltron6in1(Cartridge cartridge) : base(cartridge)
 {
 }
 public CartridgeMapSuperHiK4in1(Cartridge cartridge) : base(cartridge, false)
 {
 }
Beispiel #22
0
 public CartridgeMapMapper58(Cartridge cartridge) : base(cartridge)
 {
 }
 public CartridgeMapTaitoTc0690(Cartridge cartridge) : base(cartridge)
 {
 }
Beispiel #24
0
 public CartridgeMap100In1(Cartridge cartridge)
     : base(cartridge)
 {
     bankMode   = 0;
     programRam = new byte[0x2000];
 }
Beispiel #25
0
 public CartridgeMapIremG101(Cartridge cartridge) : base(cartridge)
 {
     programBankCount   = cartridge.ProgramRom.Count / 0x2000;
     characterBankCount = cartridge.CharacterRom.Length / 0x400;
     characterBank      = new int[8];
 }
Beispiel #26
0
 public CartridgeMapCamerica71(Cartridge cartridge)
     : base(cartridge)
 {
 }
Beispiel #27
0
 public CartridgeMapGk47in1(Cartridge cartridge) : base(cartridge)
 {
 }
Beispiel #28
0
 public CartridgeMapHomeBrew29(Cartridge cartridge) : base(cartridge)
 {
     MirrorMode            = MirrorMode.Vertical;
     programLastAddress16k = Cartridge.ProgramRom.Count - 0x4000;
 }
Beispiel #29
0
 public CartridgeMapRumbleStation(Cartridge cartridge)
     : base(cartridge)
 {
     programBank   = 0;
     characterBank = 0;
 }
Beispiel #30
0
 public CartridgeMapSmb2LostLevels(Cartridge cartridge)
     : base(cartridge)
 {
 }