From 77effebf564683e097ae6682aaf243c0e4904f3c Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Sat, 21 Feb 2004 10:03:20 +0000 Subject: [PATCH] i forget --- Cxbx.opt | Bin 58880 -> 61952 bytes Include/Cxbx.h | 4 +- Include/Win32/CxbxKrnl/EmuD3D8/PushBuffer.h | 1 + Include/Win32/CxbxKrnl/EmuXapi.h | 17 ++ Source/Win32/CxbxKrnl/EmuD3D8.cpp | 14 +- Source/Win32/CxbxKrnl/EmuD3D8/Convert.cpp | 2 + Source/Win32/CxbxKrnl/EmuD3D8/PushBuffer.cpp | 23 ++ .../Win32/CxbxKrnl/EmuD3D8/VertexShader.cpp | 54 +++- Source/Win32/CxbxKrnl/EmuKrnl.cpp | 30 ++ Source/Win32/CxbxKrnl/EmuXapi.cpp | 69 +++++ .../CxbxKrnl/HLEDataBase/D3D8.1.0.4627.inl | 287 +++++++++++++++++- .../CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl | 104 +++++++ Source/Win32/CxbxKrnl/KernelThunk.cpp | 2 +- 13 files changed, 590 insertions(+), 17 deletions(-) diff --git a/Cxbx.opt b/Cxbx.opt index d59787d8371f91bce8f41acc9d47d92743f841b8..fd41b3ecd5c5d9f7b5dbb8144e03d73adfd1218f 100644 GIT binary patch literal 61952 zcmeHQU3U}58D8NJWCO;4`3Px}ZPElNg*G^8U7AvmWCs!3xHe##(j=?Z*j6m+ekpuOl1NN@8CdQMO3KJTv9mWi}G3O2Rj8J|a5cHWtH_L-T* zerD(0fBgN(Cx7|t>3bUzg+fTaIyxX%8{*8QN;1 z-}-=lU;vOl-w$MgAz&Cd07yR{!uJSp7{CxPjsQo2W55`291y#c_&x0;2fhTn z0K5pi1c=>De7_950(=E{6?hFe1DplU0bd2g_G|dQ09*vV4txW69k>LH18)Fg_f33% z3zz`D4O|Ak1H1)%7q|j^54Z}5eGcDwpa4t)Q^4E6b)X2`0Nw$nff-;HkaB|W<9Hre z0B!-dfjht=a2NOiAa*~*_dVc8z^zz2W@lmHtLJB9BhU>R5eD!_-pDo_P#fY`bC zt^+>?JirG6paI+mJ_5upEzKJ)egeb9l{@(Mj5U#ceVZ#f zqV7@u+l76^CXoR$KnBPF86X2>fDDiUGC&5%02z2(2B`l%E`uyj2KFukSv>tWGkrrI zZKeLVce{}-Cj(@F43GgbKnBPF86X2>fDDiUGLXms^}j@Vm`MhnY6d#(zh1Xc6Z_zGc6@Jb(NXx9_yoQ9Ki}1V zb8F=q{}TW5(6orBy8Ex+lzJsN0@Bv&Zz9fs2kvF3zg{{G{}P*_m+QYKRZB1iq(1Eb z?w3v8L;0%Z`*$kpqk*?3Z_Zz7{~Q$q*{W^YVx;``%!BjFcN?CqI+r~nWee4+>9x#S zg-7K4qbIXdm1fDDiUGC&5%02v?yWPl9p6$YsP?v1B)Y2}Pixp@5l37rt#&T9pMZp=fM!pphvV+~&mZI~jsw`iLCi>}ssG@T8 zpYTXp-=X}bsTd4q#}*cH^AJ=I82MY4x2%F)_uQ&_+Z+>!m^4h|rD1fc^xoj$c9W6zkYfAA@K5WwfGY?`7u$vmVSuB*~ z!iOmn3neIon{~CCARQ}`<7P(aL{7J=d0G_0u&?B?#|+-b6|1$IYGHh}={n+p@_4y9 zVY{BXxRSwpzS<;5c?hyqQDjw9{z{V7!LTlW#i}P(HgZRKfokR&OH0a2s;}kM3KG2z z!s|p*HHX4xDR{GkB)e?6DbJ85nMjK!g0;HxldSeH1Xhq(&v4izkdRc37){t#J<->} zxrV=zPUTPuDt+LWll<)u80qTDnRPcZdJaY_uocUS!{wI0& z)1QAnE9x5)86X4C2m`VHe?mm^aMye+;)g={!T9u}&jEL_KNZ_|S_|m30??(N&1Zt; zX!G&mF4})rx6+GUTu4@|ivJ&<5AbL|oV`S@$wC!Am(3&HWlnx#Y6_k02v?yyO;s$|GT(z*fcV*!wgXW-(iATJsH@=46GZOzCN@so4viSnUNzV zGC&5N6$aw?<6rc8hY{Z=jy>M?mMpISO5pyE zOU_*X?Y!|Vb@4}c6-i^2OmFo^Yi&zwF->PxZu{1@xE}SS)}u6{$F){=Q=X(~S*7g1 z)EL=1BTZ|_YVI)Anj^Y1H}w{2Je5ARiE|sFyMN=>Q7b63stuyDqtuFW*%$^f|&>HlAzHZEWWD( zNBwUxF-ko5e{_syulFZyOOHrVEi^TPR%I#TM(Q8`x+;Q(N+K;v4=$ypZD@%pI;za} zX&co4sQ)GHe9;=RnsZxgj_A(Z)LX#z%@MsjKy>G#{zv_9hksjS^<;nykO4CAv@k&Z z?`i2tUI!WIoq^#{{gZOf0|Q3pssx!0JhyrwFJ~osdlqL8#bf%!)`D63*;Za=6TkdnR6RX**7Pfwo+wPj%)ZOEKW>ST`R!b zEFIUYp`x30#$**8C)-tKwuauQpS~K5Oo*UQk>rI2Aqnef-nDfeSR5z~fH!wIE z)lhWqLUaGnu#r6LVSx2HQ1PHfR&HRe8SL58@BlmEWdmFEO z+*0x+@`h$zb4Jx%Z!IqID$bsobsZZ$SaBLwsR~-bOTE24ufgb8+}c9Lue*MwJ^v5L zKT&i7wX8g|(2q13SXN{{UBjavcBw literal 58880 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 W_s|oh_ diff --git a/Include/Cxbx.h b/Include/Cxbx.h index 546891afc..4e2504412 100644 --- a/Include/Cxbx.h +++ b/Include/Cxbx.h @@ -55,10 +55,10 @@ typedef signed short sint16; typedef signed long sint32; // define this to trace intercepted function calls -#define _DEBUG_TRACE +//#define _DEBUG_TRACE // define this to trace warnings -#define _DEBUG_WARNINGS +//#define _DEBUG_WARNINGS // version information #ifndef _DEBUG_TRACE diff --git a/Include/Win32/CxbxKrnl/EmuD3D8/PushBuffer.h b/Include/Win32/CxbxKrnl/EmuD3D8/PushBuffer.h index e047e51e9..a675fcf46 100644 --- a/Include/Win32/CxbxKrnl/EmuD3D8/PushBuffer.h +++ b/Include/Win32/CxbxKrnl/EmuD3D8/PushBuffer.h @@ -44,5 +44,6 @@ extern void EmuExecutePushBuffer // push buffer debugging extern bool g_bStepPush; extern bool g_bSkipPush; +extern bool g_bBrkPush; #endif \ No newline at end of file diff --git a/Include/Win32/CxbxKrnl/EmuXapi.h b/Include/Win32/CxbxKrnl/EmuXapi.h index 457321f08..7397b8e23 100644 --- a/Include/Win32/CxbxKrnl/EmuXapi.h +++ b/Include/Win32/CxbxKrnl/EmuXapi.h @@ -471,6 +471,23 @@ BOOL WINAPI EmuSetThreadPriority int nPriority ); +// ****************************************************************** +// * func: EmuGetThreadPriority +// ****************************************************************** +int WINAPI EmuGetThreadPriority +( + HANDLE hThread +); + +// ****************************************************************** +// * func: EmuSetThreadPriorityBoost +// ****************************************************************** +BOOL WINAPI EmuSetThreadPriorityBoost +( + HANDLE hThread, + BOOL DisablePriorityBoost +); + // ****************************************************************** // * func: EmuGetExitCodeThread // ****************************************************************** diff --git a/Source/Win32/CxbxKrnl/EmuD3D8.cpp b/Source/Win32/CxbxKrnl/EmuD3D8.cpp index 52943fcb1..2821d713b 100644 --- a/Source/Win32/CxbxKrnl/EmuD3D8.cpp +++ b/Source/Win32/CxbxKrnl/EmuD3D8.cpp @@ -402,6 +402,10 @@ static LRESULT WINAPI EmuMsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPar { if(wParam == VK_ESCAPE) PostMessage(hWnd, WM_CLOSE, 0, 0); + else if(wParam == VK_F10) + { + XTL::g_bBrkPush = TRUE; + } else if(wParam == VK_F11) { if(g_iWireframe++ == 2) @@ -2032,7 +2036,7 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_CreateVertexShader DWORD *pRecompiled=0; - //XTL::EmuRecompileVSHDeclaration((DWORD*)pDeclaration, (DWORD)pD3DVertexShader); + XTL::EmuRecompileVSHDeclaration((DWORD*)pDeclaration, (DWORD)pD3DVertexShader); //XTL::EmuRecompileVSHFunction((DWORD*)pFunction, &pRecompiled); HRESULT hRet = D3D_OK; @@ -4531,6 +4535,8 @@ HRESULT WINAPI XTL::EmuIDirect3DTexture8_GetSurfaceLevel *ppSurfaceLevel = new X_D3DSurface(); + (*ppSurfaceLevel)->Data = 0xB00BBABE; + hRet = pTexture8->GetSurfaceLevel(Level, &((*ppSurfaceLevel)->EmuSurface8)); #ifdef _DEBUG_TRACE @@ -6382,9 +6388,9 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_SetVertexShader if(Handle > 0xFFFF) { X_D3DVertexShader *pD3DVertexShader = (X_D3DVertexShader*)Handle; - -// hRet = g_pD3DDevice8->SetVertexShader(pD3DVertexShader->Handle); - hRet = g_pD3DDevice8->SetVertexShader(D3DFVF_XYZ); + + hRet = g_pD3DDevice8->SetVertexShader(pD3DVertexShader->Handle); +// hRet = g_pD3DDevice8->SetVertexShader(D3DFVF_XYZ); } else { diff --git a/Source/Win32/CxbxKrnl/EmuD3D8/Convert.cpp b/Source/Win32/CxbxKrnl/EmuD3D8/Convert.cpp index 919c215ac..e4967a44d 100644 --- a/Source/Win32/CxbxKrnl/EmuD3D8/Convert.cpp +++ b/Source/Win32/CxbxKrnl/EmuD3D8/Convert.cpp @@ -132,6 +132,8 @@ XTL::X_D3DFORMAT XTL::EmuPC2XB_D3DFormat(D3DFORMAT Format) return 0x0E; case D3DFMT_DXT1: return 0x0C; + case D3DFMT_A1R5G5B5: // Linear (X_D3DFMT_LIN_A1R5G5B5) + return 0x10; case D3DFMT_X8R8G8B8: // return 0x1E; // Linear (X_D3DFMT_LIN_X8R8G8B8) return 0x07; diff --git a/Source/Win32/CxbxKrnl/EmuD3D8/PushBuffer.cpp b/Source/Win32/CxbxKrnl/EmuD3D8/PushBuffer.cpp index 8c3c87e9c..5d872654f 100644 --- a/Source/Win32/CxbxKrnl/EmuD3D8/PushBuffer.cpp +++ b/Source/Win32/CxbxKrnl/EmuD3D8/PushBuffer.cpp @@ -46,6 +46,7 @@ extern XTL::LPDIRECT3DDEVICE8 g_pD3DDevice8; // Direct3D8 Device bool XTL::g_bStepPush = FALSE; bool XTL::g_bSkipPush = FALSE; +bool XTL::g_bBrkPush = FALSE; // pushbuffer execution emulation void XTL::EmuExecutePushBuffer @@ -54,6 +55,28 @@ void XTL::EmuExecutePushBuffer PVOID pFixup ) { + /* + if(g_bStepPush && g_bSkipPush) + { + g_bBrkPush = FALSE; + _asm int 3; + + IDirect3DVertexBuffer8 *pVertexBuffer=0; + + UINT uiStride=0; + + g_pD3DDevice8->GetStreamSource(0, &pVertexBuffer, &uiStride); + + BYTE *pbData=0; + + pVertexBuffer->Lock(0, 0, &pbData, D3DLOCK_READONLY); + + _asm int 3 + + pVertexBuffer->Unlock(); + } + */ + if(g_bSkipPush) return; diff --git a/Source/Win32/CxbxKrnl/EmuD3D8/VertexShader.cpp b/Source/Win32/CxbxKrnl/EmuD3D8/VertexShader.cpp index 6772700d9..bf641a4d4 100644 --- a/Source/Win32/CxbxKrnl/EmuD3D8/VertexShader.cpp +++ b/Source/Win32/CxbxKrnl/EmuD3D8/VertexShader.cpp @@ -130,12 +130,60 @@ void XTL::EmuRecompileVSHDeclaration DWORD dwDataType = (pDeclaration[v] >> D3DVSD_DATATYPESHIFT) & 0xFF; DWORD dwNewDataType = 0; + /* experimental! + switch(dwVertexRegister) + { + case 0: + pD3DVertexShader->Handle |= D3DFVF_XYZ; + break; + case 1: + pD3DVertexShader->Handle |= D3DFVF_DIFFUSE; + break; + case 2: + pD3DVertexShader->Handle &= ~D3DFVF_XYZ; + pD3DVertexShader->Handle |= D3DFVF_XYZRHW; + break; + case 3: + pD3DVertexShader->Handle |= D3DFVF_DIFFUSE; + break; + case 4: + pD3DVertexShader->Handle |= D3DFVF_SPECULAR; + break; + case 5: + pD3DVertexShader->Handle |= D3DFVF_DIFFUSE; + break; + case 6: + pD3DVertexShader->Handle |= D3DFVF_DIFFUSE; + break; + case 7: + pD3DVertexShader->Handle |= D3DFVF_DIFFUSE; + break; + case 8: + pD3DVertexShader->Handle |= D3DFVF_DIFFUSE; + break; + case 9: + pD3DVertexShader->Handle &= ~D3DFVF_TEXCOUNT_MASK; + pD3DVertexShader->Handle |= D3DFVF_TEX1; + break; + case 10: + pD3DVertexShader->Handle &= ~D3DFVF_TEXCOUNT_MASK; + pD3DVertexShader->Handle |= D3DFVF_TEX2; + break; + case 11: + pD3DVertexShader->Handle &= ~D3DFVF_TEXCOUNT_MASK; + pD3DVertexShader->Handle |= D3DFVF_TEX3; + break; + case 12: + pD3DVertexShader->Handle &= ~D3DFVF_TEXCOUNT_MASK; + pD3DVertexShader->Handle |= D3DFVF_TEX4; + break; + }*/ + switch(dwDataType) { case 0x12: DbgPrintf("D3DVSDT_FLOAT1"); dwNewDataType = D3DVSDT_FLOAT1; - pD3DVertexShader->Handle |= D3DFVF_XYZ; break; case 0x22: DbgPrintf("D3DVSDT_FLOAT2"); @@ -144,17 +192,14 @@ void XTL::EmuRecompileVSHDeclaration case 0x32: DbgPrintf("D3DVSDT_FLOAT3"); dwNewDataType = D3DVSDT_FLOAT3; - pD3DVertexShader->Handle |= D3DFVF_NORMAL; break; case 0x42: DbgPrintf("D3DVSDT_FLOAT4"); dwNewDataType = D3DVSDT_FLOAT4; - pD3DVertexShader->Handle |= D3DFVF_DIFFUSE; break; case 0x40: DbgPrintf("D3DVSDT_D3DCOLOR"); dwNewDataType = D3DVSDT_D3DCOLOR; - pD3DVertexShader->Handle |= D3DFVF_SPECULAR; break; case 0x25: DbgPrintf("D3DVSDT_SHORT2"); @@ -175,7 +220,6 @@ void XTL::EmuRecompileVSHDeclaration case 0x31: DbgPrintf("D3DVSDT_NORMSHORT3 /* xbox ext. */"); dwNewDataType = D3DVSDT_FLOAT3; - pD3DVertexShader->Handle |= D3DFVF_NORMAL; break; case 0x41: DbgPrintf("D3DVSDT_NORMSHORT4 /* xbox ext. */"); diff --git a/Source/Win32/CxbxKrnl/EmuKrnl.cpp b/Source/Win32/CxbxKrnl/EmuKrnl.cpp index de52879e9..557f9b812 100644 --- a/Source/Win32/CxbxKrnl/EmuKrnl.cpp +++ b/Source/Win32/CxbxKrnl/EmuKrnl.cpp @@ -2038,6 +2038,36 @@ XBSYSAPI EXPORTNUM(226) NTSTATUS NTAPI xboxkrnl::NtSetInformationFile return ret; } +// ****************************************************************** +// * 0x00E7 - NtSuspendThread +// ****************************************************************** +XBSYSAPI EXPORTNUM(231) NTSTATUS NTAPI xboxkrnl::NtSuspendThread +( + IN HANDLE ThreadHandle, + OUT PULONG PreviousSuspendCount OPTIONAL +) +{ + EmuSwapFS(); // Win2k/XP FS + + // debug trace + #ifdef _DEBUG_TRACE + { + printf("EmuKrnl (0x%X): NtSuspendThread\n" + "(\n" + " ThreadHandle : 0x%.08X\n" + " PreviousSuspendCount : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), ThreadHandle, PreviousSuspendCount); + } + #endif + + NTSTATUS ret = NtDll::NtSuspendThread(ThreadHandle, PreviousSuspendCount); + + EmuSwapFS(); // Xbox FS + + return ret; +} + // ****************************************************************** // * 0x00E8 - NtUserIoApcDispatcher // ****************************************************************** diff --git a/Source/Win32/CxbxKrnl/EmuXapi.cpp b/Source/Win32/CxbxKrnl/EmuXapi.cpp index 2309951d0..e33566312 100644 --- a/Source/Win32/CxbxKrnl/EmuXapi.cpp +++ b/Source/Win32/CxbxKrnl/EmuXapi.cpp @@ -749,6 +749,41 @@ BOOL WINAPI XTL::EmuCloseHandle return bRet; } +// ****************************************************************** +// * func: EmuSetThreadPriorityBoost +// ****************************************************************** +BOOL WINAPI XTL::EmuSetThreadPriorityBoost +( + HANDLE hThread, + BOOL DisablePriorityBoost +) +{ + EmuSwapFS(); // Win2k/XP FS + + // ****************************************************************** + // * debug trace + // ****************************************************************** + #ifdef _DEBUG_TRACE + { + printf("EmuXapi (0x%X): EmuSetThreadPriorityBoost\n" + "(\n" + " hThread : 0x%.08X\n" + " DisablePriorityBoost: 0x%.08X\n" + ");\n", + GetCurrentThreadId(), hThread, DisablePriorityBoost); + } + #endif + + BOOL bRet = SetThreadPriorityBoost(hThread, DisablePriorityBoost); + + if(bRet == FALSE) + EmuWarning("SetThreadPriorityBoost Failed!"); + + EmuSwapFS(); // XBox FS + + return bRet; +} + // ****************************************************************** // * func: EmuSetThreadPriority // ****************************************************************** @@ -784,6 +819,40 @@ BOOL WINAPI XTL::EmuSetThreadPriority return bRet; } + +// ****************************************************************** +// * func: EmuGetThreadPriority +// ****************************************************************** +int WINAPI XTL::EmuGetThreadPriority +( + HANDLE hThread +) +{ + EmuSwapFS(); // Win2k/XP FS + + // ****************************************************************** + // * debug trace + // ****************************************************************** + #ifdef _DEBUG_TRACE + { + printf("EmuXapi (0x%X): EmuGetThreadPriority\n" + "(\n" + " hThread : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), hThread); + } + #endif + + int iRet = GetThreadPriority(hThread); + + if(iRet == THREAD_PRIORITY_ERROR_RETURN) + EmuWarning("GetThreadPriority Failed!"); + + EmuSwapFS(); // XBox FS + + return iRet; +} + // ****************************************************************** // * func: EmuGetExitCodeThread // ****************************************************************** diff --git a/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.4627.inl b/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.4627.inl index dc2d2bf6d..848ca067f 100644 --- a/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.4627.inl +++ b/Source/Win32/CxbxKrnl/HLEDataBase/D3D8.1.0.4627.inl @@ -868,6 +868,44 @@ SOOVPA<12> IDirect3DDevice8_CreateTexture2_1_0_4627 = } }; +// ****************************************************************** +// * IDirect3DDevice8_CreateTexture2B +// ****************************************************************** +SOOVPA<12> IDirect3DDevice8_CreateTexture2B_1_0_4627 = +{ + 0, // Large == 0 + 12, // Count == 12 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_CreateTexture2B+0x02 : lea eax, [esp+0x20] + { 0x02, 0x8D }, // (Offset,Value)-Pair #1 + { 0x05, 0x20 }, // (Offset,Value)-Pair #2 + + // IDirect3DDevice8_CreateTexture2B+0x0E : setz dl + { 0x0E, 0x0F }, // (Offset,Value)-Pair #3 + { 0x0F, 0x94 }, // (Offset,Value)-Pair #4 + { 0x10, 0xC2 }, // (Offset,Value)-Pair #5 + + // IDirect3DDevice8_CreateTexture2B+0x2A : push 0x00 + { 0x25, 0x6A }, // (Offset,Value)-Pair #6 + { 0x26, 0x00 }, // (Offset,Value)-Pair #7 + + // IDirect3DDevice8_CreateTexture2B+0x53 : call [abs] + { 0x50, 0xE8 }, // (Offset,Value)-Pair #8 + + // IDirect3DDevice8_CreateTexture2B+0x78 : jnz +0x0D + { 0x75, 0x75 }, // (Offset,Value)-Pair #9 + { 0x76, 0x0D }, // (Offset,Value)-Pair #10 + + // IDirect3DDevice8_CreateTexture2B+0xAE : retn 0x1C + { 0x81, 0xC2 }, // (Offset,Value)-Pair #11 + { 0x82, 0x1C }, // (Offset,Value)-Pair #12 + } +}; + // ****************************************************************** // * IDirect3DDevice8_GetDisplayMode // ****************************************************************** @@ -1197,6 +1235,34 @@ SOOVPA<10> IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4627 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_NormalizeNormalsB +// ****************************************************************** +SOOVPA<8> IDirect3DDevice8_SetRenderState_NormalizeNormalsB_1_0_4627 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetRenderState_NormalizeNormalsB+0x07 : mov eax, [esi] + { 0x07, 0x8B }, // (Offset,Value)-Pair #1 + { 0x08, 0x06 }, // (Offset,Value)-Pair #2 + + // IDirect3DDevice8_SetRenderState_NormalizeNormalsB+0x2E : or [addr], 0x200 + { 0x2E, 0x81 }, // (Offset,Value)-Pair #3 + { 0x2F, 0x0D }, // (Offset,Value)-Pair #4 + { 0x34, 0x00 }, // (Offset,Value)-Pair #5 + { 0x35, 0x02 }, // (Offset,Value)-Pair #6 + + // IDirect3DDevice8_SetRenderState_NormalizeNormalsB+0x3F : retn 0x04 + { 0x3F, 0xC2 }, // (Offset,Value)-Pair #7 + { 0x40, 0x04 }, // (Offset,Value)-Pair #8 + } +}; + // ****************************************************************** // * IDirect3DDevice8_SetRenderState_Dxt1NoiseEnable // ****************************************************************** @@ -1261,6 +1327,41 @@ SOOVPA<13> IDirect3DDevice8_SetRenderState_ZEnable_1_0_4627 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_ZEnableB +// ****************************************************************** +SOOVPA<13> IDirect3DDevice8_SetRenderState_ZEnableB_1_0_4627 = +{ + 0, // Large == 0 + 13, // Count == 13 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetRenderState_ZEnableB+0x0C : jb +0x0E + { 0x0C, 0x72 }, // (Offset,Value)-Pair #1 + { 0x0D, 0x0E }, // (Offset,Value)-Pair #2 + + // IDirect3DDevice8_SetRenderState_ZEnableB+0x1B : mov ecx, [esi+0x21B8h] + { 0x24, 0x8B }, // (Offset,Value)-Pair #3 + { 0x25, 0x8E }, // (Offset,Value)-Pair #4 + { 0x26, 0xB8 }, // (Offset,Value)-Pair #5 + { 0x27, 0x21 }, // (Offset,Value)-Pair #6 + + // IDirect3DDevice8_SetRenderState_ZEnableB+0x37 : mov dword ptr [eax], 0x4030 + { 0x37, 0xC7 }, // (Offset,Value)-Pair #7 + { 0x38, 0x00 }, // (Offset,Value)-Pair #8 + { 0x39, 0x0C }, // (Offset,Value)-Pair #9 + { 0x3A, 0x03 }, // (Offset,Value)-Pair #10 + { 0x3B, 0x04 }, // (Offset,Value)-Pair #11 + + // IDirect3DDevice8_SetRenderState_ZEnableB+0x99 : retn 0x04 + { 0x99, 0xC2 }, // (Offset,Value)-Pair #12 + { 0x9A, 0x04 }, // (Offset,Value)-Pair #13 + } +}; + // ****************************************************************** // * IDirect3DDevice8_SetRenderState_MultiSampleAntiAlias // ****************************************************************** @@ -1408,27 +1509,101 @@ SOOVPA<11> IDirect3DVertexBuffer8_Lock2_1_0_4627 = 0, // XRef Not Used { - // IDirect3DVertexBuffer8_Lock+0x01 : mov bl, [esp+0x0C] + // IDirect3DVertexBuffer8_Lock2+0x01 : mov bl, [esp+0x0C] { 0x01, 0x8A }, // (Offset,Value)-Pair #1 { 0x02, 0x5C }, // (Offset,Value)-Pair #2 { 0x03, 0x24 }, // (Offset,Value)-Pair #3 { 0x04, 0x0C }, // (Offset,Value)-Pair #4 - // IDirect3DVertexBuffer8_Lock+0x09 : jnz +0x24 + // IDirect3DVertexBuffer8_Lock2+0x09 : jnz +0x24 { 0x09, 0x75 }, // (Offset,Value)-Pair #5 { 0x0A, 0x24 }, // (Offset,Value)-Pair #6 - // IDirect3DVertexBuffer8_Lock+0x2F : test bl, 0xA0 + // IDirect3DVertexBuffer8_Lock2+0x2F : test bl, 0xA0 { 0x2F, 0xF6 }, // (Offset,Value)-Pair #7 { 0x30, 0xC3 }, // (Offset,Value)-Pair #8 { 0x31, 0xA0 }, // (Offset,Value)-Pair #9 - // IDirect3DVertexBuffer8_Lock+0x48 : retn 0x08 + // IDirect3DVertexBuffer8_Lock2+0x48 : retn 0x08 { 0x48, 0xC2 }, // (Offset,Value)-Pair #10 { 0x49, 0x08 }, // (Offset,Value)-Pair #11 } }; +// ****************************************************************** +// * IDirect3DVertexBuffer8_Lock2B +// ****************************************************************** +SOOVPA<11> IDirect3DVertexBuffer8_Lock2B_1_0_4627 = +{ + 0, // Large == 0 + 11, // Count == 11 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DVertexBuffer8_Lock2B+0x01 : mov bl, [esp+0x0C] + { 0x01, 0x8A }, // (Offset,Value)-Pair #1 + { 0x02, 0x5C }, // (Offset,Value)-Pair #2 + { 0x03, 0x24 }, // (Offset,Value)-Pair #3 + { 0x04, 0x0C }, // (Offset,Value)-Pair #4 + + // IDirect3DVertexBuffer8_Lock2B+0x09 : jnz +0x24 + { 0x09, 0x75 }, // (Offset,Value)-Pair #5 + { 0x0A, 0x2D }, // (Offset,Value)-Pair #6 + + // IDirect3DVertexBuffer8_Lock2B+0x2F : test bl, 0xA0 + { 0x38, 0xF6 }, // (Offset,Value)-Pair #7 + { 0x39, 0xC3 }, // (Offset,Value)-Pair #8 + { 0x3A, 0xA0 }, // (Offset,Value)-Pair #9 + + // IDirect3DVertexBuffer8_Lock2B+0x48 : retn 0x08 + { 0x6B, 0xC2 }, // (Offset,Value)-Pair #10 + { 0x6C, 0x08 }, // (Offset,Value)-Pair #11 + } +}; + +// ****************************************************************** +// * IDirect3DSurface8_LockRectB +// ****************************************************************** +SOOVPA<17> IDirect3DSurface8_LockRectB_1_0_4627 = +{ + 0, // Large == 0 + 17, // Count == 17 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DSurface8_LockRectB+0x00 : mov eax, [esp+0x10] + { 0x00, 0x8B }, // (Offset,Value)-Pair #1 + { 0x01, 0x44 }, // (Offset,Value)-Pair #2 + { 0x02, 0x24 }, // (Offset,Value)-Pair #3 + { 0x03, 0x10 }, // (Offset,Value)-Pair #4 + + // IDirect3DSurface8_LockRectB+0x04 : mov ecx, [esp+0x04] + { 0x04, 0x8B }, // (Offset,Value)-Pair #5 + { 0x05, 0x4C }, // (Offset,Value)-Pair #6 + { 0x06, 0x24 }, // (Offset,Value)-Pair #7 + { 0x07, 0x04 }, // (Offset,Value)-Pair #8 + + // IDirect3DSurface8_LockRectB+0x08 : push esi; mov esi, [esp+0x0C]; push eax + { 0x08, 0x56 }, // (Offset,Value)-Pair #9 + { 0x09, 0x8B }, // (Offset,Value)-Pair #10 + { 0x0A, 0x74 }, // (Offset,Value)-Pair #11 + { 0x0B, 0x24 }, // (Offset,Value)-Pair #12 + { 0x0C, 0x0C }, // (Offset,Value)-Pair #13 + { 0x0D, 0x50 }, // (Offset,Value)-Pair #14 + + // IDirect3DSurface8_LockRectB+0x17 : call [addr] + { 0x17, 0xE8 }, // (Offset,Value)-Pair #15 + + // IDirect3DSurface8_LockRectB+0x1D : retn 0x10 + { 0x1D, 0xC2 }, // (Offset,Value)-Pair #16 + { 0x1E, 0x10 }, // (Offset,Value)-Pair #17 + } +}; + // ****************************************************************** // * Get2DSurfaceDesc // ****************************************************************** @@ -1573,7 +1748,7 @@ SOOVPA<14> IDirect3DTexture8_GetSurfaceLevel2_1_0_4627 = { 0x04, 0x8B }, // (Offset,Value)-Pair #4 { 0x07, 0x14 }, // (Offset,Value)-Pair #5 - // IDirect3DTexture8_GetSurfaceLevel2+0x04 : lea eax, [esp+0x14] + // IDirect3DTexture8_GetSurfaceLevel2+0x08 : lea eax, [esp+0x14] { 0x08, 0x8D }, // (Offset,Value)-Pair #6 { 0x0B, 0x14 }, // (Offset,Value)-Pair #7 @@ -1594,6 +1769,48 @@ SOOVPA<14> IDirect3DTexture8_GetSurfaceLevel2_1_0_4627 = } }; +// ****************************************************************** +// * IDirect3DTexture8_GetSurfaceLevel2B +// ****************************************************************** +SOOVPA<14> IDirect3DTexture8_GetSurfaceLevel2B_1_0_4627 = +{ + 0, // Large == 0 + 14, // Count == 14 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DTexture8_GetSurfaceLevel2B+0x00 : sub esp, 0x0C + { 0x00, 0x83 }, // (Offset,Value)-Pair #1 + { 0x01, 0xEC }, // (Offset,Value)-Pair #2 + { 0x02, 0x0C }, // (Offset,Value)-Pair #3 + + // IDirect3DTexture8_GetSurfaceLevel2B+0x04 : mov esi, [esp+0x14] + { 0x04, 0x8B }, // (Offset,Value)-Pair #4 + { 0x07, 0x14 }, // (Offset,Value)-Pair #5 + + // IDirect3DTexture8_GetSurfaceLevel2B+0x08 : lea eax, [esp+0x14] + { 0x08, 0x8D }, // (Offset,Value)-Pair #6 + { 0x0B, 0x18 }, // (Offset,Value)-Pair #7 + + // IDirect3DTexture8_GetSurfaceLevel2B+0x17 : mov edx, [esp+0x24] + { 0x17, 0x8B }, // (Offset,Value)-Pair #8 + { 0x1A, 0x24 }, // (Offset,Value)-Pair #9 + + // IDirect3DTexture8_GetSurfaceLevel2B+0x1B : lea eax, [esp+0x18] + { 0x1B, 0x8D }, // (Offset,Value)-Pair #10 + { 0x1E, 0x18 }, // (Offset,Value)-Pair #11 + + // IDirect3DTexture8_GetSurfaceLevel2B+0x29 : call [abs] + { 0x29, 0xE8 }, // (Offset,Value)-Pair #12 + + // IDirect3DTexture8_GetSurfaceLevel2B+0x47 : retn 0x08 + { 0x45, 0xC2 }, // (Offset,Value)-Pair #13 + { 0x46, 0x08 }, // (Offset,Value)-Pair #14 + } +}; + // ****************************************************************** // * D3D8_1_0_4627 // ****************************************************************** @@ -1887,6 +2104,16 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DDevice8_CreateTexture2" #endif }, + // IDirect3DDevice8::CreateTexture2B + { + (OOVPA*)&IDirect3DDevice8_CreateTexture2B_1_0_4627, + + XTL::EmuIDirect3DDevice8_CreateTexture2, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_CreateTexture2B" + #endif + }, // IDirect3DDevice8::SetIndices (* unchanged since 4361 *) { (OOVPA*)&IDirect3DDevice8_SetIndices_1_0_4361, @@ -2057,6 +2284,16 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DDevice8_SetRenderState_NormalizeNormals" #endif }, + // IDirect3DDevice8::SetRenderState_NormalizeNormalsB + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_NormalizeNormalsB_1_0_4627, + + XTL::EmuIDirect3DDevice8_SetRenderState_NormalizeNormals, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_NormalizeNormalsB" + #endif + }, // IDirect3DDevice8::SetRenderState_TextureFactor (* unchanged since 4361 *) { (OOVPA*)&IDirect3DDevice8_SetRenderState_TextureFactor_1_0_4361, @@ -2137,6 +2374,16 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DDevice8_SetRenderState_ZEnable" #endif }, + // IDirect3DDevice8::SetRenderState_ZEnableB + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_ZEnableB_1_0_4627, + + XTL::EmuIDirect3DDevice8_SetRenderState_ZEnable, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_ZEnableB" + #endif + }, // IDirect3DDevice8::SetRenderState_StencilEnable (* unchanged since 4361 *) { (OOVPA*)&IDirect3DDevice8_SetRenderState_StencilEnable_1_0_4361, @@ -2297,6 +2544,16 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DVertexBuffer8_Lock2" #endif }, + // IDirect3DVertexBuffer8::Lock2B + { + (OOVPA*)&IDirect3DVertexBuffer8_Lock2B_1_0_4627, + + XTL::EmuIDirect3DVertexBuffer8_Lock2, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DVertexBuffer8_Lock2B" + #endif + }, // IDirect3DResource8::Register (* unchanged since 3925 *) { (OOVPA*)&IDirect3DResource8_Register_1_0_3925, @@ -2385,6 +2642,16 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DSurface8_LockRect" #endif }, + // IDirect3DSurface8::LockRectB + { + (OOVPA*)&IDirect3DSurface8_LockRectB_1_0_4627, + + XTL::EmuIDirect3DSurface8_LockRect, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DSurface8_LockRectB" + #endif + }, // IDirect3DBaseTexture8::GetLevelCount (* unchanged since 4361 *) { (OOVPA*)&IDirect3DBaseTexture8_GetLevelCount_1_0_4361, @@ -2405,6 +2672,16 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DTexture8_GetSurfaceLevel2" #endif }, + // IDirect3DTexture8::GetSurfaceLevel2B + { + (OOVPA*)&IDirect3DTexture8_GetSurfaceLevel2B_1_0_4627, + + XTL::EmuIDirect3DTexture8_GetSurfaceLevel2, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DTexture8_GetSurfaceLevel2B" + #endif + }, // IDirect3DTexture8::LockRect (* unchanged since 3925 *) { (OOVPA*)&IDirect3DTexture8_LockRect_1_0_3925, diff --git a/Source/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl b/Source/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl index 12a9fa905..662c06ab8 100644 --- a/Source/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl +++ b/Source/Win32/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl @@ -32,6 +32,70 @@ // * // ****************************************************************** +// ****************************************************************** +// * SetThreadPriorityBoost +// ****************************************************************** +SOOVPA<10> SetThreadPriorityBoost_1_0_4627 = +{ + 0, // Large == 0 + 10, // Count == 10 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // SetThreadPriorityBoost+0x0D : push [ebp+0x08] + { 0x0D, 0xFF }, // (Offset,Value)-Pair #1 + { 0x0E, 0x75 }, // (Offset,Value)-Pair #2 + { 0x0F, 0x08 }, // (Offset,Value)-Pair #3 + + // SetThreadPriorityBoost+0x18 : jl +0x20 + { 0x18, 0x7C }, // (Offset,Value)-Pair #4 + { 0x19, 0x20 }, // (Offset,Value)-Pair #5 + + // SetThreadPriorityBoost+0x1F : setnz al + { 0x1F, 0x0F }, // (Offset,Value)-Pair #6 + { 0x20, 0x95 }, // (Offset,Value)-Pair #7 + { 0x21, 0xC0 }, // (Offset,Value)-Pair #8 + + // SetThreadPriorityBoost+0x2C : mov ecx, [ebp+0x08] + { 0x2C, 0x8B }, // (Offset,Value)-Pair #9 + { 0x2D, 0x4D }, // (Offset,Value)-Pair #10 + } +}; + +// ****************************************************************** +// * GetThreadPriority +// ****************************************************************** +SOOVPA<10> GetThreadPriority_1_0_4627 = +{ + 0, // Large == 0 + 10, // Count == 10 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // GetThreadPriority+0x0D : push [ebp+0x08] + { 0x0D, 0xFF }, // (Offset,Value)-Pair #1 + { 0x0E, 0x75 }, // (Offset,Value)-Pair #2 + { 0x0F, 0x08 }, // (Offset,Value)-Pair #3 + + // GetThreadPriority+0x18 : jl +0x2B + { 0x18, 0x7C }, // (Offset,Value)-Pair #4 + { 0x19, 0x2B }, // (Offset,Value)-Pair #5 + + // GetThreadPriority+0x2F : cmp esi, 0xFFFFFFF0 + { 0x2F, 0x83 }, // (Offset,Value)-Pair #6 + { 0x30, 0xFE }, // (Offset,Value)-Pair #7 + { 0x31, 0xF0 }, // (Offset,Value)-Pair #8 + + // GetThreadPriority+0x37 : mov ecx, [ebp+0x08] + { 0x37, 0x8B }, // (Offset,Value)-Pair #9 + { 0x38, 0x4D }, // (Offset,Value)-Pair #10 + } +}; + // ****************************************************************** // * RtlFreeHeap // ****************************************************************** @@ -98,6 +162,46 @@ SOOVPA<10> RtlReAllocateHeap_1_0_4627 = // ****************************************************************** OOVPATable XAPI_1_0_4627[] = { + // SetThreadPriorityBoost + { + (OOVPA*)&SetThreadPriorityBoost_1_0_4627, + + XTL::EmuSetThreadPriorityBoost, + + #ifdef _DEBUG_TRACE + "EmuSetThreadPriorityBoost" + #endif + }, + // SetThreadPriority (* unchanged since 3911 *) + { + (OOVPA*)&SetThreadPriority_1_0_3911, + + XTL::EmuSetThreadPriority, + + #ifdef _DEBUG_TRACE + "EmuSetThreadPriority" + #endif + }, + // GetThreadPriority + { + (OOVPA*)&GetThreadPriority_1_0_4627, + + XTL::EmuGetThreadPriority, + + #ifdef _DEBUG_TRACE + "EmuGetThreadPriority" + #endif + }, + // XRegisterThreadNotifyRoutine (* unchanged since 3911 *) + { + (OOVPA*)&XRegisterThreadNotifyRoutine_1_0_3911, + + XTL::EmuXRegisterThreadNotifyRoutine, + + #ifdef _DEBUG_TRACE + "EmuXRegisterThreadNotifyRoutine" + #endif + }, // RtlCreateHeap (* unchanged since 1.0.4361 *) (* OR FARTHER *) { (OOVPA*)&RtlCreateHeap_1_0_3911, diff --git a/Source/Win32/CxbxKrnl/KernelThunk.cpp b/Source/Win32/CxbxKrnl/KernelThunk.cpp index 0f76e20af..f2b3ebd2c 100644 --- a/Source/Win32/CxbxKrnl/KernelThunk.cpp +++ b/Source/Win32/CxbxKrnl/KernelThunk.cpp @@ -288,7 +288,7 @@ extern "C" CXBXKRNL_API uint32 KernelThunkTable[367] = (uint32)PANIC(0x00E4), // 0x00E4 (228) (uint32)PANIC(0x00E5), // 0x00E5 (229) (uint32)PANIC(0x00E6), // 0x00E6 (230) - (uint32)PANIC(0x00E7), // 0x00E7 (231) + (uint32)&xboxkrnl::NtSuspendThread, // 0x00E7 (231) (uint32)&xboxkrnl::NtUserIoApcDispatcher, // 0x00E8 (232) (uint32)PANIC(0x00E9), // 0x00E9 (233) (uint32)&xboxkrnl::NtWaitForSingleObjectEx, // 0x00EA (234)