Example #1
0
        public static HexFileLine Parse(string line)
        {
            if (!line.StartsWith(":")) throw new ArgumentException();
            var pointer = 1;
            var cnt = ReadHexByte(ref line, ref pointer);
            var addr = ReadHexUShort(ref line, ref pointer);
            var type = (HexFileLineType)ReadHexByte(ref line, ref pointer);
            var array = new byte[cnt];
            for (var i = 0; i < cnt; i++) {
                array[i] = ReadHexByte(ref line, ref pointer);
            }
            var checksum = ReadHexByte(ref line, ref pointer);

            var res = new HexFileLine {
                Address = addr,
                Data = array,
                Type = type
            };

            if (res.Checksum != checksum) {
                throw new Exception("checksum mismatch");
            }

            return res;
        }
Example #2
0
 private void EnsureLine(int adr)
 {
     _line = _hf.Lines.FirstOrDefault(item => item.Type == HexFileLineType.Data && (item.Address >> 4) == (adr >> 4));
     if (_line == null) {
         _line = new HexFileLine {
             Address = (ushort) _offset,
             Type = HexFileLineType.Data,
             Data = new byte[0]
         };
         _newLine = true;
     } else {
         _newLine = false;
     }
     _currentData = new List<byte>(_line.Data);
 }
Example #3
0
 public void WriteTo(HexFile hexFile)
 {
     var lines = (Content.Count + 15) / 16;
     for (var i = 0; i < lines; i++) {
         var adr = i * 16;
         var line = new HexFileLine {
             Address = (ushort)adr,
             Type = HexFileLineType.Data,
             Data = Content.Skip(adr).Take(16).ToArray()
         };
         hexFile.Lines.Add(line);
     }
 }
Example #4
0
 private void FlushLine()
 {
     if (_line != null && _newLine && _currentData.Count > 0) {
         _line.Data = _currentData.ToArray();
         _hf.Lines.Add(_line);
         _line = null;
         _newLine = false;
     }
 }