mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	- added some function wrappers for HLE
- added stub for SVC CreateAddressArbiter - added OutputDebugString SVC
This commit is contained in:
		
							parent
							
								
									bb7fcf79fe
								
							
						
					
					
						commit
						4ee72869cc
					
				
					 2 changed files with 29 additions and 10 deletions
				
			
		|  | @ -158,8 +158,8 @@ template<int func(u32, u32, u32, u32, u32)> void WrapI_UUUUU() { | |||
|     RETURN(retval); | ||||
| } | ||||
| 
 | ||||
| template<int func()> void WrapI_V() { | ||||
|     int retval = func(); | ||||
| template<int func(void*)> void WrapI_V() { | ||||
|     u32 retval = func(Memory::GetPointer(PARAM(0))); | ||||
|     RETURN(retval); | ||||
| } | ||||
| 
 | ||||
|  | @ -638,6 +638,10 @@ template<u32 func(const char *, const char *)> void WrapU_CC() { | |||
|     RETURN(retval); | ||||
| } | ||||
| 
 | ||||
| template<void func(const char*)> void WrapV_C() { | ||||
|     func(Memory::GetCharPointer(PARAM(0))); | ||||
| } | ||||
| 
 | ||||
| template<void func(const char *, int)> void WrapV_CI() { | ||||
|     func(Memory::GetCharPointer(PARAM(0)), PARAM(1)); | ||||
| } | ||||
|  | @ -716,18 +720,18 @@ template <int func(int, const char *, int)> void WrapI_ICI() { | |||
| } | ||||
| 
 | ||||
| template<int func(int, void *, void *, void *, void *, u32, int)> void WrapI_IVVVVUI(){ | ||||
|   u32 retval = func(PARAM(0), Memory::GetPointer(PARAM(1)), Memory::GetPointer(PARAM(2)), Memory::GetPointer(PARAM(3)), Memory::GetPointer(PARAM(4)), PARAM(5), PARAM(6) ); | ||||
|   RETURN(retval); | ||||
|     u32 retval = func(PARAM(0), Memory::GetPointer(PARAM(1)), Memory::GetPointer(PARAM(2)), Memory::GetPointer(PARAM(3)), Memory::GetPointer(PARAM(4)), PARAM(5), PARAM(6) ); | ||||
|     RETURN(retval); | ||||
| } | ||||
| 
 | ||||
| template<int func(int, const char *, u32, void *, int, int, int)> void WrapI_ICUVIII(){ | ||||
|   u32 retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), Memory::GetPointer(PARAM(3)), PARAM(4), PARAM(5), PARAM(6)); | ||||
|   RETURN(retval); | ||||
|     u32 retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), Memory::GetPointer(PARAM(3)), PARAM(4), PARAM(5), PARAM(6)); | ||||
|     RETURN(retval); | ||||
| } | ||||
| 
 | ||||
| template<int func(void *, u32, u32, u32, u32, u32)> void WrapI_VUUUUU(){ | ||||
|   u32 retval = func(Memory::GetPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); | ||||
|   RETURN(retval); | ||||
|     u32 retval = func(Memory::GetPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); | ||||
|     RETURN(retval); | ||||
| } | ||||
| 
 | ||||
| template<int func(u32, s64)> void WrapI_US64() { | ||||
|  |  | |||
|  | @ -82,15 +82,30 @@ Result SendSyncRequest(Handle session) { | |||
| /// Close a handle
 | ||||
| Result CloseHandle(Handle handle) { | ||||
|     // ImplementMe
 | ||||
|     NOTICE_LOG(OSHLE, "stubbed function CloseHandle"); | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| /// Wait for a handle to synchronize, timeout after the specified nanoseconds
 | ||||
| Result WaitSynchronization1(Handle handle, s64 nanoseconds) { | ||||
|     // ImplementMe
 | ||||
|     NOTICE_LOG(OSHLE, "stubbed function WaitSynchronization1"); | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| /// Create an address arbiter (to allocate access to shared resources)
 | ||||
| Result CreateAddressArbiter(void* arbiter) { | ||||
|     // ImplementMe
 | ||||
|     NOTICE_LOG(OSHLE, "stubbed function CreateAddressArbiter"); | ||||
|     Core::g_app_core->SetReg(1, 0xDEADBEEF); | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| /// Used to output a message on a debug hardware unit - does nothing on a retail unit
 | ||||
| void OutputDebugString(const char* string) { | ||||
|     NOTICE_LOG(OSHLE, "## OSDEBUG: %s", string); | ||||
| } | ||||
| 
 | ||||
| const HLE::FunctionDef Syscall_Table[] = { | ||||
|     {0x00,  NULL,                               "Unknown"}, | ||||
|     {0x01,  WrapI_UUUUU<ControlMemory>,         "ControlMemory"}, | ||||
|  | @ -125,7 +140,7 @@ const HLE::FunctionDef Syscall_Table[] = { | |||
|     {0x1E,  NULL,                               "CreateMemoryBlock"}, | ||||
|     {0x1F,  WrapI_UUUU<MapMemoryBlock>,         "MapMemoryBlock"}, | ||||
|     {0x20,  NULL,                               "UnmapMemoryBlock"}, | ||||
|     {0x21,  NULL,                               "CreateAddressArbiter"}, | ||||
|     {0x21,  WrapI_V<CreateAddressArbiter>,      "CreateAddressArbiter"}, | ||||
|     {0x22,  NULL,                               "ArbitrateAddress"}, | ||||
|     {0x23,  WrapI_U<CloseHandle>,               "CloseHandle"}, | ||||
|     {0x24,  WrapI_US64<WaitSynchronization1>,   "WaitSynchronization1"}, | ||||
|  | @ -153,7 +168,7 @@ const HLE::FunctionDef Syscall_Table[] = { | |||
|     {0x3A,  NULL,                               "GetResourceLimitCurrentValues"}, | ||||
|     {0x3B,  NULL,                               "GetThreadContext"}, | ||||
|     {0x3C,  NULL,                               "Break"}, | ||||
|     {0x3D,  NULL,                               "OutputDebugString"}, | ||||
|     {0x3D,  WrapV_C<OutputDebugString>,         "OutputDebugString"}, | ||||
|     {0x3E,  NULL,                               "ControlPerformanceCounter"}, | ||||
|     {0x3F,  NULL,                               "Unknown"}, | ||||
|     {0x40,  NULL,                               "Unknown"}, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue