示例#1
0
//SceUID sceKernelCreateSema(const char *name, SceUInt attr, int initVal, int maxVal, SceKernelSemaOptParam *option);
// void because it changes threads.
void sceKernelCreateSema(const char* name, u32 attr, int initVal, int maxVal, u32 optionPtr)
{
	if (!semaInitComplete)
		__KernelSemaInit();

	if (!name)
	{
		RETURN(SCE_KERNEL_ERROR_ERROR);
		return;
	}

	Semaphore *s = new Semaphore;
	SceUID id = kernelObjects.Create(s);

	s->ns.size = sizeof(NativeSemaphore);
	strncpy(s->ns.name, name, 31);
	s->ns.name[31] = 0;
	s->ns.attr = attr;
	s->ns.initCount = initVal;
	s->ns.currentCount = s->ns.initCount;
	s->ns.maxCount = maxVal;
	s->ns.numWaitThreads = 0;

	DEBUG_LOG(HLE,"%i=sceKernelCreateSema(%s, %08x, %i, %i, %08x)", id, s->ns.name, s->ns.attr, s->ns.initCount, s->ns.maxCount, optionPtr);

	if (optionPtr != 0)
		WARN_LOG(HLE,"sceKernelCreateSema(%s) unsupported options parameter.", name);

	RETURN(id);

	__KernelReSchedule("semaphore created");
}
示例#2
0
void __KernelInit()
{
    if (kernelRunning)
    {
        ERROR_LOG(SCEKERNEL, "Can't init kernel when kernel is running");
        return;
    }

    __KernelTimeInit();
    __InterruptsInit();
    __KernelMemoryInit();
    __KernelThreadingInit();
    __KernelAlarmInit();
    __KernelVTimerInit();
    __KernelEventFlagInit();
    __KernelMbxInit();
    __KernelMutexInit();
    __KernelSemaInit();
    __KernelMsgPipeInit();
    __IoInit();
    __JpegInit();
    __AudioInit();
    __SasInit();
    __AtracInit();
    __CccInit();
    __DisplayInit();
    __GeInit();
    __PowerInit();
    __UtilityInit();
    __UmdInit();
    __MpegInit();
    __PsmfInit();
    __CtrlInit();
    __RtcInit();
    __SslInit();
    __ImposeInit();
    __UsbInit();
    __FontInit();
    __NetInit();
    __NetAdhocInit();
    __VaudioInit();
    __CheatInit();
    __HeapInit();
    __DmacInit();
    __AudioCodecInit();
    __VideoPmpInit();

    SaveState::Init();  // Must be after IO, as it may create a directory
    Reporting::Init();

    // "Internal" PSP libraries
    __PPGeInit();

    kernelRunning = true;
    INFO_LOG(SCEKERNEL, "Kernel initialized.");
}
示例#3
0
void __KernelInit()
{
	if (kernelRunning)
	{
		ERROR_LOG(HLE, "Can't init kernel when kernel is running");
		return;
	}

	__KernelTimeInit();
	__InterruptsInit();
	__KernelMemoryInit();
	__KernelThreadingInit();
	__KernelAlarmInit();
	__KernelVTimerInit();
	__KernelEventFlagInit();
	__KernelMbxInit();
	__KernelMutexInit();
	__KernelSemaInit();
	__IoInit();
	__AudioInit();
	__SasInit();
	__AtracInit();
	__DisplayInit();
	__GeInit();
	__PowerInit();
	__UtilityInit();
	__UmdInit();
	__MpegInit(PSP_CoreParameter().useMediaEngine);
	__PsmfInit();
	__CtrlInit();
	__RtcInit();
	__SslInit();
	__ImposeInit();
	__UsbInit();
	__FontInit();
	__NetInit();
	__VaudioInit();
	__CheatInit();
	
	SaveState::Init();  // Must be after IO, as it may create a directory

	// "Internal" PSP libraries
	__PPGeInit();

	kernelRunning = true;
	INFO_LOG(HLE, "Kernel initialized.");
}
示例#4
0
//SceUID sceKernelCreateSema(const char *name, SceUInt attr, int initVal, int maxVal, SceKernelSemaOptParam *option);
int sceKernelCreateSema(const char* name, u32 attr, int initVal, int maxVal, u32 optionPtr)
{
	if (!semaInitComplete)
		__KernelSemaInit();

	if (!name)
	{
		WARN_LOG(HLE, "%08x=sceKernelCreateSema(): invalid name", SCE_KERNEL_ERROR_ERROR);
		return SCE_KERNEL_ERROR_ERROR;
	}
	if (attr >= 0x200)
	{
		WARN_LOG(HLE, "%08x=sceKernelCreateSema(): invalid attr parameter: %08x", SCE_KERNEL_ERROR_ILLEGAL_ATTR, attr);
		return SCE_KERNEL_ERROR_ILLEGAL_ATTR;
	}

	Semaphore *s = new Semaphore;
	SceUID id = kernelObjects.Create(s);

	s->ns.size = sizeof(NativeSemaphore);
	strncpy(s->ns.name, name, KERNELOBJECT_MAX_NAME_LENGTH);
	s->ns.name[KERNELOBJECT_MAX_NAME_LENGTH] = 0;
	s->ns.attr = attr;
	s->ns.initCount = initVal;
	s->ns.currentCount = s->ns.initCount;
	s->ns.maxCount = maxVal;
	s->ns.numWaitThreads = 0;

	DEBUG_LOG(HLE, "%i=sceKernelCreateSema(%s, %08x, %i, %i, %08x)", id, s->ns.name, s->ns.attr, s->ns.initCount, s->ns.maxCount, optionPtr);

	if (optionPtr != 0)
		WARN_LOG(HLE, "sceKernelCreateSema(%s) unsupported options parameter: %08x", name, optionPtr);
	if ((attr & ~PSP_SEMA_ATTR_PRIORITY) != 0)
		WARN_LOG(HLE, "sceKernelCreateSema(%s) unsupported attr parameter: %08x", name, attr);

	return id;
}