Exemple #1
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="traits">The memory traits.</param>
 /// <param name="sRegion">The unique name of the memory region.</param>
 /// <param name="regnAddr">The region's (start,end) addresses.</param>
 /// <param name="memDomain">The memory domain type.</param>
 /// <param name="memSubDomain">The memory sub-domain type.</param>
 /// <exception cref="InvalidOperationException">Thrown if the map can't provide the region's
 ///                                             memory traits.</exception>
 public MemoryRegionBase(MemTraits traits, string sRegion, AddressRange regnAddr, PICMemoryDomain memDomain, PICMemorySubDomain memSubDomain)
 {
     this.Trait  = null !;
     this.traits = traits;
     RegionName  = sRegion;
     if (regnAddr != null)
     {
         LogicalByteAddrRange  = regnAddr;
         PhysicalByteAddrRange = regnAddr;
     }
     else
     {
         LogicalByteAddrRange = PhysicalByteAddrRange = new AddressRange(Address.Ptr32(0), Address.Ptr32(0));
     }
     TypeOfMemory    = memDomain;
     SubtypeOfMemory = memSubDomain;
     if (SubtypeOfMemory != PICMemorySubDomain.NNMR)  // Non-Memory-Mapped-Registers have no memory characteristics.
     {
         if (!this.traits.GetTrait(memDomain, memSubDomain, out IPICMemTrait trait))
         {
             throw new InvalidOperationException($"Missing characteristics for [{memDomain}/{memSubDomain}] memory region '{RegionName}'");
         }
         Trait = trait;
     }
 }
Exemple #2
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="traits">The memory regions traits.</param>
 /// <param name="bankSz">Size of the memory bank in number of bytes.</param>
 /// <param name="regnAddr">The region's (start,end) addresses.</param>
 /// <param name="blockRng">The block memory range addresses.</param>
 /// <exception cref="InvalidOperationException">Thrown if the map can't provide the region's
 ///                                             memory traits.</exception>
 public LinearRegion(MemTraits traits, int bankSz, AddressRange regnAddr, AddressRange blockRng)
 {
     this.traits    = traits;
     BankSize       = bankSz;
     FSRByteAddress = regnAddr;
     BlockByteRange = blockRng;
     if (!this.traits.GetTrait(TypeOfMemory, SubtypeOfMemory, out IPICMemTrait trait))
     {
         throw new InvalidOperationException($"Missing characteristics for [{TypeOfMemory}/{SubtypeOfMemory}] linear region");
     }
     Trait = trait;
 }
Exemple #3
0
 /// <summary>
 /// Instantiates a new data memory region.
 /// </summary>
 /// <param name="traits">The memory traits (characteristics).</param>
 /// <param name="sRegion">The region's name.</param>
 /// <param name="regnAddr">The region memory address range.</param>
 /// <param name="memSubDomain">The memory sub-domain code.</param>
 /// <param name="bankSel">The memory bank selector.</param>
 public DataMemRegion(MemTraits traits, string sRegion, AddressRange regnAddr, PICMemorySubDomain memSubDomain, Constant bankSel)
     : base(traits, sRegion, regnAddr, PICMemoryDomain.Data, memSubDomain)
 {
     BankSelector = bankSel;
 }
Exemple #4
0
 /// <summary>
 /// Instantiates a new program memory region.
 /// </summary>
 /// <param name="traits">The memory traits (characteristics).</param>
 /// <param name="sRegion">The region's name.</param>
 /// <param name="regnAddr">The region memory address range.</param>
 /// <param name="memSubDomain">The memory sub-domain code.</param>
 public ProgMemRegion(MemTraits traits, string sRegion, AddressRange regnAddr, PICMemorySubDomain memSubDomain)
     : base(traits, sRegion, regnAddr, PICMemoryDomain.Prog, memSubDomain)
 {
 }