From 561c3b7d4ff52573bdf2c9dd4a26e7d4660f87a1 Mon Sep 17 00:00:00 2001 From: Daniel Stien Date: Sat, 23 Aug 2008 02:14:20 +0000 Subject: [PATCH] Implemented several kernel functions. - NtQueryVirtualMemory to support Xapi VirtualQuery - NtCreateSemaphore/NtReleaseSemaphore to support Xapi semaphores - MmCreateKernelStack/MmDeleteKernelStack to support Xapi fibers Added D3DFormat and D3DTRANSFORMSTATETYPE conversions. - Convert PC D3DFMT_A4R4G4B4 to 0x1D (linear) - Convert Xbox D3DFMT 0x19 (swizzled) to D3DFMT_A8 - Convert Xbox D3DFMT 0x27 (swizzled) to D3DFMT_L6V5U5 - Convert Xbox D3DTRANSFORMSTATETYPE 10 (max) to D3DTS_TEXTURE7 + 1 (experimental) Print properly terminated XTL name in debug output. --- import/OpenXDK/include/xboxkrnl/mm.h | 20 ++- import/OpenXDK/include/xboxkrnl/nt.h | 33 +++- import/OpenXDK/include/xboxkrnl/xboxkrnl.h | 15 ++ src/CxbxKrnl/EmuD3D8/Convert.cpp | 9 ++ src/CxbxKrnl/EmuD3D8/Convert.h | 2 + src/CxbxKrnl/EmuKrnl.cpp | 170 ++++++++++++++++++++- src/CxbxKrnl/EmuNtDll.cpp | 3 + src/CxbxKrnl/EmuNtDll.h | 62 ++++++++ src/CxbxKrnl/HLEIntercept.cpp | 2 +- src/CxbxKrnl/KernelThunk.cpp | 10 +- 10 files changed, 314 insertions(+), 12 deletions(-) diff --git a/import/OpenXDK/include/xboxkrnl/mm.h b/import/OpenXDK/include/xboxkrnl/mm.h index 37ea26533..3bffee0eb 100644 --- a/import/OpenXDK/include/xboxkrnl/mm.h +++ b/import/OpenXDK/include/xboxkrnl/mm.h @@ -49,8 +49,24 @@ XBSYSAPI EXPORTNUM(167) PVOID NTAPI MmAllocateSystemMemory ); XBSYSAPI VOID *MmClaimGpuInstanceMemory; -XBSYSAPI VOID *MmCreateKernelStack; -XBSYSAPI VOID *MmDeleteKernelStack; + +// ****************************************************************** +// * MmCreateKernelStack +// ****************************************************************** +XBSYSAPI EXPORTNUM(169) PVOID NTAPI MmCreateKernelStack +( + IN ULONG NumberOfBytes, + IN ULONG Unknown +); + +// ****************************************************************** +// * MmDeleteKernelStack +// ****************************************************************** +XBSYSAPI EXPORTNUM(170) VOID NTAPI MmDeleteKernelStack +( + IN PVOID EndAddress, + IN PVOID BaseAddress +); // ****************************************************************** // * MmFreeContiguousMemory diff --git a/import/OpenXDK/include/xboxkrnl/nt.h b/import/OpenXDK/include/xboxkrnl/nt.h index 3e7b39124..2af4a3a16 100644 --- a/import/OpenXDK/include/xboxkrnl/nt.h +++ b/import/OpenXDK/include/xboxkrnl/nt.h @@ -93,7 +93,17 @@ XBSYSAPI EXPORTNUM(192) NTSTATUS NTAPI NtCreateMutant IN BOOLEAN InitialOwner ); -XBSYSAPI VOID *NtCreateSemaphore; +// ****************************************************************** +// * NtCreateSemaphore +// ****************************************************************** +XBSYSAPI EXPORTNUM(193) NTSTATUS NTAPI NtCreateSemaphore +( + OUT PHANDLE SemaphoreHandle, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN ULONG InitialCount, + IN ULONG MaximumCount +); + XBSYSAPI VOID *NtCreateTimer; XBSYSAPI VOID *NtDeleteFile; XBSYSAPI VOID *NtDeviceIoControlFile; @@ -198,7 +208,15 @@ XBSYSAPI VOID *NtQueryMutant; XBSYSAPI VOID *NtQuerySemaphore; XBSYSAPI VOID *NtQuerySymbolicLinkObject; XBSYSAPI VOID *NtQueryTimer; -XBSYSAPI VOID *NtQueryVirtualMemory; + +// ****************************************************************** +// * NtQueryVirtualMemory +// ****************************************************************** +XBSYSAPI EXPORTNUM(217) NTSTATUS NTAPI NtQueryVirtualMemory +( + IN PVOID BaseAddress, + OUT PMEMORY_BASIC_INFORMATION Buffer +); // ****************************************************************** // * NtQueryVolumeInformationFile @@ -242,7 +260,16 @@ XBSYSAPI EXPORTNUM(221) NTSTATUS NTAPI NtReleaseMutant OUT PLONG PreviousCount ); -XBSYSAPI VOID *NtReleaseSemaphore; +// ****************************************************************** +// * NtReleaseSemaphore +// ****************************************************************** +XBSYSAPI EXPORTNUM(222) NTSTATUS NTAPI NtReleaseSemaphore +( + IN HANDLE SemaphoreHandle, + IN ULONG ReleaseCount, + OUT PULONG PreviousCount +); + XBSYSAPI VOID *NtRemoveIoCompletion; // ****************************************************************** diff --git a/import/OpenXDK/include/xboxkrnl/xboxkrnl.h b/import/OpenXDK/include/xboxkrnl/xboxkrnl.h index 8627c01c3..d546207bd 100644 --- a/import/OpenXDK/include/xboxkrnl/xboxkrnl.h +++ b/import/OpenXDK/include/xboxkrnl/xboxkrnl.h @@ -452,6 +452,21 @@ typedef struct _IO_STATUS_BLOCK } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; +// ****************************************************************** +// * MEMORY_BASIC_INFORMATION *Same as Win2k/XP* +// ****************************************************************** +typedef struct _MEMORY_BASIC_INFORMATION +{ + PVOID BaseAddress; + PVOID AllocationBase; + DWORD AllocationProtect; + SIZE_T RegionSize; + DWORD State; + DWORD Protect; + DWORD Type; +} +MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION; + // ****************************************************************** // * EVENT_TYPE // ****************************************************************** diff --git a/src/CxbxKrnl/EmuD3D8/Convert.cpp b/src/CxbxKrnl/EmuD3D8/Convert.cpp index 24ddc9432..ca2413c7f 100644 --- a/src/CxbxKrnl/EmuD3D8/Convert.cpp +++ b/src/CxbxKrnl/EmuD3D8/Convert.cpp @@ -87,6 +87,8 @@ XTL::D3DFORMAT XTL::EmuXB2PC_D3DFormat(X_D3DFORMAT Format) EmuWarning("X_D3DFMT_A8L8 -> D3DFMT_R5G6B5"); return D3DFMT_R5G6B5; // NOTE: HACK: Totally and utterly wrong :) } + case 0x19: // Swizzled (X_D3DFMT_A8) + return D3DFMT_A8; case 0x1D: // Linear (X_D3DFMT_LIN_A4R4G4B4) case 0x04: // Swizzled (X_D3DFMT_A4R4G4B4) @@ -144,6 +146,9 @@ XTL::D3DFORMAT XTL::EmuXB2PC_D3DFormat(X_D3DFORMAT Format) case 0x2C: // Swizzled (X_D3DFMT_D16) return D3DFMT_D16; + case 0x27: // Swizzled (X_D3DFMT_L6V5U5) + return D3DFMT_L6V5U5; + case 0x28: // Swizzled (X_D3DFMT_V8U8) return D3DFMT_V8U8; @@ -184,6 +189,10 @@ XTL::X_D3DFORMAT XTL::EmuPC2XB_D3DFormat(D3DFORMAT Format) case D3DFMT_A8R8G8B8: // return 0x12; // Linear (X_D3DFMT_LIN_A8R8G8B8) return 0x06; + + case D3DFMT_A4R4G4B4: + return 0x1D; // Linear +// return 0x04; // Swizzled } CxbxKrnlCleanup("EmuPC2XB_D3DFormat: Unknown Format (%d)", Format); diff --git a/src/CxbxKrnl/EmuD3D8/Convert.h b/src/CxbxKrnl/EmuD3D8/Convert.h index c74f35e51..7a3d12429 100644 --- a/src/CxbxKrnl/EmuD3D8/Convert.h +++ b/src/CxbxKrnl/EmuD3D8/Convert.h @@ -73,6 +73,8 @@ inline D3DTRANSFORMSTATETYPE EmuXB2PC_D3DTS(D3DTRANSFORMSTATETYPE State) return (D3DTRANSFORMSTATETYPE)(State + 14); else if((uint32)State < 10) return D3DTS_WORLDMATRIX(State-6); + else if((uint32)State == 10) // Max + return (D3DTRANSFORMSTATETYPE)(D3DTS_TEXTURE7 + 1); CxbxKrnlCleanup("Unknown Transform State Type (%d)", State); diff --git a/src/CxbxKrnl/EmuKrnl.cpp b/src/CxbxKrnl/EmuKrnl.cpp index a72bb1a34..a524b1697 100644 --- a/src/CxbxKrnl/EmuKrnl.cpp +++ b/src/CxbxKrnl/EmuKrnl.cpp @@ -879,6 +879,65 @@ XBSYSAPI EXPORTNUM(167) xboxkrnl::PVOID NTAPI xboxkrnl::MmAllocateSystemMemory return pRet; } +// ****************************************************************** +// * 0x00A9 - MmCreateKernelStack +// ****************************************************************** +// * Differences from NT: Custom stack size. +// ****************************************************************** +XBSYSAPI EXPORTNUM(169) xboxkrnl::PVOID NTAPI xboxkrnl::MmCreateKernelStack +( + ULONG NumberOfBytes, + ULONG Unknown +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuKrnl (0x%X): MmCreateKernelStack\n" + "(\n" + " NumberOfBytes : 0x%.08X\n" + " Unknown : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), NumberOfBytes, Unknown); + + if(Unknown) + EmuWarning("MmCreateKernelStack unknown parameter ignored\n"); + + NtDll::PVOID pRet = NULL; + if(FAILED(NtDll::NtAllocateVirtualMemory(GetCurrentProcess(), &pRet, 0, &NumberOfBytes, MEM_COMMIT, PAGE_READWRITE))) + EmuWarning("MmCreateKernelStack failed!\n"); + else + pRet = (PVOID)((ULONG)pRet + NumberOfBytes); + + EmuSwapFS(); // Xbox FS + + return pRet; +} + +// ****************************************************************** +// * 0x00AA - MmDeleteKernelStack +// ****************************************************************** +XBSYSAPI EXPORTNUM(170) VOID NTAPI xboxkrnl::MmDeleteKernelStack +( + PVOID EndAddress, + PVOID BaseAddress +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuKrnl (0x%X): MmDeleteKernelStack\n" + "(\n" + " EndAddress : 0x%.08X\n" + " BaseAddress : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), EndAddress, BaseAddress); + + ULONG RegionSize = 0; + if (FAILED(NtDll::NtFreeVirtualMemory(GetCurrentProcess(), &BaseAddress, &RegionSize, MEM_RELEASE))) + EmuWarning("MmDeleteKernelStack failed!\n"); + + EmuSwapFS(); // Xbox FS +} + // ****************************************************************** // * 0x00AB - MmFreeContiguousMemory // ****************************************************************** @@ -970,7 +1029,7 @@ XBSYSAPI EXPORTNUM(178) VOID NTAPI xboxkrnl::MmPersistContiguousMemory } // ****************************************************************** -// * MmQueryAllocationSize +// * 0x00B4 - MmQueryAllocationSize // ****************************************************************** XBSYSAPI EXPORTNUM(180) XTL::ULONG NTAPI xboxkrnl::MmQueryAllocationSize ( @@ -1436,6 +1495,49 @@ XBSYSAPI EXPORTNUM(192) xboxkrnl::NTSTATUS NTAPI xboxkrnl::NtCreateMutant return ret; } +// ****************************************************************** +// * 0x00C1 - NtCreateSemaphore +// ****************************************************************** +XBSYSAPI EXPORTNUM(193) xboxkrnl::NTSTATUS NTAPI xboxkrnl::NtCreateSemaphore +( + OUT PHANDLE SemaphoreHandle, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN ULONG InitialCount, + IN ULONG MaximumCount +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuKrnl (0x%X): NtCreateSemaphore\n" + "(\n" + " SemaphoreHandle : 0x%.08X\n" + " ObjectAttributes : 0x%.08X\n" + " InitialCount : 0x%.08X\n" + " MaximumCount : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), SemaphoreHandle, ObjectAttributes, + InitialCount, MaximumCount); + + // redirect to Win2k/XP + NTSTATUS ret = NtDll::NtCreateSemaphore + ( + SemaphoreHandle, + SEMAPHORE_ALL_ACCESS, + (NtDll::POBJECT_ATTRIBUTES)ObjectAttributes, + InitialCount, + MaximumCount + ); + + if(FAILED(ret)) + EmuWarning("NtCreateSemaphore failed!"); + + DbgPrintf("EmuKrnl (0x%X): NtCreateSemaphore SemaphoreHandle = 0x%.08X\n", GetCurrentThreadId(), *SemaphoreHandle); + + EmuSwapFS(); // Xbox FS + + return ret; +} + // ****************************************************************** // * 0x00C5 - NtDuplicateObject // ****************************************************************** @@ -1762,6 +1864,42 @@ XBSYSAPI EXPORTNUM(211) xboxkrnl::NTSTATUS NTAPI xboxkrnl::NtQueryInformationFil return ret; } +// ****************************************************************** +// * 0x00D9 - NtQueryVirtualMemory +// ****************************************************************** +XBSYSAPI EXPORTNUM(217) xboxkrnl::NTSTATUS NTAPI xboxkrnl::NtQueryVirtualMemory +( + IN PVOID BaseAddress, + OUT PMEMORY_BASIC_INFORMATION Buffer +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuKrnl (0x%X): NtQueryVirtualMemory\n" + "(\n" + " BaseAddress : 0x%.08X\n" + " Buffer : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), BaseAddress, Buffer); + + NTSTATUS ret = NtDll::NtQueryVirtualMemory + ( + GetCurrentProcess(), + BaseAddress, + (NtDll::MEMORY_INFORMATION_CLASS)NtDll::MemoryBasicInformation, + (NtDll::PMEMORY_BASIC_INFORMATION)Buffer, + sizeof(MEMORY_BASIC_INFORMATION), + 0 + ); + + if(FAILED(ret)) + EmuWarning("NtQueryVirtualMemory failed!"); + + EmuSwapFS(); // Xbox FS + + return ret; +} + // ****************************************************************** // * 0x00DA - NtQueryVolumeInformationFile // ****************************************************************** @@ -1889,6 +2027,36 @@ XBSYSAPI EXPORTNUM(221) xboxkrnl::NTSTATUS NTAPI xboxkrnl::NtReleaseMutant return STATUS_SUCCESS; } +// ****************************************************************** +// * 0x00DE - NtReleaseSemaphore +// ****************************************************************** +XBSYSAPI EXPORTNUM(222) xboxkrnl::NTSTATUS NTAPI xboxkrnl::NtReleaseSemaphore +( + IN HANDLE SemaphoreHandle, + IN ULONG ReleaseCount, + OUT PULONG PreviousCount +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuKrnl (0x%X): NtReleaseSemaphore\n" + "(\n" + " SemaphoreHandle : 0x%.08X\n" + " ReleaseCount : 0x%.08X\n" + " PreviousCount : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), SemaphoreHandle, ReleaseCount, PreviousCount); + + NTSTATUS ret = NtDll::NtReleaseSemaphore(SemaphoreHandle, ReleaseCount, PreviousCount); + + if(FAILED(ret)) + EmuWarning("NtReleaseSemaphore failed!"); + + EmuSwapFS(); // Xbox FS + + return ret; +} + // ****************************************************************** // * 0x00E0 - NtResumeThread // ****************************************************************** diff --git a/src/CxbxKrnl/EmuNtDll.cpp b/src/CxbxKrnl/EmuNtDll.cpp index 7c88e0760..476fd9a66 100644 --- a/src/CxbxKrnl/EmuNtDll.cpp +++ b/src/CxbxKrnl/EmuNtDll.cpp @@ -69,6 +69,7 @@ NtDll::FPTR_NtWaitForSingleObject NtDll::NtWaitForSingleObject = NtDll::FPTR_NtWaitForMultipleObjects NtDll::NtWaitForMultipleObjects = (NtDll::FPTR_NtWaitForMultipleObjects)GetProcAddress(hNtDll, "NtWaitForMultipleObjects"); NtDll::FPTR_NtAllocateVirtualMemory NtDll::NtAllocateVirtualMemory = (NtDll::FPTR_NtAllocateVirtualMemory)GetProcAddress(hNtDll, "NtAllocateVirtualMemory"); NtDll::FPTR_NtFreeVirtualMemory NtDll::NtFreeVirtualMemory = (NtDll::FPTR_NtFreeVirtualMemory)GetProcAddress(hNtDll, "NtFreeVirtualMemory"); +NtDll::FPTR_NtQueryVirtualMemory NtDll::NtQueryVirtualMemory = (NtDll::FPTR_NtQueryVirtualMemory)GetProcAddress(hNtDll, "NtQueryVirtualMemory"); NtDll::FPTR_NtClearEvent NtDll::NtClearEvent = (NtDll::FPTR_NtClearEvent)GetProcAddress(hNtDll, "NtClearEvent"); NtDll::FPTR_NtClose NtDll::NtClose = (NtDll::FPTR_NtClose)GetProcAddress(hNtDll, "NtClose"); NtDll::FPTR_NtDelayExecution NtDll::NtDelayExecution = (NtDll::FPTR_NtDelayExecution)GetProcAddress(hNtDll, "NtDelayExecution"); @@ -81,6 +82,8 @@ NtDll::FPTR_NtQueryVolumeInformationFile NtDll::NtQueryVolumeInformationFile = NtDll::FPTR_NtCreateEvent NtDll::NtCreateEvent = (NtDll::FPTR_NtCreateEvent)GetProcAddress(hNtDll, "NtCreateEvent"); NtDll::FPTR_NtCreateMutant NtDll::NtCreateMutant = (NtDll::FPTR_NtCreateMutant)GetProcAddress(hNtDll, "NtCreateMutant"); NtDll::FPTR_NtReleaseMutant NtDll::NtReleaseMutant = (NtDll::FPTR_NtReleaseMutant)GetProcAddress(hNtDll, "NtReleaseMutant"); +NtDll::FPTR_NtCreateSemaphore NtDll::NtCreateSemaphore = (NtDll::FPTR_NtCreateSemaphore)GetProcAddress(hNtDll, "NtCreateSemaphore"); +NtDll::FPTR_NtReleaseSemaphore NtDll::NtReleaseSemaphore = (NtDll::FPTR_NtReleaseSemaphore)GetProcAddress(hNtDll, "NtReleaseSemaphore"); NtDll::FPTR_NtCreateFile NtDll::NtCreateFile = (NtDll::FPTR_NtCreateFile)GetProcAddress(hNtDll, "NtCreateFile"); NtDll::FPTR_NtReadFile NtDll::NtReadFile = (NtDll::FPTR_NtReadFile)GetProcAddress(hNtDll, "NtReadFile"); NtDll::FPTR_NtWriteFile NtDll::NtWriteFile = (NtDll::FPTR_NtWriteFile)GetProcAddress(hNtDll, "NtWriteFile"); diff --git a/src/CxbxKrnl/EmuNtDll.h b/src/CxbxKrnl/EmuNtDll.h index 1e9d152d1..ac5b1fd83 100644 --- a/src/CxbxKrnl/EmuNtDll.h +++ b/src/CxbxKrnl/EmuNtDll.h @@ -339,6 +339,30 @@ typedef VOID (NTAPI *PIO_APC_ROUTINE) IN ULONG Reserved ); +// ****************************************************************** +// * MEMORY_BASIC_INFORMATION +// ****************************************************************** +typedef struct _MEMORY_BASIC_INFORMATION +{ + PVOID BaseAddress; + PVOID AllocationBase; + DWORD AllocationProtect; + SIZE_T RegionSize; + DWORD State; + DWORD Protect; + DWORD Type; +} +MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION; + +// ****************************************************************** +// * MEMORY_INFORMATION_CLASS +// ****************************************************************** +typedef enum _MEMORY_INFORMATION_CLASS +{ + MemoryBasicInformation +} +MEMORY_INFORMATION_CLASS; + // ****************************************************************** // * EVENT_TYPE // ****************************************************************** @@ -708,6 +732,19 @@ typedef NTSTATUS (NTAPI *FPTR_NtFreeVirtualMemory) IN ULONG FreeType ); +// ****************************************************************** +// * NtQueryVirtualMemory +// ****************************************************************** +typedef NTSTATUS (NTAPI *FPTR_NtQueryVirtualMemory) +( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress, + IN MEMORY_INFORMATION_CLASS MemoryInformationClass, + OUT PVOID Buffer, + IN ULONG Length, + OUT PULONG ResultLength OPTIONAL +); + // ****************************************************************** // * RtlInitializeCriticalSection // ****************************************************************** @@ -786,6 +823,28 @@ typedef NTSTATUS (NTAPI *FPTR_NtReleaseMutant) OUT PLONG PreviousCount OPTIONAL ); +// ****************************************************************** +// * NtCreateSemaphore +// ****************************************************************** +typedef NTSTATUS (NTAPI *FPTR_NtCreateSemaphore) +( + OUT PHANDLE SemaphoreHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN ULONG InitialCount, + IN ULONG MaximumCount +); + +// ****************************************************************** +// * NtReleaseSemaphore +// ****************************************************************** +typedef NTSTATUS (NTAPI *FPTR_NtReleaseSemaphore) +( + IN HANDLE SemaphoreHandle, + IN ULONG ReleaseCount, + OUT PULONG PreviousCount OPTIONAL +); + // ****************************************************************** // * NtCreateFile // ****************************************************************** @@ -1004,6 +1063,7 @@ extern FPTR_RtlReAllocateHeap RtlReAllocateHeap; extern FPTR_RtlSizeHeap RtlSizeHeap; extern FPTR_NtAllocateVirtualMemory NtAllocateVirtualMemory; extern FPTR_NtFreeVirtualMemory NtFreeVirtualMemory; +extern FPTR_NtQueryVirtualMemory NtQueryVirtualMemory; extern FPTR_NtClearEvent NtClearEvent; extern FPTR_NtClose NtClose; extern FPTR_NtDelayExecution NtDelayExecution; @@ -1016,6 +1076,8 @@ extern FPTR_NtQueryVolumeInformationFile NtQueryVolumeInformationFile; extern FPTR_NtCreateEvent NtCreateEvent; extern FPTR_NtCreateMutant NtCreateMutant; extern FPTR_NtReleaseMutant NtReleaseMutant; +extern FPTR_NtCreateSemaphore NtCreateSemaphore; +extern FPTR_NtReleaseSemaphore NtReleaseSemaphore; extern FPTR_NtCreateFile NtCreateFile; extern FPTR_NtReadFile NtReadFile; extern FPTR_NtWriteFile NtWriteFile; diff --git a/src/CxbxKrnl/HLEIntercept.cpp b/src/CxbxKrnl/HLEIntercept.cpp index 500b75af3..37682ec90 100644 --- a/src/CxbxKrnl/HLEIntercept.cpp +++ b/src/CxbxKrnl/HLEIntercept.cpp @@ -420,7 +420,7 @@ void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHead } } - DbgPrintf("HLE: * Searching HLE database for %s %d.%d.%d...", pLibraryVersion[v].szName, MajorVersion, MinorVersion, BuildVersion); + DbgPrintf("HLE: * Searching HLE database for %s %d.%d.%d...", szLibraryName, MajorVersion, MinorVersion, BuildVersion); bool found=false; diff --git a/src/CxbxKrnl/KernelThunk.cpp b/src/CxbxKrnl/KernelThunk.cpp index ca70b24f0..1726cb4e6 100644 --- a/src/CxbxKrnl/KernelThunk.cpp +++ b/src/CxbxKrnl/KernelThunk.cpp @@ -226,8 +226,8 @@ extern "C" CXBXKRNL_API uint32 CxbxKrnl_KernelThunkTable[367] = (uint32)&xboxkrnl::MmAllocateContiguousMemoryEx,// 0x00A6 (166) (uint32)&xboxkrnl::MmAllocateSystemMemory, // 0x00A7 (167) (uint32)PANIC(0x00A8), // 0x00A8 (168) - (uint32)PANIC(0x00A9), // 0x00A9 (169) - (uint32)PANIC(0x00AA), // 0x00AA (170) + (uint32)&xboxkrnl::MmCreateKernelStack, // 0x00A9 (169) + (uint32)&xboxkrnl::MmDeleteKernelStack, // 0x00AA (170) (uint32)&xboxkrnl::MmFreeContiguousMemory, // 0x00AB (171) (uint32)&xboxkrnl::MmFreeSystemMemory, // 0x00AC (172) (uint32)PANIC(0x00AD), // 0x00AD (173) @@ -250,7 +250,7 @@ extern "C" CXBXKRNL_API uint32 CxbxKrnl_KernelThunkTable[367] = (uint32)&xboxkrnl::NtCreateFile, // 0x00BE (190) (uint32)PANIC(0x00BF), // 0x00BF (191) (uint32)&xboxkrnl::NtCreateMutant, // 0x00C0 (192) - (uint32)PANIC(0x00C1), // 0x00C1 (193) + (uint32)&xboxkrnl::NtCreateSemaphore, // 0x00C1 (193) (uint32)PANIC(0x00C2), // 0x00C2 (194) (uint32)PANIC(0x00C3), // 0x00C3 (195) (uint32)PANIC(0x00C4), // 0x00C4 (196) @@ -274,12 +274,12 @@ extern "C" CXBXKRNL_API uint32 CxbxKrnl_KernelThunkTable[367] = (uint32)PANIC(0x00D6), // 0x00D6 (214) (uint32)PANIC(0x00D7), // 0x00D7 (215) (uint32)PANIC(0x00D8), // 0x00D8 (216) - (uint32)PANIC(0x00D9), // 0x00D9 (217) + (uint32)&xboxkrnl::NtQueryVirtualMemory, // 0x00D9 (217) (uint32)&xboxkrnl::NtQueryVolumeInformationFile,// 0x00DA (218) (uint32)&xboxkrnl::NtReadFile, // 0x00DB (219) (uint32)PANIC(0x00DC), // 0x00DC (220) (uint32)&xboxkrnl::NtReleaseMutant, // 0x00DD (221) - (uint32)PANIC(0x00DE), // 0x00DE (222) + (uint32)&xboxkrnl::NtReleaseSemaphore, // 0x00DE (222) (uint32)PANIC(0x00DF), // 0x00DF (223) (uint32)&xboxkrnl::NtResumeThread, // 0x00E0 (224) (uint32)&xboxkrnl::NtSetEvent, // 0x00E1 (225)