diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt
index 8428959a2f..2eccf3734d 100644
--- a/Core/CMakeLists.txt
+++ b/Core/CMakeLists.txt
@@ -50,6 +50,10 @@ set(SRCS
HLE/sceSas.cpp
HLE/sceUmd.cpp
HLE/sceUtility.cpp
+ HLE/sceParseUri.cpp
+ HLE/sceSsl.cpp
+ HLE/sceParseUri.cpp
+ HLE/sceParseHttp.cpp
HW/MemoryStick.cpp
FileSystems/BlockDevices.cpp
FileSystems/ISOFileSystem.cpp
diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj
index 6b8f518c3d..26009c4320 100644
--- a/Core/Core.vcxproj
+++ b/Core/Core.vcxproj
@@ -154,10 +154,14 @@
+
+
+
+
@@ -287,10 +291,14 @@
+
+
+
+
diff --git a/Core/Core.vcxproj.filters b/Core/Core.vcxproj.filters
index 65452343d1..dec29d774c 100644
--- a/Core/Core.vcxproj.filters
+++ b/Core/Core.vcxproj.filters
@@ -303,6 +303,18 @@
ELF
+
+ HLE\Libraries
+
+
+ HLE\Libraries
+
+
+ HLE\Libraries
+
+
+ HLE\Libraries
+
@@ -554,6 +566,18 @@
ELF
+
+ HLE\Libraries
+
+
+ HLE\Libraries
+
+
+ HLE\Libraries
+
+
+ HLE\Libraries
+
diff --git a/Core/HLE/HLETables.cpp b/Core/HLE/HLETables.cpp
index f3b1fb7d71..6b99782d2f 100644
--- a/Core/HLE/HLETables.cpp
+++ b/Core/HLE/HLETables.cpp
@@ -37,6 +37,7 @@
#include "sceUmd.h"
#include "sceDmac.h"
#include "sceRtc.h"
+#include "sceOpenPSID.h"
#include "sceKernel.h"
#include "sceKernelEventFlag.h"
#include "sceKernelMemory.h"
@@ -47,6 +48,9 @@
#include "sceKernelTime.h"
#include "sceAudio.h"
#include "sceUtility.h"
+#include "sceParseUri.h"
+#include "sceSsl.h"
+#include "sceParseHttp.h"
#define N(s) s
@@ -59,10 +63,10 @@
//zlibdec
const HLEFunction FakeSysCalls[] =
{
- {NID_THREADRETURN, __KernelReturnFromThread, "__KernelReturnFromThread"},
- {NID_CALLBACKRETURN, __KernelReturnFromMipsCall, "__KernelReturnFromMipsCall"},
+ {NID_THREADRETURN, __KernelReturnFromThread, "__KernelReturnFromThread"},
+ {NID_CALLBACKRETURN, __KernelReturnFromMipsCall, "__KernelReturnFromMipsCall"},
{NID_INTERRUPTRETURN, __KernelReturnFromInterrupt, "__KernelReturnFromInterrupt"},
- {NID_IDLE, __KernelIdle, "_sceKernelIdle"},
+ {NID_IDLE, __KernelIdle, "_sceKernelIdle"},
};
const HLEFunction UtilsForUser[] =
@@ -98,51 +102,51 @@ const HLEFunction UtilsForUser[] =
const HLEFunction IoFileMgrForKernel[] =
{
- {0xa905b705, 0, "sceIoCloseAll"},
- {0x411106BA, 0, "sceIoGetThreadCwd"},
- {0xCB0A151F, 0, "sceIoChangeThreadCwd"},
- {0x8E982A74, 0, "sceIoAddDrv"},
- {0xC7F35804, 0, "sceIoDelDrv"},
- {0x3C54E908, 0, "sceIoReopen"},
+ {0xa905b705, 0, "sceIoCloseAll"},
+ {0x411106BA, 0, "sceIoGetThreadCwd"},
+ {0xCB0A151F, 0, "sceIoChangeThreadCwd"},
+ {0x8E982A74, 0, "sceIoAddDrv"},
+ {0xC7F35804, 0, "sceIoDelDrv"},
+ {0x3C54E908, 0, "sceIoReopen"},
};
const HLEFunction StdioForKernel[] =
{
- {0x98220F3E, 0, "sceKernelStdoutReopen"},
- {0xFB5380C5, 0, "sceKernelStderrReopen"},
- {0x2CCF071A, 0, "fdprintf"},
+ {0x98220F3E, 0, "sceKernelStdoutReopen"},
+ {0xFB5380C5, 0, "sceKernelStderrReopen"},
+ {0x2CCF071A, 0, "fdprintf"},
};
const HLEFunction LoadCoreForKernel[] =
{
- {0xACE23476, 0, "sceKernelCheckPspConfig"},
- {0x7BE1421C, 0, "sceKernelCheckExecFile"},
- {0xBF983EF2, 0, "sceKernelProbeExecutableObject"},
- {0x7068E6BA, 0, "sceKernelLoadExecutableObject"},
- {0xB4D6FECC, 0, "sceKernelApplyElfRelSection"},
- {0x54AB2675, 0, "LoadCoreForKernel_54AB2675"},
- {0x2952F5AC, 0, "sceKernelDcacheWBinvAll"},
- {0xD8779AC6, sceKernelIcacheClearAll, "sceKernelIcacheClearAll"},
- {0x99A695F0, 0, "sceKernelRegisterLibrary"},
- {0x5873A31F, 0, "sceKernelRegisterLibraryForUser"},
- {0x0B464512, 0, "sceKernelReleaseLibrary"},
- {0x9BAF90F6, 0, "sceKernelCanReleaseLibrary"},
- {0x0E760DBA, 0, "sceKernelLinkLibraryEntries"},
- {0x0DE1F600, 0, "sceKernelLinkLibraryEntriesForUser"},
- {0xDA1B09AA, 0, "sceKernelUnLinkLibraryEntries"},
- {0xC99DD47A, 0, "sceKernelQueryLoadCoreCB"},
- {0x616FCCCD, 0, "sceKernelSetBootCallbackLevel"},
- {0xF32A2940, 0, "sceKernelModuleFromUID"},
- {0xCD0F3BAC, 0, "sceKernelCreateModule"},
- {0x6B2371C2, 0, "sceKernelDeleteModule"},
- {0x7320D964, 0, "sceKernelModuleAssign"},
- {0x44B292AB, 0, "sceKernelAllocModule"},
- {0xBD61D4D5, 0, "sceKernelFreeModule"},
- {0xAE7C6E76, 0, "sceKernelRegisterModule"},
- {0x74CF001A, 0, "sceKernelReleaseModule"},
- {0xFB8AE27D, 0, "sceKernelFindModuleByAddress"},
- {0xCCE4A157, 0, "sceKernelFindModuleByUID"},
- {0x82CE54ED, 0, "sceKernelModuleCount"},
- {0xC0584F0C, 0, "sceKernelGetModuleList"},
- {0xCF8A41B1, sceKernelFindModuleByName,"sceKernelFindModuleByName"},
+ {0xACE23476, 0, "sceKernelCheckPspConfig"},
+ {0x7BE1421C, 0, "sceKernelCheckExecFile"},
+ {0xBF983EF2, 0, "sceKernelProbeExecutableObject"},
+ {0x7068E6BA, 0, "sceKernelLoadExecutableObject"},
+ {0xB4D6FECC, 0, "sceKernelApplyElfRelSection"},
+ {0x54AB2675, 0, "LoadCoreForKernel_54AB2675"},
+ {0x2952F5AC, 0, "sceKernelDcacheWBinvAll"},
+ {0xD8779AC6, sceKernelIcacheClearAll, "sceKernelIcacheClearAll"},
+ {0x99A695F0, 0, "sceKernelRegisterLibrary"},
+ {0x5873A31F, 0, "sceKernelRegisterLibraryForUser"},
+ {0x0B464512, 0, "sceKernelReleaseLibrary"},
+ {0x9BAF90F6, 0, "sceKernelCanReleaseLibrary"},
+ {0x0E760DBA, 0, "sceKernelLinkLibraryEntries"},
+ {0x0DE1F600, 0, "sceKernelLinkLibraryEntriesForUser"},
+ {0xDA1B09AA, 0, "sceKernelUnLinkLibraryEntries"},
+ {0xC99DD47A, 0, "sceKernelQueryLoadCoreCB"},
+ {0x616FCCCD, 0, "sceKernelSetBootCallbackLevel"},
+ {0xF32A2940, 0, "sceKernelModuleFromUID"},
+ {0xCD0F3BAC, 0, "sceKernelCreateModule"},
+ {0x6B2371C2, 0, "sceKernelDeleteModule"},
+ {0x7320D964, 0, "sceKernelModuleAssign"},
+ {0x44B292AB, 0, "sceKernelAllocModule"},
+ {0xBD61D4D5, 0, "sceKernelFreeModule"},
+ {0xAE7C6E76, 0, "sceKernelRegisterModule"},
+ {0x74CF001A, 0, "sceKernelReleaseModule"},
+ {0xFB8AE27D, 0, "sceKernelFindModuleByAddress"},
+ {0xCCE4A157, 0, "sceKernelFindModuleByUID"},
+ {0x82CE54ED, 0, "sceKernelModuleCount"},
+ {0xC0584F0C, 0, "sceKernelGetModuleList"},
+ {0xCF8A41B1, sceKernelFindModuleByName,"sceKernelFindModuleByName"},
};
@@ -191,7 +195,6 @@ const HLEFunction sceUsb[] =
{0x5be0e002, 0, "sceUsbWaitState"},
{0x1c360735, 0, "sceUsbWaitCancel"},
};
-
const HLEFunction sceUsbstor[] =
{
@@ -208,20 +211,11 @@ const HLEFunction sceUsbstorBoot[] =
{0xA55C9E16, 0, "sceUsbstorBootUnregisterNotify"},
};
-
-const HLEFunction sceOpenPSID[] =
-{
- {0xc69bebce, 0, "sceOpenPSID_c69bebce"},
-};
-
-
const HLEModule moduleList[] =
{
{"FakeSysCalls", SZ(FakeSysCalls), FakeSysCalls},
- {"sceOpenPSID", SZ(sceOpenPSID), sceOpenPSID},
{"UtilsForUser",SZ(UtilsForUser),UtilsForUser},
{"KDebugForKernel",SZ(KDebugForKernel),KDebugForKernel},
- {"sceParseUri"},
{"sceSAScore"},
{"sceUsbstor",SZ(sceUsbstor),sceUsbstor},
{"sceUsbstorBoot",SZ(sceUsbstorBoot),sceUsbstorBoot},
@@ -230,9 +224,6 @@ const HLEModule moduleList[] =
{"sceCert_Loader"},
{"SceFont_Library"},
{"sceNetApctl"},
- {"sceOpenPSID"},
- {"sceParseHttp"},
- {"sceSsl"},
{"sceSIRCS_IrDA_Driver"},
{"Pspnet_Scan"},
{"Pspnet_Show_MacAddr"},
@@ -245,41 +236,45 @@ const HLEModule moduleList[] =
static const int numModules = sizeof(moduleList)/sizeof(HLEModule);
void RegisterAllModules() {
- Register_Kernel_Library();
- Register_ThreadManForUser();
- Register_LoadExecForUser();
- Register_SysMemUserForUser();
- Register_InterruptManager();
- Register_IoFileMgrForUser();
- Register_ModuleMgrForUser();
- Register_StdioForUser();
+ Register_Kernel_Library();
+ Register_ThreadManForUser();
+ Register_LoadExecForUser();
+ Register_SysMemUserForUser();
+ Register_InterruptManager();
+ Register_IoFileMgrForUser();
+ Register_ModuleMgrForUser();
+ Register_StdioForUser();
- Register_sceHprm();
- Register_sceCtrl();
- Register_sceDisplay();
- Register_sceAudio();
- Register_sceSasCore();
+ Register_sceHprm();
+ Register_sceCtrl();
+ Register_sceDisplay();
+ Register_sceAudio();
+ Register_sceSasCore();
Register_sceFont();
Register_sceNet();
- Register_sceRtc();
- Register_sceWlanDrv();
- Register_sceMpeg();
- Register_sceMp3();
- Register_sceHttp();
- Register_scePower();
+ Register_sceRtc();
+ Register_sceWlanDrv();
+ Register_sceMpeg();
+ Register_sceMp3();
+ Register_sceHttp();
+ Register_scePower();
Register_sceImpose();
- Register_sceSuspendForUser();
- Register_sceGe_user();
- Register_sceUmdUser();
- Register_sceDmac();
- Register_sceUtility();
- Register_sceAtrac3plus();
- Register_scePsmf();
- Register_scePsmfPlayer();
+ Register_sceSuspendForUser();
+ Register_sceGe_user();
+ Register_sceUmdUser();
+ Register_sceDmac();
+ Register_sceUtility();
+ Register_sceAtrac3plus();
+ Register_scePsmf();
+ Register_scePsmfPlayer();
+ Register_sceOpenPSID();
+ Register_sceParseUri();
+ Register_sceSsl();
+ Register_sceParseHttp();
- for (int i = 0; i < numModules; i++)
- {
- RegisterModule(moduleList[i].name, moduleList[i].numFunctions, moduleList[i].funcTable);
- }
+ for (int i = 0; i < numModules; i++)
+ {
+ RegisterModule(moduleList[i].name, moduleList[i].numFunctions, moduleList[i].funcTable);
+ }
}
diff --git a/Core/HLE/sceHttp.cpp b/Core/HLE/sceHttp.cpp
index 8fbf7b90ab..ffc1205528 100644
--- a/Core/HLE/sceHttp.cpp
+++ b/Core/HLE/sceHttp.cpp
@@ -65,9 +65,16 @@ const HLEFunction sceHttp[] =
{0xae948fee,0,"sceHttpDisableAuth"},
{0xccbd167a,0,"sceHttpDisableCache"},
{0xd081ec8f,0,"sceHttpGetNetworkErrno"},
- {0x76d1363b,0,"sceHttp_76d1363b"},
- {0x87797bdd,0,"sceHttp_87797bdd"},
- {0xf1657b22,0,"sceHttp_f1657b22"},
+ {0x76d1363b,0,"sceHttpSaveSystemCookie"},
+ {0x87797bdd,0,"sceHttpsLoadDefaultCert"},
+ {0xf1657b22,0,"sceHttpLoadSystemCookie"},
+ {0x9B1F1F36,0,"sceHttpCreateTemplate"},
+ {0xB509B09E,0,"sceHttpCreateRequestWithURL"},
+ {0xCDF8ECB9,0,"sceHttpCreateConnectionWithURL"},
+ {0x1F0FC3E3,0,"sceHttpSetRecvTimeOut"},
+ {0xDB266CCF,0,"sceHttpGetAllHeader"},
+ {0x68AB0F86,0,"sceHttpsInitWithPath"},
+ {0xB3FAF831,0,"sceHttpsDisableOption"},
};
void Register_sceHttp()
diff --git a/Core/HLE/sceKernel.cpp b/Core/HLE/sceKernel.cpp
index 955c89c771..d1d783b288 100644
--- a/Core/HLE/sceKernel.cpp
+++ b/Core/HLE/sceKernel.cpp
@@ -49,6 +49,7 @@
#include "scePower.h"
#include "sceUtility.h"
#include "sceUmd.h"
+#include "sceSsl.h"
#include "../Util/PPGeDraw.h"
@@ -82,6 +83,7 @@ void __KernelInit()
__UtilityInit();
__UmdInit();
__CtrlInit();
+ __SslInit();
// "Internal" PSP libraries
__PPGeInit();
diff --git a/Core/HLE/sceOpenPSID.cpp b/Core/HLE/sceOpenPSID.cpp
new file mode 100644
index 0000000000..41241440ba
--- /dev/null
+++ b/Core/HLE/sceOpenPSID.cpp
@@ -0,0 +1,45 @@
+// Copyright (c) 2012- PPSSPP Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0 or later versions.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official git repository and contact information can be found at
+// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
+
+#include "HLE.h"
+
+#include "sceOpenPSID.h"
+
+int sceOpenPSIDGetOpenPSID(u32 OpenPSIDPtr)
+{
+ ERROR_LOG(HLE, "UNTESTED sceOpenPSIDGetOpenPSID(%d)", OpenPSIDPtr);
+ u8 dummyOpenPSID[16] = {0x10, 0x02, 0xA3, 0x44, 0x13, 0xF5, 0x93, 0xB0, 0xCC, 0x6E, 0xD1, 0x32, 0x27, 0x85, 0x0F, 0x9D};
+
+ if (Memory::IsValidAddress(OpenPSIDPtr))
+ {
+ for (int i = 0; i < 16; i++)
+ {
+ Memory::Write_U8(dummyOpenPSID[i], OpenPSIDPtr+i);
+ }
+ }
+ return 0;
+}
+
+const HLEFunction sceOpenPSID[] =
+{
+ {0xc69bebce, WrapI_U, "sceOpenPSIDGetOpenPSID"},
+};
+
+void Register_sceOpenPSID()
+{
+ RegisterModule("sceOpenPSID", ARRAY_SIZE(sceOpenPSID), sceOpenPSID);
+}
\ No newline at end of file
diff --git a/Core/HLE/sceOpenPSID.h b/Core/HLE/sceOpenPSID.h
new file mode 100644
index 0000000000..07c5171e59
--- /dev/null
+++ b/Core/HLE/sceOpenPSID.h
@@ -0,0 +1,22 @@
+// Copyright (c) 2012- PPSSPP Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0 or later versions.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official git repository and contact information can be found at
+// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
+
+#pragma once
+
+void __sceOpenPSIDInit();
+
+void Register_sceOpenPSID();
diff --git a/Core/HLE/sceParseHttp.cpp b/Core/HLE/sceParseHttp.cpp
new file mode 100644
index 0000000000..6ad04ec026
--- /dev/null
+++ b/Core/HLE/sceParseHttp.cpp
@@ -0,0 +1,31 @@
+// Copyright (c) 2012- PPSSPP Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0 or later versions.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official git repository and contact information can be found at
+// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
+
+#include "HLE.h"
+
+#include "sceParseHttp.h"
+
+const HLEFunction sceParseHttp [] =
+{
+ {0x8077A433, 0, "sceParseHttpStatusLineFunction"},
+ {0xAD7BFDEF, 0, "sceParseHttpResponseHeaderFunction"},
+};
+
+void Register_sceParseHttp()
+{
+ RegisterModule("sceParseHttp", ARRAY_SIZE(sceParseHttp), sceParseHttp);
+}
\ No newline at end of file
diff --git a/Core/HLE/sceParseHttp.h b/Core/HLE/sceParseHttp.h
new file mode 100644
index 0000000000..6c67a246b2
--- /dev/null
+++ b/Core/HLE/sceParseHttp.h
@@ -0,0 +1,20 @@
+// Copyright (c) 2012- PPSSPP Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0 or later versions.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official git repository and contact information can be found at
+// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
+
+#pragma once
+
+void Register_sceParseHttp();
\ No newline at end of file
diff --git a/Core/HLE/sceParseUri.cpp b/Core/HLE/sceParseUri.cpp
new file mode 100644
index 0000000000..10268b47a9
--- /dev/null
+++ b/Core/HLE/sceParseUri.cpp
@@ -0,0 +1,33 @@
+// Copyright (c) 2012- PPSSPP Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0 or later versions.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official git repository and contact information can be found at
+// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
+
+#include "HLE.h"
+
+#include "sceParseUri.h"
+
+const HLEFunction sceParseUri[] =
+{
+ {0x49E950EC, 0, "sceUriEscapeFunction"},
+ {0x062BB07E, 0, "sceUriUnescapeFunction"},
+ {0x568518C9, 0, "sceUriParseFunction"},
+ {0x7EE318AF, 0, "sceUriBuildFunction"},
+};
+
+void Register_sceParseUri()
+{
+ RegisterModule("sceParseUri", ARRAY_SIZE(sceParseUri), sceParseUri);
+}
\ No newline at end of file
diff --git a/Core/HLE/sceParseUri.h b/Core/HLE/sceParseUri.h
new file mode 100644
index 0000000000..5108cd0219
--- /dev/null
+++ b/Core/HLE/sceParseUri.h
@@ -0,0 +1,20 @@
+// Copyright (c) 2012- PPSSPP Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0 or later versions.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official git repository and contact information can be found at
+// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
+
+#pragma once
+
+void Register_sceParseUri();
\ No newline at end of file
diff --git a/Core/HLE/sceSsl.cpp b/Core/HLE/sceSsl.cpp
new file mode 100644
index 0000000000..0a762af122
--- /dev/null
+++ b/Core/HLE/sceSsl.cpp
@@ -0,0 +1,116 @@
+// Copyright (c) 2012- PPSSPP Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0 or later versions.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official git repository and contact information can be found at
+// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
+
+#include "HLE.h"
+
+#include "sceSsl.h"
+
+#define ERROR_SSL_NOT_INIT 0x80435001;
+#define ERROR_SSL_ALREADY_INIT 0x80435020;
+#define ERROR_SSL_OUT_OF_MEMORY 0x80435022;
+#define ERROR_SSL_INVALID_PARAMETER 0x804351FE;
+
+bool isSslInit;
+u32 maxMemSize;
+u32 currentMemSize;
+
+void __SslInit()
+{
+ isSslInit = 0;
+ maxMemSize = 0;
+ currentMemSize = 0;
+}
+
+int sceSslInit(int heapSize)
+{
+ DEBUG_LOG(HLE, "sceSslInit %d", heapSize);
+ if (isSslInit)
+ {
+ return ERROR_SSL_ALREADY_INIT;
+ }
+ if (heapSize <= 0)
+ {
+ return ERROR_SSL_INVALID_PARAMETER;
+ }
+
+ maxMemSize = heapSize;
+ currentMemSize = heapSize / 2; // As per jpcsp
+ isSslInit = true;
+ return 0;
+}
+
+int sceSslEnd()
+{
+ DEBUG_LOG(HLE, "sceSslEnd");
+ if (!isSslInit)
+ {
+ return ERROR_SSL_NOT_INIT;
+ }
+ isSslInit = false;
+ return 0;
+}
+
+int sceSslGetUsedMemoryMax(u32 maxMemPtr)
+{
+ DEBUG_LOG(HLE, "sceSslGetUsedMemoryMax %d", maxMemPtr);
+ if (!isSslInit)
+ {
+ return ERROR_SSL_NOT_INIT;
+ }
+
+ if (Memory::IsValidAddress(maxMemPtr))
+ {
+ Memory::Write_U32(maxMemSize, maxMemPtr);
+ }
+ return 0;
+}
+
+int sceSslGetUsedMemoryCurrent(u32 currentMemPtr)
+{
+ DEBUG_LOG(HLE, "sceSslGetUsedMemoryCurrent %d", currentMemPtr);
+ if (!isSslInit)
+ {
+ return ERROR_SSL_NOT_INIT;
+ }
+
+ if (Memory::IsValidAddress(currentMemPtr))
+ {
+ Memory::Write_U32(currentMemSize, currentMemPtr);
+ }
+ return 0;
+}
+
+const HLEFunction sceSsl[] =
+{
+ {0x957ECBE2, WrapI_I, "sceSslInit"},
+ {0x191CDEFF, WrapI_V, "sceSslEnd"},
+ {0x5BFB6B61, 0, "sceSslGetNotAfter"},
+ {0x17A10DCC, 0, "sceSslGetNotBefore"},
+ {0x3DD5E023, 0, "sceSslGetSubjectName"},
+ {0x1B7C8191, 0, "sceSslGetIssuerName"},
+ {0xCC0919B0, 0, "sceSslGetSerialNumber"},
+ {0x058D21C0, 0, "sceSslGetNameEntryCount"},
+ {0xD6D097B4, 0, "sceSslGetNameEntryInfo"},
+ {0xB99EDE6A, WrapI_U, "sceSslGetUsedMemoryMax"},
+ {0x0EB43B06, WrapI_U, "sceSslGetUsedMemoryCurrent"},
+ {0xF57765D3, 0, "sceSslGetKeyUsage"},
+};
+
+void Register_sceSsl()
+{
+ RegisterModule("sceSsl", ARRAY_SIZE(sceSsl), sceSsl);
+}
\ No newline at end of file
diff --git a/Core/HLE/sceSsl.h b/Core/HLE/sceSsl.h
new file mode 100644
index 0000000000..c8e46f976b
--- /dev/null
+++ b/Core/HLE/sceSsl.h
@@ -0,0 +1,22 @@
+// Copyright (c) 2012- PPSSPP Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0 or later versions.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official git repository and contact information can be found at
+// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
+
+#pragma once
+
+void Register_sceSsl();
+
+void __SslInit();
\ No newline at end of file