Ejemplo n.º 1
0
        public NDS(Stream input)
        {
            _stream = input;
            using (BinaryReaderX br = new BinaryReaderX(input, true))
            {
                //Header
                header = new RomHeader(br.BaseStream);

                //Banner
                banner = new Banner(br.BaseStream, header.bannerOffset);

                //FAT
                fat = NDSSupport.ReadFAT(br.BaseStream, header.FAToffset, header.FATsize);

                //FNT
                fnt = NDSSupport.ReadFNT(br.BaseStream, header.fileNameTableOffset, header.fileNameTableSize, fat);

                //System files
                fnt.folders.Add(NDSSupport.AddSystemFiles(br.BaseStream, fat, fat.Length, fnt.id + 0xF000, header));

                //FileData
                FetchFiles(br.BaseStream, fnt);
            }
        }
Ejemplo n.º 2
0
        public static sFolder AddSystemFiles(Stream input, sFAT[] fatTable, int lastFileID, int lastFolderID, RomHeader header)
        {
            sFolder system = new sFolder();

            system.name = "fw_sys/";
            system.id   = (ushort)lastFolderID;
            lastFolderID++;
            system.files = new List <sFile>();
            system.files.AddRange(ReadBasicOverlays(input, header.ARM9overlayOffset, header.ARM9overlaySize, true, fatTable));
            system.files.AddRange(ReadBasicOverlays(input, header.ARM7overlayOffset, header.ARM7overlaySize, false, fatTable));

            sFile fnt = new sFile();

            fnt.name   = "fileNameTable.bin";
            fnt.offset = header.fileNameTableOffset;
            fnt.size   = header.fileNameTableSize;
            fnt.id     = (ushort)lastFolderID;
            lastFolderID++;
            system.files.Add(fnt);

            sFile fat = new sFile();

            fat.name   = "fileAccessTable.bin";
            fat.offset = header.FAToffset;
            fat.size   = header.FATsize;
            fat.id     = (ushort)lastFolderID;
            lastFolderID++;
            system.files.Add(fat);

            sFile banner = new sFile();

            banner.name   = "banner.bin";
            banner.offset = header.bannerOffset;
            banner.size   = 0x840;
            banner.id     = (ushort)lastFolderID;
            lastFolderID++;
            system.files.Add(banner);

            sFile arm9 = new sFile();

            arm9.name   = "arm9.bin";
            arm9.offset = header.ARM9romOffset;
            arm9.size   = header.ARM9size;
            arm9.id     = (ushort)lastFolderID;
            lastFolderID++;
            system.files.Add(arm9);

            sFile arm7 = new sFile();

            arm7.name   = "arm7.bin";
            arm7.offset = header.ARM7romOffset;
            arm7.size   = header.ARM7size;
            arm7.id     = (ushort)lastFolderID;
            lastFolderID++;
            system.files.Add(arm7);

            if (header.ARM9overlaySize != 0)
            {
                sFile y9 = new sFile();
                y9.name   = "y9.bin";
                y9.offset = header.ARM9overlayOffset;
                y9.size   = header.ARM9overlaySize;
                y9.id     = (ushort)lastFolderID;
                lastFolderID++;
                system.files.Add(y9);
            }

            if (header.ARM7overlaySize != 0)
            {
                sFile y7 = new sFile();
                y7.name   = "y7.bin";
                y7.offset = header.ARM7overlayOffset;
                y7.size   = header.ARM7overlaySize;
                y7.id     = (ushort)lastFolderID;
                lastFolderID++;
                system.files.Add(y7);
            }

            return(system);
        }