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 CIRegisterVisBit CreateBitValue(CIRegisterVisualization aVisualization, int aIndex,
                                                string aMaskByte3, string aMaskByte2, string aMaskByte1, string aMaskByte0,
                                                bool aReserved, string aCategory, string aInterpretationSet, string aInterpretationClear, string aBitSetCharacter, string aBitClearCharacter)
        {
            uint value = aVisualization.Register.Value;
            //
            CIRegisterVisBit bit = new CIRegisterVisBit(Container, aIndex, VisUtilities.ExtractBit(value, aMaskByte3, aMaskByte2, aMaskByte1, aMaskByte0), aCategory, string.Empty);

            bit.IsReserved      = aReserved;
            bit[TBit.EBitClear] = aBitClearCharacter;
            bit[TBit.EBitSet]   = aBitSetCharacter;
            //
            switch (bit.Value)
            {
            case TBit.EBitSet:
                bit.Interpretation = aInterpretationSet;
                break;

            default:
            case TBit.EBitClear:
                bit.Interpretation = aInterpretationClear;
                break;
            }
            //
            return(bit);
        }
Exemple #3
0
        public static IEnumerable <CIRegisterVisBit> ExtractBits(CIContainer aContainer, uint aValue, string aMask)
        {
            List <CIRegisterVisBit> ret = new List <CIRegisterVisBit>();
            //
            int  shift       = 0;
            int  sigBitCount = 0;
            uint mask        = MakeMask(aMask, out shift, out sigBitCount);
            uint maskedValue = (aValue & mask) >> shift;

            // Now make bits
            for (int i = sigBitCount - 1; i >= 0; i--)
            {
                mask = (uint)(1u << i);
                uint value = (maskedValue & mask) >> i;

                CIRegisterVisBit bit = new CIRegisterVisBit(aContainer);
                if (value != 0)
                {
                    bit.Value = TBit.EBitSet;
                }
                ret.Add(bit);
            }

            return(ret.ToArray());
        }
Exemple #4
0
        private void WriteBit(XmlWriter aWriter, CIRegisterVisBit aItem)
        {
            aWriter.WriteStartElement(SegConstants.ValueInterpretation_Entry_Interpretation_Bit);

            // Index
            aWriter.WriteAttributeString(SegConstants.CmnIndex, aItem.Index.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);
            }

            // Single character interpretation
            aWriter.WriteAttributeString(SegConstants.ValueInterpretation_Entry_Interpretation_Bit_Char, aItem.ValueCharacter);

            // Interpretation
            if (!string.IsNullOrEmpty(aItem.Interpretation))
            {
                aWriter.WriteAttributeString(SegConstants.ValueInterpretation_Entry_Interpretation, aItem.Interpretation);
            }

            aWriter.WriteEndElement();
        }
        private CIRegisterVisBit CreateBitValue(CIRegisterVisualization aVisualization, int aIndex,
                                                string aMaskByte3, string aMaskByte2, string aMaskByte1, string aMaskByte0,
                                                bool aReserved, string aCategory, string aInterpretationSet, string aInterpretationClear, string aBitSetCharacter)
        {
            CIRegisterVisBit bit = CreateBitValue(aVisualization, aIndex, aMaskByte3, aMaskByte2, aMaskByte1, aMaskByte0, aReserved, aCategory, aInterpretationSet, aInterpretationClear, aBitSetCharacter, string.Empty);

            return(bit);
        }
        private void AddEndianness(CIRegisterVisualization aVisualization, bool aIsReserved)
        {
            uint value = aVisualization.Register.Value;

            CIRegisterVisBit eBit = CreateBitValue(aVisualization, 9, "###1####", "########", "######1#", "########", aIsReserved, "Endianness", "Big", "Little", "B", "L");

            aVisualization.AddChild(eBit);
        }
        private void AddConditionCodeFlags(CIRegisterVisualization aVisualization)
        {
            uint value = aVisualization.Register.Value;

            CIRegisterVisBitGroup group = new CIRegisterVisBitGroup(Container);

            CIRegisterVisBit oBit = CreateYesNoBit(aVisualization, 28, "###1####", "########", "########", "########", false, "Overflow (Condition Code)", "O");

            group.Add(oBit);
            CIRegisterVisBit cBit = CreateYesNoBit(aVisualization, 29, "##1#####", "########", "########", "########", false, "Carry (Condition Code)", "C");

            group.Add(cBit);
            CIRegisterVisBit zBit = CreateYesNoBit(aVisualization, 30, "#1######", "########", "########", "########", false, "Zero (Condition Code)", "Z");

            group.Add(zBit);
            CIRegisterVisBit nBit = CreateYesNoBit(aVisualization, 31, "1#######", "########", "########", "########", false, "Negative (Condition Code)", "N");

            group.Add(nBit);

            aVisualization.AddChild(group);
        }
        private CIRegisterVisBit CreateYesNoBit(CIRegisterVisualization aVisualization, int aIndex, string aMaskByte3, string aMaskByte2, string aMaskByte1, string aMaskByte0, bool aReserved, string aCategory, string aBitSetCharacter)
        {
            CIRegisterVisBit bit = CreateBitValue(aVisualization, aIndex, aMaskByte3, aMaskByte2, aMaskByte1, aMaskByte0, aReserved, aCategory, "Yes", "No", aBitSetCharacter);

            return(bit);
        }
        private void AddQFlag(CIRegisterVisualization aVisualization, bool aIsReserved)
        {
            CIRegisterVisBit bit = CreateYesNoBit(aVisualization, 27, "####1###", "########", "########", "########", aIsReserved, "Q-Flag (DSP Saturation/Overflow)", "Q");

            aVisualization.AddChild(bit);
        }
        private void AddJazelle(CIRegisterVisualization aVisualization, bool aIsReserved)
        {
            CIRegisterVisBit bit = CreateYesNoBit(aVisualization, 24, "#######1", "########", "########", "########", aIsReserved, "Jazelle", "J");

            aVisualization.AddChild(bit);
        }