/// <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; }
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); }
/// <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)) { }
private static PICRegisterTraits GetTraits(ISFRRegister sfr) => new PICRegisterTraits(sfr);