コード例 #1
0
            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));
            }
コード例 #2
0
            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);
            }
コード例 #3
0
 /// <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.");