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);
        }
Example #3
0
        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;
        }