コード例 #1
0
        public static IReadOnlyDictionary <IRegisterGroup, IRegister[]> MapRegistersToPossibleGroups(
            this IReadOnlyCollection <IRegisterGroup> matAtGroups,
            IReadOnlyList <IRegister> registersToMap)
        {
            var result = new Dictionary <IRegisterGroup, IRegister[]>();

            var registerIndex = 0;

            while (registerIndex < registersToMap.Count)
            {
                IRegister headRegister = registersToMap[registerIndex];

                IRegisterGroup deviceGroup = matAtGroups.FirstOrDefault(register => register.Address == headRegister.Address);
                if (deviceGroup == null)
                {
                    throw new InvalidRegistersException($"Register group with address {headRegister.Address} was not found");
                }

                IRegister[] requestRegistersInGroup = Enumerable.Range(deviceGroup.Address, deviceGroup.Count)
                                                      .Select(address => registersToMap[registerIndex++].WithAddressAssert(address))
                                                      .ToArray();

                result.Add(deviceGroup, requestRegistersInGroup);
            }

            return(result);
        }
コード例 #2
0
 public ImmediateOperationUnit(IRegisterGroup register)
 {
     Registers = register;
 }
コード例 #3
0
 public AddIUOperationUnit(IRegisterGroup registers) : base(registers)
 {
 }
コード例 #4
0
 public LoadOperationUnit(IMemoryProvider <Word> memory, IRegisterGroup registers)
     : base(registers)
 {
     Memory = memory;
 }
コード例 #5
0
 public MoveOperationUnit(IRegisterGroup registers) : base(registers)
 {
 }
コード例 #6
0
 public abstract void Modify(IRegisterGroup registerGroup);
コード例 #7
0
 public MultiplyIUOperationUnit(IRegisterGroup registers) : base(registers)
 {
 }
コード例 #8
0
ファイル: RegisterOperationUnit.cs プロジェクト: chdft/AbaSim
 public RegisterOperationUnit(IRegisterGroup register)
 {
     Registers = register;
 }
コード例 #9
0
 public SpecialMemoryOperationUnit(SerialAbacus16Cpu cpu, IRegisterGroup registers)
     : base(registers)
 {
     Cpu = cpu;
 }
コード例 #10
0
 public override void Modify(IRegisterGroup registerGroup)
 {
     registerGroup.GetType()
     .GetProperty(nameof(IRegisterGroup.UpdateInterval))
     ?.SetValue(registerGroup, TimeSpan.FromMilliseconds(_updateIntervalInMilliseconds));
 }
コード例 #11
0
 public StoreValueIOperationUnit(IRegisterGroup registers) : base(registers)
 {
 }
コード例 #12
0
ファイル: DivideUOperationUnit.cs プロジェクト: chdft/AbaSim
 public DivideUOperationUnit(IRegisterGroup registers) : base(registers)
 {
 }
コード例 #13
0
 public static void SetRegisterTypeViaReflection(this IRegisterGroup registerGroup, RegisterType registerType)
 {
     registerGroup.GetType()
     .GetProperty(nameof(IRegisterGroup.RegisterType))
     ?.SetValue(registerGroup, registerType);
 }
コード例 #14
0
 public StoreOperationUnit(IRegisterGroup register)
 {
     Registers = register;
 }
コード例 #15
0
ファイル: RegisterConverter.cs プロジェクト: Vlbager/Nandaka
 private static int GetGroupSizeAsSeries(IRegisterGroup registerGroup, IProtocolInfo info)
 {
     return(info.AddressSize + registerGroup.DataSize);
 }
コード例 #16
0
 public static int GetLastRegisterAddress(this IRegisterGroup registerGroup)
 => registerGroup.GetRawRegisters().Last().Address;
コード例 #17
0
 public SubIOperationUnit(IRegisterGroup registers) : base(registers)
 {
 }