/// <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; } }
/// <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; }
/// <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; }
/// <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) { }