private void PatchSFO(string translationDir, string dataDir) { Console.WriteLine("Patching SFO..."); string sfoPath = Path.Join(dataDir, "PSP_GAME", "PARAM.SFO"); string title = File.ReadAllText(Path.Join(translationDir, "title.txt")); SFO sfo; using (Stream stream = File.OpenRead(sfoPath)) { sfo = new SFO(stream); } foreach (SFO.Entry entry in sfo.Entries) { if (entry.Key == "TITLE") { entry.Value = title; } } using (Stream stream = File.OpenWrite(sfoPath)) { sfo.Write(stream); } }
/// <summary> /// We will assume that PSP is always a valid ISO format (for now) /// </summary> /// <returns></returns> public bool ScanISOPSP() { bool isPSP = false; // check app ident if (discI.Data._ISOData.ApplicationIdentifier == "PSP GAME") { isPSP = true; } // try and get data from RESERVED volume descriptor field string[] reserved = discI.Data._ISOData.Reserved.Split('|'); if (reserved.Length > 1) { discI.Data.SerialNumber = reserved[0]; discI.Data.ManufacturerID = reserved[1]; } // check for existance of PSP_GAME folder ISO.ISODirectoryNode cnf = discI.Data._ISOData.ISOFiles.Where(a => a.Key == "PSP_GAME").FirstOrDefault().Value as ISO.ISODirectoryNode; if (cnf == null) { return(false); } isPSP = true; // check for UMD_DATA.bin var umd = discI.Data._ISOData.ISOFiles.Where(a => a.Key == "UMD_DATA.BIN").FirstOrDefault(); if (umd.Key.Contains("UMD_DATA.BIN")) { ifn = umd.Value; CurrentLBA = Convert.ToInt32(ifn.Offset); currSector = di.ReadData(CurrentLBA, 2048); string umdStr = Encoding.Default.GetString(currSector); string[] umdArr = umdStr.Split('|'); if (umdArr.Length > 1) { discI.Data.SerialNumber = umdArr[0]; discI.Data.ManufacturerID = umdArr[1]; } } // attempt to parse PARAM.SFO var param = cnf.Children.Where(a => a.Key == "PARAM.SFO").FirstOrDefault(); if (param.Key.Contains("PARAM.SFO")) { ifn = param.Value; CurrentLBA = Convert.ToInt32(ifn.Offset); currSector = di.ReadData(CurrentLBA, 2048); SFO sfo = new SFO(currSector); PSPData.ParsePSPData(discI, sfo); } return(isPSP); }
public static void ParsePSPData(DiscInspector di, SFO sfo) { PSPData data = new PSPData(); foreach (var p in sfo.Parameters) { switch (p.Name) { case "APP_VER": data.APP_VER = p.ValueString; break; case "ATTRIBUTE": data.ATTRIBUTE = p.ValueInt.GetValueOrDefault(); break; case "BOOTABLE": data.BOOTABLE = p.ValueInt.GetValueOrDefault() != 0; break; case "CATEGORY": data.CATEGORY = GetPSPCategory(p.ValueString); break; case "DISC_ID": data.DISC_ID = FormatDiscID(p.ValueString); break; case "DISC_NUMBER": data.DISC_NUMBER = p.ValueInt.GetValueOrDefault(); break; case "DISC_TOTAL": data.DISC_TOTAL = p.ValueInt.GetValueOrDefault(); break; case "DISC_VERSION": data.DISC_VERSION = p.ValueString; break; case "DRIVER_PATH": data.DRIVER_PATH = p.ValueString; break; case "HRKGMP_VER": data.HRKGMP_VER = p.ValueInt.GetValueOrDefault(); break; case "LICENSE": data.LICENSE = p.ValueString; break; case "MEMSIZE": data.MEMSIZE = p.ValueInt.GetValueOrDefault(); break; case "LANGUAGE": data.LANGUAGE = p.ValueString; break; case "PARENTAL_LEVEL": data.PARENTAL_LEVEL = p.ValueInt.GetValueOrDefault(); break; case "PBOOT_TITLE": data.PBOOT_TITLE = p.ValueString; break; case "PSP_SYSTEM_VER": data.PSP_SYSTEM_VER = p.ValueString; break; case "REGION": data.REGION = p.ValueInt.GetValueOrDefault(); break; case "TITLE": data.TITLE = p.ValueString; break; case "TITLE_0": data.TITLE_0 = p.ValueString; break; case "TITLE_10": data.TITLE_10 = p.ValueString; break; case "TITLE_11": data.TITLE_11 = p.ValueString; break; case "TITLE_2": data.TITLE_2 = p.ValueString; break; case "TITLE_3": data.TITLE_3 = p.ValueString; break; case "TITLE_4": data.TITLE_4 = p.ValueString; break; case "TITLE_5": data.TITLE_5 = p.ValueString; break; case "TITLE_6": data.TITLE_6 = p.ValueString; break; case "TITLE_7": data.TITLE_7 = p.ValueString; break; case "TITLE_8": data.TITLE_8 = p.ValueString; break; case "TITLE_9": data.TITLE_9 = p.ValueString; break; case "UPDATER_VER": data.UPDATER_VER = p.ValueString; break; case "USE_USB": data.USE_USB = p.ValueInt.GetValueOrDefault() != 0; break; } } di.Data._PSPData = data; }
public static void ParseCDiData(DiscInspector di, SFO sfo) { }