Esempio n. 1
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="rom"></param>
 public Nes(byte[] rom)
 {
     this.Cartridge = NesCartridge.Load(rom);
     this.Controller = new NesGameController();
     this.Ppu = new Ppu.NesPpu(this.Cartridge.GetCopyChrRom1(), this.Cartridge.GetCopyChrRom2(), this.Cartridge.IsHMirror, this.Cartridge.IsVMirror, x => this.Image = x);
     this.MemoryMap = new Cpu.NesCpuMemoryMap(this.Cartridge.GetCopyPgRom1(), this.Cartridge.GetCopyPgRom2(), this.Ppu,this.Controller);
     this.Cpu = new Cpu.NesCpu(this.MemoryMap, this.Ppu);
 }
Esempio n. 2
0
        /// <summary>
        /// カートリッジ情報を取得
        /// </summary>
        /// <param name="rom"></param>
        /// <returns></returns>
        public static NesCartridge Load(byte[] rom)
        {
            var cartridge = new NesCartridge();

            var header = rom.Take(16).ToArray();
            if (!(header[0] ==78 && header[1] == 69 && header[2] == 83))
            {
                throw new ArgumentException();
            }

            var programRomPageCount = header[4];
            var characterRomPageCount = header[5];
            var isHMirror = (header[6] & (byte)0x01) == 0;
            var isVMirror = (header[6] & (byte)0x01) != 0;

            cartridge.IsHMirror = isHMirror;
            cartridge.IsVMirror = isVMirror;

            if (programRomPageCount == 1)
            {
                cartridge.ProgramRom1 = rom.Skip(16).Take(16384).ToArray();
                cartridge.ProgramRom2 = cartridge.ProgramRom1;
            }
            else
            {
                var roms = rom.Skip(16).Buffer(16384).Take(2).ToArray();
                cartridge.ProgramRom1 = roms[0];
                cartridge.ProgramRom2 = roms[1];
            }

            {
                var roms = rom.Skip(programRomPageCount * 16384 + 16).Buffer(4096).Take(2).ToArray();
                cartridge.CharacterRom1 = roms[0];
                cartridge.CharacterRom2 = roms[1];
            }

            return cartridge;
        }