Skip to content

Commit bc63eae

Browse files
committed
Added rpcs3 api (dynamic library)
1 parent 7951706 commit bc63eae

8 files changed

+443
-2
lines changed

ps3emu_api/ps3emu_api.cpp

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#include "ps3emu_api.h"
2+
3+
ps3emu_api::ps3emu_api(const std::string &path)
4+
{
5+
load(path);
6+
}
7+
8+
bool ps3emu_api::load(const std::string &path)
9+
{
10+
if (!m_library.load(path))
11+
{
12+
return false;
13+
}
14+
15+
bool is_no_errors = true;
16+
17+
if (!m_library.get(get_api_version, "ps3emu_api_get_api_version") || get_api_version() != ps3emu_api_version)
18+
{
19+
is_no_errors = false;
20+
}
21+
22+
is_no_errors = is_no_errors && m_library.get(initialize, "ps3emu_api_initialize");
23+
is_no_errors = is_no_errors && m_library.get(destroy, "ps3emu_api_destroy");
24+
25+
is_no_errors = is_no_errors && m_library.get(get_version_string, "ps3emu_api_get_version_string");
26+
is_no_errors = is_no_errors && m_library.get(get_version_number, "ps3emu_api_get_version_number");
27+
is_no_errors = is_no_errors && m_library.get(get_name_string, "ps3emu_api_get_name_string");
28+
29+
is_no_errors = is_no_errors && m_library.get(load_elf, "ps3emu_api_load_elf");
30+
31+
is_no_errors = is_no_errors && m_library.get(set_state, "ps3emu_api_set_state");
32+
is_no_errors = is_no_errors && m_library.get(get_state, "ps3emu_api_get_state");
33+
34+
if (!is_no_errors)
35+
{
36+
close();
37+
return false;
38+
}
39+
40+
return true;
41+
}
42+
43+
bool ps3emu_api::loaded() const
44+
{
45+
return m_library.loaded();
46+
}
47+
48+
void ps3emu_api::close()
49+
{
50+
initialize = nullptr;
51+
destroy = nullptr;
52+
get_version_string = nullptr;
53+
get_version_number = nullptr;
54+
get_name_string = nullptr;
55+
load_elf = nullptr;
56+
set_state = nullptr;
57+
get_state = nullptr;
58+
59+
m_library.close();
60+
}
61+
62+
ps3emu_api::operator bool() const
63+
{
64+
return loaded();
65+
}

ps3emu_api/ps3emu_api.h

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#pragma once
2+
3+
#include <Utilities/dynamic_library.h>
4+
#include <string>
5+
#include "ps3emu_api_enums.h"
6+
#include "ps3emu_api_structs.h"
7+
8+
class ps3emu_api
9+
{
10+
utils::dynamic_library m_library;
11+
12+
public:
13+
ps3emu_api() = default;
14+
ps3emu_api(const std::string &path);
15+
16+
unsigned int(*get_api_version)() = nullptr;
17+
ps3emu_api_error_code(*initialize)(const ps3emu_api_initialize_callbacks *callbacks) = nullptr;
18+
ps3emu_api_error_code(*destroy)() = nullptr;
19+
20+
ps3emu_api_error_code(*get_version_string)(char *dest_buffer, int dest_buffer_size) = nullptr;
21+
ps3emu_api_error_code(*get_version_number)(int *version_number) = nullptr;
22+
ps3emu_api_error_code(*get_name_string)(char *dest_buffer, int dest_buffer_size) = nullptr;
23+
24+
ps3emu_api_error_code(*load_elf)(const char *path) = nullptr;
25+
26+
ps3emu_api_error_code(*set_state)(ps3emu_api_state state) = nullptr;
27+
ps3emu_api_error_code(*get_state)(ps3emu_api_state *state) = nullptr;
28+
29+
bool load(const std::string &path);
30+
bool loaded() const;
31+
void close();
32+
33+
explicit operator bool() const;
34+
};
35+

rpcs3/emucore.vcxproj

+31
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,35 @@
6363
<PrecompiledHeader>Use</PrecompiledHeader>
6464
<AdditionalIncludeDirectories>..\llvm\include;..\llvm_build\include;</AdditionalIncludeDirectories>
6565
</ClCompile>
66+
<PreBuildEvent>
67+
<Command Condition="'$(Configuration)|$(Platform)'=='Debug - MemLeak|x64'">%windir%\sysnative\cmd.exe /c "$(SolutionDir)\Utilities\git-version-gen.cmd"</Command>
68+
<Message Condition="'$(Configuration)|$(Platform)'=='Debug - MemLeak|x64'">Updating git-version.h</Message>
69+
</PreBuildEvent>
70+
<PreBuildEvent>
71+
<Command Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">%windir%\sysnative\cmd.exe /c "$(SolutionDir)\Utilities\git-version-gen.cmd"</Command>
72+
<Message Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">Updating git-version.h</Message>
73+
</PreBuildEvent>
74+
<PreBuildEvent>
75+
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%windir%\sysnative\cmd.exe /c "$(SolutionDir)\Utilities\git-version-gen.cmd"</Command>
76+
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Updating git-version.h</Message>
77+
</PreBuildEvent>
78+
<PreBuildEvent>
79+
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%windir%\sysnative\cmd.exe /c "$(SolutionDir)\Utilities\git-version-gen.cmd"</Command>
80+
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Updating git-version.h</Message>
81+
</PreBuildEvent>
82+
<PreBuildEvent>
83+
<Command Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">%windir%\sysnative\cmd.exe /c "$(SolutionDir)\Utilities\git-version-gen.cmd"</Command>
84+
<Message Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">Updating git-version.h</Message>
85+
</PreBuildEvent>
6686
</ItemDefinitionGroup>
6787
<ItemGroup>
88+
<ClCompile Include="..\ps3emu_api\ps3emu_api.cpp">
89+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
90+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">NotUsing</PrecompiledHeader>
91+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">NotUsing</PrecompiledHeader>
92+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
93+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug - MemLeak|x64'">NotUsing</PrecompiledHeader>
94+
</ClCompile>
6895
<ClCompile Include="..\Utilities\AutoPause.cpp" />
6996
<ClCompile Include="..\Utilities\dynamic_library.cpp" />
7097
<ClCompile Include="..\Utilities\Log.cpp">
@@ -350,6 +377,7 @@
350377
<ClCompile Include="Loader\PSF.cpp" />
351378
<ClCompile Include="Loader\TROPUSR.cpp" />
352379
<ClCompile Include="Loader\TRP.cpp" />
380+
<ClCompile Include="rpcs3_api.cpp" />
353381
<ClCompile Include="rpcs3_version.cpp" />
354382
<ClCompile Include="stb_image.cpp" />
355383
<ClCompile Include="stdafx.cpp">
@@ -358,6 +386,7 @@
358386
</ItemGroup>
359387
<ItemGroup>
360388
<ClInclude Include="..\3rdparty\stblib\stb_image.h" />
389+
<ClInclude Include="..\ps3emu_api\ps3emu_api.h" />
361390
<ClInclude Include="..\Utilities\Atomic.h" />
362391
<ClInclude Include="..\Utilities\AtomicPtr.h" />
363392
<ClInclude Include="..\Utilities\AutoPause.h" />
@@ -613,6 +642,8 @@
613642
<ClInclude Include="Loader\PSF.h" />
614643
<ClInclude Include="Loader\TROPUSR.h" />
615644
<ClInclude Include="Loader\TRP.h" />
645+
<ClInclude Include="ps3emu_api_enums.h" />
646+
<ClInclude Include="ps3emu_api_structs.h" />
616647
<ClInclude Include="restore_new.h" />
617648
<ClInclude Include="rpcs3_version.h" />
618649
<ClInclude Include="stdafx.h" />

rpcs3/emucore.vcxproj.filters

+15
Original file line numberDiff line numberDiff line change
@@ -857,6 +857,12 @@
857857
<ClCompile Include="..\Utilities\dynamic_library.cpp">
858858
<Filter>Utilities</Filter>
859859
</ClCompile>
860+
<ClCompile Include="rpcs3_api.cpp">
861+
<Filter>Source Files</Filter>
862+
</ClCompile>
863+
<ClCompile Include="..\ps3emu_api\ps3emu_api.cpp">
864+
<Filter>Source Files</Filter>
865+
</ClCompile>
860866
</ItemGroup>
861867
<ItemGroup>
862868
<ClInclude Include="Crypto\aes.h">
@@ -1630,5 +1636,14 @@
16301636
<ClInclude Include="..\Utilities\dynamic_library.h">
16311637
<Filter>Utilities</Filter>
16321638
</ClInclude>
1639+
<ClInclude Include="ps3emu_api_enums.h">
1640+
<Filter>Header Files</Filter>
1641+
</ClInclude>
1642+
<ClInclude Include="ps3emu_api_structs.h">
1643+
<Filter>Header Files</Filter>
1644+
</ClInclude>
1645+
<ClInclude Include="..\ps3emu_api\ps3emu_api.h">
1646+
<Filter>Header Files</Filter>
1647+
</ClInclude>
16331648
</ItemGroup>
16341649
</Project>

rpcs3/ps3emu_api_enums.h

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#pragma once
2+
3+
#ifndef _PS3EMU_API_ENUMS
4+
#define _PS3EMU_API_ENUMS
5+
6+
#ifdef __cplusplus
7+
extern"C"
8+
{
9+
#endif /* __cplusplus */
10+
11+
typedef enum
12+
{
13+
ps3emu_api_ok,
14+
ps3emu_api_bad_argument,
15+
ps3emu_api_not_found,
16+
ps3emu_api_internal_error,
17+
ps3emu_api_not_initialized,
18+
ps3emu_api_already_initialized
19+
} ps3emu_api_error_code;
20+
21+
enum
22+
{
23+
ps3emu_api_version = 1,
24+
ps3emu_api_max_name_length = 16,
25+
ps3emu_api_max_version_length = 64
26+
};
27+
28+
typedef enum
29+
{
30+
ps3emu_api_state_idle,
31+
ps3emu_api_state_stoping,
32+
ps3emu_api_state_stopped,
33+
ps3emu_api_state_pausing,
34+
ps3emu_api_state_paused,
35+
ps3emu_api_state_starting,
36+
ps3emu_api_state_started
37+
} ps3emu_api_state;
38+
39+
typedef enum
40+
{
41+
ps3emu_api_window_null,
42+
ps3emu_api_window_opengl,
43+
ps3emu_api_window_vulkan
44+
/* ps3emu_api_window_direct3d */
45+
} ps3emu_api_window_type;
46+
47+
#ifdef __cplusplus
48+
}
49+
#endif /* __cplusplus */
50+
51+
#endif /* _PS3EMU_API_ENUMS */

rpcs3/ps3emu_api_structs.h

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#ifndef _PS3EMU_API_STRUCTS
2+
#define _PS3EMU_API_STRUCTS
3+
4+
#include "ps3emu_api_enums.h"
5+
6+
#ifdef __cplusplus
7+
extern"C"
8+
{
9+
#endif /* __cplusplus */
10+
typedef struct ps3emu_api_window_handle_s * ps3emu_api_window;
11+
12+
typedef struct
13+
{
14+
ps3emu_api_error_code(*create_window)(ps3emu_api_window *window, ps3emu_api_window_type type, unsigned int version);
15+
ps3emu_api_error_code(*destroy_window)(ps3emu_api_window window);
16+
ps3emu_api_error_code(*flip)(ps3emu_api_window window);
17+
} ps3emu_api_initialize_callbacks;
18+
19+
#ifdef __cplusplus
20+
}
21+
#endif /* __cplusplus */
22+
23+
#endif /* _PS3EMU_API_STRUCTS */

rpcs3/rpcs3.vcxproj

+4-2
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,10 @@
8484
</PropertyGroup>
8585
<ItemDefinitionGroup>
8686
<PreBuildEvent>
87-
<Command>%windir%\sysnative\cmd.exe /c "$(SolutionDir)\Utilities\git-version-gen.cmd"</Command>
88-
<Message>Updating git-version.h</Message>
87+
<Command>
88+
</Command>
89+
<Message>
90+
</Message>
8991
</PreBuildEvent>
9092
<ClCompile>
9193
<AdditionalIncludeDirectories>..\wxWidgets\include\msvc;..\wxWidgets\include;..\3rdparty\XAudio2_7;..\Vulkan\Vulkan-LoaderAndValidationLayers\include;..\Vulkan\glslang\glslang\Public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

0 commit comments

Comments
 (0)