public override PICDataAddress RemapDataAddress(PICDataAddress lAddr) { ushort uAddr = lAddr?.ToUInt16() ?? throw new ArgumentNullException(nameof(lAddr)); if (uAddr >= dataMap.remapTable.Length) { return(lAddr); } var mAddr = dataMap.remapTable[uAddr]; return(mAddr == null ? lAddr : PICDataAddress.Ptr(mAddr)); }
public override bool TryGetAbsDataAddress(PICBankedAddress bAddr, out PICDataAddress absAddr) { if (bAddr == null) { throw new ArgumentNullException(nameof(bAddr)); } absAddr = null !; IMemoryRegion?regn = null; if (PICRegisters.TryGetAlwaysAccessibleRegister(bAddr, out var reg)) { regn = PICMemoryDescriptor.GetDataRegionByAddress(reg.Traits.RegAddress.Addr !); } else if (bAddr.BankSelect.IsValid) { regn = GetDataRegionBySelector(bAddr.BankSelect); } if (regn != null) { absAddr = bAddr.ToDataAddress(regn); } return(absAddr != null); }
/// <summary> /// Remap a data memory address. /// </summary> /// <param name="lAddr">The logical memory address.</param> /// <returns> /// The physical memory address. /// </returns> public override PICDataAddress RemapDataAddress(PICDataAddress lAddr) => throw new NotSupportedException("PIC18 has no remapped data region.");