public virtual void execute() { ThreadManForUser timerManager = Modules.ThreadManForUserModule; int vtimerInterruptResult = Emulator.Processor.cpu._v0; //if (log.DebugEnabled) { Console.WriteLine("VTimer returned value " + vtimerInterruptResult); } if (vtimerInterruptResult == 0) { // VTimer is canceled timerManager.cancelVTimer(sceKernelVTimerInfo); } else { timerManager.rescheduleVTimer(sceKernelVTimerInfo, vtimerInterruptResult); } }
public virtual void execute() { ThreadManForUser timerManager = Modules.ThreadManForUserModule; int alarmInterruptResult = Emulator.Processor.cpu._v0; if (Modules.log.DebugEnabled) { Modules.Console.WriteLine("Alarm returned value " + alarmInterruptResult); } if (alarmInterruptResult == 0) { // Alarm is canceled timerManager.cancelAlarm(sceKernelAlarmInfo); } else { timerManager.rescheduleAlarm(sceKernelAlarmInfo, alarmInterruptResult); } }
public override int ioDevctl(string deviceName, int command, TPointer inputPointer, int inputLength, TPointer outputPointer, int outputLength) { int result; switch (command) { // Check the MemoryStick's driver status (mscmhc0). case 0x02025801: { Console.WriteLine("ioDevctl check ms driver status"); if (outputPointer.AddressGood) { // 0 = Driver busy. // 1 = Driver ready. // 4 = ??? outputPointer.setValue32(4); result = 0; } else { result = IO_ERROR; } break; } // Register MemoryStick's insert/eject callback (mscmhc0). case 0x02015804: { Console.WriteLine("ioDevctl register memorystick insert/eject callback (mscmhc0)"); ThreadManForUser threadMan = Modules.ThreadManForUserModule; if (inputPointer.AddressGood && inputLength == 4) { int cbid = inputPointer.getValue32(); const int callbackType = SceKernelThreadInfo.THREAD_CALLBACK_MEMORYSTICK; if (threadMan.hleKernelRegisterCallback(callbackType, cbid)) { // Trigger the registered callback immediately. threadMan.hleKernelNotifyCallback(callbackType, cbid, MemoryStick.StateMs); result = 0; // Success. } else { result = SceKernelErrors.ERROR_MEMSTICK_DEVCTL_TOO_MANY_CALLBACKS; } } else { result = ERROR_MEMSTICK_DEVCTL_BAD_PARAMS; } break; } // Unregister MemoryStick's insert/eject callback (mscmhc0). case 0x02015805: { Console.WriteLine("ioDevctl unregister memorystick insert/eject callback (mscmhc0)"); ThreadManForUser threadMan = Modules.ThreadManForUserModule; if (inputPointer.AddressGood && inputLength == 4) { int cbid = inputPointer.getValue32(); if (threadMan.hleKernelUnRegisterCallback(SceKernelThreadInfo.THREAD_CALLBACK_MEMORYSTICK, cbid)) { result = 0; // Success. } else { result = ERROR_MEMSTICK_DEVCTL_BAD_PARAMS; // No such callback. } } else { result = ERROR_MEMSTICK_DEVCTL_BAD_PARAMS; } break; } // Check if the device is inserted (mscmhc0). case 0x02025806: { Console.WriteLine("ioDevctl check ms inserted (mscmhc0)"); if (outputPointer.AddressGood && outputLength >= 4) { // 0 = Not inserted. // 1 = Inserted. outputPointer.setValue32(1); result = 0; } else { result = ERROR_MEMSTICK_DEVCTL_BAD_PARAMS; } break; } default: result = base.ioDevctl(deviceName, command, inputPointer, inputLength, outputPointer, outputLength); break; } return(result); }