Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
hrydgard
GitHub Repository: hrydgard/ppsspp
Path: blob/master/Core/HLE/HLETables.cpp
3186 views
1
// Copyright (c) 2012- PPSSPP Project.
2
3
// This program is free software: you can redistribute it and/or modify
4
// it under the terms of the GNU General Public License as published by
5
// the Free Software Foundation, version 2.0 or later versions.
6
7
// This program is distributed in the hope that it will be useful,
8
// but WITHOUT ANY WARRANTY; without even the implied warranty of
9
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
// GNU General Public License 2.0 for more details.
11
12
// A copy of the GPL 2.0 should have been included with the program.
13
// If not, see http://www.gnu.org/licenses/
14
15
// Official git repository and contact information can be found at
16
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
17
18
#include "Core/HLE/HLE.h"
19
#include "Core/HLE/HLETables.h"
20
#include "Core/HLE/FunctionWrappers.h"
21
22
#include "sceAtrac.h"
23
#include "sceAudio.h"
24
#include "sceAudiocodec.h"
25
#include "sceAudioRouting.h"
26
#include "sceCcc.h"
27
#include "sceChnnlsv.h"
28
#include "sceCtrl.h"
29
#include "sceDeflt.h"
30
#include "sceDisplay.h"
31
#include "sceDmac.h"
32
#include "sceFont.h"
33
#include "sceGameUpdate.h"
34
#include "sceGe.h"
35
#include "sceHeap.h"
36
#include "sceHprm.h"
37
#include "sceHttp.h"
38
#include "sceImpose.h"
39
#include "sceIo.h"
40
#include "sceJpeg.h"
41
#include "sceKernel.h"
42
#include "sceKernelEventFlag.h"
43
#include "sceKernelHeap.h"
44
#include "sceKernelMemory.h"
45
#include "sceKernelInterrupt.h"
46
#include "sceKernelModule.h"
47
#include "sceKernelSemaphore.h"
48
#include "sceKernelThread.h"
49
#include "sceKernelTime.h"
50
#include "sceMd5.h"
51
#include "sceMp4.h"
52
#include "sceAac.h"
53
#include "sceMp3.h"
54
#include "sceNet.h"
55
#include "sceNetAdhoc.h"
56
#include "sceNetAdhocMatching.h"
57
#include "sceNp.h"
58
#include "sceMpeg.h"
59
#include "sceOpenPSID.h"
60
#include "sceP3da.h"
61
#include "sceParseHttp.h"
62
#include "sceParseUri.h"
63
#include "scePauth.h"
64
#include "scePower.h"
65
#include "scePspNpDrm_user.h"
66
#include "scePsmf.h"
67
#include "sceReg.h"
68
#include "sceRtc.h"
69
#include "sceSas.h"
70
#include "sceSircs.h"
71
#include "sceSsl.h"
72
#include "sceUmd.h"
73
#include "sceUsb.h"
74
#include "sceUsbAcc.h"
75
#include "sceUsbCam.h"
76
#include "sceUsbGps.h"
77
#include "sceUsbMic.h"
78
#include "sceUtility.h"
79
#include "sceVaudio.h"
80
#include "sceMt19937.h"
81
#include "sceSha256.h"
82
#include "sceAdler.h"
83
#include "sceSfmt19937.h"
84
#include "sceG729.h"
85
#include "KUBridge.h"
86
#include "sceNetInet.h"
87
#include "sceNetResolver.h"
88
// #include "sceNp2.h"
89
#include "sceNet_lib.h"
90
91
#define N(s) s
92
93
//\*\*\ found\:\ {[a-zA-Z]*}\ {0x[a-zA-Z0-9]*}\ \*\*
94
//{FID(\2),0,N("\1")},
95
96
//Metal Gear Acid modules:
97
//kjfs
98
//sound
99
//zlibdec
100
const HLEFunction FakeSysCalls[] = {
101
{NID_THREADRETURN, __KernelReturnFromThread, "__KernelReturnFromThread", 'x', ""},
102
{NID_CALLBACKRETURN, __KernelReturnFromMipsCall, "__KernelReturnFromMipsCall", 'x', ""},
103
{NID_INTERRUPTRETURN, __KernelReturnFromInterrupt, "__KernelReturnFromInterrupt", 'x', ""},
104
{NID_EXTENDRETURN, __KernelReturnFromExtendStack, "__KernelReturnFromExtendStack", 'x', ""},
105
{NID_MODULERETURN, __KernelReturnFromModuleFunc, "__KernelReturnFromModuleFunc", 'x', ""},
106
{NID_IDLE, __KernelIdle, "_sceKernelIdle", 'x', ""},
107
{NID_GPUREPLAY, &WrapI_V<__KernelGPUReplay>, "__KernelGPUReplay", 'x', ""},
108
{NID_HLECALLRETURN, HLEReturnFromMipsCall, "HLEReturnFromMipsCall", 'x', ""},
109
};
110
111
const HLEFunction UtilsForUser[] =
112
{
113
{0X91E4F6A7, &WrapU_V<sceKernelLibcClock>, "sceKernelLibcClock", 'x', "" },
114
{0X27CC57F0, &WrapU_U<sceKernelLibcTime>, "sceKernelLibcTime", 'x', "x" },
115
{0X71EC4271, &WrapU_UU<sceKernelLibcGettimeofday>, "sceKernelLibcGettimeofday", 'x', "xx" },
116
{0XBFA98062, &WrapI_UI<sceKernelDcacheInvalidateRange>, "sceKernelDcacheInvalidateRange", 'i', "xi" },
117
{0XC8186A58, &WrapI_UIU<sceKernelUtilsMd5Digest>, "sceKernelUtilsMd5Digest", 'i', "xix"},
118
{0X9E5C5086, &WrapI_U<sceKernelUtilsMd5BlockInit>, "sceKernelUtilsMd5BlockInit", 'i', "x" },
119
{0X61E1E525, &WrapI_UUI<sceKernelUtilsMd5BlockUpdate>, "sceKernelUtilsMd5BlockUpdate", 'i', "xxi"},
120
{0XB8D24E78, &WrapI_UU<sceKernelUtilsMd5BlockResult>, "sceKernelUtilsMd5BlockResult", 'i', "xx" },
121
{0X840259F1, &WrapI_UIU<sceKernelUtilsSha1Digest>, "sceKernelUtilsSha1Digest", 'i', "xix"},
122
{0XF8FCD5BA, &WrapI_U<sceKernelUtilsSha1BlockInit>, "sceKernelUtilsSha1BlockInit", 'i', "x" },
123
{0X346F6DA8, &WrapI_UUI<sceKernelUtilsSha1BlockUpdate>, "sceKernelUtilsSha1BlockUpdate", 'i', "xxi"},
124
{0X585F1C09, &WrapI_UU<sceKernelUtilsSha1BlockResult>, "sceKernelUtilsSha1BlockResult", 'i', "xx" },
125
{0XE860E75E, &WrapU_UU<sceKernelUtilsMt19937Init>, "sceKernelUtilsMt19937Init", 'x', "xx" },
126
{0X06FB8A63, &WrapU_U<sceKernelUtilsMt19937UInt>, "sceKernelUtilsMt19937UInt", 'x', "x" },
127
{0X37FB5C42, &WrapU_V<sceKernelGetGPI>, "sceKernelGetGPI", 'x', "" },
128
{0X6AD345D7, &WrapV_U<sceKernelSetGPO>, "sceKernelSetGPO", 'v', "x" },
129
{0X79D1C3FA, &WrapI_V<sceKernelDcacheWritebackAll>, "sceKernelDcacheWritebackAll", 'i', "" },
130
{0XB435DEC5, &WrapI_V<sceKernelDcacheWritebackInvalidateAll>, "sceKernelDcacheWritebackInvalidateAll", 'i', "" },
131
{0X3EE30821, &WrapI_UI<sceKernelDcacheWritebackRange>, "sceKernelDcacheWritebackRange", 'i', "xi" },
132
{0X34B9FA9E, &WrapI_UI<sceKernelDcacheWritebackInvalidateRange>, "sceKernelDcacheWritebackInvalidateRange", 'i', "xi" },
133
{0XC2DF770E, &WrapI_UI<sceKernelIcacheInvalidateRange>, "sceKernelIcacheInvalidateRange", 'i', "xi" },
134
{0X80001C4C, nullptr, "sceKernelDcacheProbe", '?', "" },
135
{0X16641D70, nullptr, "sceKernelDcacheReadTag", '?', "" },
136
{0X4FD31C9D, nullptr, "sceKernelIcacheProbe", '?', "" },
137
{0XFB05FAD0, nullptr, "sceKernelIcacheReadTag", '?', "" },
138
{0X920F104A, &WrapU_V<sceKernelIcacheInvalidateAll>, "sceKernelIcacheInvalidateAll", 'x', "" }
139
};
140
141
const HLEFunction LoadCoreForKernel[] =
142
{
143
{0XACE23476, nullptr, "sceKernelCheckPspConfig", '?', "" },
144
{0X7BE1421C, nullptr, "sceKernelCheckExecFile", '?', "" },
145
{0XBF983EF2, nullptr, "sceKernelProbeExecutableObject", '?', "" },
146
{0X7068E6BA, nullptr, "sceKernelLoadExecutableObject", '?', "" },
147
{0XB4D6FECC, nullptr, "sceKernelApplyElfRelSection", '?', "" },
148
{0X54AB2675, nullptr, "sceKernelApplyPspRelSection", '?', "" },
149
{0X2952F5AC, nullptr, "sceKernelDcacheWBinvAll", '?', "" },
150
{0xD8779AC6, &WrapU_V<sceKernelIcacheClearAll>, "sceKernelIcacheClearAll", 'x', "", HLE_KERNEL_SYSCALL },
151
{0X99A695F0, nullptr, "sceKernelRegisterLibrary", '?', "" },
152
{0X5873A31F, nullptr, "sceKernelRegisterLibraryForUser", '?', "" },
153
{0X0B464512, nullptr, "sceKernelReleaseLibrary", '?', "" },
154
{0X9BAF90F6, nullptr, "sceKernelCanReleaseLibrary", '?', "" },
155
{0X0E760DBA, nullptr, "sceKernelLinkLibraryEntries", '?', "" },
156
{0X0DE1F600, nullptr, "sceKernelLinkLibraryEntriesForUser", '?', "" },
157
{0XDA1B09AA, nullptr, "sceKernelUnLinkLibraryEntries", '?', "" },
158
{0XC99DD47A, nullptr, "sceKernelQueryLoadCoreCB", '?', "" },
159
{0X616FCCCD, nullptr, "sceKernelSetBootCallbackLevel", '?', "" },
160
{0XF32A2940, nullptr, "sceKernelModuleFromUID", '?', "" },
161
{0XCD0F3BAC, nullptr, "sceKernelCreateModule", '?', "" },
162
{0X6B2371C2, nullptr, "sceKernelDeleteModule", '?', "" },
163
{0X7320D964, nullptr, "sceKernelModuleAssign", '?', "" },
164
{0X44B292AB, nullptr, "sceKernelAllocModule", '?', "" },
165
{0XBD61D4D5, nullptr, "sceKernelFreeModule", '?', "" },
166
{0XAE7C6E76, nullptr, "sceKernelRegisterModule", '?', "" },
167
{0X74CF001A, nullptr, "sceKernelReleaseModule", '?', "" },
168
{0XFB8AE27D, nullptr, "sceKernelFindModuleByAddress", '?', "" },
169
{0XCCE4A157, &WrapU_U<sceKernelFindModuleByUID>, "sceKernelFindModuleByUID", 'x', "x" , HLE_KERNEL_SYSCALL },
170
{0X82CE54ED, nullptr, "sceKernelModuleCount", '?', "" },
171
{0XC0584F0C, nullptr, "sceKernelGetModuleList", '?', "" },
172
{0XCF8A41B1, &WrapU_C<sceKernelFindModuleByName>, "sceKernelFindModuleByName", 'x', "s", HLE_KERNEL_SYSCALL },
173
{0XB95FA50D, nullptr, "LoadCoreForKernel_B95FA50D", '?', "" },
174
};
175
176
177
const HLEFunction KDebugForKernel[] =
178
{
179
{0XE7A3874D, nullptr, "sceKernelRegisterAssertHandler", '?', "" },
180
{0X2FF4E9F9, nullptr, "sceKernelAssert", '?', "" },
181
{0X9B868276, nullptr, "sceKernelGetDebugPutchar", '?', "" },
182
{0XE146606D, nullptr, "sceKernelRegisterDebugPutchar", '?', "" },
183
{0X7CEB2C09, &WrapU_V<sceKernelRegisterKprintfHandler>, "sceKernelRegisterKprintfHandler", 'x', "", HLE_KERNEL_SYSCALL },
184
{0X84F370BC, nullptr, "Kprintf", '?', "" },
185
{0X5CE9838B, nullptr, "sceKernelDebugWrite", '?', "" },
186
{0X66253C4E, nullptr, "sceKernelRegisterDebugWrite", '?', "" },
187
{0XDBB5597F, nullptr, "sceKernelDebugRead", '?', "" },
188
{0XE6554FDA, nullptr, "sceKernelRegisterDebugRead", '?', "" },
189
{0XB9C643C9, nullptr, "sceKernelDebugEcho", '?', "" },
190
{0X7D1C74F0, nullptr, "sceKernelDebugEchoSet", '?', "" },
191
{0X24C32559, nullptr, "sceKernelDipsw", '?', "" },
192
{0XD636B827, nullptr, "sceKernelRemoveByDebugSection", '?', "" },
193
{0X5282DD5E, nullptr, "sceKernelDipswSet", '?', "" },
194
{0X9F8703E4, nullptr, "sceKernelDipswCpTime", '?', "" },
195
{0X333DCEC7, nullptr, "sceKernelSm1RegisterOperations", '?', "" },
196
{0XE892D9A1, nullptr, "sceKernelSm1ReferOperations", '?', "" },
197
{0XA126F497, nullptr, "KDebugForKernel_A126F497", '?', "" },
198
{0XB7251823, nullptr, "sceKernelAcceptMbogoSig", '?', "" },
199
};
200
201
const HLEFunction pspeDebug[] =
202
{
203
{0XDEADBEAF, nullptr, "pspeDebugWrite", '?', "" },
204
};
205
206
207
const HLEModule moduleList[] =
208
{
209
{"FakeSysCalls", ARRAY_SIZE(FakeSysCalls), FakeSysCalls},
210
{"UtilsForUser", ARRAY_SIZE(UtilsForUser), UtilsForUser},
211
{"KDebugForKernel", ARRAY_SIZE(KDebugForKernel), KDebugForKernel},
212
{"sceSAScore"},
213
{"SceBase64_Library"},
214
{"sceCert_Loader"},
215
{"SceFont_Library"},
216
{"sceNetApctl"},
217
{"sceSIRCS_IrDA_Driver"},
218
{"Pspnet_Scan"},
219
{"Pspnet_Show_MacAddr"},
220
{"pspeDebug", ARRAY_SIZE(pspeDebug), pspeDebug},
221
};
222
223
static const int numModules = ARRAY_SIZE(moduleList);
224
225
void RegisterAllModules() {
226
Register_Kernel_Library();
227
Register_ThreadManForUser();
228
Register_ThreadManForKernel();
229
Register_LoadExecForUser();
230
Register_UtilsForKernel();
231
Register_SysMemUserForUser();
232
Register_InterruptManager();
233
Register_IoFileMgrForUser();
234
Register_ModuleMgrForUser();
235
Register_ModuleMgrForKernel();
236
Register_StdioForUser();
237
238
Register_sceHprm();
239
Register_sceCcc();
240
Register_sceCtrl();
241
Register_sceDisplay();
242
Register_sceAudio();
243
Register_sceSasCore();
244
Register_sceFont();
245
Register_sceNet();
246
Register_sceNetResolver();
247
Register_sceNetInet();
248
Register_sceNetApctl();
249
Register_sceNetAdhoc();
250
Register_sceNetAdhocMatching();
251
Register_sceNetAdhocDiscover();
252
Register_sceNetAdhocctl();
253
Register_sceRtc();
254
Register_sceWlanDrv();
255
Register_sceMpeg();
256
Register_sceMp3();
257
Register_sceHttp();
258
Register_scePower();
259
Register_sceImpose();
260
Register_sceSuspendForUser();
261
Register_sceGe_user();
262
Register_sceUmdUser();
263
Register_sceDmac();
264
Register_sceUtility();
265
Register_sceAtrac3plus();
266
Register_scePsmf();
267
Register_scePsmfPlayer();
268
Register_sceOpenPSID();
269
Register_sceParseUri();
270
Register_sceSsl();
271
Register_sceParseHttp();
272
Register_sceVaudio();
273
Register_sceUsb();
274
Register_sceChnnlsv();
275
Register_sceNpDrm();
276
Register_sceP3da();
277
Register_sceGameUpdate();
278
Register_sceDeflt();
279
Register_sceMp4();
280
Register_sceAac();
281
Register_scePauth();
282
Register_sceNp();
283
Register_sceNpCommerce2();
284
Register_sceNpService();
285
Register_sceNpAuth();
286
Register_sceMd5();
287
Register_sceJpeg();
288
Register_sceAudiocodec();
289
Register_sceHeap();
290
291
for (int i = 0; i < numModules; i++) {
292
RegisterHLEModule(moduleList[i].name, moduleList[i].numFunctions, moduleList[i].funcTable);
293
}
294
295
// IMPORTANT: New modules have to be added at the end, or they will break savestates.
296
297
Register_StdioForKernel();
298
RegisterHLEModule("LoadCoreForKernel", ARRAY_SIZE(LoadCoreForKernel), LoadCoreForKernel);
299
Register_IoFileMgrForKernel();
300
Register_LoadExecForKernel();
301
Register_SysMemForKernel();
302
Register_sceMt19937();
303
Register_SysclibForKernel();
304
Register_sceCtrl_driver();
305
Register_sceDisplay_driver();
306
Register_sceMpegbase();
307
Register_sceUsbGps();
308
Register_sceLibFttt();
309
Register_sceSha256();
310
Register_sceAdler();
311
Register_sceSfmt19937();
312
Register_sceAudioRouting();
313
Register_sceUsbCam();
314
Register_sceG729();
315
Register_sceNetUpnp();
316
Register_sceNetIfhandle();
317
Register_KUBridge();
318
Register_sceUsbAcc();
319
Register_sceUsbMic();
320
Register_sceOpenPSID_driver();
321
Register_semaphore();
322
Register_sceDdrdb();
323
Register_mp4msv();
324
Register_InterruptManagerForKernel();
325
Register_sceSircs();
326
Register_sceNet_lib();
327
Register_sceReg();
328
// Not ready to enable this due to apparent softlocks in Patapon 3.
329
// Register_sceNpMatching2();
330
331
// add new modules here.
332
}
333
334
335