public int ExecuteQueued(CpuThreadState CpuThreadState, bool MustReschedule)
{
int ExecutedCount = 0;
//Console.WriteLine("ExecuteQueued");
if (HasScheduledCallbacks)
{
//Console.WriteLine("ExecuteQueued.HasScheduledCallbacks!");
//Console.Error.WriteLine("STARTED CALLBACKS");
while (HasScheduledCallbacks)
{
var HleCallback = DequeueScheduledCallback();
/*
var FakeCpuThreadState = new CpuThreadState(CpuProcessor);
FakeCpuThreadState.CopyRegistersFrom(CpuThreadState);
HleCallback.SetArgumentsToCpuThreadState(FakeCpuThreadState);
if (FakeCpuThreadState.PC == 0x88040E0) FakeCpuThreadState.PC = 0x880416C;
*/
//Console.WriteLine("ExecuteCallback: PC=0x{0:X}", FakeCpuThreadState.PC);
//Console.WriteLine(" : A0=0x{0:X}", FakeCpuThreadState.GPR[4]);
//Console.WriteLine(" : A1=0x{0:X}", FakeCpuThreadState.GPR[5]);
try
{
HleInterop.ExecuteFunctionNow(HleCallback.Function, HleCallback.Arguments);
}
catch (Exception Exception)
{
Console.Error.WriteLine(Exception);
}
finally
{
//Console.WriteLine(" : PC=0x{0:X}", FakeCpuThreadState.PC);
ExecutedCount++;
}
//Console.Error.WriteLine(" CALLBACK ENDED : " + HleCallback);
if (MustReschedule)
{
//Console.Error.WriteLine(" RESCHEDULE");
break;
}
}
ExecutedCount += HleInterop.ExecuteAllQueuedFunctionsNow();
//Console.Error.WriteLine("ENDED CALLBACKS");
}
return ExecutedCount;
}