public IRCombinedWriteData(IRWriteData a, IRWriteData b) { Address = Math.Min(a.Address, b.Address); if (a.Address < b.Address) { Data = a.Data.Concat(b.Data).ToArray(); } else { Data = b.Data.Concat(a.Data).ToArray(); } }
private Tuple<IRWriteData, IRWriteData> Split(IRWriteData dataSection, int length) { var firstArr = new byte[length]; var secondArr = new byte[dataSection.Length - length]; Array.Copy(dataSection.Data, firstArr, length); Array.Copy(dataSection.Data, length, secondArr, 0, secondArr.Length); var first = new CustomIRWriteData(dataSection.Address, firstArr); var second = new CustomIRWriteData(dataSection.Address + length, secondArr); return new Tuple<IRWriteData, IRWriteData>(first, second); }
public void Visit(IRWriteData instruction) { Builder.WriteLine($"{instruction.Address:X8}:"); Builder.WriteLine(""); var i = 0; foreach (var b in instruction.Data) { if (i % 8 == 0) { Builder.WriteLine(""); } Builder.Lines[Builder.Lines.Count - 1] += $"{b:X2}"; i++; } Builder.WriteLine(""); }
private IEnumerable<IIRUnit> FixAlignmentIssues(IRWriteData dataSection) { if (dataSection.Address % 2 != 0 && dataSection.Length >= 2) { var splitted = Split(dataSection, 1); yield return splitted.Item1; dataSection = splitted.Item2; } if (dataSection.Address % 4 != 0 && dataSection.Length >= 4) { var splitted = Split(dataSection, 2); yield return splitted.Item1; dataSection = splitted.Item2; } yield return dataSection; }