public static XEX Load(String path) { var fileStream = new FileStream(path, FileMode.Open); if (ReadUShort(fileStream) != 0xFFFF) { throw new ArgumentException(); } XEX result = new XEX();; do { ushort startAddress = ReadUShort(fileStream); if (startAddress == 0xFFFF) { // $FFFF - Indicates a binary load file. Mandatory for first segment, optional for any other segment startAddress = ReadUShort(fileStream); } ushort endAddress = ReadUShort(fileStream); result.Segments.Add(XEXSegment.Load(fileStream, startAddress, endAddress)); } while (fileStream.Position < fileStream.Length); return(result); }
public static XEXSegment Load(FileStream fileStream, ushort startAddress, ushort endAddress) { Debug.WriteLine("Read Segment " + startAddress.ToString("X4") + " " + endAddress.ToString("X4")); XEXSegment result = new XEXSegment(startAddress, endAddress); var len = endAddress - startAddress + 1; result.data = new byte[len]; for (int i = 0; i < len; i++) { result.data[i] = (byte)fileStream.ReadByte(); } return(result); }