private void AddBits0To8(CIRegisterVisualization aVisualization, bool aIsIABitReserved) { uint value = aVisualization.Register.Value; // Processor mode CIRegisterVisBitRange rangeProcMode = new CIRegisterVisBitRange(Container, 0, 4, "Processor Mode"); rangeProcMode.Interpretation = ArmRegisterBankUtils.BankAsStringLong(ProcessorMode); rangeProcMode.ExtractBits(value, "########", "########", "########", "###11111"); aVisualization.AddChild(rangeProcMode); // Thumb bit CIRegisterVisBit thumbBit = CreateYesNoBit(aVisualization, 5, "########", "########", "########", "##1#####", false, "Thumb Mode", "T"); aVisualization.AddChild(thumbBit); // FIQ, IRQ bits CIRegisterVisBitGroup gpIRQs = new CIRegisterVisBitGroup(Container, "Interrupt Disabled Bits"); CIRegisterVisBit fiqBit = CreateYesNoBit(aVisualization, 6, "########", "########", "########", "#1######", false, "FIQ Disabled", "F"); gpIRQs.Add(fiqBit); CIRegisterVisBit irqBit = CreateYesNoBit(aVisualization, 7, "########", "########", "########", "1#######", false, "IRQ Disabled", "I"); gpIRQs.Add(irqBit); // Imprecise Abort bit - reserved in non-ARMv5 CIRegisterVisBit iaBit = CreateYesNoBit(aVisualization, 8, "########", "########", "#######1", "########", aIsIABitReserved, "Imprecise Aborts", "A"); gpIRQs.Add(iaBit); aVisualization.AddChild(gpIRQs); }
private CIRegisterVisBitRange AddBitRange(CIRegisterVisualization aVisualization, uint aStart, uint aEnd, string aCategory) { // Make the mask AddressRange range = new AddressRange(aStart, aEnd); StringBuilder mask = new StringBuilder(); mask.Append(string.Empty.PadLeft(32, '#')); for (int i = 31; i >= 0; i--) { if (range.Contains(i)) { int index = 31 - i; mask[index] = '1'; } } // Reserved uint value = aVisualization.Register.Value; CIRegisterVisBitRange bitRange = new CIRegisterVisBitRange(Container, aStart, aEnd, aCategory); bitRange.ExtractBits(value, mask.ToString()); aVisualization.AddChild(bitRange); return(bitRange); }
private void WriteBitRange(XmlWriter aWriter, CIRegisterVisBitRange aItem) { aWriter.WriteStartElement(SegConstants.ValueInterpretation_Entry_Interpretation_BitRange); // Start & end aWriter.WriteAttributeString(SegConstants.CmnStart, aItem.Range.Min.ToString()); aWriter.WriteAttributeString(SegConstants.CmnEnd, aItem.Range.Max.ToString()); // Value aWriter.WriteAttributeString(SegConstants.CmnValue, aItem.ToString()); // Category aWriter.WriteAttributeString(SegConstants.ValueInterpretation_Entry_Category, aItem.Category); // Reserved if (aItem.IsReserved) { aWriter.WriteAttributeString(SegConstants.CmnType, SegConstants.ValueInterpretation_Entry_Reserved); } // Interpretation string interpretation = aItem.Interpretation; if (!string.IsNullOrEmpty(interpretation)) { aWriter.WriteAttributeString(SegConstants.ValueInterpretation_Entry_Interpretation, interpretation); } aWriter.WriteEndElement(); }
private void AddReserved(CIRegisterVisualization aVisualization, uint aStart, uint aEnd) { CIRegisterVisBitRange range = AddBitRange(aVisualization, aStart, aEnd, KReserved); range.IsReserved = true; }