/// <summary> /// Set default parameters for a given system and media type /// </summary> /// <param name="system">KnownSystem value to use</param> /// <param name="type">MediaType value to use</param> /// <param name="driveLetter">Drive letter to use</param> /// <param name="filename">Filename to use</param> /// <param name="driveSpeed">Drive speed to use</param> /// <param name="paranoid">Enable paranoid mode (safer dumping)</param> /// <param name="retryCount">User-defined reread count</param> protected override void SetDefaultParameters( KnownSystem?system, MediaType?type, char driveLetter, string filename, int?driveSpeed, bool paranoid, int retryCount) { BaseCommand = Command.NONE; this[Flag.InputFile] = true; InputFileValue = $"\\\\?\\{driveLetter}:"; this[Flag.OutputFile] = true; OutputFileValue = filename; // TODO: Add more common block sizes this[Flag.BlockSize] = true; switch (type) { case MediaType.FloppyDisk: BlockSizeValue = 1440 * 1024; break; default: BlockSizeValue = 1024 * 1024 * 1024; break; } this[Flag.Progress] = true; this[Flag.Size] = true; }
public static KnownSystemCategory Category(this KnownSystem?system) { if (system < KnownSystem.MarkerDiscBasedConsoleEnd) { return(KnownSystemCategory.DiscBasedConsole); } /* * else if (system < KnownSystem.MarkerOtherConsoleEnd) * return KnownSystemCategory.OtherConsole; */ else if (system < KnownSystem.MarkerComputerEnd) { return(KnownSystemCategory.Computer); } else if (system < KnownSystem.MarkerArcadeEnd) { return(KnownSystemCategory.Arcade); } else if (system < KnownSystem.MarkerOtherEnd) { return(KnownSystemCategory.Other); } else { return(KnownSystemCategory.Custom); } }
/// <summary> /// Validate if all required output files exist /// </summary> /// <param name="basePath">Base filename and path to use for checking</param> /// <param name="system">KnownSystem type representing the media</param> /// <param name="type">MediaType type representing the media</param> /// <param name="progress">Optional result progress callback</param> /// <returns></returns> public override bool CheckAllOutputFilesExist(string basePath, KnownSystem?system, MediaType?type, IProgress <Result> progress = null) { string missingFiles = string.Empty; switch (type) { case MediaType.DVD: // Only added here to help users; not strictly correct case MediaType.NintendoGameCubeGameDisc: case MediaType.NintendoWiiOpticalDisc: if (!File.Exists($"{basePath}-dumpinfo.txt")) { missingFiles += $";{basePath}-dumpinfo.txt"; } if (!File.Exists($"{basePath}.bca")) { missingFiles += $";{basePath}.bca"; } break; default: return(false); } // Use the missing files list as an indicator if (string.IsNullOrEmpty(missingFiles)) { return(true); } else { progress?.Report(Result.Failure($"The following files were missing: {missingFiles.TrimStart(';')}")); return(false); } }
/// <summary> /// Populate media type according to system type /// </summary> private void PopulateMediaType() { KnownSystem?currentSystem = SystemTypeComboBox.SelectedItem as KnownSystemComboBoxItem; if (currentSystem != null) { _mediaTypes = Validators.GetValidMediaTypes(currentSystem).ToList(); var comboBoxItems = new List <MediaTypeComboBoxItem>(); foreach (var mediaType in _mediaTypes) { comboBoxItems.Add(new MediaTypeComboBoxItem(mediaType)); } MediaTypeComboBox.DataSource = comboBoxItems; MediaTypeComboBox.Enabled = _mediaTypes.Count > 1; MediaTypeComboBox.SelectedIndex = (_mediaTypes.IndexOf(_currentMediaType) >= 0 ? _mediaTypes.IndexOf(_currentMediaType) : 0); } else { MediaTypeComboBox.Enabled = false; MediaTypeComboBox.DataSource = null; MediaTypeComboBox.SelectedIndex = -1; } }
/// <summary> /// Get the default output directory name from the currently selected drive /// </summary> /// <param name="driveChanged">Force an updated name if the drive letter changes</param> private void GetOutputNames(bool driveChanged) { Drive drive = DriveLetterComboBox.SelectedItem as Drive; KnownSystem?systemType = SystemTypeComboBox.SelectedItem as KnownSystemComboBoxItem; MediaType? mediaType = MediaTypeComboBox.SelectedItem as MediaType?; // Set the output directory, if we changed drives or it's not already if (driveChanged || string.IsNullOrEmpty(OutputDirectoryTextBox.Text)) { OutputDirectoryTextBox.Text = Path.Combine(UIOptions.Options.DefaultOutputPath, drive?.VolumeLabel ?? string.Empty); } // Get the extension for the file for the next two statements string extension = Env.GetExtension(mediaType); // Set the output filename, if we changed drives or it's not already if (driveChanged || string.IsNullOrEmpty(OutputFilenameTextBox.Text)) { OutputFilenameTextBox.Text = (drive?.VolumeLabel ?? systemType.LongName()) + (extension ?? ".bin"); } // If the extension for the file changed, update that automatically else if (Path.GetExtension(OutputFilenameTextBox.Text) != extension) { OutputFilenameTextBox.Text = Path.GetFileNameWithoutExtension(OutputFilenameTextBox.Text) + (extension ?? ".bin"); } }
public void ParametersFromSystemAndTypeTest(KnownSystem?knownSystem, MediaType?mediaType, Command expected) { var options = new Options { }; var actual = new Parameters(knownSystem, mediaType, 'D', "disc.bin", 16, options); Assert.Equal(expected, actual.BaseCommand); }
/// <summary> /// Set default parameters for a given system and media type /// </summary> /// <param name="system">KnownSystem value to use</param> /// <param name="type">MediaType value to use</param> /// <param name="driveLetter">Drive letter to use</param> /// <param name="filename">Filename to use</param> /// <param name="driveSpeed">Drive speed to use</param> /// <param name="paranoid">Enable paranoid mode (safer dumping)</param> /// <param name="retryCount">User-defined reread count</param> protected abstract void SetDefaultParameters( KnownSystem?system, MediaType?type, char driveLetter, string filename, int?driveSpeed, bool paranoid, int retryCount);
/// <summary> /// Get the default output directory name from the currently selected drive /// </summary> private void GetOutputNames() { Drive drive = DriveLetterComboBox.SelectedItem as Drive; KnownSystem?systemType = SystemTypeComboBox.SelectedItem as KnownSystemComboBoxItem; MediaType? mediaType = MediaTypeComboBox.SelectedItem as MediaType?; OutputDirectoryTextBox.Text = Path.Combine(_options.DefaultOutputPath, drive?.VolumeLabel ?? string.Empty); OutputFilenameTextBox.Text = (drive?.VolumeLabel ?? "disc") + (mediaType.Extension() ?? ".bin"); }
/// <summary> /// Cache the current disc type to internal variable /// </summary> private void CacheCurrentDiscType() { // If the selected item is invalid, we just skip if (!(DriveLetterComboBox.SelectedItem is Drive drive)) { return; } // Get reasonable default values based on the current system KnownSystem?currentSystem = Systems[SystemTypeComboBox.SelectedIndex]; MediaType? defaultMediaType = Validators.GetValidMediaTypes(currentSystem).FirstOrDefault() ?? MediaType.CDROM; if (defaultMediaType == MediaType.NONE) { defaultMediaType = MediaType.CDROM; } // If we're skipping detection, set the default value if (Options.SkipMediaTypeDetection) { LogOutput.VerboseLogLn($"Media type detection disabled, defaulting to {defaultMediaType.LongName()}."); CurrentMediaType = defaultMediaType; } // If the drive is marked active, try to read from it else if (drive.MarkedActive) { LogOutput.VerboseLog($"Trying to detect media type for drive {drive.Letter}.. "); (MediaType? detectedMediaType, string errorMessage) = Validators.GetMediaType(drive); // If we got an error message, post it to the log if (errorMessage != null) { LogOutput.VerboseLogLn($"Error in detecting media type: {errorMessage}"); } // If we got either an error or no media, default to the current System default if (detectedMediaType == null) { LogOutput.VerboseLogLn($"Unable to detect, defaulting to {defaultMediaType.LongName()}."); CurrentMediaType = defaultMediaType; } else { LogOutput.VerboseLogLn($"Detected {CurrentMediaType.LongName()}."); CurrentMediaType = detectedMediaType; } } // All other cases, just use the default else { LogOutput.VerboseLogLn($"Drive marked as empty, defaulting to {defaultMediaType.LongName()}."); CurrentMediaType = defaultMediaType; } }
public static bool DoesSupportDriveSpeed(this KnownSystem?system) { switch (system) { case KnownSystem.MicrosoftXBOX: case KnownSystem.MicrosoftXBOX360: return(false); default: return(true); } }
/// <summary> /// Determine if a system is considered XGD /// </summary> /// <param name="system">KnownSystem value to check</param> /// <returns>True if the system is XGD, false otherwise</returns> public static bool IsXGD(this KnownSystem?system) { switch (system) { case KnownSystem.MicrosoftXBOX: case KnownSystem.MicrosoftXBOX360: case KnownSystem.MicrosoftXBOXOne: case KnownSystem.MicrosoftXboxSeriesXS: return(true); default: return(false); } }
public static bool IsMarker(this KnownSystem?system) { switch (system) { case KnownSystem.MarkerArcadeEnd: case KnownSystem.MarkerComputerEnd: case KnownSystem.MarkerConsoleEnd: case KnownSystem.MarkerOtherEnd: return(true); default: return(false); } }
/// <summary> /// Populate media type according to system type /// </summary> private void PopulateMediaType() { KnownSystem?currentSystem = this.Find <ComboBox>("SystemTypeComboBox").SelectedItem as KnownSystemComboBoxItem; if (currentSystem != null) { MediaTypes = Validators.GetValidMediaTypes(currentSystem); this.Find <ComboBox>("MediaTypeComboBox").Items = MediaTypes; this.Find <ComboBox>("MediaTypeComboBox").IsEnabled = MediaTypes.Count > 1; this.Find <ComboBox>("MediaTypeComboBox").SelectedIndex = (MediaTypes.IndexOf(CurrentMediaType) >= 0 ? MediaTypes.IndexOf(CurrentMediaType) : 0); } else { this.Find <ComboBox>("MediaTypeComboBox").Items = null; this.Find <ComboBox>("MediaTypeComboBox").IsEnabled = false; this.Find <ComboBox>("MediaTypeComboBox").SelectedIndex = -1; } }
public void ParametersFromOptionsTest(KnownSystem?knownSystem, MediaType?mediaType, bool paranoid, int rereadC2, int?subchannelLevel, CreatorFlag[] expected) { CreatorParameters actual = new CreatorParameters(knownSystem, mediaType, 'D', "disc.bin", 16, paranoid, rereadC2); HashSet <CreatorFlag> expectedSet = new HashSet <CreatorFlag>(expected ?? new CreatorFlag[0]); HashSet <CreatorFlag> actualSet = new HashSet <CreatorFlag>(actual.Keys ?? new CreatorFlag[0]); Assert.Equal(expectedSet, actualSet); if (rereadC2 == -1 || !Validators.GetValidMediaTypes(knownSystem).Contains(mediaType)) { Assert.Null(actual.C2OpcodeValue[0]); } else { Assert.Equal(rereadC2, actual.C2OpcodeValue[0]); } Assert.Equal(subchannelLevel, actual.SubchannelReadLevelValue); }
/// <summary> /// Verify that, given a system and a media type, they are correct /// </summary> public static Result GetSupportStatus(KnownSystem?system, MediaType?type) { // No system chosen, update status if (system == KnownSystem.NONE) { return(Result.Failure("Please select a valid system")); } // custom system chosen, then don't check anything else if (system == KnownSystem.Custom) { return(Result.Success("{0} ready to dump", type.Name())); } // If we're on an unsupported type, update the status accordingly switch (type) { // Fully supported types case MediaType.CD: case MediaType.DVD: case MediaType.HDDVD: case MediaType.BluRay: return(Result.Success("{0} ready to dump", type.Name())); // Partially supported types case MediaType.GDROM: case MediaType.GameCubeGameDisc: case MediaType.WiiOpticalDisc: return(Result.Success("{0} discs are partially supported by DIC", type.Name())); // Undumpable but recognized types case MediaType.LaserDisc: case MediaType.WiiUOpticalDisc: case MediaType.CED: case MediaType.UMD: case MediaType.Cartridge: case MediaType.Cassette: return(Result.Failure("{0} discs are not currently supported by DIC", type.Name())); // Invalid or unknown types case MediaType.NONE: default: return(Result.Failure("Please select a valid disc type")); } }
/// <summary> /// Get the default output directory name from the currently selected drive /// </summary> /// <param name="driveChanged">Force an updated name if the drive letter changes</param> private void GetOutputNames(bool driveChanged) { Drive drive = DriveLetterComboBox.SelectedItem as Drive; KnownSystem?systemType = SystemTypeComboBox.SelectedItem as KnownSystemComboBoxItem; MediaType? mediaType = MediaTypeComboBox.SelectedItem as Element <MediaType>; // Get the extension for the file for the next two statements string extension = Env.Parameters?.GetDefaultExtension(mediaType); // Disable automatic reprocessing of the textboxes until we're done RemovePathEventHandlers(); // Save the current cursor positions int outputDirectorySelectionStart = OutputDirectoryTextBox.SelectionStart; int outputFilenameSelectionStart = OutputFilenameTextBox.SelectionStart; // Set the output filename, if we changed drives or it's not already if (driveChanged || string.IsNullOrEmpty(OutputFilenameTextBox.Text)) { OutputFilenameTextBox.Text = (drive?.VolumeLabel ?? systemType.LongName()) + (extension ?? ".bin"); } // If the extension for the file changed, update that automatically else if (Path.GetExtension(OutputFilenameTextBox.Text) != extension) { OutputFilenameTextBox.Text = Path.GetFileNameWithoutExtension(OutputFilenameTextBox.Text) + (extension ?? ".bin"); } // Set the output directory, if we changed drives or it's not already if (driveChanged || string.IsNullOrEmpty(OutputDirectoryTextBox.Text)) { OutputDirectoryTextBox.Text = Path.Combine(Options.DefaultOutputPath, Path.GetFileNameWithoutExtension(OutputFilenameTextBox.Text) ?? string.Empty); } // Set the cursor position back to where it was OutputDirectoryTextBox.SelectionStart = outputDirectorySelectionStart; OutputDirectoryTextBox.SelectionLength = 0; OutputFilenameTextBox.SelectionStart = outputFilenameSelectionStart; OutputFilenameTextBox.SelectionLength = 0; // Re-enable automatic reprocessing of textboxes AddPathEventHandlers(); }
/// <summary> /// Determine if a system is considered audio-only /// </summary> /// <param name="system">KnownSystem value to check</param> /// <returns>True if the system is audio-only, false otherwise</returns> /// <remarks> /// Philips CD-i should NOT be in this list. It's being included until there's a /// reasonable distinction between CD-i and CD-i ready on the database side. /// </remarks> public static bool IsAudio(this KnownSystem?system) { switch (system) { case KnownSystem.AtariJaguarCD: case KnownSystem.AudioCD: case KnownSystem.DVDAudio: case KnownSystem.HasbroVideoNow: case KnownSystem.HasbroVideoNowColor: case KnownSystem.HasbroVideoNowJr: case KnownSystem.HasbroVideoNowXP: case KnownSystem.PhilipsCDi: case KnownSystem.SuperAudioCD: return(true); default: return(false); } }
/// <summary> /// Populate media type according to system type /// </summary> private void PopulateMediaType() { KnownSystem?currentSystem = SystemTypeComboBox.SelectedItem as KnownSystemComboBoxItem; if (currentSystem != null) { _mediaTypes = Validators.GetValidMediaTypes(currentSystem); MediaTypeComboBox.ItemsSource = _mediaTypes; MediaTypeComboBox.IsEnabled = _mediaTypes.Count > 1; MediaTypeComboBox.SelectedIndex = (_mediaTypes.IndexOf(_currentMediaType) >= 0 ? _mediaTypes.IndexOf(_currentMediaType) : 0); } else { MediaTypeComboBox.IsEnabled = false; MediaTypeComboBox.ItemsSource = null; MediaTypeComboBox.SelectedIndex = -1; } }
/// <summary> /// Validate if all required output files exist /// </summary> /// <param name="basePath">Base filename and path to use for checking</param> /// <param name="system">KnownSystem type representing the media</param> /// <param name="type">MediaType type representing the media</param> /// <param name="progress">Optional result progress callback</param> /// <returns></returns> public override bool CheckAllOutputFilesExist(string basePath, KnownSystem?system, MediaType?type, IProgress <Result> progress = null) { string missingFiles = string.Empty; switch (type) { case MediaType.UMD: if (!File.Exists($"{basePath}_disc.txt")) { missingFiles += $";{basePath}_disc.txt"; } if (!File.Exists($"{basePath}_mainError.txt")) { missingFiles += $";{basePath}_mainError.txt"; } if (!File.Exists($"{basePath}_mainInfo.txt")) { missingFiles += $";{basePath}_mainInfo.txt"; } if (!File.Exists($"{basePath}_volDesc.txt")) { missingFiles += $";{basePath}_volDesc.txt"; } break; default: // Non-dumping commands will usually produce no output, so this is irrelevant return(true); } // Use the missing files list as an indicator if (string.IsNullOrEmpty(missingFiles)) { return(true); } else { progress?.Report(Result.Failure($"The following files were missing: {missingFiles.TrimStart(';')}")); return(false); } }
/// <summary> /// Verify that, given a system and a media type, they are correct /// </summary> public static Result GetSupportStatus(KnownSystem?system, MediaType?type) { // No system chosen, update status if (system == KnownSystem.NONE) { return(Result.Failure("Please select a valid system")); } // If we're on an unsupported type, update the status accordingly switch (type) { // Fully supported types case MediaType.BluRay: case MediaType.CDROM: case MediaType.DVD: case MediaType.FloppyDisk: case MediaType.HardDisk: case MediaType.CompactFlash: case MediaType.SDCard: case MediaType.FlashDrive: case MediaType.HDDVD: return(Result.Success($"{type.LongName()} ready to dump")); // Partially supported types case MediaType.GDROM: case MediaType.NintendoGameCubeGameDisc: case MediaType.NintendoWiiOpticalDisc: return(Result.Success($"{type.LongName()} partially supported for dumping")); // Special case for other supported tools case MediaType.UMD: return(Result.Failure($"{type.LongName()} supported for submission info parsing")); // Specifically unknown type case MediaType.NONE: return(Result.Failure($"Please select a valid media type")); // Undumpable but recognized types default: return(Result.Failure($"{type.LongName()} media are not supported for dumping")); } }
public void ParametersFromOptionsTest(KnownSystem?knownSystem, MediaType?mediaType, bool paranoid, int rereadC2, int?subchannelLevel, Flag[] expected) { var options = new Options { DICParanoidMode = paranoid, DICRereadCount = rereadC2 }; var actual = new Parameters(knownSystem, mediaType, 'D', "disc.bin", 16, options); HashSet <Flag> expectedSet = new HashSet <Flag>(expected ?? new Flag[0]); HashSet <Flag> actualSet = new HashSet <Flag>(actual.Keys.Cast <Flag>() ?? new Flag[0]); Assert.Equal(expectedSet, actualSet); if (rereadC2 == -1 || !Validators.GetValidMediaTypes(knownSystem).Contains(mediaType)) { Assert.Null(actual.C2OpcodeValue[0]); } else { Assert.Equal(rereadC2, actual.C2OpcodeValue[0]); } Assert.Equal(subchannelLevel, actual.SubchannelReadLevelValue); }
/// <summary> /// Populate media type according to system type /// </summary> private void PopulateMediaType() { KnownSystem?currentSystem = SystemTypeComboBox.SelectedItem as KnownSystemComboBoxItem; if (currentSystem != null) { var mediaTypeValues = Validators.GetValidMediaTypes(currentSystem); MediaTypes = Element <MediaType> .GenerateElements().Where(m => mediaTypeValues.Contains(m.Value)).ToList(); MediaTypeComboBox.ItemsSource = MediaTypes; MediaTypeComboBox.IsEnabled = MediaTypes.Count > 1; int currentIndex = MediaTypes.FindIndex(m => m == CurrentMediaType); MediaTypeComboBox.SelectedIndex = (currentIndex > -1 ? currentIndex : 0); } else { MediaTypeComboBox.IsEnabled = false; MediaTypeComboBox.ItemsSource = null; MediaTypeComboBox.SelectedIndex = -1; } }
public void KnownSystemToStringTest(KnownSystem?knownSystem, string expected) { string actual = Converters.LongName(knownSystem); Assert.Equal(expected, actual); }
public void BaseCommandToKnownSystemTest(DICCommand command, KnownSystem?expected) { KnownSystem?actual = Converters.ToKnownSystem(command); Assert.Equal(expected, actual); }
/// <summary> /// Get a list of valid MediaTypes for a given KnownSystem /// </summary> /// <param name="sys">KnownSystem value to check</param> /// <returns>MediaTypes, if possible</returns> public static List <MediaType?> GetValidMediaTypes(KnownSystem?sys) { var types = new List <MediaType?>(); switch (sys) { #region Consoles // https://en.wikipedia.org/wiki/Atari_Jaguar_CD case KnownSystem.AtariJaguarCD: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Playdia case KnownSystem.BandaiPlaydiaQuickInteractiveSystem: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Apple_Bandai_Pippin case KnownSystem.BandaiApplePippin: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Amiga_CD32 case KnownSystem.CommodoreAmigaCD32: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Commodore_CDTV case KnownSystem.CommodoreAmigaCDTV: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/EVO_Smart_Console case KnownSystem.EnvizionsEVOSmartConsole: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // https://en.wikipedia.org/wiki/FM_Towns_Marty case KnownSystem.FujitsuFMTownsMarty: types.Add(MediaType.CDROM); types.Add(MediaType.FloppyDisk); break; // https://en.wikipedia.org/wiki/VideoNow case KnownSystem.HasbroVideoNow: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/VideoNow case KnownSystem.HasbroVideoNowColor: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/VideoNow case KnownSystem.HasbroVideoNowJr: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/VideoNow case KnownSystem.HasbroVideoNowXP: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/HyperScan case KnownSystem.MattelHyperscan: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Xbox_(console) case KnownSystem.MicrosoftXBOX: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // https://en.wikipedia.org/wiki/Xbox_360 case KnownSystem.MicrosoftXBOX360: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // https://en.wikipedia.org/wiki/Xbox_One case KnownSystem.MicrosoftXBOXOne: types.Add(MediaType.BluRay); break; // https://en.wikipedia.org/wiki/TurboGrafx-16 case KnownSystem.NECPCEngineTurboGrafxCD: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/PC-FX case KnownSystem.NECPCFX: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/GameCube case KnownSystem.NintendoGameCube: types.Add(MediaType.NintendoGameCubeGameDisc); break; // https://en.wikipedia.org/wiki/Super_NES_CD-ROM case KnownSystem.NintendoSonySuperNESCDROMSystem: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Wii case KnownSystem.NintendoWii: types.Add(MediaType.NintendoWiiOpticalDisc); break; // https://en.wikipedia.org/wiki/Wii_U case KnownSystem.NintendoWiiU: types.Add(MediaType.NintendoWiiUOpticalDisc); break; // https://en.wikipedia.org/wiki/3DO_Interactive_Multiplayer case KnownSystem.Panasonic3DOInteractiveMultiplayer: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Philips_CD-i case KnownSystem.PhilipsCDi: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/LaserActive case KnownSystem.PioneerLaserActive: types.Add(MediaType.CDROM); types.Add(MediaType.LaserDisc); break; // https://en.wikipedia.org/wiki/Sega_CD case KnownSystem.SegaCDMegaCD: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Dreamcast case KnownSystem.SegaDreamcast: types.Add(MediaType.CDROM); // Low density partition, MIL-CD types.Add(MediaType.GDROM); // High density partition break; // https://en.wikipedia.org/wiki/Sega_Saturn case KnownSystem.SegaSaturn: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Neo_Geo_CD case KnownSystem.SNKNeoGeoCD: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/PlayStation_(console) case KnownSystem.SonyPlayStation: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/PlayStation_2 case KnownSystem.SonyPlayStation2: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // https://en.wikipedia.org/wiki/PlayStation_3 case KnownSystem.SonyPlayStation3: types.Add(MediaType.BluRay); types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // https://en.wikipedia.org/wiki/PlayStation_4 case KnownSystem.SonyPlayStation4: types.Add(MediaType.BluRay); break; // https://en.wikipedia.org/wiki/PlayStation_Portable case KnownSystem.SonyPlayStationPortable: types.Add(MediaType.UMD); types.Add(MediaType.CDROM); // Development discs only types.Add(MediaType.DVD); // Development discs only break; // https://en.wikipedia.org/wiki/Tandy_Video_Information_System case KnownSystem.TandyMemorexVisualInformationSystem: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Nuon_(DVD_technology) case KnownSystem.VMLabsNuon: types.Add(MediaType.DVD); break; // https://en.wikipedia.org/wiki/V.Flash case KnownSystem.VTechVFlashVSmilePro: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Game_Wave_Family_Entertainment_System case KnownSystem.ZAPiTGamesGameWaveFamilyEntertainmentSystem: types.Add(MediaType.DVD); break; #endregion #region Computers // https://en.wikipedia.org/wiki/Acorn_Archimedes case KnownSystem.AcornArchimedes: types.Add(MediaType.CDROM); types.Add(MediaType.FloppyDisk); break; // https://en.wikipedia.org/wiki/Macintosh case KnownSystem.AppleMacintosh: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); types.Add(MediaType.FloppyDisk); break; // https://en.wikipedia.org/wiki/Amiga case KnownSystem.CommodoreAmiga: types.Add(MediaType.CDROM); types.Add(MediaType.FloppyDisk); break; // https://en.wikipedia.org/wiki/FM_Towns case KnownSystem.FujitsuFMTowns: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/IBM_PC_compatible case KnownSystem.IBMPCCompatible: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); types.Add(MediaType.FloppyDisk); break; // https://en.wikipedia.org/wiki/PC-8800_series case KnownSystem.NECPC88: types.Add(MediaType.CDROM); types.Add(MediaType.FloppyDisk); break; // https://en.wikipedia.org/wiki/PC-9800_series case KnownSystem.NECPC98: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); types.Add(MediaType.FloppyDisk); break; // https://en.wikipedia.org/wiki/X68000 case KnownSystem.SharpX68000: types.Add(MediaType.CDROM); types.Add(MediaType.FloppyDisk); break; #endregion #region Arcade // https://www.bigbookofamigahardware.com/bboah/product.aspx?id=36 case KnownSystem.AmigaCUBOCD32: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Orbatak case KnownSystem.AmericanLaserGames3DO: types.Add(MediaType.CDROM); break; // http://system16.com/hardware.php?id=779 case KnownSystem.Atari3DO: types.Add(MediaType.CDROM); break; // http://newlifegames.net/nlg/index.php?topic=22003.0 // http://newlifegames.net/nlg/index.php?topic=5486.msg119440 case KnownSystem.Atronic: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // https://www.arcade-museum.com/members/member_detail.php?member_id=406530 case KnownSystem.AUSCOMSystem1: types.Add(MediaType.CDROM); break; // http://newlifegames.net/nlg/index.php?topic=285.0 case KnownSystem.BallyGameMagic: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/CP_System_III case KnownSystem.CapcomCPSystemIII: types.Add(MediaType.CDROM); break; // UNKNOWN case KnownSystem.GlobalVRVarious: types.Add(MediaType.CDROM); break; // https://service.globalvr.com/troubleshooting/vortek.html case KnownSystem.GlobalVRVortek: types.Add(MediaType.CDROM); break; // https://service.globalvr.com/downloads/v3/040-1001-01c-V3-System-Manual.pdf case KnownSystem.GlobalVRVortekV3: types.Add(MediaType.CDROM); break; // https://www.icegame.com/games case KnownSystem.ICEPCHardware: types.Add(MediaType.DVD); break; // https://github.com/mamedev/mame/blob/master/src/mame/drivers/iteagle.cpp case KnownSystem.IncredibleTechnologiesEagle: types.Add(MediaType.CDROM); break; // UNKNOWN case KnownSystem.IncredibleTechnologiesVarious: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // https://en.wikipedia.org/wiki/E-Amusement case KnownSystem.KonamieAmusement: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // http://system16.com/hardware.php?id=828 case KnownSystem.KonamiFirebeat: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // http://system16.com/hardware.php?id=577 case KnownSystem.KonamiGVSystem: types.Add(MediaType.CDROM); break; // http://system16.com/hardware.php?id=575 case KnownSystem.KonamiM2: types.Add(MediaType.CDROM); break; // http://system16.com/hardware.php?id=586 // http://system16.com/hardware.php?id=977 case KnownSystem.KonamiPython: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // http://system16.com/hardware.php?id=976 // http://system16.com/hardware.php?id=831 case KnownSystem.KonamiPython2: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // http://system16.com/hardware.php?id=582 // http://system16.com/hardware.php?id=822 // http://system16.com/hardware.php?id=823 case KnownSystem.KonamiSystem573: types.Add(MediaType.CDROM); break; // http://system16.com/hardware.php?id=827 case KnownSystem.KonamiTwinkle: types.Add(MediaType.CDROM); break; // UNKNOWN case KnownSystem.KonamiVarious: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // http://www.meritgames.com/Support_Center/manuals/PM0591-01.pdf case KnownSystem.MeritIndustriesBoardwalk: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // http://www.meritgames.com/Support_Center/Force%20Elite/PM0380-09.pdf // http://www.meritgames.com/Support_Center/Force%20Upright/PM0382-07%20FORCE%20Upright%20manual.pdf // http://www.meritgames.com/Support_Center/Force%20Upright/PM0383-07%20FORCE%20Upright%20manual.pdf case KnownSystem.MeritIndustriesMegaTouchForce: types.Add(MediaType.CDROM); break; // http://www.meritgames.com/Service%20Center/Ion%20Troubleshooting.pdf case KnownSystem.MeritIndustriesMegaTouchION: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // http://www.meritgames.com/Support_Center/EZ%20Maxx/Manuals/MAXX%20Elite%20with%20coin.pdf // http://www.meritgames.com/Support_Center/EZ%20Maxx/Manuals/MAXX%20Elite.pdf // http://www.meritgames.com/Support_Center/manuals/90003010%20Maxx%20TSM_Rev%20C.pdf case KnownSystem.MeritIndustriesMegaTouchMaxx: types.Add(MediaType.CDROM); break; // http://www.meritgames.com/Support_Center/manuals/pm0076_OA_Megatouch%20XL%20Trouble%20Shooting%20Manual.pdf // http://www.meritgames.com/Support_Center/MEGA%20XL/manuals/Megatouch_XL_pm0109-0D.pdf // http://www.meritgames.com/Support_Center/MEGA%20XL/manuals/Megatouch_XL_Super_5000_manual.pdf case KnownSystem.MeritIndustriesMegaTouchXL: types.Add(MediaType.CDROM); break; // http://system16.com/hardware.php?id=546 // http://system16.com/hardware.php?id=872 case KnownSystem.NamcoCapcomSystem256: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // http://system16.com/hardware.php?id=543 case KnownSystem.NamcoCapcomTaitoSystem246: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // http://system16.com/hardware.php?id=545 case KnownSystem.NamcoSegaNintendoTriforce: types.Add(MediaType.CDROM); // Low density partition types.Add(MediaType.GDROM); // High density partition break; // http://system16.com/hardware.php?id=535 case KnownSystem.NamcoSystem12: types.Add(MediaType.CDROM); break; // http://system16.com/hardware.php?id=900 case KnownSystem.NamcoSystem357: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); types.Add(MediaType.BluRay); break; // https://www.arcade-history.com/?n=the-yakyuuken-part-1&page=detail&id=33049 case KnownSystem.NewJatreCDi: types.Add(MediaType.CDROM); break; // http://blog.system11.org/?p=2499 case KnownSystem.NichibutsuHighRateSystem: types.Add(MediaType.DVD); break; // http://blog.system11.org/?p=2514 case KnownSystem.NichibutsuSuperCD: types.Add(MediaType.CDROM); break; // http://collectedit.com/collectors/shou-time-213/arcade-pcbs-281/x-rate-dvd-series-17-newlywed-life-japan-by-nichibutsu-32245 case KnownSystem.NichibutsuXRateSystem: types.Add(MediaType.DVD); break; // https://en.wikipedia.org/wiki/Panasonic_M2 case KnownSystem.PanasonicM2: types.Add(MediaType.CDROM); types.Add(MediaType.DVD); break; // https://github.com/mamedev/mame/blob/master/src/mame/drivers/photoply.cpp case KnownSystem.PhotoPlayVarious: types.Add(MediaType.CDROM); break; // UNKNOWN case KnownSystem.RawThrillsVarious: types.Add(MediaType.DVD); break; // http://system16.com/hardware.php?id=729 case KnownSystem.SegaChihiro: types.Add(MediaType.CDROM); // Low density partition types.Add(MediaType.GDROM); // High density partition break; // http://system16.com/hardware.php?id=907 case KnownSystem.SegaEuropaR: types.Add(MediaType.DVD); break; // http://system16.com/hardware.php?id=985 // http://system16.com/hardware.php?id=731 // http://system16.com/hardware.php?id=984 // http://system16.com/hardware.php?id=986 case KnownSystem.SegaLindbergh: types.Add(MediaType.DVD); break; // http://system16.com/hardware.php?id=721 // http://system16.com/hardware.php?id=723 // http://system16.com/hardware.php?id=906 // http://system16.com/hardware.php?id=722 case KnownSystem.SegaNaomi: types.Add(MediaType.CDROM); // Low density partition types.Add(MediaType.GDROM); // High density partition break; // http://system16.com/hardware.php?id=725 // http://system16.com/hardware.php?id=726 // http://system16.com/hardware.php?id=727 case KnownSystem.SegaNaomi2: types.Add(MediaType.CDROM); // Low density partition types.Add(MediaType.GDROM); // High density partition break; // http://system16.com/hardware.php?id=975 // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Nu case KnownSystem.SegaNu: types.Add(MediaType.BluRay); break; // http://system16.com/hardware.php?id=910 // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Ring_series case KnownSystem.SegaRingEdge: types.Add(MediaType.DVD); break; // http://system16.com/hardware.php?id=982 // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Ring_series case KnownSystem.SegaRingEdge2: types.Add(MediaType.DVD); break; // http://system16.com/hardware.php?id=911 // https://en.wikipedia.org/wiki/List_of_Sega_arcade_system_boards#Sega_Ring_series case KnownSystem.SegaRingWide: types.Add(MediaType.DVD); break; // http://system16.com/hardware.php?id=711 case KnownSystem.SegaTitanVideo: types.Add(MediaType.CDROM); break; // http://system16.com/hardware.php?id=709 // http://system16.com/hardware.php?id=710 case KnownSystem.SegaSystem32: types.Add(MediaType.CDROM); break; // https://github.com/mamedev/mame/blob/master/src/mame/drivers/seibucats.cpp case KnownSystem.SeibuCATSSystem: types.Add(MediaType.DVD); break; // https://www.tab.at/en/support/support/downloads case KnownSystem.TABAustriaQuizard: types.Add(MediaType.CDROM); break; // https://primetimeamusements.com/product/tsumo-multi-game-motion-system/ // https://www.highwaygames.com/arcade-machines/tsumo-tsunami-motion-8117/ case KnownSystem.TsunamiTsuMoMultiGameMotionSystem: types.Add(MediaType.CDROM); break; #endregion #region Others // https://en.wikipedia.org/wiki/Audio_CD case KnownSystem.AudioCD: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Blu-ray#Player_profiles case KnownSystem.BDVideo: types.Add(MediaType.BluRay); break; // https://en.wikipedia.org/wiki/DVD-Video case KnownSystem.DVDVideo: types.Add(MediaType.DVD); break; // https://en.wikipedia.org/wiki/Blue_Book_(CD_standard) case KnownSystem.EnhancedCD: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/HD_DVD case KnownSystem.HDDVDVideo: types.Add(MediaType.HDDVD); break; // UNKNOWN case KnownSystem.NavisoftNaviken21: types.Add(MediaType.CDROM); break; // UNKNOWN case KnownSystem.PalmOS: types.Add(MediaType.CDROM); break; // UNKNOWN case KnownSystem.PhilipsCDiDigitalVideo: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Photo_CD case KnownSystem.PhotoCD: types.Add(MediaType.CDROM); break; // UNKNOWN case KnownSystem.PlayStationGameSharkUpdates: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Doors_and_Windows_(EP) case KnownSystem.RainbowDisc: types.Add(MediaType.CDROM); break; // https://www.cnet.com/products/tao-music-iktv-karaoke-station-karaoke-system-series/ case KnownSystem.TaoiKTV: types.Add(MediaType.CDROM); break; // http://ultimateconsoledatabase.com/golden/kiss_site.htm case KnownSystem.TomyKissSite: types.Add(MediaType.CDROM); break; // https://en.wikipedia.org/wiki/Video_CD case KnownSystem.VideoCD: types.Add(MediaType.CDROM); break; #endregion case KnownSystem.NONE: default: types.Add(MediaType.NONE); break; } return(types); }
/// <summary> /// Generate parameters based on a set of known inputs /// </summary> /// <param name="system">KnownSystem value to use</param> /// <param name="type">MediaType value to use</param> /// <param name="driveLetter">Drive letter to use</param> /// <param name="filename">Filename to use</param> /// <param name="driveSpeed">Drive speed to use</param> /// <param name="paranoid">Enable paranoid mode (safer dumping)</param> /// <param name="quietMode">Enable quiet mode (no beeps)</param> /// <param name="retryCount">User-defined reread count</param> public Parameters(KnownSystem?system, MediaType?type, char driveLetter, string filename, int?driveSpeed, bool paranoid, bool quietMode, int retryCount) : base(system, type, driveLetter, filename, driveSpeed, paranoid, quietMode, retryCount) { }
/// <summary> /// Generate a SubmissionInfo for the output files /// </summary> /// <param name="info">Base submission info to fill in specifics for</param> /// <param name="basePath">Base filename and path to use for checking</param> /// <param name="system">KnownSystem type representing the media</param> /// <param name="type">MediaType type representing the media</param> /// <param name="drive">Drive representing the disc to get information from</param> /// <returns></returns> public override void GenerateSubmissionInfo(SubmissionInfo info, string basePath, KnownSystem?system, MediaType?type, Drive drive) { // TODO: Fill in submission info specifics for DD string outputDirectory = Path.GetDirectoryName(basePath); switch (type) { // Determine type-specific differences } switch (system) { case KnownSystem.KonamiPython2: if (GetPlayStationExecutableInfo(drive?.Letter, out string pythonTwoSerial, out Region? pythonTwoRegion, out string pythonTwoDate)) { info.CommonDiscInfo.Comments += $"Internal Disc Serial: {pythonTwoSerial}\n"; info.CommonDiscInfo.Region = info.CommonDiscInfo.Region ?? pythonTwoRegion; info.CommonDiscInfo.EXEDateBuildDate = pythonTwoDate; } info.VersionAndEditions.Version = GetPlayStation2Version(drive?.Letter) ?? ""; break; case KnownSystem.SonyPlayStation: if (GetPlayStationExecutableInfo(drive?.Letter, out string playstationSerial, out Region? playstationRegion, out string playstationDate)) { info.CommonDiscInfo.Comments += $"Internal Disc Serial: {playstationSerial}\n"; info.CommonDiscInfo.Region = info.CommonDiscInfo.Region ?? playstationRegion; info.CommonDiscInfo.EXEDateBuildDate = playstationDate; } info.CopyProtection.AntiModchip = GetPlayStationAntiModchipDetected(drive?.Letter) ? YesNo.Yes : YesNo.No; break; case KnownSystem.SonyPlayStation2: if (GetPlayStationExecutableInfo(drive?.Letter, out string playstationTwoSerial, out Region? playstationTwoRegion, out string playstationTwoDate)) { info.CommonDiscInfo.Comments += $"Internal Disc Serial: {playstationTwoSerial}\n"; info.CommonDiscInfo.Region = info.CommonDiscInfo.Region ?? playstationTwoRegion; info.CommonDiscInfo.EXEDateBuildDate = playstationTwoDate; } info.VersionAndEditions.Version = GetPlayStation2Version(drive?.Letter) ?? ""; break; case KnownSystem.SonyPlayStation4: info.VersionAndEditions.Version = GetPlayStation4Version(drive?.Letter) ?? ""; break; } }
/// <summary> /// Validate if all required output files exist /// </summary> /// <param name="basePath">Base filename and path to use for checking</param> /// <param name="system">KnownSystem type representing the media</param> /// <param name="type">MediaType type representing the media</param> /// <returns></returns> public override bool CheckAllOutputFilesExist(string basePath, KnownSystem?system, MediaType?type, IProgress <Result> progress = null) { // TODO: Figure out what sort of output files are expected... just `.bin`? return(true); }
public KnownSystemComboBoxItem(KnownSystem?system) => data = system;
/// <inheritdoc/> public Parameters(KnownSystem?system, MediaType?type, char driveLetter, string filename, int?driveSpeed, Options options) : base(system, type, driveLetter, filename, driveSpeed, options) { }