Exemplo n.º 1
0
 /// <summary>
 /// Construct the PIC register's traits based on the given <see cref="SFRDef"/> descriptor.
 /// </summary>
 /// <param name="sfr">The PIC register descriptor.</param>
 /// <exception cref="ArgumentNullException">Thrown if <paramref name="sfr"/> is null.</exception>
 public PICRegisterTraits(ISFRRegister sfr)
 {
     if (sfr is null)
     {
         throw new ArgumentNullException(nameof(sfr));
     }
     if (string.IsNullOrEmpty(sfr.NMMRID))
     {
         RegAddress = new PICRegisterSizedUniqueAddress(PICDataAddress.Ptr(sfr.Addr), (int)sfr.BitWidth);
     }
     else
     {
         RegAddress = new PICRegisterSizedUniqueAddress(sfr.NMMRID, (int)sfr.BitWidth);
     }
     Name       = sfr.Name;
     Desc       = sfr.Description;
     Impl       = sfr.ImplMask;
     Access     = AdjustString(sfr.AccessBits, '-');
     MCLR       = AdjustString(sfr.MCLR, 'u');
     POR        = AdjustString(sfr.POR, '0');
     IsVolatile = sfr.IsVolatile;
     IsIndirect = sfr.IsIndirect;
 }
Exemplo n.º 2
0
        private PICRegisterStorage AddSFRRegister(ISFRRegister sfr, int regnum)
        {
            var reg = new PICRegisterStorage(sfr, regNumber)
            {
                BitAddress = 0UL
            };

            foreach (var sfld in sfr.BitFields)
            {
                if ((sfld.Name != sfr.Name) && (sfld.BitWidth != sfr.BitWidth))
                {
                    var fld = new PICRegisterBitFieldStorage(reg, sfld);
                    if (!reg.BitFields.ContainsKey(fld.BitFieldSortKey))
                    {
                        if (symTable.AddRegisterBitField(fld))
                        {
                            reg.BitFields.Add(fld.BitFieldSortKey, fld);
                            continue;
                        }
                    }
                }
            }
            return(reg);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Constructor of a named PIC register.
 /// </summary>
 /// <param name="sfr">The SFR definition.</param>
 /// <param name="number">The Reko index number of this register.</param>
 public PICRegisterStorage(ISFRRegister sfr, int number)
     : this(sfr.Name, number, 0, PrimitiveType.CreateWord(sfr.BitWidth), new PICRegisterTraits(sfr))
 {
 }
Exemplo n.º 4
0
 private static PICRegisterTraits GetTraits(ISFRRegister sfr)
 => new PICRegisterTraits(sfr);