public static IEnumerable <MemoryImage> SplitMemoryImageIntoSectors(byte[] sourceData, MemoryLayout layout) { var sectorImages = new List <MemoryImage>(); uint sectorStartAddress = layout.BaseAddress; for (uint sectorIndex = 0; sectorIndex < layout.SectorSizes.Count; sectorIndex++) { uint sectorSize = layout.SectorSizes[(int)sectorIndex]; byte[] data = new byte[sectorSize]; Buffer.BlockCopy(sourceData, (int)(sectorStartAddress - layout.BaseAddress), data, 0, data.Length); sectorImages.Add(new MemoryImage(data, sectorStartAddress)); sectorStartAddress += sectorSize; } return(sectorImages); }