@HLEFunction(nid = 0xA4FC06A4, version = 150, checkInsideInterrupt = true) public int sceGeSetCallback(TPointer cbdata_addr) { pspGeCallbackData cbdata = new pspGeCallbackData(); cbdata.read(cbdata_addr); // The cbid returned has a value in the range [0..15]. int cbid = SceUidManager.getNewId(geCallbackPurpose, 0, 15); if (cbid == SceUidManager.INVALID_ID) { log.warn(String.format("sceGeSetCallback no more callback ID available")); return SceKernelErrors.ERROR_OUT_OF_MEMORY; } if (log.isDebugEnabled()) { log.debug( String.format( "sceGeSetCallback signalFunc=0x%08X, signalArg=0x%08X, finishFunc=0x%08X, finishArg=0x%08X, result cbid=0x%X", cbdata.signalFunction, cbdata.signalArgument, cbdata.finishFunction, cbdata.finishArgument, cbid)); } ThreadManForUser threadMan = Modules.ThreadManForUserModule; SceKernelCallbackInfo callbackSignal = threadMan.hleKernelCreateCallback( "GeCallbackSignal", cbdata.signalFunction, cbdata.signalArgument); SceKernelCallbackInfo callbackFinish = threadMan.hleKernelCreateCallback( "GeCallbackFinish", cbdata.finishFunction, cbdata.finishArgument); signalCallbacks.put(cbid, callbackSignal); finishCallbacks.put(cbid, callbackFinish); return cbid; }