public void waitThreadForever(CpuThreadState CpuThreadState) { var SleepThread = HleState.ThreadManager.Current; SleepThread.CurrentStatus = HleThread.Status.Waiting; SleepThread.CurrentWaitType = HleThread.WaitType.None; CpuThreadState.Yield(); }
public int sceKernelChangeThreadPriority(CpuThreadState CpuThreadState, int ThreadId, int Priority) { GetThreadById(ThreadId).PriorityValue = Priority; HleState.ThreadManager.Reschedule(); CpuThreadState.Yield(); //throw(new NotImplementedException()); return 0; }
public int sceKernelSignalSema(CpuThreadState CpuThreadState, SemaphoreId SemaphoreId, int Signal) { //Console.Error.WriteLine("sceKernelSignalSema!"); var HleSemaphore = GetSemaphoreById(SemaphoreId); if (HleSemaphore.IncrementCount(Signal) > 0) { CpuThreadState.Yield(); } return 0; }
public int sceKernelDeleteSema(CpuThreadState CpuThreadState, SemaphoreId SemaphoreId) { var HleSemaphore = GetSemaphoreById(SemaphoreId); SemaphoreManager.Semaphores.Remove((int)SemaphoreId); if (HleSemaphore.IncrementCount(HleSemaphore.SceKernelSemaInfo.MaximumCount) > 0) { CpuThreadState.Yield(); } return 0; }
public int sceKernelPollSema(CpuThreadState CpuThreadState, SemaphoreId SemaphoreId, int Signal) { var Semaphore = GetSemaphoreById(SemaphoreId); if (Signal <= 0) throw(new SceKernelException(SceKernelErrors.ERROR_KERNEL_ILLEGAL_COUNT)); if (Semaphore.CurrentCount - Signal < 0) { //ThreadManager.Reschedule(); CpuThreadState.Yield(); throw (new SceKernelException(SceKernelErrors.ERROR_KERNEL_SEMA_ZERO)); } Semaphore.IncrementCount(-Signal); //throw(new NotImplementedException()); return 0; /* try { PspSemaphore pspSemaphore = uniqueIdFactory.get!PspSemaphore(semaid); if (pspSemaphore.info.currentCount - signal < 0) return SceKernelErrors.ERROR_KERNEL_SEMA_ZERO; pspSemaphore.info.currentCount -= signal; return 0; } catch (UniqueIdNotFoundException) { return SceKernelErrors.ERROR_KERNEL_NOT_FOUND_SEMAPHORE; } */ }
public void finalizeCallback(CpuThreadState CpuThreadState) { CpuThreadState.CpuProcessor.RunningCallback = false; CpuThreadState.Yield(); //throw (new HleEmulatorFinalizeCallbackException()); }
public int sceKernelRotateThreadReadyQueue(CpuThreadState CpuThreadState, int priority) { // @TODO! //throw(new NotImplementedException()); CpuThreadState.Yield(); return 0; }
public int sceKernelChangeThreadPriority(CpuThreadState CpuThreadState, int ThreadId, int Priority) { var Thread = GetThreadById(ThreadId); Thread.PriorityValue = Priority; CpuThreadState.Yield(); //throw(new NotImplementedException()); return 0; }
public int sceKernelStartThread(CpuThreadState CpuThreadState, int ThreadId, int UserDataLength, uint UserDataPointer) { var ThreadToStart = GetThreadById((int)ThreadId); _sceKernelStartThread(CpuThreadState, ThreadId, UserDataLength, UserDataPointer); // Schedule new thread? CpuThreadState.Yield(); return 0; }
public int sceKernelStartThread(CpuThreadState CpuThreadState, int ThreadId, uint ArgumentsLength, uint ArgumentsPointer) { var ThreadToStart = GetThreadById((int)ThreadId); //Console.WriteLine("LEN: {0:X}", ArgumentsLength); //Console.WriteLine("PTR: {0:X}", ArgumentsPointer); ThreadToStart.CpuThreadState.GPR[4] = (int)ArgumentsLength; ThreadToStart.CpuThreadState.GPR[5] = (int)ArgumentsPointer; ThreadToStart.CurrentStatus = HleThread.Status.Ready; // Schedule new thread? HleState.ThreadManager.ScheduleNext(ThreadToStart); CpuThreadState.Yield(); return 0; }