diff --git a/.gitignore b/.gitignore index 274d7b4459..6e0001f131 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,6 @@ rpcs3/git-version.h !/bin/dev_hdd0/game/ /bin/dev_hdd0/game/* !/bin/dev_hdd0/game/TEST12345/ + +# Ignore other system generated files +bin/dev_hdd0/home/00000001/trophy diff --git a/Utilities/Timer.h b/Utilities/Timer.h index ce4dc6a12d..6be99c9e52 100644 --- a/Utilities/Timer.h +++ b/Utilities/Timer.h @@ -1,38 +1,52 @@ #pragma once #include -using namespace std::chrono; class Timer { private: - bool stopped; - high_resolution_clock::time_point start; - high_resolution_clock::time_point end; + bool m_stopped; + std::chrono::high_resolution_clock::time_point m_start; + std::chrono::high_resolution_clock::time_point m_end; public: - Timer() : stopped(false) + Timer() : m_stopped(false) { } void Start() { - stopped = false; - start = high_resolution_clock::now(); + m_stopped = false; + m_start = std::chrono::high_resolution_clock::now(); } void Stop() { - stopped = true; - end = high_resolution_clock::now(); + m_stopped = true; + m_end = std::chrono::high_resolution_clock::now(); } - double GetElapsedTimeInSec(){return GetElapsedTimeInMicroSec() / 1000000.0;} - double GetElapsedTimeInMilliSec(){return GetElapsedTimeInMicroSec() / 1000.0;} - double GetElapsedTimeInMicroSec() + double GetElapsedTimeInSec() const { - if (!stopped) - end = high_resolution_clock::now(); - return duration_cast(end - start).count(); + return GetElapsedTimeInMicroSec() / 1000000.0; + } + + double GetElapsedTimeInMilliSec() const + { + return GetElapsedTimeInMicroSec() / 1000.0; + } + + double GetElapsedTimeInMicroSec() const + { + std::chrono::high_resolution_clock::time_point now = m_stopped ? m_end : std::chrono::high_resolution_clock::now(); + + return std::chrono::duration_cast(now - m_start).count(); + } + + double GetElapsedTimeInNanoSec() const + { + std::chrono::high_resolution_clock::time_point now = m_stopped ? m_end : std::chrono::high_resolution_clock::now(); + + return std::chrono::duration_cast(now - m_start).count(); } }; diff --git a/rpcs3.sln b/rpcs3.sln index 6074f13ecc..0d54438b39 100644 --- a/rpcs3.sln +++ b/rpcs3.sln @@ -1,7 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.30110.0 -MinimumVisualStudioVersion = 10.0.40219.1 +# Visual Studio 2012 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rpcs3", "rpcs3\rpcs3.vcxproj", "{70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}" ProjectSection(ProjectDependencies) = postProject {CD478F02-7550-58A5-E085-CE4BC0C0AD23} = {CD478F02-7550-58A5-E085-CE4BC0C0AD23} @@ -124,10 +122,6 @@ Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 - DLL Debug|Win32 = DLL Debug|Win32 - DLL Debug|x64 = DLL Debug|x64 - DLL Release|Win32 = DLL Release|Win32 - DLL Release|x64 = DLL Release|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection @@ -136,14 +130,6 @@ Global {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.Debug|Win32.Build.0 = Debug|Win32 {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.Debug|x64.ActiveCfg = Debug|x64 {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.Debug|x64.Build.0 = Debug|x64 - {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.DLL Debug|Win32.ActiveCfg = Debug|Win32 - {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.DLL Debug|Win32.Build.0 = Debug|Win32 - {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.DLL Debug|x64.ActiveCfg = Debug|x64 - {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.DLL Debug|x64.Build.0 = Debug|x64 - {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.DLL Release|Win32.ActiveCfg = Release|Win32 - {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.DLL Release|Win32.Build.0 = Release|Win32 - {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.DLL Release|x64.ActiveCfg = Release|x64 - {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.DLL Release|x64.Build.0 = Release|x64 {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.Release|Win32.ActiveCfg = Release|Win32 {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.Release|Win32.Build.0 = Release|Win32 {70CD65B0-91D6-4FAE-9A7B-4AF55D0D1B12}.Release|x64.ActiveCfg = Release|x64 @@ -152,14 +138,6 @@ Global {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.Debug|Win32.Build.0 = Debug|Win32 {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.Debug|x64.ActiveCfg = Debug|x64 {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.Debug|x64.Build.0 = Debug|x64 - {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.DLL Release|x64.Build.0 = DLL Release|x64 {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.Release|Win32.ActiveCfg = Release|Win32 {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.Release|Win32.Build.0 = Release|Win32 {6FCB55A5-563F-4039-1D79-1EB6ED8AAB82}.Release|x64.ActiveCfg = Release|x64 @@ -168,14 +146,6 @@ Global {7047EE97-7F80-A70D-6147-BC11102DB6F4}.Debug|Win32.Build.0 = Debug|Win32 {7047EE97-7F80-A70D-6147-BC11102DB6F4}.Debug|x64.ActiveCfg = Debug|x64 {7047EE97-7F80-A70D-6147-BC11102DB6F4}.Debug|x64.Build.0 = Debug|x64 - {7047EE97-7F80-A70D-6147-BC11102DB6F4}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {7047EE97-7F80-A70D-6147-BC11102DB6F4}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {7047EE97-7F80-A70D-6147-BC11102DB6F4}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {7047EE97-7F80-A70D-6147-BC11102DB6F4}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {7047EE97-7F80-A70D-6147-BC11102DB6F4}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {7047EE97-7F80-A70D-6147-BC11102DB6F4}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {7047EE97-7F80-A70D-6147-BC11102DB6F4}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {7047EE97-7F80-A70D-6147-BC11102DB6F4}.DLL Release|x64.Build.0 = DLL Release|x64 {7047EE97-7F80-A70D-6147-BC11102DB6F4}.Release|Win32.ActiveCfg = Release|Win32 {7047EE97-7F80-A70D-6147-BC11102DB6F4}.Release|Win32.Build.0 = Release|Win32 {7047EE97-7F80-A70D-6147-BC11102DB6F4}.Release|x64.ActiveCfg = Release|x64 @@ -184,14 +154,6 @@ Global {3111D679-7796-23C4-BA0C-271F1145DA24}.Debug|Win32.Build.0 = Debug|Win32 {3111D679-7796-23C4-BA0C-271F1145DA24}.Debug|x64.ActiveCfg = Debug|x64 {3111D679-7796-23C4-BA0C-271F1145DA24}.Debug|x64.Build.0 = Debug|x64 - {3111D679-7796-23C4-BA0C-271F1145DA24}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {3111D679-7796-23C4-BA0C-271F1145DA24}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {3111D679-7796-23C4-BA0C-271F1145DA24}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {3111D679-7796-23C4-BA0C-271F1145DA24}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {3111D679-7796-23C4-BA0C-271F1145DA24}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {3111D679-7796-23C4-BA0C-271F1145DA24}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {3111D679-7796-23C4-BA0C-271F1145DA24}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {3111D679-7796-23C4-BA0C-271F1145DA24}.DLL Release|x64.Build.0 = DLL Release|x64 {3111D679-7796-23C4-BA0C-271F1145DA24}.Release|Win32.ActiveCfg = Release|Win32 {3111D679-7796-23C4-BA0C-271F1145DA24}.Release|Win32.Build.0 = Release|Win32 {3111D679-7796-23C4-BA0C-271F1145DA24}.Release|x64.ActiveCfg = Release|x64 @@ -200,14 +162,6 @@ Global {067D9406-2A93-DACA-9449-93A2D356357D}.Debug|Win32.Build.0 = Debug|Win32 {067D9406-2A93-DACA-9449-93A2D356357D}.Debug|x64.ActiveCfg = Debug|x64 {067D9406-2A93-DACA-9449-93A2D356357D}.Debug|x64.Build.0 = Debug|x64 - {067D9406-2A93-DACA-9449-93A2D356357D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {067D9406-2A93-DACA-9449-93A2D356357D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {067D9406-2A93-DACA-9449-93A2D356357D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {067D9406-2A93-DACA-9449-93A2D356357D}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {067D9406-2A93-DACA-9449-93A2D356357D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {067D9406-2A93-DACA-9449-93A2D356357D}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {067D9406-2A93-DACA-9449-93A2D356357D}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {067D9406-2A93-DACA-9449-93A2D356357D}.DLL Release|x64.Build.0 = DLL Release|x64 {067D9406-2A93-DACA-9449-93A2D356357D}.Release|Win32.ActiveCfg = Release|Win32 {067D9406-2A93-DACA-9449-93A2D356357D}.Release|Win32.Build.0 = Release|Win32 {067D9406-2A93-DACA-9449-93A2D356357D}.Release|x64.ActiveCfg = Release|x64 @@ -216,14 +170,6 @@ Global {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.Debug|Win32.Build.0 = Debug|Win32 {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.Debug|x64.ActiveCfg = Debug|x64 {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.Debug|x64.Build.0 = Debug|x64 - {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.DLL Release|x64.Build.0 = DLL Release|x64 {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.Release|Win32.ActiveCfg = Release|Win32 {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.Release|Win32.Build.0 = Release|Win32 {9ED1866B-D4AE-3440-24E4-7A9475B163B2}.Release|x64.ActiveCfg = Release|x64 @@ -232,14 +178,6 @@ Global {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.Debug|Win32.Build.0 = Debug|Win32 {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.Debug|x64.ActiveCfg = Debug|x64 {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.Debug|x64.Build.0 = Debug|x64 - {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.DLL Release|x64.Build.0 = DLL Release|x64 {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.Release|Win32.ActiveCfg = Release|Win32 {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.Release|Win32.Build.0 = Release|Win32 {99C9EB95-DB4C-1996-490E-5212EFBF07C3}.Release|x64.ActiveCfg = Release|x64 @@ -248,14 +186,6 @@ Global {6EDC3B79-D217-F11A-406F-F11D856493F9}.Debug|Win32.Build.0 = Debug|Win32 {6EDC3B79-D217-F11A-406F-F11D856493F9}.Debug|x64.ActiveCfg = Debug|x64 {6EDC3B79-D217-F11A-406F-F11D856493F9}.Debug|x64.Build.0 = Debug|x64 - {6EDC3B79-D217-F11A-406F-F11D856493F9}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {6EDC3B79-D217-F11A-406F-F11D856493F9}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {6EDC3B79-D217-F11A-406F-F11D856493F9}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {6EDC3B79-D217-F11A-406F-F11D856493F9}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {6EDC3B79-D217-F11A-406F-F11D856493F9}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {6EDC3B79-D217-F11A-406F-F11D856493F9}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {6EDC3B79-D217-F11A-406F-F11D856493F9}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {6EDC3B79-D217-F11A-406F-F11D856493F9}.DLL Release|x64.Build.0 = DLL Release|x64 {6EDC3B79-D217-F11A-406F-F11D856493F9}.Release|Win32.ActiveCfg = Release|Win32 {6EDC3B79-D217-F11A-406F-F11D856493F9}.Release|Win32.Build.0 = Release|Win32 {6EDC3B79-D217-F11A-406F-F11D856493F9}.Release|x64.ActiveCfg = Release|x64 @@ -264,14 +194,6 @@ Global {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.Debug|Win32.Build.0 = Debug|Win32 {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.Debug|x64.ActiveCfg = Debug|x64 {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.Debug|x64.Build.0 = Debug|x64 - {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.DLL Release|x64.Build.0 = DLL Release|x64 {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.Release|Win32.ActiveCfg = Release|Win32 {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.Release|Win32.Build.0 = Release|Win32 {A9AC9CF5-8E6C-0BA2-0769-6E42EDB88E25}.Release|x64.ActiveCfg = Release|x64 @@ -280,14 +202,6 @@ Global {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.Debug|Win32.Build.0 = Debug|Win32 {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.Debug|x64.ActiveCfg = Debug|x64 {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.Debug|x64.Build.0 = Debug|x64 - {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.DLL Release|x64.Build.0 = DLL Release|x64 {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.Release|Win32.ActiveCfg = Release|Win32 {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.Release|Win32.Build.0 = Release|Win32 {CD478F02-7550-58A5-E085-CE4BC0C0AD23}.Release|x64.ActiveCfg = Release|x64 @@ -296,14 +210,6 @@ Global {22B14659-C5B6-B775-868D-A49198FEAD4A}.Debug|Win32.Build.0 = Debug|Win32 {22B14659-C5B6-B775-868D-A49198FEAD4A}.Debug|x64.ActiveCfg = Debug|x64 {22B14659-C5B6-B775-868D-A49198FEAD4A}.Debug|x64.Build.0 = Debug|x64 - {22B14659-C5B6-B775-868D-A49198FEAD4A}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {22B14659-C5B6-B775-868D-A49198FEAD4A}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {22B14659-C5B6-B775-868D-A49198FEAD4A}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {22B14659-C5B6-B775-868D-A49198FEAD4A}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {22B14659-C5B6-B775-868D-A49198FEAD4A}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {22B14659-C5B6-B775-868D-A49198FEAD4A}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {22B14659-C5B6-B775-868D-A49198FEAD4A}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {22B14659-C5B6-B775-868D-A49198FEAD4A}.DLL Release|x64.Build.0 = DLL Release|x64 {22B14659-C5B6-B775-868D-A49198FEAD4A}.Release|Win32.ActiveCfg = Release|Win32 {22B14659-C5B6-B775-868D-A49198FEAD4A}.Release|Win32.Build.0 = Release|Win32 {22B14659-C5B6-B775-868D-A49198FEAD4A}.Release|x64.ActiveCfg = Release|x64 @@ -312,14 +218,6 @@ Global {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.Debug|Win32.Build.0 = Debug|Win32 {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.Debug|x64.ActiveCfg = Debug|x64 {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.Debug|x64.Build.0 = Debug|x64 - {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.DLL Release|x64.Build.0 = DLL Release|x64 {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.Release|Win32.ActiveCfg = Release|Win32 {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.Release|Win32.Build.0 = Release|Win32 {FAF0CB93-F7CE-A6B8-8342-19CE99BAF774}.Release|x64.ActiveCfg = Release|x64 @@ -328,14 +226,6 @@ Global {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.Debug|Win32.Build.0 = Debug|Win32 {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.Debug|x64.ActiveCfg = Debug|x64 {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.Debug|x64.Build.0 = Debug|x64 - {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.DLL Release|x64.Build.0 = DLL Release|x64 {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.Release|Win32.ActiveCfg = Release|Win32 {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.Release|Win32.Build.0 = Release|Win32 {46333DC3-B4A5-3DCC-E8BF-A3F20ADC56D2}.Release|x64.ActiveCfg = Release|x64 @@ -344,14 +234,6 @@ Global {5C363C34-4741-7036-861C-2E2279CF552E}.Debug|Win32.Build.0 = Debug|Win32 {5C363C34-4741-7036-861C-2E2279CF552E}.Debug|x64.ActiveCfg = Debug|x64 {5C363C34-4741-7036-861C-2E2279CF552E}.Debug|x64.Build.0 = Debug|x64 - {5C363C34-4741-7036-861C-2E2279CF552E}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {5C363C34-4741-7036-861C-2E2279CF552E}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {5C363C34-4741-7036-861C-2E2279CF552E}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {5C363C34-4741-7036-861C-2E2279CF552E}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {5C363C34-4741-7036-861C-2E2279CF552E}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {5C363C34-4741-7036-861C-2E2279CF552E}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {5C363C34-4741-7036-861C-2E2279CF552E}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {5C363C34-4741-7036-861C-2E2279CF552E}.DLL Release|x64.Build.0 = DLL Release|x64 {5C363C34-4741-7036-861C-2E2279CF552E}.Release|Win32.ActiveCfg = Release|Win32 {5C363C34-4741-7036-861C-2E2279CF552E}.Release|Win32.Build.0 = Release|Win32 {5C363C34-4741-7036-861C-2E2279CF552E}.Release|x64.ActiveCfg = Release|x64 @@ -360,14 +242,6 @@ Global {76169FE8-0814-4F36-6409-699EF1A23001}.Debug|Win32.Build.0 = Debug|Win32 {76169FE8-0814-4F36-6409-699EF1A23001}.Debug|x64.ActiveCfg = Debug|x64 {76169FE8-0814-4F36-6409-699EF1A23001}.Debug|x64.Build.0 = Debug|x64 - {76169FE8-0814-4F36-6409-699EF1A23001}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {76169FE8-0814-4F36-6409-699EF1A23001}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {76169FE8-0814-4F36-6409-699EF1A23001}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {76169FE8-0814-4F36-6409-699EF1A23001}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {76169FE8-0814-4F36-6409-699EF1A23001}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {76169FE8-0814-4F36-6409-699EF1A23001}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {76169FE8-0814-4F36-6409-699EF1A23001}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {76169FE8-0814-4F36-6409-699EF1A23001}.DLL Release|x64.Build.0 = DLL Release|x64 {76169FE8-0814-4F36-6409-699EF1A23001}.Release|Win32.ActiveCfg = Release|Win32 {76169FE8-0814-4F36-6409-699EF1A23001}.Release|Win32.Build.0 = Release|Win32 {76169FE8-0814-4F36-6409-699EF1A23001}.Release|x64.ActiveCfg = Release|x64 @@ -376,14 +250,6 @@ Global {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.Debug|Win32.Build.0 = Debug|Win32 {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.Debug|x64.ActiveCfg = Debug|x64 {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.Debug|x64.Build.0 = Debug|x64 - {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.DLL Release|x64.Build.0 = DLL Release|x64 {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.Release|Win32.ActiveCfg = Release|Win32 {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.Release|Win32.Build.0 = Release|Win32 {949C6DB8-E638-6EC6-AB31-BCCFD1379E01}.Release|x64.ActiveCfg = Release|x64 @@ -392,14 +258,6 @@ Global {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.Debug|Win32.Build.0 = Debug|Win32 {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.Debug|x64.ActiveCfg = Debug|x64 {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.Debug|x64.Build.0 = Debug|x64 - {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.DLL Release|x64.Build.0 = DLL Release|x64 {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.Release|Win32.ActiveCfg = Release|Win32 {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.Release|Win32.Build.0 = Release|Win32 {B87216CD-6C64-1DB0-D900-BC6E745C1DF9}.Release|x64.ActiveCfg = Release|x64 @@ -408,14 +266,6 @@ Global {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.Debug|Win32.Build.0 = Debug|Win32 {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.Debug|x64.ActiveCfg = Debug|x64 {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.Debug|x64.Build.0 = Debug|x64 - {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.DLL Release|x64.Build.0 = DLL Release|x64 {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.Release|Win32.ActiveCfg = Release|Win32 {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.Release|Win32.Build.0 = Release|Win32 {AFF2C68B-B867-DD50-6AC5-74B09D41F8EA}.Release|x64.ActiveCfg = Release|x64 @@ -424,14 +274,6 @@ Global {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.Debug|Win32.Build.0 = Debug|Win32 {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.Debug|x64.ActiveCfg = Debug|x64 {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.Debug|x64.Build.0 = Debug|x64 - {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.DLL Release|x64.Build.0 = DLL Release|x64 {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.Release|Win32.ActiveCfg = Release|Win32 {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.Release|Win32.Build.0 = Release|Win32 {6FDC76D5-CB44-B9F8-5EF6-C59B020719DF}.Release|x64.ActiveCfg = Release|x64 @@ -440,14 +282,6 @@ Global {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.Debug|Win32.Build.0 = Debug|Win32 {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.Debug|x64.ActiveCfg = Debug|x64 {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.Debug|x64.Build.0 = Debug|x64 - {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.DLL Release|x64.Build.0 = DLL Release|x64 {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.Release|Win32.ActiveCfg = Release|Win32 {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.Release|Win32.Build.0 = Release|Win32 {8BECCA95-C7D7-CFF8-FDB1-4950E9F8E8E6}.Release|x64.ActiveCfg = Release|x64 @@ -456,14 +290,6 @@ Global {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.Debug|Win32.Build.0 = Debug|Win32 {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.Debug|x64.ActiveCfg = Debug|x64 {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.Debug|x64.Build.0 = Debug|x64 - {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.DLL Release|x64.Build.0 = DLL Release|x64 {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.Release|Win32.ActiveCfg = Release|Win32 {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.Release|Win32.Build.0 = Release|Win32 {87B42A9C-3F5C-53D7-9017-2B1CAE39457D}.Release|x64.ActiveCfg = Release|x64 @@ -472,14 +298,6 @@ Global {23E1C437-A951-5943-8639-A17F3CF2E606}.Debug|Win32.Build.0 = Debug|Win32 {23E1C437-A951-5943-8639-A17F3CF2E606}.Debug|x64.ActiveCfg = Debug|x64 {23E1C437-A951-5943-8639-A17F3CF2E606}.Debug|x64.Build.0 = Debug|x64 - {23E1C437-A951-5943-8639-A17F3CF2E606}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {23E1C437-A951-5943-8639-A17F3CF2E606}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {23E1C437-A951-5943-8639-A17F3CF2E606}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {23E1C437-A951-5943-8639-A17F3CF2E606}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {23E1C437-A951-5943-8639-A17F3CF2E606}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {23E1C437-A951-5943-8639-A17F3CF2E606}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {23E1C437-A951-5943-8639-A17F3CF2E606}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {23E1C437-A951-5943-8639-A17F3CF2E606}.DLL Release|x64.Build.0 = DLL Release|x64 {23E1C437-A951-5943-8639-A17F3CF2E606}.Release|Win32.ActiveCfg = Release|Win32 {23E1C437-A951-5943-8639-A17F3CF2E606}.Release|Win32.Build.0 = Release|Win32 {23E1C437-A951-5943-8639-A17F3CF2E606}.Release|x64.ActiveCfg = Release|x64 @@ -488,14 +306,6 @@ Global {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.Debug|Win32.Build.0 = Debug|Win32 {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.Debug|x64.ActiveCfg = Debug|x64 {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.Debug|x64.Build.0 = Debug|x64 - {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 - {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.DLL Debug|x64.Build.0 = DLL Debug|x64 - {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 - {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.DLL Release|x64.ActiveCfg = DLL Release|x64 - {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.DLL Release|x64.Build.0 = DLL Release|x64 {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.Release|Win32.ActiveCfg = Release|Win32 {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.Release|Win32.Build.0 = Release|Win32 {74827EBD-93DC-5110-BA95-3F2AB029B6B0}.Release|x64.ActiveCfg = Release|x64 diff --git a/rpcs3/Emu/FS/VFS.cpp b/rpcs3/Emu/FS/VFS.cpp index c3725f2df8..a96a62457b 100644 --- a/rpcs3/Emu/FS/VFS.cpp +++ b/rpcs3/Emu/FS/VFS.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "VFS.h" #include "Emu/HDD/HDD.h" +#include "vfsDeviceLocalFile.h" int sort_devices(const void* _a, const void* _b) { @@ -22,7 +23,7 @@ void VFS::Mount(const wxString& ps3_path, const wxString& local_path, vfsDevice* if(m_devices.GetCount() > 1) { - std::qsort(m_devices.GetPtr(), m_devices.GetCount(), sizeof(vfsDevice*), sort_devices); + //std::qsort(m_devices.GetPtr(), m_devices.GetCount(), sizeof(vfsDevice*), sort_devices); } } @@ -49,37 +50,166 @@ void VFS::UnMountAll() } } -vfsStream* VFS::Open(const wxString& ps3_path, vfsOpenMode mode) +vfsFileBase* VFS::OpenFile(const wxString& ps3_path, vfsOpenMode mode) const { - vfsDevice* stream = nullptr; - wxString path; if(vfsDevice* dev = GetDevice(ps3_path, path)) { - stream = dev->GetNew(); - stream->Open(path, mode); + if(vfsFileBase* res = dev->GetNewFileStream()) + { + res->Open(path, mode); + return res; + } } - return stream; + return nullptr; } -void VFS::Create(const wxString& ps3_path) +vfsDirBase* VFS::OpenDir(const wxString& ps3_path) const { wxString path; if(vfsDevice* dev = GetDevice(ps3_path, path)) { - dev->Create(path); + if(vfsDirBase* res = dev->GetNewDirStream()) + { + res->Open(path); + return res; + } } + + return nullptr; } -void VFS::Close(vfsStream*& device) +bool VFS::CreateFile(const wxString& ps3_path) const { - delete device; - device = nullptr; + wxString path; + if(vfsDevice* dev = GetDevice(ps3_path, path)) + { + std::shared_ptr res(dev->GetNewFileStream()); + + if(res) + { + return res->Create(path); + } + } + + return false; } -vfsDevice* VFS::GetDevice(const wxString& ps3_path, wxString& path) +bool VFS::CreateDir(const wxString& ps3_path) const +{ + wxString path; + if(vfsDevice* dev = GetDevice(ps3_path, path)) + { + std::shared_ptr res(dev->GetNewDirStream()); + + if(res) + { + return res->Create(path); + } + } + + return false; +} + +bool VFS::RemoveFile(const wxString& ps3_path) const +{ + wxString path; + if(vfsDevice* dev = GetDevice(ps3_path, path)) + { + std::shared_ptr res(dev->GetNewFileStream()); + + if(res) + { + return res->Remove(path); + } + } + + return false; +} + +bool VFS::RemoveDir(const wxString& ps3_path) const +{ + wxString path; + if(vfsDevice* dev = GetDevice(ps3_path, path)) + { + std::shared_ptr res(dev->GetNewDirStream()); + + if(res) + { + return res->Remove(path); + } + } + + return false; +} + +bool VFS::ExistsFile(const wxString& ps3_path) const +{ + wxString path; + if(vfsDevice* dev = GetDevice(ps3_path, path)) + { + std::shared_ptr res(dev->GetNewFileStream()); + + if(res) + { + return res->Exists(path); + } + } + + return false; +} + +bool VFS::ExistsDir(const wxString& ps3_path) const +{ + wxString path; + if(vfsDevice* dev = GetDevice(ps3_path, path)) + { + std::shared_ptr res(dev->GetNewDirStream()); + + if(res) + { + return res->IsExists(path); + } + } + + return false; +} + +bool VFS::RenameFile(const wxString& ps3_path_from, const wxString& ps3_path_to) const +{ + wxString path; + if(vfsDevice* dev = GetDevice(ps3_path_from, path)) + { + std::shared_ptr res(dev->GetNewFileStream()); + + if(res) + { + return res->Rename(path, ps3_path_to); + } + } + + return false; +} + +bool VFS::RenameDir(const wxString& ps3_path_from, const wxString& ps3_path_to) const +{ + wxString path; + if(vfsDevice* dev = GetDevice(ps3_path_from, path)) + { + std::shared_ptr res(dev->GetNewDirStream()); + + if(res) + { + return res->Rename(path, ps3_path_to); + } + } + + return false; +} + +vfsDevice* VFS::GetDevice(const wxString& ps3_path, wxString& path) const { u32 max_eq; s32 max_i=-1; @@ -101,14 +231,18 @@ vfsDevice* VFS::GetDevice(const wxString& ps3_path, wxString& path) return &m_devices[max_i]; } -vfsDevice* VFS::GetDeviceLocal(const wxString& local_path, wxString& path) +vfsDevice* VFS::GetDeviceLocal(const wxString& local_path, wxString& path) const { u32 max_eq; s32 max_i=-1; + wxFileName file_path(local_path); + file_path.Normalize(); + wxString mormalized_path = file_path.GetFullPath(); + for(u32 i=0; i max_eq) { @@ -135,11 +269,11 @@ void VFS::Init(const wxString& path) switch(entries[i].device) { case vfsDevice_LocalFile: - dev = new vfsLocalFile(); + dev = new vfsDeviceLocalFile(); break; case vfsDevice_HDD: - dev = new vfsHDD(entries[i].device_path); + dev = new vfsDeviceHDD(entries[i].device_path); break; default: diff --git a/rpcs3/Emu/FS/VFS.h b/rpcs3/Emu/FS/VFS.h index 2a09f20b74..8876726bb8 100644 --- a/rpcs3/Emu/FS/VFS.h +++ b/rpcs3/Emu/FS/VFS.h @@ -36,11 +36,19 @@ struct VFS void UnMount(const wxString& ps3_path); void UnMountAll(); - vfsStream* Open(const wxString& ps3_path, vfsOpenMode mode); - void Create(const wxString& ps3_path); - void Close(vfsStream*& device); - vfsDevice* GetDevice(const wxString& ps3_path, wxString& path); - vfsDevice* GetDeviceLocal(const wxString& local_path, wxString& path); + vfsFileBase* OpenFile(const wxString& ps3_path, vfsOpenMode mode) const; + vfsDirBase* OpenDir(const wxString& ps3_path) const; + bool CreateFile(const wxString& ps3_path) const; + bool CreateDir(const wxString& ps3_path) const; + bool RemoveFile(const wxString& ps3_path) const; + bool RemoveDir(const wxString& ps3_path) const; + bool ExistsFile(const wxString& ps3_path) const; + bool ExistsDir(const wxString& ps3_path) const; + bool RenameFile(const wxString& ps3_path_from, const wxString& ps3_path_to) const; + bool RenameDir(const wxString& ps3_path_from, const wxString& ps3_path_to) const; + + vfsDevice* GetDevice(const wxString& ps3_path, wxString& path) const; + vfsDevice* GetDeviceLocal(const wxString& local_path, wxString& path) const; void Init(const wxString& path); void SaveLoadDevices(Array& res, bool is_load); diff --git a/rpcs3/Emu/FS/vfsDevice.cpp b/rpcs3/Emu/FS/vfsDevice.cpp index 084269e50d..df79fcdfb4 100644 --- a/rpcs3/Emu/FS/vfsDevice.cpp +++ b/rpcs3/Emu/FS/vfsDevice.cpp @@ -45,14 +45,20 @@ u32 vfsDevice::CmpLocalPath(const wxString& local_path) if(local_path.Len() < m_local_path.Len()) return 0; - const u32 lim = min(m_local_path.Len(), local_path.Len()); + wxFileName path0(m_local_path); + path0.Normalize(); + + wxArrayString arr0 = wxSplit(path0.GetFullPath(), '\\'); + wxArrayString arr1 = wxSplit(local_path, '\\'); + + const u32 lim = min(arr0.GetCount(), arr1.GetCount()); u32 ret = 0; - for(u32 i=0; i +#include "vfsFileBase.h" +#include "vfsDirBase.h" -enum vfsOpenMode -{ - vfsRead = 0x1, - vfsWrite = 0x2, - vfsExcl = 0x4, - vfsAppend = 0x8, - vfsReadWrite = vfsRead | vfsWrite, - vfsWriteExcl = vfsWrite | vfsExcl, - vfsWriteAppend = vfsWrite | vfsAppend, -}; - -class vfsDevice : public vfsStream +class vfsDevice { wxString m_ps3_path; wxString m_local_path; @@ -23,9 +12,9 @@ public: vfsDevice(const wxString& ps3_path, const wxString& local_path); vfsDevice() {} - virtual vfsDevice* GetNew()=0; - virtual bool Open(const wxString& path, vfsOpenMode mode = vfsRead)=0; - virtual bool Create(const wxString& path)=0; + virtual vfsFileBase* GetNewFileStream()=0; + virtual vfsDirBase* GetNewDirStream()=0; + wxString GetLocalPath() const; wxString GetPs3Path() const; diff --git a/rpcs3/Emu/FS/vfsDeviceLocalFile.cpp b/rpcs3/Emu/FS/vfsDeviceLocalFile.cpp new file mode 100644 index 0000000000..3210a268e0 --- /dev/null +++ b/rpcs3/Emu/FS/vfsDeviceLocalFile.cpp @@ -0,0 +1,14 @@ +#include "stdafx.h" +#include "vfsDeviceLocalFile.h" +#include "vfsLocalFile.h" +#include "vfsLocalDir.h" + +vfsFileBase* vfsDeviceLocalFile::GetNewFileStream() +{ + return new vfsLocalFile(this); +} + +vfsDirBase* vfsDeviceLocalFile::GetNewDirStream() +{ + return new vfsLocalDir(this); +} diff --git a/rpcs3/Emu/FS/vfsDeviceLocalFile.h b/rpcs3/Emu/FS/vfsDeviceLocalFile.h new file mode 100644 index 0000000000..fc73fa3886 --- /dev/null +++ b/rpcs3/Emu/FS/vfsDeviceLocalFile.h @@ -0,0 +1,9 @@ +#pragma once +#include "vfsDevice.h" + +class vfsDeviceLocalFile : public vfsDevice +{ +public: + virtual vfsFileBase* GetNewFileStream() override; + virtual vfsDirBase* GetNewDirStream() override; +}; \ No newline at end of file diff --git a/rpcs3/Emu/FS/vfsDir.cpp b/rpcs3/Emu/FS/vfsDir.cpp new file mode 100644 index 0000000000..7ce119601d --- /dev/null +++ b/rpcs3/Emu/FS/vfsDir.cpp @@ -0,0 +1,70 @@ +#include "stdafx.h" +#include "vfsDir.h" + +vfsDir::vfsDir() + : vfsDirBase(nullptr) + , m_stream(nullptr) +{ +} + +vfsDir::vfsDir(const wxString path) + : vfsDirBase(nullptr) + , m_stream(nullptr) +{ + Open(path); +} + +bool vfsDir::Open(const wxString& path) +{ + Close(); + + m_stream.reset(Emu.GetVFS().OpenDir(path)); + + return m_stream && m_stream->IsOpened(); +} + +bool vfsDir::Create(const wxString& path) +{ + return m_stream->Create(path); +} + +bool vfsDir::IsExists(const wxString& path) const +{ + return m_stream->IsExists(path); +} + +const Array& vfsDir::GetEntries() const +{ + return m_stream->GetEntries(); +} + +bool vfsDir::Rename(const wxString& from, const wxString& to) +{ + return m_stream->Rename(from, to); +} + +bool vfsDir::Remove(const wxString& path) +{ + return m_stream->Remove(path); +} + +const DirEntryInfo* vfsDir::Read() +{ + return m_stream->Read(); +} + +void vfsDir::Close() +{ + m_stream.reset(); + return vfsDirBase::Close(); +} + +wxString vfsDir::GetPath() const +{ + return m_stream->GetPath(); +} + +bool vfsDir::IsOpened() const +{ + return m_stream && m_stream->IsOpened() && vfsDirBase::IsOpened(); +} diff --git a/rpcs3/Emu/FS/vfsDir.h b/rpcs3/Emu/FS/vfsDir.h new file mode 100644 index 0000000000..531403c854 --- /dev/null +++ b/rpcs3/Emu/FS/vfsDir.h @@ -0,0 +1,25 @@ +#pragma once +#include "vfsDirBase.h" + +class vfsDir : public vfsDirBase +{ +private: + std::shared_ptr m_stream; + +public: + vfsDir(); + vfsDir(const wxString path); + + virtual bool Open(const wxString& path) override; + virtual bool IsOpened() const override; + virtual bool IsExists(const wxString& path) const override; + virtual const Array& GetEntries() const override; + virtual void Close() override; + virtual wxString GetPath() const override; + + virtual bool Create(const wxString& path) override; + //virtual bool Create(const DirEntryInfo& info) override; + virtual bool Rename(const wxString& from, const wxString& to) override; + virtual bool Remove(const wxString& path) override; + virtual const DirEntryInfo* Read() override; +}; \ No newline at end of file diff --git a/rpcs3/Emu/FS/vfsDirBase.cpp b/rpcs3/Emu/FS/vfsDirBase.cpp index 8e5c945e36..c7d1f65fb2 100644 --- a/rpcs3/Emu/FS/vfsDirBase.cpp +++ b/rpcs3/Emu/FS/vfsDirBase.cpp @@ -1,9 +1,10 @@ #include "stdafx.h" #include "vfsDirBase.h" -vfsDirBase::vfsDirBase(const wxString& path) +vfsDirBase::vfsDirBase(vfsDevice* device) + : m_pos(0) + , m_device(device) { - Open(path); } vfsDirBase::~vfsDirBase() @@ -18,6 +19,7 @@ bool vfsDirBase::Open(const wxString& path) if(!IsExists(path)) return false; + m_pos = 0; m_cwd += '/' + path; return true; } @@ -46,4 +48,12 @@ void vfsDirBase::Close() wxString vfsDirBase::GetPath() const { return m_cwd; +} + +const DirEntryInfo* vfsDirBase::Read() +{ + if (m_pos >= m_entries.GetCount()) + return nullptr; + + return &m_entries[m_pos++]; } \ No newline at end of file diff --git a/rpcs3/Emu/FS/vfsDirBase.h b/rpcs3/Emu/FS/vfsDirBase.h index a1d5301efe..05a9fb0a87 100644 --- a/rpcs3/Emu/FS/vfsDirBase.h +++ b/rpcs3/Emu/FS/vfsDirBase.h @@ -32,9 +32,11 @@ class vfsDirBase protected: wxString m_cwd; Array m_entries; + uint m_pos; + vfsDevice* m_device; public: - vfsDirBase(const wxString& path); + vfsDirBase(vfsDevice* device); virtual ~vfsDirBase(); virtual bool Open(const wxString& path); @@ -48,4 +50,5 @@ public: //virtual bool Create(const DirEntryInfo& info)=0; virtual bool Rename(const wxString& from, const wxString& to)=0; virtual bool Remove(const wxString& path)=0; + virtual const DirEntryInfo* Read(); }; \ No newline at end of file diff --git a/rpcs3/Emu/FS/vfsFile.cpp b/rpcs3/Emu/FS/vfsFile.cpp index 2e0ebdcd75..924b4a80ee 100644 --- a/rpcs3/Emu/FS/vfsFile.cpp +++ b/rpcs3/Emu/FS/vfsFile.cpp @@ -2,55 +2,51 @@ #include "vfsFile.h" vfsFile::vfsFile() - : vfsFileBase() + : vfsFileBase(nullptr) , m_stream(nullptr) { } vfsFile::vfsFile(const wxString path, vfsOpenMode mode) - : vfsFileBase() + : vfsFileBase(nullptr) , m_stream(nullptr) { Open(path, mode); } -vfsFile::~vfsFile() -{ - Close(); -} - -vfsDevice* vfsFile::GetNew() -{ - return new vfsFile(); -} - bool vfsFile::Open(const wxString& path, vfsOpenMode mode) { Close(); - m_stream = Emu.GetVFS().Open(path, mode); + m_stream.reset(Emu.GetVFS().OpenFile(path, mode)); return m_stream && m_stream->IsOpened(); } bool vfsFile::Create(const wxString& path) { - if(wxFileExists(path)) return false; + return m_stream->Create(path); +} - wxFile f; - return f.Create(path); +bool vfsFile::Exists(const wxString& path) +{ + return m_stream->Exists(path); +} + +bool vfsFile::Rename(const wxString& from, const wxString& to) +{ + return m_stream->Rename(from, to); +} + +bool vfsFile::Remove(const wxString& path) +{ + return m_stream->Remove(path); } bool vfsFile::Close() { - if(m_stream) - { - delete m_stream; - m_stream = nullptr; - return vfsFileBase::Close(); - } - - return false; + m_stream.reset(); + return vfsFileBase::Close(); } u64 vfsFile::GetSize() diff --git a/rpcs3/Emu/FS/vfsFile.h b/rpcs3/Emu/FS/vfsFile.h index d9777b7203..3b2fd102fd 100644 --- a/rpcs3/Emu/FS/vfsFile.h +++ b/rpcs3/Emu/FS/vfsFile.h @@ -4,17 +4,17 @@ class vfsFile : public vfsFileBase { private: - vfsStream* m_stream; + std::shared_ptr m_stream; public: vfsFile(); vfsFile(const wxString path, vfsOpenMode mode = vfsRead); - ~vfsFile(); - - virtual vfsDevice* GetNew() override; virtual bool Open(const wxString& path, vfsOpenMode mode = vfsRead) override; virtual bool Create(const wxString& path) override; + virtual bool Exists(const wxString& path) override; + virtual bool Rename(const wxString& from, const wxString& to) override; + virtual bool Remove(const wxString& path) override; virtual bool Close() override; virtual u64 GetSize() override; diff --git a/rpcs3/Emu/FS/vfsFileBase.cpp b/rpcs3/Emu/FS/vfsFileBase.cpp index ed4afc0b1b..9209bb4619 100644 --- a/rpcs3/Emu/FS/vfsFileBase.cpp +++ b/rpcs3/Emu/FS/vfsFileBase.cpp @@ -1,7 +1,9 @@ #include "stdafx.h" #include "vfsFileBase.h" -vfsFileBase::vfsFileBase() : vfsDevice() +vfsFileBase::vfsFileBase(vfsDevice* device) + : vfsStream() + , m_device(device) { } diff --git a/rpcs3/Emu/FS/vfsFileBase.h b/rpcs3/Emu/FS/vfsFileBase.h index b7f2f1a2c5..78c310dada 100644 --- a/rpcs3/Emu/FS/vfsFileBase.h +++ b/rpcs3/Emu/FS/vfsFileBase.h @@ -1,24 +1,37 @@ #pragma once -#include "vfsDevice.h" +#include "vfsStream.h" -struct vfsFileBase : public vfsDevice +enum vfsOpenMode +{ + vfsRead = 0x1, + vfsWrite = 0x2, + vfsExcl = 0x4, + vfsAppend = 0x8, + vfsReadWrite = vfsRead | vfsWrite, + vfsWriteExcl = vfsWrite | vfsExcl, + vfsWriteAppend = vfsWrite | vfsAppend, +}; + +class vfsDevice; + +struct vfsFileBase : public vfsStream { protected: wxString m_path; vfsOpenMode m_mode; + vfsDevice* m_device; public: - vfsFileBase(); + vfsFileBase(vfsDevice* device); virtual ~vfsFileBase(); - virtual bool Open(const wxString& path, vfsOpenMode mode) override; + virtual bool Open(const wxString& path, vfsOpenMode mode); virtual bool Close() override; - /* - virtual bool Create(const wxString& path)=0; - virtual bool Exists(const wxString& path)=0; - virtual bool Rename(const wxString& from, const wxString& to)=0; - virtual bool Remove(const wxString& path)=0; - */ + virtual bool Create(const wxString& path) { return false; } + virtual bool Exists(const wxString& path) { return false; } + virtual bool Rename(const wxString& from, const wxString& to) { return false; } + virtual bool Remove(const wxString& path) { return false; } + wxString GetPath() const; vfsOpenMode GetOpenMode() const; }; diff --git a/rpcs3/Emu/FS/vfsLocalDir.cpp b/rpcs3/Emu/FS/vfsLocalDir.cpp index 291b34f9d2..144e5d46a4 100644 --- a/rpcs3/Emu/FS/vfsLocalDir.cpp +++ b/rpcs3/Emu/FS/vfsLocalDir.cpp @@ -2,9 +2,7 @@ #include "vfsLocalDir.h" #include -vfsLocalDir::vfsLocalDir(const wxString& path) - : vfsDirBase(path) - , m_pos(0) +vfsLocalDir::vfsLocalDir(vfsDevice* device) : vfsDirBase(device) { } @@ -39,14 +37,6 @@ bool vfsLocalDir::Open(const wxString& path) return true; } -const DirEntryInfo* vfsLocalDir::Read() -{ - if (m_pos >= m_entries.GetCount()) - return 0; - - return &m_entries[m_pos++]; -} - bool vfsLocalDir::Create(const wxString& path) { return wxFileName::Mkdir(path, 0777, wxPATH_MKDIR_FULL); diff --git a/rpcs3/Emu/FS/vfsLocalDir.h b/rpcs3/Emu/FS/vfsLocalDir.h index 860064aa13..56aa176756 100644 --- a/rpcs3/Emu/FS/vfsLocalDir.h +++ b/rpcs3/Emu/FS/vfsLocalDir.h @@ -7,11 +7,10 @@ private: u32 m_pos; public: - vfsLocalDir(const wxString& path = wxEmptyString); + vfsLocalDir(vfsDevice* device); virtual ~vfsLocalDir(); virtual bool Open(const wxString& path) override; - const DirEntryInfo* Read(); virtual bool Create(const wxString& path) override; virtual bool Rename(const wxString& from, const wxString& to) override; diff --git a/rpcs3/Emu/FS/vfsLocalFile.cpp b/rpcs3/Emu/FS/vfsLocalFile.cpp index 49ee33c57f..3746f94f41 100644 --- a/rpcs3/Emu/FS/vfsLocalFile.cpp +++ b/rpcs3/Emu/FS/vfsLocalFile.cpp @@ -27,28 +27,27 @@ static const wxSeekMode vfs2wx_seek(vfsSeekMode mode) return wxFromStart; } -vfsLocalFile::vfsLocalFile() : vfsFileBase() +vfsLocalFile::vfsLocalFile(vfsDevice* device) : vfsFileBase(device) { } -vfsLocalFile::vfsLocalFile(const wxString path, vfsOpenMode mode) : vfsFileBase() -{ - Open(path, mode); -} - -vfsDevice* vfsLocalFile::GetNew() -{ - return new vfsLocalFile(); -} - bool vfsLocalFile::Open(const wxString& path, vfsOpenMode mode) { Close(); - if(!m_file.Access(vfsDevice::GetWinPath(GetLocalPath(), path), vfs2wx_mode(mode))) return false; + if(m_device) + { + if(!m_file.Access(vfsDevice::GetWinPath(m_device->GetLocalPath(), path), vfs2wx_mode(mode))) return false; - return m_file.Open(vfsDevice::GetWinPath(GetLocalPath(), path), vfs2wx_mode(mode)) && - vfsFileBase::Open(vfsDevice::GetPs3Path(GetPs3Path(), path), mode); + return m_file.Open(vfsDevice::GetWinPath(m_device->GetLocalPath(), path), vfs2wx_mode(mode)) && + vfsFileBase::Open(vfsDevice::GetPs3Path(m_device->GetPs3Path(), path), mode); + } + else + { + if(!m_file.Access(path, vfs2wx_mode(mode))) return false; + + return m_file.Open(path, vfs2wx_mode(mode)) && vfsFileBase::Open(path, mode); + } } bool vfsLocalFile::Create(const wxString& path) diff --git a/rpcs3/Emu/FS/vfsLocalFile.h b/rpcs3/Emu/FS/vfsLocalFile.h index 963e622ea1..c380d53191 100644 --- a/rpcs3/Emu/FS/vfsLocalFile.h +++ b/rpcs3/Emu/FS/vfsLocalFile.h @@ -7,9 +7,7 @@ private: wxFile m_file; public: - vfsLocalFile(); - vfsLocalFile(const wxString path, vfsOpenMode mode = vfsRead); - vfsDevice* GetNew(); + vfsLocalFile(vfsDevice* device); virtual bool Open(const wxString& path, vfsOpenMode mode = vfsRead) override; virtual bool Create(const wxString& path) override; diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 7c23596207..da9c068027 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -22,6 +22,57 @@ enum CELL_GCM_DISPLAY_FREQUENCY_DISABLE = 3, }; +// GCM Texture +enum +{ + // Format + CELL_GCM_TEXTURE_B8 = 0x81, + CELL_GCM_TEXTURE_A1R5G5B5 = 0x82, + CELL_GCM_TEXTURE_A4R4G4B4 = 0x83, + CELL_GCM_TEXTURE_R5G6B5 = 0x84, + CELL_GCM_TEXTURE_A8R8G8B8 = 0x85, + CELL_GCM_TEXTURE_COMPRESSED_DXT1 = 0x86, + CELL_GCM_TEXTURE_COMPRESSED_DXT23 = 0x87, + CELL_GCM_TEXTURE_COMPRESSED_DXT45 = 0x88, + CELL_GCM_TEXTURE_G8B8 = 0x8B, + CELL_GCM_TEXTURE_R6G5B5 = 0x8F, + CELL_GCM_TEXTURE_DEPTH24_D8 = 0x90, + CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT = 0x91, + CELL_GCM_TEXTURE_DEPTH16 = 0x92, + CELL_GCM_TEXTURE_DEPTH16_FLOAT = 0x93, + CELL_GCM_TEXTURE_X16 = 0x94, + CELL_GCM_TEXTURE_Y16_X16 = 0x95, + CELL_GCM_TEXTURE_R5G5B5A1 = 0x97, + CELL_GCM_TEXTURE_COMPRESSED_HILO8 = 0x98, + CELL_GCM_TEXTURE_COMPRESSED_HILO_S8 = 0x99, + CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT = 0x9A, + CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT = 0x9B, + CELL_GCM_TEXTURE_X32_FLOAT = 0x9C, + CELL_GCM_TEXTURE_D1R5G5B5 = 0x9D, + CELL_GCM_TEXTURE_D8R8G8B8 = 0x9E, + CELL_GCM_TEXTURE_Y16_X16_FLOAT = 0x9F, + CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8 = 0xAD, + CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8 = 0xAE, + + // Format flags + CELL_GCM_TEXTURE_SZ = 0x00, + CELL_GCM_TEXTURE_LN = 0x20, + CELL_GCM_TEXTURE_NR = 0x00, + CELL_GCM_TEXTURE_UN = 0x40, +}; + +// GCM Surface +enum +{ + // Target + CELL_GCM_SURFACE_TARGET_NONE = 0, + CELL_GCM_SURFACE_TARGET_0 = 1, + CELL_GCM_SURFACE_TARGET_1 = 2, + CELL_GCM_SURFACE_TARGET_MRT1 = 0x13, + CELL_GCM_SURFACE_TARGET_MRT2 = 0x17, + CELL_GCM_SURFACE_TARGET_MRT3 = 0x1f, +}; + struct CellGcmControl { u32 put; diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 068a0f6a2e..9bfaccc8dc 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -556,29 +556,29 @@ void GLGSRender::WriteBuffers() switch(m_surface_colour_target) { - case 0x0: + case CELL_GCM_SURFACE_TARGET_NONE: return; - case 0x1: + case CELL_GCM_SURFACE_TARGET_0: WriteColourBufferA(); break; - case 0x2: + case CELL_GCM_SURFACE_TARGET_1: WriteColourBufferB(); break; - case 0x13: + case CELL_GCM_SURFACE_TARGET_MRT1: WriteColourBufferA(); WriteColourBufferB(); break; - case 0x17: + case CELL_GCM_SURFACE_TARGET_MRT2: WriteColourBufferA(); WriteColourBufferB(); WriteColourBufferC(); break; - case 0x1f: + case CELL_GCM_SURFACE_TARGET_MRT3: WriteColourBufferA(); WriteColourBufferB(); WriteColourBufferC(); @@ -726,26 +726,26 @@ void GLGSRender::ExecCMD() switch(m_surface_colour_target) { - case 0x0: + case CELL_GCM_SURFACE_TARGET_NONE: break; - case 0x1: + case CELL_GCM_SURFACE_TARGET_0: glDrawBuffer(draw_buffers[0]); break; - case 0x2: + case CELL_GCM_SURFACE_TARGET_1: glDrawBuffer(draw_buffers[1]); break; - case 0x13: + case CELL_GCM_SURFACE_TARGET_MRT1: glDrawBuffers(2, draw_buffers); break; - case 0x17: + case CELL_GCM_SURFACE_TARGET_MRT2: glDrawBuffers(3, draw_buffers); break; - case 0x1f: + case CELL_GCM_SURFACE_TARGET_MRT3: glDrawBuffers(4, draw_buffers); break; @@ -1147,12 +1147,10 @@ void GLGSRender::Flip() } } -uint32_t LinearToSwizzleAddress( - uint32_t x, uint32_t y, uint32_t z, - uint32_t log2_width, uint32_t log2_height, uint32_t log2_depth) +u32 LinearToSwizzleAddress(u32 x, u32 y, u32 z, u32 log2_width, u32 log2_height, u32 log2_depth) { - uint32_t offset = 0; - uint32_t shift_count = 0; + u32 offset = 0; + u32 shift_count = 0; while(log2_width | log2_height | log2_depth){ if(log2_width){ offset |= (x & 0x01) << shift_count; diff --git a/rpcs3/Emu/GS/GL/GLGSRender.h b/rpcs3/Emu/GS/GL/GLGSRender.h index d685271871..b0ea63df71 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.h +++ b/rpcs3/Emu/GS/GL/GLGSRender.h @@ -13,9 +13,7 @@ extern GLenum g_last_gl_error; void printGlError(GLenum err, const char* situation); -uint32_t LinearToSwizzleAddress( - uint32_t x, uint32_t y, uint32_t z, - uint32_t log2_width, uint32_t log2_height, uint32_t log2_depth); +u32 LinearToSwizzleAddress(u32 x, u32 y, u32 z, u32 log2_width, u32 log2_height, u32 log2_depth); #if RSX_DEBUG #define checkForGlError(sit) if((g_last_gl_error = glGetError()) != GL_NO_ERROR) printGlError(g_last_gl_error, sit) @@ -79,7 +77,7 @@ public: checkForGlError("GLTexture::Init() -> glBindTexture"); int format = tex.GetFormat() & ~(0x20 | 0x40); - bool is_swizzled = (tex.GetFormat() & 0x20) == 0; + bool is_swizzled = !(tex.GetFormat() & CELL_GCM_TEXTURE_LN); glPixelStorei(GL_PACK_ALIGNMENT, tex.m_pitch); char* pixels = (char*)Memory.GetMemFromAddr(GetAddress(tex.GetOffset(), tex.GetLocation())); @@ -87,7 +85,7 @@ public: switch(format) { - case 0x81: + case CELL_GCM_TEXTURE_B8: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BLUE, GL_UNSIGNED_BYTE, pixels); checkForGlError("GLTexture::Init() -> glTexImage2D"); @@ -99,15 +97,15 @@ public: checkForGlError("GLTexture::Init() -> glTexParameteri"); break; - case 0x85: + case CELL_GCM_TEXTURE_A8R8G8B8: if(is_swizzled) { - uint32_t *src, *dst; - uint32_t log2width, log2height; + u32 *src, *dst; + u32 log2width, log2height; unswizzledPixels = (char*)malloc(tex.GetWidth() * tex.GetHeight() * 4); - src = (uint32_t*)pixels; - dst = (uint32_t*)unswizzledPixels; + src = (u32*)pixels; + dst = (u32*)unswizzledPixels; log2width = log(tex.GetWidth())/log(2); log2height = log(tex.GetHeight())/log(2); @@ -125,7 +123,7 @@ public: checkForGlError("GLTexture::Init() -> glTexImage2D"); break; - case 0x86: + case CELL_GCM_TEXTURE_COMPRESSED_DXT1: { u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 8; @@ -134,7 +132,7 @@ public: } break; - case 0x87: + case CELL_GCM_TEXTURE_COMPRESSED_DXT23: { u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 16; @@ -143,7 +141,7 @@ public: } break; - case 0x88: + case CELL_GCM_TEXTURE_COMPRESSED_DXT45: { u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 16; @@ -152,7 +150,7 @@ public: } break; - case 0x94: + case CELL_GCM_TEXTURE_X16: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RED, GL_SHORT, pixels); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_ONE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_ONE); @@ -161,12 +159,12 @@ public: checkForGlError("GLTexture::Init() -> glTexImage2D"); break; - case 0x9a: + case CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_HALF_FLOAT, pixels); checkForGlError("GLTexture::Init() -> glTexImage2D"); break; - case 0x9e: + case CELL_GCM_TEXTURE_D8R8G8B8: { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, pixels); checkForGlError("GLTexture::Init() -> glTexImage2D"); @@ -255,7 +253,7 @@ public: void Save(RSXTexture& tex, const wxString& name) { - if(!m_id || !tex.GetOffset() || !tex.GetWidth() || !tex.GetHeight()) return; + if(!m_id || !tex.GetOffset() || !tex.GetWidth() || !tex.GetHeight()) return; u32* alldata = new u32[tex.GetWidth() * tex.GetHeight()]; @@ -263,11 +261,11 @@ public: switch(tex.GetFormat() & ~(0x20 | 0x40)) { - case 0x81: + case CELL_GCM_TEXTURE_B8: glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, alldata); break; - case 0x85: + case CELL_GCM_TEXTURE_A8R8G8B8: glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, alldata); break; diff --git a/rpcs3/Emu/GS/RSXTexture.cpp b/rpcs3/Emu/GS/RSXTexture.cpp index 8db5499a02..9ac888c8e9 100644 --- a/rpcs3/Emu/GS/RSXTexture.cpp +++ b/rpcs3/Emu/GS/RSXTexture.cpp @@ -42,37 +42,37 @@ void RSXTexture::Init() u32 RSXTexture::GetOffset() const { - return methodRegisters[NV4097_SET_TEXTURE_OFFSET + (m_index*32)]; + return methodRegisters[NV4097_SET_TEXTURE_OFFSET + (m_index*32)]; } u8 RSXTexture::GetLocation() const { - return (methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] & 0x3) - 1; + return (methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] & 0x3) - 1; } bool RSXTexture::isCubemap() const { - return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] >> 2) & 0x1); + return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] >> 2) & 0x1); } u8 RSXTexture::GetBorderType() const { - return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] >> 3) & 0x1); + return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] >> 3) & 0x1); } u8 RSXTexture::GetDimension() const { - return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] >> 4) & 0xf); + return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] >> 4) & 0xf); } u8 RSXTexture::GetFormat() const { - return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] >> 8) & 0xff); + return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] >> 8) & 0xff); } u16 RSXTexture::Getmipmap() const { - return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] >> 16) & 0xffff); + return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*32)] >> 16) & 0xffff); } u8 RSXTexture::GetWrapS() const @@ -197,6 +197,6 @@ u16 RSXTexture::GetHeight() const void RSXTexture::SetControl3(u16 depth, u32 pitch) { - m_depth = depth; - m_pitch = pitch; + m_depth = depth; + m_pitch = pitch; } \ No newline at end of file diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index 9556370bf9..d88e4d3fb8 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -1378,7 +1378,7 @@ void RSXThread::End() void RSXThread::Task() { - u8 inc; + u8 inc; ConLog.Write("RSX thread entry"); OnInitThread(); @@ -1387,7 +1387,7 @@ void RSXThread::Task() { wxCriticalSectionLocker lock(m_cs_main); - inc=1; + inc=1; u32 put, get; se_t::func(put, std::atomic_load((volatile std::atomic*)((u8*)m_ctrl + offsetof(CellGcmControl, put)))); @@ -1439,7 +1439,7 @@ void RSXThread::Task() if(cmd & CELL_GCM_METHOD_FLAG_NON_INCREMENT) { //ConLog.Warning("non increment cmd! 0x%x", cmd); - inc=0; + inc=0; } if(cmd == 0) @@ -1449,10 +1449,10 @@ void RSXThread::Task() continue; } - for(int i=0; i(block_size - m_position, size); @@ -310,7 +310,7 @@ public: if(!size) return 0; - vfsDeviceLocker lock(m_hdd); + //vfsDeviceLocker lock(m_hdd); const u32 block_size = m_hdd_info.block_size - sizeof(vfsHDD_Block); @@ -409,6 +409,17 @@ public: } }; +class vfsDeviceHDD : public vfsDevice +{ + std::string m_hdd_path; + +public: + vfsDeviceHDD(const std::string& hdd_path); + + virtual vfsFileBase* GetNewFileStream() override; + virtual vfsDirBase* GetNewDirStream() override; +}; + class vfsHDD : public vfsFileBase { vfsHDD_Hdr m_hdd_info; @@ -419,11 +430,13 @@ class vfsHDD : public vfsFileBase const wxString& m_hdd_path; public: - vfsHDD(const wxString& hdd_path) - : m_hdd_file(hdd_path, vfsReadWrite) + vfsHDD(vfsDevice* device, const wxString& hdd_path) + : m_hdd_file(device) , m_file(m_hdd_file, m_hdd_info) , m_hdd_path(hdd_path) + , vfsFileBase(device) { + m_hdd_file.Open(hdd_path, vfsReadWrite); m_hdd_file.Read(&m_hdd_info, sizeof(vfsHDD_Hdr)); m_cur_dir_block = m_hdd_info.next_block; if(!m_hdd_info.block_size) @@ -435,11 +448,6 @@ public: m_hdd_file.Read(&m_cur_dir, sizeof(vfsHDD_Entry)); } - virtual vfsDevice* GetNew() - { - return new vfsHDD(m_hdd_path); - } - __forceinline u32 GetMaxNameLen() const { return m_hdd_info.block_size - sizeof(vfsHDD_Entry); @@ -861,4 +869,4 @@ public: { return m_file.GetSize(); } -}; +}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/FuncList.cpp b/rpcs3/Emu/SysCalls/FuncList.cpp index 4828964090..8ab729dd9c 100644 --- a/rpcs3/Emu/SysCalls/FuncList.cpp +++ b/rpcs3/Emu/SysCalls/FuncList.cpp @@ -1592,6 +1592,7 @@ s64 SysCalls::DoFunc(const u32 id) case 0x1d99c3ee: FUNC_LOG_ERROR("TODO: cellOskDialogGetInputText"); case 0x1dfbfdd6: FUNC_LOG_ERROR("TODO: cellSaveDataListLoad2"); case 0x1dfcce99: FUNC_LOG_ERROR("TODO: cellSysutilGameDataExit"); + case 0x1e7bff94: FUNC_LOG_ERROR("TODO: cellSysCacheMount"); case 0x1e930eef: FUNC_LOG_ERROR("TODO: cellVideoOutGetDeviceInfo"); case 0x1f6629e4: FUNC_LOG_ERROR("TODO: cellWebBrowserConfigSetErrorHook2"); case 0x20543730: FUNC_LOG_ERROR("TODO: cellMsgDialogClose"); @@ -1646,6 +1647,7 @@ s64 SysCalls::DoFunc(const u32 id) case 0x6dfff31d: FUNC_LOG_ERROR("TODO: cellWebBrowserSetSystemCallbackUsrdata"); case 0x6e7264ed: FUNC_LOG_ERROR("TODO: cellSaveDataUserFixedLoad"); case 0x71acb8d3: FUNC_LOG_ERROR("TODO: cellSysutilAvcSetVideoMuting"); + case 0x744c1544: FUNC_LOG_ERROR("TODO: cellSysCacheClear"); case 0x749c9b5f: FUNC_LOG_ERROR("TODO: cellWebBrowserInitialize"); case 0x75bbb672: FUNC_LOG_ERROR("TODO: cellVideoOutGetNumberOfDevice"); case 0x7603d3db: FUNC_LOG_ERROR("TODO: cellMsgDialogOpen2"); @@ -2456,6 +2458,7 @@ s64 SysCalls::DoFunc(const u32 id) case 0x0e2939e5: FUNC_LOG_ERROR("TODO: cellFsFtruncate"); case 0x103b8632: FUNC_LOG_ERROR("TODO: cellFsAllocateFileAreaWithInitialData"); case 0x190912f6: FUNC_LOG_ERROR("TODO: cellFsStReadGetCurrentAddr"); + case 0x1a108ab7: FUNC_LOG_ERROR("TODO: cellFsGetBlockSize"); case 0x1ea02e2f: FUNC_LOG_ERROR("TODO: cellFsArcadeHddSerialNumber"); case 0x2664c8ae: FUNC_LOG_ERROR("TODO: cellFsStReadInit"); case 0x27800c6b: FUNC_LOG_ERROR("TODO: cellFsStRead"); @@ -3759,6 +3762,7 @@ s64 SysCalls::DoFunc(const u32 id) case 0x5fdfb2fe: FUNC_LOG_ERROR("TODO: _sys_spu_printf_detach_group"); case 0x608212fc: FUNC_LOG_ERROR("TODO: sys_mempool_free_block"); case 0x620e35a7: FUNC_LOG_ERROR("TODO: sys_game_get_system_sw_version"); + case 0x67f9fedb: FUNC_LOG_ERROR("TODO: sys_game_process_exitspawn2"); case 0x68b9b011: FUNC_LOG_ERROR("TODO: _sys_memset"); case 0x6bf66ea7: FUNC_LOG_ERROR("TODO: _sys_memcpy"); case 0x6e05231d: FUNC_LOG_ERROR("TODO: sys_game_watchdog_stop"); @@ -3834,6 +3838,7 @@ s64 SysCalls::DoFunc(const u32 id) case 0xf7f7fb20: FUNC_LOG_ERROR("TODO: _sys_free"); case 0xfa7f693d: FUNC_LOG_ERROR("TODO: _sys_vprintf"); case 0xfb5db080: FUNC_LOG_ERROR("TODO: _sys_memcmp"); + case 0xfc52a7a9: FUNC_LOG_ERROR("TODO: sys_game_process_exitspawn"); } ConLog.Error("Unknown func id: 0x%08x", id); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 79aab03149..ab542ecf20 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -941,7 +941,7 @@ int cellSysCacheClear(void) Emu.GetVFS().GetDevice(wxString("/dev_hdd1/cache/"), localPath); if (wxDirExists(localPath)){ WxDirDeleteTraverser deleter; - wxString f = wxFindFirstFile(localPath+"\*",wxDIR); + wxString f = wxFindFirstFile(localPath+"\\*",wxDIR); while (!f.empty()) { wxDir dir(f); @@ -961,7 +961,7 @@ int cellSysCacheMount(mem_ptr_t param) char id[CELL_SYSCACHE_ID_SIZE]; strncpy(id, param->cacheId, CELL_SYSCACHE_ID_SIZE); strncpy(param->getCachePath, ("/dev_hdd1/cache/" + std::string(id) + "/").c_str(), CELL_SYSCACHE_PATH_MAX); - Emu.GetVFS().Create(wxString(param->getCachePath)); + Emu.GetVFS().CreateFile(wxString(param->getCachePath)); return CELL_SYSCACHE_RET_OK_RELAYED; } diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp new file mode 100644 index 0000000000..7d019f813b --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -0,0 +1,12 @@ +#include "stdafx.h" +#include "Emu/SysCalls/SysCalls.h" +#include "Emu/SysCalls/SC_FUNC.h" + +#include "sceNp.h" + +void sceNp_init(); +Module sceNp(0x0016, sceNpTrophy_init); + +void sceNpTrophy_init() +{ +} diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.h b/rpcs3/Emu/SysCalls/Modules/sceNp.h new file mode 100644 index 0000000000..b140316963 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.h @@ -0,0 +1,26 @@ +#pragma once + +// Return Codes +enum +{ +}; + +enum +{ + SCE_NP_COMMUNICATION_SIGNATURE_SIZE = 160, + SCE_NET_NP_COMMUNICATION_PASSPHRASE_SIZE = 128, +}; + +// Structs +struct SceNpCommunicationId +{ + char data[9]; + char term; + u8 num; + char dummy; +}; + +struct SceNpCommunicationSignature +{ + uint8_t data[SCE_NP_COMMUNICATION_SIGNATURE_SIZE]; +}; diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp new file mode 100644 index 0000000000..a5ada78529 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -0,0 +1,281 @@ +#include "stdafx.h" +#include "Emu/SysCalls/SysCalls.h" +#include "Emu/SysCalls/SC_FUNC.h" + +#include "sceNp.h" +#include "Loader/TRP.h" + +void sceNpTrophy_unload(); +void sceNpTrophy_init(); +Module sceNpTrophy(0xf035, sceNpTrophy_init, nullptr, sceNpTrophy_unload); + +enum +{ + SCE_NP_TROPHY_ERROR_ALREADY_INITIALIZED = 0x80022901, + SCE_NP_TROPHY_ERROR_NOT_INITIALIZED = 0x80022902, + SCE_NP_TROPHY_ERROR_NOT_SUPPORTED = 0x80022903, + SCE_NP_TROPHY_ERROR_CONTEXT_NOT_REGISTERED = 0x80022904, + SCE_NP_TROPHY_ERROR_OUT_OF_MEMORY = 0x80022905, + SCE_NP_TROPHY_ERROR_INVALID_ARGUMENT = 0x80022906, + SCE_NP_TROPHY_ERROR_EXCEEDS_MAX = 0x80022907, + SCE_NP_TROPHY_ERROR_INSUFFICIENT = 0x80022909, + SCE_NP_TROPHY_ERROR_UNKNOWN_CONTEXT = 0x8002290a, + SCE_NP_TROPHY_ERROR_INVALID_FORMAT = 0x8002290b, + SCE_NP_TROPHY_ERROR_BAD_RESPONSE = 0x8002290c, + SCE_NP_TROPHY_ERROR_INVALID_GRADE = 0x8002290d, + SCE_NP_TROPHY_ERROR_INVALID_CONTEXT = 0x8002290e, + SCE_NP_TROPHY_ERROR_PROCESSING_ABORTED = 0x8002290f, + SCE_NP_TROPHY_ERROR_ABORT = 0x80022910, + SCE_NP_TROPHY_ERROR_UNKNOWN_HANDLE = 0x80022911, + SCE_NP_TROPHY_ERROR_LOCKED = 0x80022912, + SCE_NP_TROPHY_ERROR_HIDDEN = 0x80022913, + SCE_NP_TROPHY_ERROR_CANNOT_UNLOCK_PLATINUM = 0x80022914, + SCE_NP_TROPHY_ERROR_ALREADY_UNLOCKED = 0x80022915, + SCE_NP_TROPHY_ERROR_INVALID_TYPE = 0x80022916, + SCE_NP_TROPHY_ERROR_INVALID_HANDLE = 0x80022917, + SCE_NP_TROPHY_ERROR_INVALID_NP_COMM_ID = 0x80022918, + SCE_NP_TROPHY_ERROR_UNKNOWN_NP_COMM_ID = 0x80022919, + SCE_NP_TROPHY_ERROR_DISC_IO = 0x8002291a, + SCE_NP_TROPHY_ERROR_CONF_DOES_NOT_EXIST = 0x8002291b, + SCE_NP_TROPHY_ERROR_UNSUPPORTED_FORMAT = 0x8002291c, + SCE_NP_TROPHY_ERROR_ALREADY_INSTALLED = 0x8002291d, + SCE_NP_TROPHY_ERROR_BROKEN_DATA = 0x8002291e, + SCE_NP_TROPHY_ERROR_VERIFICATION_FAILURE = 0x8002291f, + SCE_NP_TROPHY_ERROR_INVALID_TROPHY_ID = 0x80022920, + SCE_NP_TROPHY_ERROR_UNKNOWN_TROPHY_ID = 0x80022921, + SCE_NP_TROPHY_ERROR_UNKNOWN_TITLE = 0x80022922, + SCE_NP_TROPHY_ERROR_UNKNOWN_FILE = 0x80022923, + SCE_NP_TROPHY_ERROR_DISC_NOT_MOUNTED = 0x80022924, + SCE_NP_TROPHY_ERROR_SHUTDOWN = 0x80022925, + SCE_NP_TROPHY_ERROR_TITLE_ICON_NOT_FOUND = 0x80022926, + SCE_NP_TROPHY_ERROR_TROPHY_ICON_NOT_FOUND = 0x80022927, + SCE_NP_TROPHY_ERROR_INSUFFICIENT_DISK_SPACE = 0x80022928, + SCE_NP_TROPHY_ERROR_ILLEGAL_UPDATE = 0x8002292a, + SCE_NP_TROPHY_ERROR_SAVEDATA_USER_DOES_NOT_MATCH = 0x8002292b, + SCE_NP_TROPHY_ERROR_TROPHY_ID_DOES_NOT_EXIST = 0x8002292c, + SCE_NP_TROPHY_ERROR_SERVICE_UNAVAILABLE = 0x8002292d, + SCE_NP_TROPHY_ERROR_UNKNOWN = 0x800229ff, +}; + + +struct sceNpTrophyInternalContext +{ + // TODO + std::string trp_name; + vfsStream* trp_stream; +}; + +struct sceNpTrophyInternal +{ + bool m_bInitialized; + std::vector contexts; + + sceNpTrophyInternal() + : m_bInitialized(false) + { + } +}; + +sceNpTrophyInternal s_npTrophyInstance; + +// Functions +int sceNpTrophyInit(u32 pool_addr, u32 poolSize, u32 containerId, u64 options) +{ + sceNpTrophy.Log("sceNpTrophyInit(pool_addr=0x%x, poolSize=%d, containerId=%d, options=0x%llx)", pool_addr, poolSize, containerId, options); + + if (s_npTrophyInstance.m_bInitialized) + return SCE_NP_TROPHY_ERROR_ALREADY_INITIALIZED; + if (options) + return SCE_NP_TROPHY_ERROR_NOT_SUPPORTED; + + s_npTrophyInstance.m_bInitialized = true; + return CELL_OK; +} + +int sceNpTrophyCreateContext(mem32_t context, mem_ptr_t commID, mem_ptr_t commSign, u64 options) +{ + sceNpTrophy.Warning("sceNpTrophyCreateContext(context_addr=0x%x, commID_addr=0x%x, commSign_addr=0x%x, options=0x%llx)", + context.GetAddr(), commID.GetAddr(), commSign.GetAddr(), options); + + if (!s_npTrophyInstance.m_bInitialized) + return SCE_NP_TROPHY_ERROR_NOT_INITIALIZED; + if (!context.IsGood()) + return SCE_NP_TROPHY_ERROR_INVALID_ARGUMENT; + if (options & (~(u64)1)) + SCE_NP_TROPHY_ERROR_NOT_SUPPORTED; + // TODO: There are other possible errors + + // TODO: Is the TROPHY.TRP file necessarily located in this path? + vfsDir dir("/app_home/TROPDIR/"); + if(!dir.IsOpened()) + return SCE_NP_TROPHY_ERROR_CONF_DOES_NOT_EXIST; + + // TODO: Following method will retrieve the TROPHY.TRP of the first folder that contains such file + for(const DirEntryInfo* entry = dir.Read(); entry; entry = dir.Read()) + { + if (entry->flags & DirEntry_TypeDir) + { + std::shared_ptr f(Emu.GetVFS().OpenFile("/app_home/TROPDIR/" + entry->name + "/TROPHY.TRP", vfsRead)); + + if (f && f->IsOpened()) + { + sceNpTrophyInternalContext ctxt; + ctxt.trp_stream = f.get(); + ctxt.trp_name = entry->name; + s_npTrophyInstance.contexts.push_back(ctxt); + f = nullptr; + return CELL_OK; + } + } + } + + return SCE_NP_TROPHY_ERROR_CONF_DOES_NOT_EXIST; +} + +int sceNpTrophyCreateHandle(mem32_t handle) +{ + sceNpTrophy.Warning("sceNpTrophyCreateHandle(handle_addr=0x%x)", handle.GetAddr()); + + if (!s_npTrophyInstance.m_bInitialized) + return SCE_NP_TROPHY_ERROR_NOT_INITIALIZED; + if (!handle.IsGood()) + return SCE_NP_TROPHY_ERROR_INVALID_ARGUMENT; + // TODO: There are other possible errors + + // TODO: ? + + return CELL_OK; +} + +int sceNpTrophyRegisterContext(u32 context, u32 handle, u32 statusCb_addr, u32 arg_addr, u64 options) +{ + sceNpTrophy.Warning("sceNpTrophyRegisterContext(context=%d, handle=%d, statusCb_addr=0x%x, arg_addr=0x%x, options=0x%llx)", + context, handle, statusCb_addr, arg_addr, options); + + if (!(s_npTrophyInstance.m_bInitialized)) + return SCE_NP_TROPHY_ERROR_NOT_INITIALIZED; + if (!Memory.IsGoodAddr(statusCb_addr)) + return SCE_NP_TROPHY_ERROR_INVALID_ARGUMENT; + if (options & (~(u64)1)) + SCE_NP_TROPHY_ERROR_NOT_SUPPORTED; + // TODO: There are other possible errors + + int ret; + sceNpTrophyInternalContext& ctxt = s_npTrophyInstance.contexts[context]; + TRPLoader trp(*(ctxt.trp_stream)); + + // TODO: Get the path of the current user + if (trp.Install("/dev_hdd0/home/00000001/trophy/" + ctxt.trp_name)) + ret = CELL_OK; + else + ret = SCE_NP_TROPHY_ERROR_ILLEGAL_UPDATE; + + // TODO: Callbacks + + trp.Close(); + return ret; +} + +int sceNpTrophyGetGameProgress() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +int sceNpTrophySetSoundLevel() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +int sceNpTrophyGetRequiredDiskSpace() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +int sceNpTrophyDestroyContext() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +int sceNpTrophyAbortHandle() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +int sceNpTrophyGetGameInfo() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +int sceNpTrophyDestroyHandle() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +int sceNpTrophyUnlockTrophy() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +int sceNpTrophyTerm() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +int sceNpTrophyGetTrophyUnlockState() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +int sceNpTrophyGetTrophyIcon() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +int sceNpTrophyGetTrophyInfo() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +int sceNpTrophyGetGameIcon() +{ + UNIMPLEMENTED_FUNC(sceNpTrophy); + return CELL_OK; +} + +void sceNpTrophy_unload() +{ + s_npTrophyInstance.m_bInitialized = false; +} + +void sceNpTrophy_init() +{ + sceNpTrophy.AddFunc(0x079f0e87, sceNpTrophyGetGameProgress); + sceNpTrophy.AddFunc(0x1197b52c, sceNpTrophyRegisterContext); + sceNpTrophy.AddFunc(0x1c25470d, sceNpTrophyCreateHandle); + sceNpTrophy.AddFunc(0x27deda93, sceNpTrophySetSoundLevel); + sceNpTrophy.AddFunc(0x370136fe, sceNpTrophyGetRequiredDiskSpace); + sceNpTrophy.AddFunc(0x3741ecc7, sceNpTrophyDestroyContext); + sceNpTrophy.AddFunc(0x39567781, sceNpTrophyInit); + sceNpTrophy.AddFunc(0x48bd97c7, sceNpTrophyAbortHandle); + sceNpTrophy.AddFunc(0x49d18217, sceNpTrophyGetGameInfo); + sceNpTrophy.AddFunc(0x623cd2dc, sceNpTrophyDestroyHandle); + sceNpTrophy.AddFunc(0x8ceedd21, sceNpTrophyUnlockTrophy); + sceNpTrophy.AddFunc(0xa7fabf4d, sceNpTrophyTerm); + sceNpTrophy.AddFunc(0xb3ac3478, sceNpTrophyGetTrophyUnlockState); + sceNpTrophy.AddFunc(0xbaedf689, sceNpTrophyGetTrophyIcon); + sceNpTrophy.AddFunc(0xe3bf9a28, sceNpTrophyCreateContext); + sceNpTrophy.AddFunc(0xfce6d30a, sceNpTrophyGetTrophyInfo); + sceNpTrophy.AddFunc(0xff299e03, sceNpTrophyGetGameIcon); +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 1c8e07170d..f0edaa2e46 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -35,20 +35,18 @@ bool sdata_check(u32 version, u32 flags, u64 filesizeInput, u64 filesizeTmp) int sdata_unpack(wxString packed_file, wxString unpacked_file) { - vfsStream* packed_stream = Emu.GetVFS().Open(packed_file, vfsRead); - vfsStream* unpacked_stream = Emu.GetVFS().Open(unpacked_file, vfsWrite); + std::shared_ptr packed_stream(Emu.GetVFS().OpenFile(packed_file, vfsRead)); + std::shared_ptr unpacked_stream(Emu.GetVFS().OpenFile(unpacked_file, vfsWrite)); if(!packed_stream || !packed_stream->IsOpened()) { sys_fs.Error("'%s' not found! flags: 0x%08x", packed_file.wx_str(), vfsRead); - delete packed_stream; return CELL_ENOENT; } if(!unpacked_stream || !unpacked_stream->IsOpened()) { sys_fs.Error("'%s' couldn't be created! flags: 0x%08x", unpacked_file.wx_str(), vfsWrite); - delete unpacked_stream; return CELL_ENOENT; } @@ -105,9 +103,6 @@ int sdata_unpack(wxString packed_file, wxString unpacked_file) } } - packed_stream->Close(); - unpacked_stream->Close(); - return CELL_OK; } @@ -131,8 +126,7 @@ int cellFsSdataOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) int ret = sdata_unpack(path, unpacked_path); if (ret) return ret; - vfsStream* stream = Emu.GetVFS().Open(unpacked_path, vfsRead); - fd = sys_fs.GetNewId(stream, flags); + fd = sys_fs.GetNewId(Emu.GetVFS().OpenFile(unpacked_path, vfsRead), flags); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index 9570acf1b8..e0d5433366 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -307,8 +307,8 @@ extern int cellMouseGetRawData(u32 port_no, mem_class_t data); extern int cellGcmCallback(u32 context_addr, u32 count); //sys_tty -extern int sys_tty_read(s32 ch, u64 buf_addr, u32 len, u64 preadlen_addr); -extern int sys_tty_write(s32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr); +extern int sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr); +extern int sys_tty_write(u32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr); //sys_heap extern int sys_heap_create_heap(const u32 heap_addr, const u32 start_addr, const u32 size); diff --git a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp b/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp index b4760efcf4..7ec0e6f3c8 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_FileSystem.cpp @@ -17,7 +17,7 @@ int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) if(flags & CELL_O_CREAT) { _oflags &= ~CELL_O_CREAT; - Emu.GetVFS().Create(ppath); + Emu.GetVFS().CreateFile(ppath); } vfsOpenMode o_mode; @@ -55,9 +55,7 @@ int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) { _oflags &= ~CELL_O_TRUNC; //truncate file before opening it as read/write - vfsStream* stream = Emu.GetVFS().Open(ppath, vfsWrite); - stream->Close(); - delete stream; + Emu.GetVFS().OpenFile(ppath, vfsWrite); } o_mode = vfsReadWrite; break; @@ -69,13 +67,11 @@ int cellFsOpen(u32 path_addr, int flags, mem32_t fd, mem32_t arg, u64 size) return CELL_EINVAL; } - vfsStream* stream = Emu.GetVFS().Open(ppath, o_mode); + vfsFileBase* stream = Emu.GetVFS().OpenFile(ppath, o_mode); if(!stream || !stream->IsOpened()) { sys_fs.Error("\"%s\" not found! flags: 0x%08x", ppath.wx_str(), flags); - delete stream; - return CELL_ENOENT; } @@ -145,11 +141,12 @@ int cellFsOpendir(u32 path_addr, mem32_t fd) if(!Memory.IsGoodAddr(path_addr) || !fd.IsGood()) return CELL_EFAULT; - wxString localPath; - Emu.GetVFS().GetDevice(path, localPath); - vfsLocalDir* dir = new vfsLocalDir(localPath); - if(!dir->Open(localPath)) + vfsDirBase* dir = Emu.GetVFS().OpenDir(path); + if(!dir || !dir->IsOpened()) + { + delete dir; return CELL_ENOENT; + } fd = sys_fs.GetNewId(dir); return CELL_OK; @@ -171,7 +168,7 @@ int cellFsReaddir(u32 fd, mem_ptr_t dir, mem64_t nread) nread = 1; Memory.WriteString(dir.GetAddr()+2, info->name.wx_str()); dir->d_namlen = info->name.Length(); - dir->d_type = (info->flags & 0x1) ? CELL_FS_TYPE_REGULAR : CELL_FS_TYPE_DIRECTORY; + dir->d_type = (info->flags & DirEntry_TypeFile) ? CELL_FS_TYPE_REGULAR : CELL_FS_TYPE_DIRECTORY; } else { diff --git a/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp b/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp index 2317aeb767..0eb3dcce12 100644 --- a/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp +++ b/rpcs3/Emu/SysCalls/lv2/SC_TTY.cpp @@ -1,17 +1,18 @@ #include "stdafx.h" #include "Emu/SysCalls/SysCalls.h" -int sys_tty_read(s32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) +int sys_tty_read(u32 ch, u64 buf_addr, u32 len, u64 preadlen_addr) { ConLog.Warning("sys_tty_read: ch: %d, buf addr: %llx, len: %d", ch, buf_addr, len); Memory.Write32NN(preadlen_addr, len); + Emu.Pause(); return CELL_OK; } -int sys_tty_write(s32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr) +int sys_tty_write(u32 ch, u64 buf_addr, u32 len, u64 pwritelen_addr) { - if(ch < 0 || ch > 15 || (s32)len <= 0) return CELL_EINVAL; + if(ch > 15 || (s32)len <= 0) return CELL_EINVAL; if(!Memory.IsGoodAddr(buf_addr)) return CELL_EFAULT; Emu.GetDbgCon().Write(ch, Memory.ReadString(buf_addr, len)); diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 9cf0c1293a..5846edec19 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -92,9 +92,9 @@ void Emulator::CheckStatus() bool Emulator::IsSelf(const std::string& path) { - vfsLocalFile f(path); + vfsLocalFile f(nullptr); - if(!f.IsOpened()) + if(!f.Open(path)) return false; SceHeader hdr; @@ -238,7 +238,7 @@ void Emulator::Load() try { - if(!(is_error = !l.Analyze() || l.GetMachine() == MACHINE_Unknown)) + if(!(is_error = !l.Analyze()) && l.GetMachine() != MACHINE_Unknown) { switch(l.GetMachine()) { diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 74ce4c0f74..20c6baa4cc 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -107,16 +107,6 @@ public: void SetPath(const wxString& path, const wxString& elf_path = wxEmptyString); void SetTitleID(const wxString& id); - std::shared_ptr OpenFile(const wxString& path, vfsOpenMode mode = vfsRead) - { - return std::shared_ptr((vfsFileBase*)m_vfs.Open(path, mode)); - } - - std::shared_ptr OpenStream(const wxString& path, vfsOpenMode mode = vfsRead) - { - return std::shared_ptr(m_vfs.Open(path, mode)); - } - CPUThreadManager& GetCPU() { return m_thread_manager; } PadManager& GetPadManager() { return m_pad_manager; } KeyboardManager& GetKeyboardManager() { return m_keyboard_manager; } diff --git a/rpcs3/Gui/CompilerELF.cpp b/rpcs3/Gui/CompilerELF.cpp index 5cc0c44804..d455da5390 100644 --- a/rpcs3/Gui/CompilerELF.cpp +++ b/rpcs3/Gui/CompilerELF.cpp @@ -12,7 +12,7 @@ enum CompilerIDs wxFont GetFont(int size) { - return wxFont(size, wxMODERN, wxNORMAL, wxNORMAL); + return wxFont(size, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); } CompilerELF::CompilerELF(wxWindow* parent) diff --git a/rpcs3/Gui/DisAsmFrame.cpp b/rpcs3/Gui/DisAsmFrame.cpp index f8521c5fc7..3d0c152dd8 100644 --- a/rpcs3/Gui/DisAsmFrame.cpp +++ b/rpcs3/Gui/DisAsmFrame.cpp @@ -294,7 +294,9 @@ void DisAsmFrame::Dump(wxCommandEvent& WXUNUSED(event)) if(ctrl.ShowModal() == wxID_CANCEL) return; - vfsStream& f_elf = *new vfsLocalFile(Emu.m_path); + vfsLocalFile& f_elf = *new vfsLocalFile(nullptr); + f_elf.Open(Emu.m_path); + ConLog.Write("path: %s", Emu.m_path.wx_str()); Elf_Ehdr ehdr; ehdr.Load(f_elf); diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index 0dcc862a71..c665a39983 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -50,8 +50,10 @@ void GameViewer::LoadPSF() for(uint i=0; iGetId()) SHOW_BUFFER(3); if (event.GetId() == p_buffer_tex->GetId()) { - if(Memory.IsGoodAddr(GetAddress(render.m_textures[m_cur_texture].GetOffset(), render.m_textures[m_cur_texture].GetLocation())) && render.m_textures[m_cur_texture].GetWidth() && render.m_textures[m_cur_texture].GetHeight()) + u8 location = render.m_textures[m_cur_texture].GetLocation(); + if(location <= 1 && Memory.IsGoodAddr(GetAddress(render.m_textures[m_cur_texture].GetOffset(), location)) + && render.m_textures[m_cur_texture].GetWidth() && render.m_textures[m_cur_texture].GetHeight()) MemoryViewerPanel::ShowImage(this, - GetAddress(render.m_textures[m_cur_texture].GetOffset(), render.m_textures[m_cur_texture].GetLocation()), 1, + GetAddress(render.m_textures[m_cur_texture].GetOffset(), location), 1, render.m_textures[m_cur_texture].GetWidth(), render.m_textures[m_cur_texture].GetHeight(), false); } @@ -417,7 +419,20 @@ void RSXDebugger::GetBuffers() } // Draw Texture - u32 TexBuffer_addr = GetAddress(render.m_textures[m_cur_texture].GetOffset(), render.m_textures[m_cur_texture].GetLocation()); + if(!render.m_textures[m_cur_texture].IsEnabled()) + return; + + u32 offset = render.m_textures[m_cur_texture].GetOffset(); + + if(!offset) + return; + + u8 location = render.m_textures[m_cur_texture].GetLocation(); + + if(location > 1) + return; + + u32 TexBuffer_addr = GetAddress(offset, location); if(!Memory.IsGoodAddr(TexBuffer_addr)) return; @@ -487,7 +502,17 @@ void RSXDebugger::GetTexture() if(render.m_textures[i].IsEnabled()) { m_list_texture->InsertItem(i, wxString::Format("%d", i)); - m_list_texture->SetItem(i, 1, wxString::Format("0x%x", GetAddress(render.m_textures[i].GetOffset(), render.m_textures[i].GetLocation()))); + u8 location = render.m_textures[i].GetLocation(); + if(location > 1) + { + m_list_texture->SetItem(i, 1, + wxString::Format("Bad address (offset=0x%x, location=%d)", render.m_textures[i].GetOffset(), location)); + } + else + { + m_list_texture->SetItem(i, 1, wxString::Format("0x%x", GetAddress(render.m_textures[i].GetOffset(), location))); + } + m_list_texture->SetItem(i, 2, render.m_textures[i].isCubemap() ? "True" : "False"); m_list_texture->SetItem(i, 3, wxString::Format("%dD", render.m_textures[i].GetDimension())); m_list_texture->SetItem(i, 4, render.m_textures[i].IsEnabled() ? "True" : "False"); diff --git a/rpcs3/Gui/VHDDManager.cpp b/rpcs3/Gui/VHDDManager.cpp index 679bf5bf72..59916e26e6 100644 --- a/rpcs3/Gui/VHDDManager.cpp +++ b/rpcs3/Gui/VHDDManager.cpp @@ -67,7 +67,7 @@ VHDDExplorer::VHDDExplorer(wxWindow* parent, const wxString& hdd_path) : wxDialo m_list->InsertColumn(2, "Size"); m_list->InsertColumn(3, "Creation time"); - m_hdd = new vfsHDD(hdd_path); + m_hdd = new vfsHDD(nullptr, hdd_path); UpdateList(); Connect(m_list->GetId(), wxEVT_COMMAND_LIST_BEGIN_DRAG, wxListEventHandler(VHDDExplorer::OnListDrag)); Connect(m_list->GetId(), wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler(VHDDExplorer::DClick)); diff --git a/rpcs3/Loader/Loader.cpp b/rpcs3/Loader/Loader.cpp index 3eab6b0acd..4dae78d73b 100644 --- a/rpcs3/Loader/Loader.cpp +++ b/rpcs3/Loader/Loader.cpp @@ -162,11 +162,13 @@ bool Loader::Load() return false; } + /* const wxString& root = wxFileName(wxFileName(m_stream->GetPath()).GetPath()).GetPath(); + wxString ps3_path; const wxString& psf_path = root + "\\" + "PARAM.SFO"; - if(wxFileExists(psf_path)) + vfsFile f(psf_path); + if(f.IsOpened()) { - vfsLocalFile f(psf_path); PSFLoader psf_l(f); if(psf_l.Load()) { @@ -175,6 +177,6 @@ bool Loader::Load() psf_l.Close(); } } - + */ return true; } diff --git a/rpcs3/Loader/TRP.cpp b/rpcs3/Loader/TRP.cpp index 6d52438166..0345bdb0df 100644 --- a/rpcs3/Loader/TRP.cpp +++ b/rpcs3/Loader/TRP.cpp @@ -9,10 +9,14 @@ bool TRPLoader::Install(std::string dest, bool show) { if(!trp_f.IsOpened()) return false; if(!LoadHeader(show)) return false; - + + if (!dest.empty() && dest.back() != '/') + dest += '/'; + for (const TRPEntry& entry : m_entries) { char* buffer = new char [entry.size]; + Emu.GetVFS().CreateFile(dest+entry.name); vfsFile file(dest+entry.name, vfsWrite); trp_f.Seek(entry.offset); trp_f.Read(buffer, entry.size); @@ -35,7 +39,7 @@ bool TRPLoader::LoadHeader(bool show) if (trp_f.Read(&m_header, sizeof(TRPHeader)) != sizeof(TRPHeader)) return false; - if (!m_header.CheckMagic()) + if (m_header.trp_magic != 0xDCA24D00) return false; if (show) diff --git a/rpcs3/Loader/TRP.h b/rpcs3/Loader/TRP.h index 64ed0abc11..e0994ce650 100644 --- a/rpcs3/Loader/TRP.h +++ b/rpcs3/Loader/TRP.h @@ -3,26 +3,22 @@ struct TRPHeader { - u32 trp_magic; - u32 trp_version; - u64 trp_file_size; - u32 trp_files_count; - u32 trp_element_size; - u32 trp_unknown; + be_t trp_magic; + be_t trp_version; + be_t trp_file_size; + be_t trp_files_count; + be_t trp_element_size; + be_t trp_unknown; unsigned char sha1[20]; unsigned char padding[16]; - - bool CheckMagic() const { - return trp_magic == 0xDCA23D00; - } }; struct TRPEntry { - char name[20]; - u64 offset; - u64 size; - u32 unknown; + char name[32]; + be_t offset; + be_t size; + be_t unknown; char padding[12]; }; diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index 32ab275bfb..dd103943cc 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -227,6 +227,8 @@ + + @@ -293,6 +295,7 @@ + diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index b3d77f119a..67d1df150a 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -397,6 +397,15 @@ Emu\GS + + Emu\SysCalls\Modules + + + Emu\FS + + + Emu\FS + diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 4bef139bb6..71ac10705d 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -210,9 +210,10 @@ enum Status #include "Emu/FS/vfsFileBase.h" #include "Emu/FS/vfsLocalDir.h" #include "Emu/FS/vfsLocalFile.h" -#include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsStream.h" #include "Emu/FS/vfsStreamMemory.h" +#include "Emu/FS/vfsFile.h" +#include "Emu/FS/vfsDir.h" #include "rpcs3.h" #define _PRGNAME_ "RPCS3"