From f88166e621c4b0fece46832394d6173017363f8c Mon Sep 17 00:00:00 2001 From: SilicaAndPina Date: Mon, 5 Aug 2019 23:22:59 +1200 Subject: [PATCH] add ,gme support --- Conv2PSV/Conv2PSV.csproj | 2 +- Conv2PSV/Program.cs | 71 ++++++++++++++++++++++++++++------------ 2 files changed, 51 insertions(+), 22 deletions(-) diff --git a/Conv2PSV/Conv2PSV.csproj b/Conv2PSV/Conv2PSV.csproj index ac9b9c7..9369cb5 100644 --- a/Conv2PSV/Conv2PSV.csproj +++ b/Conv2PSV/Conv2PSV.csproj @@ -7,7 +7,7 @@ {08DD69CC-AD7E-4173-BF1C-CD6E0C9C8B8C} Exe Conv2PSV - MCS2PSV + PS12PSV v4.5.2 512 true diff --git a/Conv2PSV/Program.cs b/Conv2PSV/Program.cs index 96876d0..f53d6cc 100644 --- a/Conv2PSV/Program.cs +++ b/Conv2PSV/Program.cs @@ -22,13 +22,6 @@ namespace Conv2PSV return str; } - static string ReadName(Stream fs) - { - fs.Seek(0xA, SeekOrigin.Begin); - String Name = GetString(fs); - return Name; - - } static void WriteMagic(Stream fs) { @@ -50,8 +43,18 @@ namespace Conv2PSV if (Path.GetExtension(FileName) == ".mcs") { FileStream fs = File.OpenRead(FileName); - return ReadName(fs); + fs.Seek(0xA, SeekOrigin.Begin); + String Name = GetString(fs); fs.Close(); + return Name; + } + else if(Path.GetExtension(FileName) == ".gme") + { + FileStream fs = File.OpenRead(FileName); + fs.Seek(0xFCA, SeekOrigin.Begin); + String Name = GetString(fs); + fs.Close(); + return Name; } else { @@ -104,15 +107,46 @@ namespace Conv2PSV return PsvName; } + static void WriteSC(String FilePath, Stream PSV) + { + Console.WriteLine("Writing SC Image"); + if (Path.GetExtension(FilePath) == ".mcs") + { + FileStream MCS = File.OpenRead(FilePath); + long SCLen = MCS.Length - 0x80; + MCS.Seek(0x80, SeekOrigin.Begin); + byte[] SCImage = new Byte[SCLen]; + MCS.Read(SCImage, 0x00, (int)SCLen); + PSV.Write(SCImage, 0x00, (int)SCLen); + MCS.Close(); + } + else if (Path.GetExtension(FilePath) == ".gme") + { + FileStream GME = File.OpenRead(FilePath); + GME.Seek(0xFC4, SeekOrigin.Begin); + BinaryReader BGME = new BinaryReader(GME); + int SCLen = BGME.ReadInt16(); + GME.Seek(0x2F40, SeekOrigin.Begin); + byte[] SCImage = new Byte[SCLen]; + GME.Read(SCImage, 0x00, SCLen); + PSV.Write(SCImage, 0x00, SCLen); + GME.Close(); + } + else + { + throw new FileNotFoundException(); + } + } + [STAThread] static void Main(string[] args) { if(args.Length == 0) { - Console.WriteLine("Select MCS"); + Console.WriteLine("Select Save"); OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = Directory.GetCurrentDirectory(); - ofd.Filter = "Memcard REX Single Save (*.mcs)|*.mcs"; + ofd.Filter = "PlayStation One Save Files (*.mcs, *.gme)|*.mcs;*.gme|MemCardREX Single Save (*.mcs)|*.mcs|PlayStation DEXDRIVE (Datel) (*.gme)|*.gme"; DialogResult res = ofd.ShowDialog(); if (res == DialogResult.OK) { @@ -126,8 +160,10 @@ namespace Conv2PSV String SaveTitle = GetTitle(FilePath); Console.Write("PsvName = "); - String PsvName = GetPsvName(SaveTitle); - Console.WriteLine(PsvName); + String PsvName = Path.Combine(Path.GetDirectoryName(FilePath),"PS3","EXPORT","PSV"); + Directory.CreateDirectory(PsvName); + PsvName = Path.Combine(PsvName, GetPsvName(SaveTitle)); + Console.WriteLine(Path.GetFileName(PsvName)); FileStream PSV = File.Open(PsvName, FileMode.OpenOrCreate,FileAccess.ReadWrite); PSV.SetLength(0); @@ -153,14 +189,7 @@ namespace Conv2PSV Console.WriteLine("Writing " + SaveTitle + " +" + Padding.ToString()); WriteString(PSV, SaveTitle); BW.Write(new Byte[Padding], 0x00, Padding); - - Console.WriteLine("Writing SC Image"); - FileStream MCS = File.OpenRead(FilePath); - long SCLen = MCS.Length - 0x80; - MCS.Seek(0x80, SeekOrigin.Begin); - byte[] SCImage = new Byte[SCLen]; - MCS.Read(SCImage, 0x00, (int)SCLen); - PSV.Write(SCImage, 0x00, (int)SCLen); + WriteSC(FilePath, PSV); byte[] Signature = SignatureGen(PSV); Console.WriteLine("Writing Signature to file..."); @@ -168,7 +197,7 @@ namespace Conv2PSV PSV.Write(Signature, 0x00, 0x14); Console.WriteLine("Done!\n\nBlessed Be ~"); PSV.Close(); - MCS.Close(); + }