CSPspEmu.Hle.HleInterop.SetArgumentsToCpuThreadState C# (CSharp) Method

SetArgumentsToCpuThreadState() public static method

public static SetArgumentsToCpuThreadState ( CpuThreadState CpuThreadState, uint Function ) : void
CpuThreadState CSPspEmu.Core.Cpu.CpuThreadState
Function uint
return void
        public static void SetArgumentsToCpuThreadState(CpuThreadState CpuThreadState, uint Function, params object[] Arguments)
        {
            int GprIndex = 4;
            //int FprIndex = 0;
            Action<int> GprAlign = (int Alignment) =>
            {
                GprIndex = (int)MathUtils.NextAligned((uint)GprIndex, Alignment);
            };
            foreach (var Argument in Arguments)
            {
                var ArgumentType = Argument.GetType();
                if (ArgumentType == typeof(uint))
                {
                    GprAlign(1);
                    CpuThreadState.GPR[GprIndex++] = (int)(uint)Argument;
                }
                else if (ArgumentType == typeof(int))
                {
                    GprAlign(1);
                    CpuThreadState.GPR[GprIndex++] = (int)Argument;
                }
                else if (ArgumentType == typeof(PspPointer))
                {
                    GprAlign(1);
                    CpuThreadState.GPR[GprIndex++] = (int)(uint)(PspPointer)Argument;
                }
                else if (ArgumentType.IsEnum)
                {
                    GprAlign(1);
                    CpuThreadState.GPR[GprIndex++] = Convert.ToInt32(Argument);
                }
                else
                {
                    throw (new NotImplementedException(String.Format("Can't handle type '{0}'", ArgumentType)));
                }
            }

            CpuThreadState.PC = Function;
            //Console.Error.WriteLine(CpuThreadState);
            //CpuThreadState.DumpRegisters(Console.Error);
        }

Usage Example

Example #1
0
 public void SetArgumentsToCpuThreadState(CpuThreadState CpuThreadState)
 {
     HleInterop.SetArgumentsToCpuThreadState(CpuThreadState, Function, Arguments);
 }