Skip to content

Commit

Permalink
Added 1 new NID of OpenPSID Service, also added Init & Shutdown function
Browse files Browse the repository at this point in the history
  • Loading branch information
anr2me committed Aug 22, 2020
1 parent d465ce5 commit 051bbb6
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 19 deletions.
1 change: 1 addition & 0 deletions Core/HLE/HLETables.cpp
Expand Up @@ -304,6 +304,7 @@ void RegisterAllModules() {
Register_sceUsbMic();
Register_sceOpenPSID_driver();
Register_semaphore();
Register_sceDdrdb();
// add new modules here.
}

3 changes: 3 additions & 0 deletions Core/HLE/sceKernel.cpp
Expand Up @@ -85,6 +85,7 @@
#include "sceHeap.h"
#include "sceDmac.h"
#include "sceMp4.h"
#include "sceOpenPSID.h"

#include "../Util/PPGeDraw.h"

Expand Down Expand Up @@ -150,6 +151,7 @@ void __KernelInit()
__UsbGpsInit();
__UsbCamInit();
__UsbMicInit();
__OpenPSIDInit();

SaveState::Init(); // Must be after IO, as it may create a directory
Reporting::Init();
Expand All @@ -173,6 +175,7 @@ void __KernelShutdown()
hleCurrentThreadName = NULL;
kernelObjects.Clear();

__OpenPSIDShutdown();
__UsbCamShutdown();
__UsbMicShutdown();
__UsbGpsShutdown();
Expand Down
71 changes: 54 additions & 17 deletions Core/HLE/sceOpenPSID.cpp
Expand Up @@ -18,57 +18,94 @@
#include "Core/HLE/HLE.h"
#include "Core/HLE/FunctionWrappers.h"
#include "Core/HLE/sceOpenPSID.h"
#include "Core/MemMap.h"
#include "Core/MemMapHelpers.h"
#include <Core/HLE/proAdhoc.h>

u8 dummyOpenPSID[16] = { 0x10, 0x02, 0xA3, 0x44, 0x13, 0xF5, 0x93, 0xB0, 0xCC, 0x6E, 0xD1, 0x32, 0x27, 0x85, 0x0F, 0x9D };
SceOpenPSID dummyOpenPSID = { 0x10, 0x02, 0xA3, 0x44, 0x13, 0xF5, 0x93, 0xB0, 0xCC, 0x6E, 0xD1, 0x32, 0x27, 0x85, 0x0F, 0x9D };

void __OpenPSIDInit() {
// Making sure the ID is unique
getLocalMac((SceNetEtherAddr*)&dummyOpenPSID);
return;
}

void __OpenPSIDShutdown() {

return;
}

static int sceOpenPSIDGetOpenPSID(u32 OpenPSIDPtr)
{
WARN_LOG(HLE, "UNTESTED sceOpenPSIDGetOpenPSID(%d)", OpenPSIDPtr);
getLocalMac((SceNetEtherAddr*)&dummyOpenPSID);
WARN_LOG(HLE, "UNTESTED %s(%08x)", __FUNCTION__, OpenPSIDPtr);

if (Memory::IsValidAddress(OpenPSIDPtr))
{
for (int i = 0; i < 16; i++)
{
Memory::Write_U8(dummyOpenPSID[i], OpenPSIDPtr+i);
}
Memory::WriteStruct(OpenPSIDPtr, &dummyOpenPSID);
}
return 0;
}

static int sceOpenPSID_driver_0x19D579F0(u32 OpenPSIDPtr,u32 unknown)
static int sceOpenPSIDGetPSID(u32 OpenPSIDPtr,u32 unknown)
{
WARN_LOG(HLE, "UNTESTED sceOpenPSID_driver_0x19D579F0(%d,%d)", OpenPSIDPtr,unknown);
getLocalMac((SceNetEtherAddr*)&dummyOpenPSID);
WARN_LOG(HLE, "UNTESTED %s(%08x, %08x)", __FUNCTION__, OpenPSIDPtr, unknown);

if (Memory::IsValidAddress(OpenPSIDPtr))
{
for (int i = 0; i < 16; i++)
{
Memory::Write_U8(dummyOpenPSID[i], OpenPSIDPtr + i);
}
Memory::WriteStruct(OpenPSIDPtr, &dummyOpenPSID);
}
return 0;
}

/*
Verify if the provided signature is valid for the specified data. The public key
is provided by the system software.
Note:
The ECDSA algorithm is used to verify a signature.
Parameters:
pData Pointer to data the signature has to be verified for. Data length: KIRK_ECDSA_SRC_DATA_LEN.
pSig Pointer to the signature to verify. Signature length: KIRK_ECDSA_SIG_LEN.
Returns:
0 on success, otherwise < 0.
*/
static s32 sceDdrdb_F013F8BF(u32 pDataPtr, u32 pSigPtr) {
ERROR_LOG(HLE, "UNIMPL %s(%08x, %08x)", __FUNCTION__, pDataPtr, pSigPtr);

return 0;
}



const HLEFunction sceOpenPSID[] =
{
{0XC69BEBCE, &WrapI_U<sceOpenPSIDGetOpenPSID>, "sceOpenPSIDGetOpenPSID", 'i', "x"},
{0XC69BEBCE, &WrapI_U<sceOpenPSIDGetOpenPSID>, "sceOpenPSIDGetOpenPSID", 'i', "x" },
};

void Register_sceOpenPSID()
{
RegisterModule("sceOpenPSID", ARRAY_SIZE(sceOpenPSID), sceOpenPSID);
}

// According to https://playstationdev.wiki/pspprxlibraries/5.00/kd/openpsid.xml
// sceOpenPSID_driver library seems to contains a duplicate of sceOpenPSIDGetOpenPSID just like sceOpenPSID library, is this allowed here?
const HLEFunction sceOpenPSID_driver[] =
{
{0x19D579F0, &WrapI_UU<sceOpenPSID_driver_0x19D579F0>, "sceOpenPSID_driver_0x19D579F0", 'i', "xx" },
{0x19D579F0, &WrapI_UU<sceOpenPSIDGetPSID>, "sceOpenPSIDGetPSID", 'i', "xx" },
{0XC69BEBCE, &WrapI_U<sceOpenPSIDGetOpenPSID>, "sceOpenPSIDGetOpenPSID", 'i', "x" },
};

void Register_sceOpenPSID_driver()
{
RegisterModule("sceOpenPSID_driver", ARRAY_SIZE(sceOpenPSID_driver), sceOpenPSID_driver);
}
const HLEFunction sceDdrdb[] =
{
{0xF013F8BF, &WrapI_UU<sceDdrdb_F013F8BF>, "sceDdrdb_F013F8BF", 'i', "xx" },
};

void Register_sceDdrdb()
{
RegisterModule("sceDdrdb", ARRAY_SIZE(sceDdrdb), sceDdrdb);
}
16 changes: 14 additions & 2 deletions Core/HLE/sceOpenPSID.h
Expand Up @@ -17,7 +17,19 @@

#pragma once

void __sceOpenPSIDInit();
#define PSP_DNAS_USER_DATA_MAX_LEN 2048
#define PSP_OPENPSID_SIZE 16

typedef struct SceOpenPSID {
u8 data[PSP_OPENPSID_SIZE];
} SceOpenPSID;

void __OpenPSIDInit();
void __OpenPSIDShutdown();

void Register_sceOpenPSID();
void Register_sceOpenPSID_driver();
void Register_sceOpenPSID_driver();
void Register_sceDdrdb();

static int sceOpenPSIDGetOpenPSID(u32 OpenPSIDPtr);
static int sceOpenPSIDGetPSID(u32 OpenPSIDPtr, u32 unknown);

0 comments on commit 051bbb6

Please sign in to comment.