public IList <IArchiveFileInfo> Load(Stream input) { using var br = new BinaryReaderX(input, true, ByteOrder.BigEndian); // Read header var header = br.ReadType <U8Header>(); // Parse file system var fileSystemParser = new DefaultU8FileSystem(UPath.Root); return(fileSystemParser.Parse(input, header.entryDataOffset, header.entryDataSize, 0).ToArray()); }
public IList <IArchiveFileInfo> Load(Stream input) { using var br = new BinaryReaderX(input, true, ByteOrder.BigEndian); var result = new List <IArchiveFileInfo>(); // Read header _header = br.ReadType <GcDiscHeader>(); // Special treatment for apploader size input.Position = 0x2440; var appLoader = br.ReadType <GcAppLoader>(); // Collect system files result.Add(new ArchiveFileInfo(new SubStream(input, 0x440, 0x2000), "sys/bi2.bin")); result.Add(new ArchiveFileInfo(new SubStream(input, 0x2440, (appLoader.size + appLoader.trailerSize + 0x1F) & ~0x1F), "sys/appldr.bin")); result.Add(new ArchiveFileInfo(new SubStream(input, _header.execOffset, _header.fstOffset - _header.execOffset), "sys/main.dol")); // Collect file system files var u8 = new DefaultU8FileSystem(UPath.Root); result.AddRange(u8.Parse(input, _header.fstOffset, _header.fstSize, 0)); return(result); }