public void ArrangeRegisterValues <T>(params byte[] values) where T : Register
        {
            Register defaultRegister = RegisterSupport.GetDefaultRegister <T>();

            if (defaultRegister.Length != values.Length)
            {
                Assert.Fail($"Failed arranging the register {nameof(T)}; required byte count: {defaultRegister.Length}, given byte count: {values.Length}.");
            }

            for (int i = 0; i < defaultRegister.Length; i++)
            {
                _registerValues[(byte)(defaultRegister.Address + i)] = values[i];
            }
        }
        public byte[] GetRegisterValues <T>() where T : Register
        {
            Register defaultRegister = RegisterSupport.GetDefaultRegister <T>();

            byte[] values = new byte[defaultRegister.Length];

            for (int i = 0; i < defaultRegister.Length; i++)
            {
                byte address = (byte)(defaultRegister.Address + i);

                byte value;
                if (!_registerValues.TryGetValue(address, out value))
                {
                    Assert.Fail($"Failed to read uninitialized register byte at address 0x{address:X2}.");
                }

                values[i] = value;
            }

            return(values);
        }