Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
 public static void ParseCDiData(DiscInspector di, SFO sfo)
 {
 }