Ejemplo n.º 1
0
        /// <summary>
        /// Read a the header from a NDS game ROM.
        /// </summary>
        /// <param name="str">Stream with the ROM. Must be at the correct position.</param>
        public override void Read(DataStream str)
        {
            long startPosition = str.Position;
            DataReader dr = new DataReader(str);

            this.gameTitle        = dr.ReadChars(12);
            this.gameCode         = dr.ReadChars(4);
            this.makerCode        = dr.ReadChars(2);
            this.unitCode         = dr.ReadByte();
            this.encryptionSeed   = dr.ReadByte();
            this.cartridgeSize    = (uint)(1 << (MinCartridge + dr.ReadByte()));
            this.reserved         = dr.ReadBytes(9);
            this.RomVersion       = dr.ReadByte();
            this.internalFlags    = dr.ReadByte();
            this.Arm9Offset       = dr.ReadUInt32();
            this.Arm9EntryAddress = dr.ReadUInt32();
            this.Arm9RamAddress   = dr.ReadUInt32();
            this.Arm9Size         = dr.ReadUInt32();
            this.Arm7Offset       = dr.ReadUInt32();
            this.Arm7EntryAddress = dr.ReadUInt32();
            this.Arm7RamAddress   = dr.ReadUInt32();
            this.Arm7Size         = dr.ReadUInt32();
            this.fntOffset        = dr.ReadUInt32();
            this.fntSize          = dr.ReadUInt32();
            this.FatOffset        = dr.ReadUInt32();
            this.FatSize          = dr.ReadUInt32();
            this.Ov9TableOffset   = dr.ReadUInt32();
            this.Ov9TableSize     = dr.ReadUInt32();
            this.Ov7TableOffset   = dr.ReadUInt32();
            this.Ov7TableSize     = dr.ReadUInt32();
            this.flagsRead        = dr.ReadUInt32();
            this.flagsInit        = dr.ReadUInt32();
            this.bannerOffset     = dr.ReadUInt32();
            this.secureCRC16      = dr.ReadUInt16();
            this.RomTimeout       = dr.ReadUInt16();
            this.Arm9Autoload     = dr.ReadUInt32();
            this.Arm7Autoload     = dr.ReadUInt32();
            this.secureDisable    = dr.ReadUInt64();
            this.RomSize          = dr.ReadUInt32();
            this.headerSize       = dr.ReadUInt32();
            this.reserved2        = dr.ReadBytes(56);
            this.nintendoLogo     = dr.ReadBytes(156);
            this.logoCRC16        = dr.ReadUInt16();
            this.headerCRC16      = dr.ReadUInt16();
            this.debugRomOffset   = dr.ReadUInt32();
            this.debugSize        = dr.ReadUInt32();
            this.debugRamAddress  = dr.ReadUInt32();
            this.reserved3        = dr.ReadUInt32();

            int unknownSize = (int)(this.headerSize - (str.Position - startPosition));
            this.unknown    = dr.ReadBytes(unknownSize);
        }