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