private void MarkRequiredIfNeeded()
        {
            var markRequired = (Cassette != null) && ((KeyboardComponentFeatures)Cassette.Flags).HasFlag(KeyboardComponentFeatures.TapeRequired);

            markRequired |= (Basic != null) && ((KeyboardComponentFeatures)Basic.Flags).HasFlag(KeyboardComponentFeatures.BasicRequired);
            if (markRequired)
            {
                KeyboardComponent = KeyboardComponentOptions.First(k => k.Flags == (uint)KeyboardComponentFeatures.Requires);
            }
        }
 /// <inheritdoc />
 public override void Initialize(ProgramFeatures features)
 {
     base.Initialize(features);
     _keyboardComponent = KeyboardComponentOptions.FirstOrDefault(e => (e != null) && (e.Flags == ((uint)features.KeyboardComponent & FeatureCompatibilityHelpers.CompatibilityMask)));
     _usesMicrophone    = features.KeyboardComponent.HasFlag(KeyboardComponentFeatures.Microphone);
     _usesPrinter       = features.KeyboardComponent.HasFlag(KeyboardComponentFeatures.Printer);
     _usesCassette      = features.KeyboardComponent.HasFlag(KeyboardComponentFeatures.TapeOptional) || features.KeyboardComponent.HasFlag(KeyboardComponentFeatures.TapeRequired);
     _cassette          = CassetteOptions.FirstOrDefault(s => s.Flags == (uint)(features.KeyboardComponent & KeyboardComponentFeaturesHelpers.TapeMask));
     _basic             = BasicOptions.FirstOrDefault(s => s.Flags == (uint)(features.KeyboardComponent & KeyboardComponentFeaturesHelpers.BasicMask));
     RaiseAllPropertiesChanged();
     UpdateCompatibility((KeyboardComponentFeatures)_keyboardComponent.Flags);
 }