protected Action<CpuThreadState> CreateDelegate(HleModuleManager ModuleManager, HleModuleHost Module, uint NID, string ModuleImportName, string NIDName) { Action<CpuThreadState> Callback = null; if (Module != null) { Callback = Module.DelegatesByNID.GetOrDefault(NID, null); } return (CpuThreadState) => { if (Callback == null) { if (CpuThreadState.CpuProcessor.PspConfig.DebugSyscalls) { Console.WriteLine( "Thread({0}:'{1}'):{2}:{3}", PspEmulatorContext.GetInstance<HleThreadManager>().Current.Id, PspEmulatorContext.GetInstance<HleThreadManager>().Current.Name, ModuleImportName, NIDName ); } throw (new NotImplementedException("Not Implemented '" + String.Format("{0}:{1}", ModuleImportName, NIDName) + "'")); } else { Callback(CpuThreadState); } }; }
private void _UpdateModuleImports() { var ImportsStream = ElfLoader.MemoryStream.SliceWithBounds(ModuleInfo.ImportsStart + BaseAddress, ModuleInfo.ImportsEnd + BaseAddress); var ExportsStream = ElfLoader.MemoryStream.SliceWithBounds(ModuleInfo.ExportsStart + BaseAddress, ModuleInfo.ExportsEnd + BaseAddress); var ModuleImports = ImportsStream.ReadStructVectorUntilTheEndOfStream <ElfPsp.ModuleImport>(); var ModuleExports = ExportsStream.ReadStructVectorUntilTheEndOfStream <ElfPsp.ModuleImport>(); foreach (var SectionHeader in ElfLoader.SectionHeaders) { //Console.WriteLine("{0}: {1}", NameAt(SectionHeader.Name), SectionHeader); } foreach (var ModuleImport in ModuleImports) { //Console.WriteLine(ModuleImport.ToStringDefault()); var ModuleImportName = ElfLoader.MemoryStream.ReadStringzAt(ModuleImport.Name); var NidStreamReader = new BinaryReader(ElfLoader.MemoryStream.SliceWithLength(ModuleImport.NidAddress, ModuleImport.FunctionCount * sizeof(uint))); var CallStreamWriter = new BinaryWriter(ElfLoader.MemoryStream.SliceWithLength(ModuleImport.CallAddress, ModuleImport.FunctionCount * sizeof(uint) * 2)); HleModuleHost Module = null; try { Module = ModuleManager.GetModuleByName(ModuleImportName); } catch (Exception Exception) { Console.WriteLine(Exception); throw(new Exception(Exception.Message, Exception)); } Console.WriteLine("{0:X}:'{1}'", ModuleImport.Name, ModuleImportName); for (int n = 0; n < ModuleImport.FunctionCount; n++) { uint NID = NidStreamReader.ReadUInt32(); var DefaultName = String.Format("<unknown:{0:X}>", NID); var NIDName = (Module != null) ? Module.NamesByNID.GetOrDefault(NID, DefaultName) : DefaultName; //var Delegate = Module.DelegatesByNID.GetOrDefault(NID, null); CallStreamWriter.Write((uint)(0x0000000C | (FunctionGenerator.NativeCallSyscallCode << 6))); // syscall 0x2307 CallStreamWriter.Write( (uint)ModuleManager.AllocDelegateSlot( CreateDelegate(ModuleManager, Module, NID, ModuleImportName, NIDName), String.Format("{0}:{1}", ModuleImportName, NIDName) ) ); Console.WriteLine( " CODE_ADDR({0:X}) : NID(0x{1,8:X}) : {2}", ModuleImport.CallAddress + n * 8, NID, NIDName ); } } //Console.ReadKey(); }
protected Action <CpuThreadState> CreateDelegate(HleModuleManager ModuleManager, HleModuleHost Module, uint NID, string ModuleImportName, string NIDName) { Action <CpuThreadState> Callback = null; if (Module != null) { Callback = Module.DelegatesByNID.GetOrDefault(NID, null); } return((CpuThreadState) => { if (Callback == null) { if (CpuThreadState.CpuProcessor.PspConfig.DebugSyscalls) { Console.WriteLine( "Thread({0}:'{1}'):{2}:{3}", PspEmulatorContext.GetInstance <HleThreadManager>().Current.Id, PspEmulatorContext.GetInstance <HleThreadManager>().Current.Name, ModuleImportName, NIDName ); } throw (new NotImplementedException("Not Implemented '" + String.Format("{0}:{1}", ModuleImportName, NIDName) + "'")); } else { Callback(CpuThreadState); } }); }