示例#1
0
        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);
        }
示例#2
0
        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);
        }