From 1052311a10712e0b6dd62c258d248cbd1758cb6f Mon Sep 17 00:00:00 2001 From: Aaron Robinson Date: Fri, 20 Jun 2003 07:04:40 +0000 Subject: [PATCH] Gamepad/Rumble demos "working" (screwyily) --- Include/Cxbx.h | 4 +- Include/Win32/CxbxKrnl/EmuFS.h | 4 +- Include/Win32/CxbxKrnl/EmuXapi.h | 36 ++- Include/Win32/CxbxKrnl/xd3d8.h | 41 +++- Source/Win32/CxbxKrnl/D3D8.1.0.4361.inl | 281 ++++++++++++++++++++++++ Source/Win32/CxbxKrnl/D3D8.1.0.4627.inl | 137 +----------- Source/Win32/CxbxKrnl/EmuD3D8.cpp | 123 ++++++++++- Source/Win32/CxbxKrnl/EmuKrnl.cpp | 30 +++ Source/Win32/CxbxKrnl/EmuXapi.cpp | 32 +++ Source/Win32/CxbxKrnl/KernelThunk.cpp | 2 +- Source/Win32/CxbxKrnl/Xapi.1.0.4361.inl | 43 ++++ 11 files changed, 584 insertions(+), 149 deletions(-) diff --git a/Include/Cxbx.h b/Include/Cxbx.h index b922308d4..dc8f5476b 100644 --- a/Include/Cxbx.h +++ b/Include/Cxbx.h @@ -67,9 +67,9 @@ typedef signed long sint32; // * Version information // ****************************************************************** #ifndef _DEBUG_TRACE -#define _CXBX_VERSION "0.7.3" +#define _CXBX_VERSION "0.7.4" #else -#define _CXBX_VERSION "0.7.3-Trace" +#define _CXBX_VERSION "0.7.4-Trace" #endif // ****************************************************************** diff --git a/Include/Win32/CxbxKrnl/EmuFS.h b/Include/Win32/CxbxKrnl/EmuFS.h index a92287985..81c032902 100644 --- a/Include/Win32/CxbxKrnl/EmuFS.h +++ b/Include/Win32/CxbxKrnl/EmuFS.h @@ -117,7 +117,7 @@ static inline void EmuSwapFS() mov ax, fs:[0x14] mov fs, ax } - +/* // ****************************************************************** // * Every "N" interceptions, perform various periodic services // ****************************************************************** @@ -135,7 +135,7 @@ static inline void EmuSwapFS() // Back to Zero! dwInterceptionCount = 0; - } + }*/ } #endif diff --git a/Include/Win32/CxbxKrnl/EmuXapi.h b/Include/Win32/CxbxKrnl/EmuXapi.h index 11e1ec51e..2e5ac35d5 100644 --- a/Include/Win32/CxbxKrnl/EmuXapi.h +++ b/Include/Win32/CxbxKrnl/EmuXapi.h @@ -217,6 +217,31 @@ typedef struct _XINPUT_STATE } XINPUT_STATE, *PXINPUT_STATE; +// ****************************************************************** +// * XINPUT_FEEDBACK_HEADER +// ****************************************************************** +typedef struct _XINPUT_FEEDBACK_HEADER +{ + DWORD dwStatus; + HANDLE OPTIONAL hEvent; + BYTE Reserved[58]; +} +XINPUT_FEEDBACK_HEADER, *PXINPUT_FEEDBACK_HEADER; + +// ****************************************************************** +// * XINPUT_FEEDBACK +// ****************************************************************** +typedef struct _XINPUT_FEEDBACK +{ + XINPUT_FEEDBACK_HEADER Header; + + union + { + XINPUT_RUMBLE Rumble; + }; +} +XINPUT_FEEDBACK, *PXINPUT_FEEDBACK; + // ****************************************************************** // * RTL_HEAP_PARAMETERS // ****************************************************************** @@ -298,7 +323,7 @@ DWORD WINAPI EmuXInputGetCapabilities ); // ****************************************************************** -// * func: EmuInputGetState +// * func: EmuXInputGetState // ****************************************************************** DWORD WINAPI EmuXInputGetState ( @@ -306,6 +331,15 @@ DWORD WINAPI EmuXInputGetState OUT PXINPUT_STATE pState ); +// ****************************************************************** +// * func: EmuXInputGetState +// ****************************************************************** +DWORD WINAPI EmuXInputSetState +( + IN HANDLE hDevice, + IN OUT PXINPUT_FEEDBACK pFeedback +); + // ****************************************************************** // * func: EmuCreateThread // ****************************************************************** diff --git a/Include/Win32/CxbxKrnl/xd3d8.h b/Include/Win32/CxbxKrnl/xd3d8.h index f571a9fd2..496ec9e35 100644 --- a/Include/Win32/CxbxKrnl/xd3d8.h +++ b/Include/Win32/CxbxKrnl/xd3d8.h @@ -89,23 +89,26 @@ inline D3DFORMAT EmuXB2PC_D3DFormat(X_D3DFORMAT Format) case 0: return (D3DFORMAT)NULL; - case 0x05: // Swizzled + case 0x04: // Swizzled (X_D3DFMT_A4R4G4B4) + return D3DFMT_A4R4G4B4; + + case 0x05: // Swizzled (X_D3DFMT_R5G6B5) return D3DFMT_R5G6B5; - case 0x12: // Linear (X_D3DFMT_LIN_A8R8G8B8) - case 0x06: // Swizzled + case 0x12: // Linear (X_D3DFMT_LIN_A8R8G8B8) + case 0x06: // Swizzled (X_D3DFMT_LIN_A8R8G8B8) return D3DFMT_A8R8G8B8; - case 0x07: + case 0x07: // Swizzled (X_D3DFMT_X8R8G8B8) return D3DFMT_X8R8G8B8; - case 0x0E: + case 0x0E: // Compressed (X_D3DFMT_DXT2) return D3DFMT_DXT2; - case 0x2A: + case 0x2A: // Swizzled (X_D3DFMT_D24S8) return D3DFMT_D24S8; - case 0x2C: + case 0x2C: // Swizzled (X_D3DFMT_D16) return D3DFMT_D16; } @@ -499,6 +502,14 @@ HRESULT WINAPI EmuIDirect3DDevice8_CreatePixelShader DWORD *pHandle ); +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetPixelShader +// ****************************************************************** +HRESULT WINAPI EmuIDirect3DDevice8_SetPixelShader +( + DWORD Handle +); + // ****************************************************************** // * func: EmuIDirect3DDevice8_CreateTexture2 // ****************************************************************** @@ -612,6 +623,14 @@ ULONG WINAPI EmuIDirect3DResource8_Release X_D3DResource *pThis ); +// ****************************************************************** +// * func: EmuIDirect3DResource8_IsBusy +// ****************************************************************** +BOOL WINAPI EmuIDirect3DResource8_IsBusy +( + X_D3DResource *pThis +); + // ****************************************************************** // * func: EmuIDirect3DSurface8_GetDesc // ****************************************************************** @@ -769,6 +788,14 @@ VOID WINAPI EmuIDirect3DDevice8_SetRenderState_ZEnable DWORD Value ); +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetRenderState_StencilEnable +// ****************************************************************** +VOID WINAPI EmuIDirect3DDevice8_SetRenderState_StencilEnable +( + DWORD Value +); + // ****************************************************************** // * func: EmuIDirect3DDevice8_SetRenderState_MultiSampleAntiAlias // ****************************************************************** diff --git a/Source/Win32/CxbxKrnl/D3D8.1.0.4361.inl b/Source/Win32/CxbxKrnl/D3D8.1.0.4361.inl index 6056b8cb1..64b8e7c95 100644 --- a/Source/Win32/CxbxKrnl/D3D8.1.0.4361.inl +++ b/Source/Win32/CxbxKrnl/D3D8.1.0.4361.inl @@ -325,6 +325,36 @@ SOOVPA<11> IDirect3DDevice8_CreatePixelShader_1_0_4361 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetPixelShader +// ****************************************************************** +SOOVPA<10> IDirect3DDevice8_SetPixelShader_1_0_4361 = +{ + 0, // Large == 0 + 10, // Count == 10 + + { + // IDirect3DDevice8_SetPixelShader+0x0E : mov esi, [ebx+0x0370] + { 0x0E, 0x8B }, // (Offset,Value)-Pair #1 + { 0x0F, 0xB3 }, // (Offset,Value)-Pair #2 + { 0x10, 0x70 }, // (Offset,Value)-Pair #3 + { 0x11, 0x03 }, // (Offset,Value)-Pair #4 + + // IDirect3DDevice8_SetPixelShader+0x3A : or eax, 0x2000 + { 0x3A, 0x0D }, // (Offset,Value)-Pair #5 + { 0x3C, 0x20 }, // (Offset,Value)-Pair #6 + + // IDirect3DDevice8_SetPixelShader+0x78 : retn 0x04 + { 0x78, 0xC2 }, // (Offset,Value)-Pair #7 + { 0x79, 0x04 }, // (Offset,Value)-Pair #8 + + // IDirect3DDevice8_SetPixelShader+0xE3 : rep movsd + { 0xE3, 0xF3 }, // (Offset,Value)-Pair #9 + { 0xE4, 0xA5 }, // (Offset,Value)-Pair #10 + + } +}; + // ****************************************************************** // * IDirect3DDevice8_CreateTexture // ****************************************************************** @@ -641,6 +671,127 @@ SOOVPA<13> IDirect3DDevice8_SetRenderState_CullMode_1_0_4361 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_TextureFactor +// ****************************************************************** +SOOVPA<9> IDirect3DDevice8_SetRenderState_TextureFactor_1_0_4361 = +{ + 0, // Large == 0 + 9, // Count == 9 + + { + // IDirect3DDevice8_SetRenderState_TextureFactor+0x07 : mov eax, [esi+0x0370] + { 0x07, 0x8B }, // (Offset,Value)-Pair #1 + { 0x08, 0x86 }, // (Offset,Value)-Pair #2 + { 0x09, 0x70 }, // (Offset,Value)-Pair #3 + { 0x0A, 0x03 }, // (Offset,Value)-Pair #4 + + // IDirect3DDevice8_SetRenderState_TextureFactor+0x2F : nop + { 0x2F, 0x90 }, // (Offset,Value)-Pair #5 + + // IDirect3DDevice8_SetRenderState_TextureFactor+0x41 : retn 0x04 + { 0x41, 0xC2 }, // (Offset,Value)-Pair #6 + { 0x42, 0x04 }, // (Offset,Value)-Pair #7 + + // IDirect3DDevice8_SetRenderState_TextureFactor+0x4E : retn 0x04 + { 0x4E, 0xC2 }, // (Offset,Value)-Pair #8 + { 0x4F, 0x04 }, // (Offset,Value)-Pair #9 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_EdgeAntiAlias +// ****************************************************************** +SOOVPA<10> IDirect3DDevice8_SetRenderState_EdgeAntiAlias_1_0_4361 = +{ + 0, // Large == 0 + 10, // Count == 10 + + { + // IDirect3DDevice8_SetRenderState_EdgeAntiAlias+0x07 : mov eax, [esi] + { 0x07, 0x8B }, // (Offset,Value)-Pair #1 + { 0x08, 0x06 }, // (Offset,Value)-Pair #2 + + // IDirect3DDevice8_SetRenderState_EdgeAntiAlias+0x0C : jb +0x05 + { 0x0C, 0x72 }, // (Offset,Value)-Pair #3 + { 0x0D, 0x05 }, // (Offset,Value)-Pair #4 + + // IDirect3DDevice8_SetRenderState_EdgeAntiAlias+0x13 : mov ecx, [esp+0x08] + { 0x13, 0x8B }, // (Offset,Value)-Pair #5 + { 0x14, 0x4C }, // (Offset,Value)-Pair #6 + { 0x15, 0x24 }, // (Offset,Value)-Pair #7 + { 0x16, 0x08 }, // (Offset,Value)-Pair #8 + + // IDirect3DDevice8_SetRenderState_EdgeAntiAlias+0x2F : retn 0x04 + { 0x2F, 0xC2 }, // (Offset,Value)-Pair #9 + { 0x30, 0x04 }, // (Offset,Value)-Pair #10 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_FillMode +// ****************************************************************** +SOOVPA<11> IDirect3DDevice8_SetRenderState_FillMode_1_0_4361 = +{ + 0, // Large == 0 + 11, // Count == 11 + + { + // IDirect3DDevice8_SetRenderState_FillMode+0x07 : mov eax, [esi] + { 0x07, 0x8B }, // (Offset,Value)-Pair #1 + { 0x08, 0x06 }, // (Offset,Value)-Pair #2 + + // IDirect3DDevice8_SetRenderState_FillMode+0x21 : mov ecx, [esp+0x08] + { 0x21, 0x8B }, // (Offset,Value)-Pair #3 + { 0x22, 0x4C }, // (Offset,Value)-Pair #4 + { 0x23, 0x24 }, // (Offset,Value)-Pair #5 + { 0x24, 0x08 }, // (Offset,Value)-Pair #6 + + // IDirect3DDevice8_SetRenderState_FillMode+0x25 : jnz +0x02 + { 0x25, 0x75 }, // (Offset,Value)-Pair #7 + { 0x26, 0x02 }, // (Offset,Value)-Pair #8 + + // IDirect3DDevice8_SetRenderState_FillMode+0x35 : add eax, 0x0C + { 0x35, 0x83 }, // (Offset,Value)-Pair #9 + { 0x36, 0xC0 }, // (Offset,Value)-Pair #10 + { 0x37, 0x0C }, // (Offset,Value)-Pair #11 + } +}; + +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_Simple +// ****************************************************************** +SOOVPA<13> IDirect3DDevice8_SetRenderState_Simple_1_0_4361 = +{ + 0, // Large == 0 + 13, // Count == 13 + + { + // IDirect3DDevice8_SetRenderState_Simple+0x05 : add eax, 0x08 + { 0x05, 0x83 }, // (Offset,Value)-Pair #1 + { 0x06, 0xC0 }, // (Offset,Value)-Pair #2 + { 0x07, 0x08 }, // (Offset,Value)-Pair #3 + + // IDirect3DDevice8_SetRenderState_Simple+0x0E : jnb +0x0C + { 0x0E, 0x73 }, // (Offset,Value)-Pair #4 + { 0x0F, 0x0C }, // (Offset,Value)-Pair #5 + + // IDirect3DDevice8_SetRenderState_Simple+0x15 : mov [eax-8], ecx + { 0x15, 0x89 }, // (Offset,Value)-Pair #6 + { 0x16, 0x48 }, // (Offset,Value)-Pair #7 + { 0x17, 0xF8 }, // (Offset,Value)-Pair #8 + + // IDirect3DDevice8_SetRenderState_Simple+0x18 : mov [eax-4], ecx + { 0x18, 0x89 }, // (Offset,Value)-Pair #9 + { 0x19, 0x50 }, // (Offset,Value)-Pair #10 + { 0x1A, 0xFC }, // (Offset,Value)-Pair #11 + + // IDirect3DDevice8_SetRenderState_Simple+0x25 : jmp +0xD9 + { 0x25, 0xEB }, // (Offset,Value)-Pair #12 + { 0x26, 0xD9 }, // (Offset,Value)-Pair #13 + } +}; + // ****************************************************************** // * IDirect3DDevice8_SetRenderState_ZEnable // ****************************************************************** @@ -673,6 +824,36 @@ SOOVPA<13> IDirect3DDevice8_SetRenderState_ZEnable_1_0_4361 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetRenderState_StencilEnable +// ****************************************************************** +SOOVPA<11> IDirect3DDevice8_SetRenderState_StencilEnable_1_0_4361 = +{ + 0, // Large == 0 + 11, // Count == 11 + + { + // IDirect3DDevice8_SetRenderState_StencilEnable+0x0C : jb +0x05 + { 0x0C, 0x72 }, // (Offset,Value)-Pair #1 + { 0x0D, 0x05 }, // (Offset,Value)-Pair #2 + + // IDirect3DDevice8_SetRenderState_StencilEnable+0x2C : jz +0x19 + { 0x2C, 0x74 }, // (Offset,Value)-Pair #3 + { 0x2D, 0x19 }, // (Offset,Value)-Pair #4 + + // IDirect3DDevice8_SetRenderState_StencilEnable+0x4D : mov dword ptr [eax], 0x00041D84 + { 0x4D, 0xC7 }, // (Offset,Value)-Pair #5 + { 0x4E, 0x00 }, // (Offset,Value)-Pair #6 + { 0x4F, 0x84 }, // (Offset,Value)-Pair #7 + { 0x50, 0x1D }, // (Offset,Value)-Pair #8 + { 0x51, 0x04 }, // (Offset,Value)-Pair #9 + + // IDirect3DDevice8_SetRenderState_StencilEnable+0x81 : retn 0x04 + { 0x81, 0xC2 }, // (Offset,Value)-Pair #10 + { 0x82, 0x04 }, // (Offset,Value)-Pair #11 + } +}; + // ****************************************************************** // * IDirect3DDevice8_SetRenderState_MultiSampleAntiAlias // ****************************************************************** @@ -1130,6 +1311,36 @@ SOOVPA<13> IDirect3DResource8_Release_1_0_4361 = } }; +// ****************************************************************** +// * IDirect3DResource8_IsBusy +// ****************************************************************** +SOOVPA<11> IDirect3DResource8_IsBusy_1_0_4361 = +{ + 0, // Large == 0 + 11, // Count == 11 + + { + // IDirect3DResource8_IsBusy+0x24 : test eax, 0x780000 + { 0x24, 0xA9 }, // (Offset,Value)-Pair #1 + { 0x25, 0x00 }, // (Offset,Value)-Pair #2 + { 0x26, 0x00 }, // (Offset,Value)-Pair #3 + { 0x27, 0x78 }, // (Offset,Value)-Pair #4 + + // IDirect3DResource8_IsBusy+0x35 : jnz +0x41 + { 0x35, 0x75 }, // (Offset,Value)-Pair #5 + { 0x36, 0x41 }, // (Offset,Value)-Pair #6 + + // IDirect3DResource8_IsBusy+0x4E : mov eax, [ecx+0x14] + { 0x4E, 0x8B }, // (Offset,Value)-Pair #7 + { 0x4F, 0x41 }, // (Offset,Value)-Pair #8 + { 0x50, 0x14 }, // (Offset,Value)-Pair #9 + + // IDirect3DResource8_IsBusy+0x76 : jnb +0x09 + { 0x76, 0x73 }, // (Offset,Value)-Pair #10 + { 0x77, 0x09 }, // (Offset,Value)-Pair #11 + } +}; + // ****************************************************************** // * IDirect3DSurface8_GetDesc // ****************************************************************** @@ -1391,6 +1602,16 @@ OOVPATable D3D8_1_0_4361[] = "EmuIDirect3DDevice8_CreatePixelShader" #endif }, + // IDirect3DDevice8::SetPixelShader + { + (OOVPA*)&IDirect3DDevice8_SetPixelShader_1_0_4361, + + xd3d8::EmuIDirect3DDevice8_SetPixelShader, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetPixelShader" + #endif + }, // IDirect3DDevice8::CreateTexture { (OOVPA*)&IDirect3DDevice8_CreateTexture_1_0_4361, @@ -1491,6 +1712,46 @@ OOVPATable D3D8_1_0_4361[] = "EmuIDirect3DDevice8_SetRenderState_CullMode" #endif }, + // IDirect3DDevice8::SetRenderState_TextureFactor + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_TextureFactor_1_0_4361, + + xd3d8::EmuIDirect3DDevice8_SetRenderState_TextureFactor, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_TextureFactor" + #endif + }, + // IDirect3DDevice8::SetRenderState_EdgeAntiAlias + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_EdgeAntiAlias_1_0_4361, + + xd3d8::EmuIDirect3DDevice8_SetRenderState_EdgeAntiAlias, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_EdgeAntiAlias" + #endif + }, + // IDirect3DDevice8::SetRenderState_FillMode + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_FillMode_1_0_4361, + + xd3d8::EmuIDirect3DDevice8_SetRenderState_FillMode, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_FillMode" + #endif + }, + // IDirect3DDevice8::SetRenderState_Simple + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_Simple_1_0_4361, + + xd3d8::EmuIDirect3DDevice8_SetRenderState_Simple, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_Simple" + #endif + }, // IDirect3DDevice8::SetRenderState_ZEnable { (OOVPA*)&IDirect3DDevice8_SetRenderState_ZEnable_1_0_4361, @@ -1501,6 +1762,16 @@ OOVPATable D3D8_1_0_4361[] = "EmuIDirect3DDevice8_SetRenderState_ZEnable" #endif }, + // IDirect3DDevice8::SetRenderState_StencilEnable + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_StencilEnable_1_0_4361, + + xd3d8::EmuIDirect3DDevice8_SetRenderState_StencilEnable, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_StencilEnable" + #endif + }, // IDirect3DDevice8::SetRenderState_MultiSampleAntiAlias { (OOVPA*)&IDirect3DDevice8_SetRenderState_MultiSampleAntiAlias_1_0_4361, @@ -1641,6 +1912,16 @@ OOVPATable D3D8_1_0_4361[] = "EmuIDirect3DResource8_Release" #endif }, + // IDirect3DResource8::IsBusy + { + (OOVPA*)&IDirect3DResource8_IsBusy_1_0_4361, + + xd3d8::EmuIDirect3DResource8_IsBusy, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DResource8_IsBusy" + #endif + }, // IDirect3DSurface8::GetDesc { (OOVPA*)&IDirect3DSurface8_GetDesc_1_0_4361, diff --git a/Source/Win32/CxbxKrnl/D3D8.1.0.4627.inl b/Source/Win32/CxbxKrnl/D3D8.1.0.4627.inl index 9c7558e4a..892fa29bc 100644 --- a/Source/Win32/CxbxKrnl/D3D8.1.0.4627.inl +++ b/Source/Win32/CxbxKrnl/D3D8.1.0.4627.inl @@ -489,34 +489,6 @@ SOOVPA<8> IDirect3DDevice8_SetRenderState_NormalizeNormals_1_0_4627 = } }; -// ****************************************************************** -// * IDirect3DDevice8_SetRenderState_TextureFactor -// ****************************************************************** -SOOVPA<9> IDirect3DDevice8_SetRenderState_TextureFactor_1_0_4627 = -{ - 0, // Large == 0 - 9, // Count == 9 - - { - // IDirect3DDevice8_SetRenderState_TextureFactor+0x07 : mov eax, [esi+0x0370] - { 0x07, 0x8B }, // (Offset,Value)-Pair #1 - { 0x08, 0x86 }, // (Offset,Value)-Pair #2 - { 0x09, 0x70 }, // (Offset,Value)-Pair #3 - { 0x0A, 0x03 }, // (Offset,Value)-Pair #4 - - // IDirect3DDevice8_SetRenderState_TextureFactor+0x2F : nop - { 0x2F, 0x90 }, // (Offset,Value)-Pair #5 - - // IDirect3DDevice8_SetRenderState_TextureFactor+0x41 : retn 0x04 - { 0x41, 0xC2 }, // (Offset,Value)-Pair #6 - { 0x42, 0x04 }, // (Offset,Value)-Pair #7 - - // IDirect3DDevice8_SetRenderState_TextureFactor+0x4E : retn 0x04 - { 0x4E, 0xC2 }, // (Offset,Value)-Pair #8 - { 0x4F, 0x04 }, // (Offset,Value)-Pair #9 - } -}; - // ****************************************************************** // * IDirect3DDevice8_SetRenderState_ZBias // ****************************************************************** @@ -546,65 +518,6 @@ SOOVPA<10> IDirect3DDevice8_SetRenderState_ZBias_1_0_4627 = } }; -// ****************************************************************** -// * IDirect3DDevice8_SetRenderState_EdgeAntiAlias -// ****************************************************************** -SOOVPA<10> IDirect3DDevice8_SetRenderState_EdgeAntiAlias_1_0_4627 = -{ - 0, // Large == 0 - 10, // Count == 10 - - { - // IDirect3DDevice8_SetRenderState_EdgeAntiAlias+0x07 : mov eax, [esi] - { 0x07, 0x8B }, // (Offset,Value)-Pair #1 - { 0x08, 0x06 }, // (Offset,Value)-Pair #2 - - // IDirect3DDevice8_SetRenderState_EdgeAntiAlias+0x0C : jb +0x05 - { 0x0C, 0x72 }, // (Offset,Value)-Pair #3 - { 0x0D, 0x05 }, // (Offset,Value)-Pair #4 - - // IDirect3DDevice8_SetRenderState_EdgeAntiAlias+0x13 : mov ecx, [esp+0x08] - { 0x13, 0x8B }, // (Offset,Value)-Pair #5 - { 0x14, 0x4C }, // (Offset,Value)-Pair #6 - { 0x15, 0x24 }, // (Offset,Value)-Pair #7 - { 0x16, 0x08 }, // (Offset,Value)-Pair #8 - - // IDirect3DDevice8_SetRenderState_EdgeAntiAlias+0x2F : retn 0x04 - { 0x2F, 0xC2 }, // (Offset,Value)-Pair #9 - { 0x30, 0x04 }, // (Offset,Value)-Pair #10 - } -}; - -// ****************************************************************** -// * IDirect3DDevice8_SetRenderState_FillMode -// ****************************************************************** -SOOVPA<11> IDirect3DDevice8_SetRenderState_FillMode_1_0_4627 = -{ - 0, // Large == 0 - 11, // Count == 11 - - { - // IDirect3DDevice8_SetRenderState_FillMode+0x07 : mov eax, [esi] - { 0x07, 0x8B }, // (Offset,Value)-Pair #1 - { 0x08, 0x06 }, // (Offset,Value)-Pair #2 - - // IDirect3DDevice8_SetRenderState_FillMode+0x21 : mov ecx, [esp+0x08] - { 0x21, 0x8B }, // (Offset,Value)-Pair #3 - { 0x22, 0x4C }, // (Offset,Value)-Pair #4 - { 0x23, 0x24 }, // (Offset,Value)-Pair #5 - { 0x24, 0x08 }, // (Offset,Value)-Pair #6 - - // IDirect3DDevice8_SetRenderState_FillMode+0x25 : jnz +0x02 - { 0x25, 0x75 }, // (Offset,Value)-Pair #7 - { 0x26, 0x02 }, // (Offset,Value)-Pair #8 - - // IDirect3DDevice8_SetRenderState_FillMode+0x35 : add eax, 0x0C - { 0x35, 0x83 }, // (Offset,Value)-Pair #9 - { 0x36, 0xC0 }, // (Offset,Value)-Pair #10 - { 0x37, 0x0C }, // (Offset,Value)-Pair #11 - } -}; - // ****************************************************************** // * IDirect3DDevice8_SetRenderState_FogColor // ****************************************************************** @@ -660,40 +573,6 @@ SOOVPA<9> IDirect3DDevice8_SetRenderState_Dxt1NoiseEnable_1_0_4627 = } }; -// ****************************************************************** -// * IDirect3DDevice8_SetRenderState_Simple -// ****************************************************************** -SOOVPA<13> IDirect3DDevice8_SetRenderState_Simple_1_0_4627 = -{ - 0, // Large == 0 - 13, // Count == 13 - - { - // IDirect3DDevice8_SetRenderState_Simple+0x05 : add eax, 0x08 - { 0x05, 0x83 }, // (Offset,Value)-Pair #1 - { 0x06, 0xC0 }, // (Offset,Value)-Pair #2 - { 0x07, 0x08 }, // (Offset,Value)-Pair #3 - - // IDirect3DDevice8_SetRenderState_Simple+0x0E : jnb +0x0C - { 0x0E, 0x73 }, // (Offset,Value)-Pair #4 - { 0x0F, 0x0C }, // (Offset,Value)-Pair #5 - - // IDirect3DDevice8_SetRenderState_Simple+0x15 : mov [eax-8], ecx - { 0x15, 0x89 }, // (Offset,Value)-Pair #6 - { 0x16, 0x48 }, // (Offset,Value)-Pair #7 - { 0x17, 0xF8 }, // (Offset,Value)-Pair #8 - - // IDirect3DDevice8_SetRenderState_Simple+0x18 : mov [eax-4], ecx - { 0x18, 0x89 }, // (Offset,Value)-Pair #9 - { 0x19, 0x50 }, // (Offset,Value)-Pair #10 - { 0x1A, 0xFC }, // (Offset,Value)-Pair #11 - - // IDirect3DDevice8_SetRenderState_Simple+0x25 : jmp +0xD9 - { 0x25, 0xEB }, // (Offset,Value)-Pair #12 - { 0x26, 0xD9 }, // (Offset,Value)-Pair #13 - } -}; - // ****************************************************************** // * IDirect3DDevice8_SetRenderState_ZEnable // ****************************************************************** @@ -1088,9 +967,9 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DDevice8_SetRenderState_NormalizeNormals" #endif }, - // IDirect3DDevice8::SetRenderState_TextureFactor + // IDirect3DDevice8::SetRenderState_TextureFactor (* unchanged since 4361 *) { - (OOVPA*)&IDirect3DDevice8_SetRenderState_TextureFactor_1_0_4627, + (OOVPA*)&IDirect3DDevice8_SetRenderState_TextureFactor_1_0_4361, xd3d8::EmuIDirect3DDevice8_SetRenderState_TextureFactor, @@ -1108,9 +987,9 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DDevice8_SetRenderState_ZBias" #endif }, - // IDirect3DDevice8::SetRenderState_EdgeAntiAlias + // IDirect3DDevice8::SetRenderState_EdgeAntiAlias (* unchanged since 4361 *) { - (OOVPA*)&IDirect3DDevice8_SetRenderState_EdgeAntiAlias_1_0_4627, + (OOVPA*)&IDirect3DDevice8_SetRenderState_EdgeAntiAlias_1_0_4361, xd3d8::EmuIDirect3DDevice8_SetRenderState_EdgeAntiAlias, @@ -1118,9 +997,9 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DDevice8_SetRenderState_EdgeAntiAlias" #endif }, - // IDirect3DDevice8::SetRenderState_FillMode + // IDirect3DDevice8::SetRenderState_FillMode (* unchanged since 4361 *) { - (OOVPA*)&IDirect3DDevice8_SetRenderState_FillMode_1_0_4627, + (OOVPA*)&IDirect3DDevice8_SetRenderState_FillMode_1_0_4361, xd3d8::EmuIDirect3DDevice8_SetRenderState_FillMode, @@ -1148,9 +1027,9 @@ OOVPATable D3D8_1_0_4627[] = "EmuIDirect3DDevice8_SetRenderState_Dxt1NoiseEnable" #endif }, - // IDirect3DDevice8::SetRenderState_Simple + // IDirect3DDevice8::SetRenderState_Simple (* unchanged since 4361 *) { - (OOVPA*)&IDirect3DDevice8_SetRenderState_Simple_1_0_4627, + (OOVPA*)&IDirect3DDevice8_SetRenderState_Simple_1_0_4361, xd3d8::EmuIDirect3DDevice8_SetRenderState_Simple, diff --git a/Source/Win32/CxbxKrnl/EmuD3D8.cpp b/Source/Win32/CxbxKrnl/EmuD3D8.cpp index cddce7221..5e1e03411 100644 --- a/Source/Win32/CxbxKrnl/EmuD3D8.cpp +++ b/Source/Win32/CxbxKrnl/EmuD3D8.cpp @@ -953,7 +953,7 @@ HRESULT WINAPI xd3d8::EmuIDirect3DDevice8_CreateVertexShader ); if(FAILED(hRet)) - printf("*Warning* we're lying about the creation of a vertex shader!"); + printf("*Warning* we're lying about the creation of a vertex shader!\n"); // hey look, we lied hRet = D3D_OK; @@ -1050,6 +1050,45 @@ HRESULT WINAPI xd3d8::EmuIDirect3DDevice8_CreatePixelShader return hRet; } +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetPixelShader +// ****************************************************************** +HRESULT WINAPI xd3d8::EmuIDirect3DDevice8_SetPixelShader +( + DWORD Handle +) +{ + EmuSwapFS(); // Win2k/XP FS + + // ****************************************************************** + // * debug trace + // ****************************************************************** + #ifdef _DEBUG_TRACE + { + printf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SetPixelShader\n" + "(\n" + " Handle : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), Handle); + } + #endif + + // ****************************************************************** + // * redirect to windows d3d + // ****************************************************************** + HRESULT hRet = g_pD3DDevice8->SetPixelShader + ( + Handle + ); + + // hey look, we lied + hRet = D3D_OK; + + EmuSwapFS(); // XBox FS + + return hRet; +} + // ****************************************************************** // * func: EmuIDirect3DDevice8_CreateTexture2 // ****************************************************************** @@ -1201,9 +1240,16 @@ HRESULT WINAPI xd3d8::EmuIDirect3DDevice8_SetTexture } #endif - IDirect3DBaseTexture8 *pBaseTexture8 = pTexture->EmuBaseTexture8; + HRESULT hRet; - HRESULT hRet = g_pD3DDevice8->SetTexture(Stage, pBaseTexture8); + if(pTexture == NULL) + hRet = g_pD3DDevice8->SetTexture(Stage, NULL); + else + { + IDirect3DBaseTexture8 *pBaseTexture8 = pTexture->EmuBaseTexture8; + + hRet = g_pD3DDevice8->SetTexture(Stage, pBaseTexture8); + } EmuSwapFS(); // XBox FS @@ -1501,7 +1547,7 @@ HRESULT WINAPI xd3d8::EmuIDirect3DResource8_Register case X_D3DCOMMON_TYPE_VERTEXBUFFER: { #ifdef _DEBUG_TRACE - printf("( Registering VertexBuffer... )\n"); + printf("EmuIDirect3DResource8_Register :-> VertexBuffer...\n"); #endif X_D3DVertexBuffer *pVertexBuffer = (X_D3DVertexBuffer*)pResource; @@ -1537,7 +1583,7 @@ HRESULT WINAPI xd3d8::EmuIDirect3DResource8_Register case X_D3DCOMMON_TYPE_INDEXBUFFER: { #ifdef _DEBUG_TRACE - printf("( Registering IndexBuffer... )\n"); + printf("EmuIDirect3DResource8_Register :-> IndexBuffer...\n"); #endif X_D3DIndexBuffer *pIndexBuffer = (X_D3DIndexBuffer*)pResource; @@ -1573,7 +1619,7 @@ HRESULT WINAPI xd3d8::EmuIDirect3DResource8_Register case X_D3DCOMMON_TYPE_TEXTURE: { #ifdef _DEBUG_TRACE - printf("( Registering Texture... )\n"); + printf("EmuIDirect3DResource8_Register :-> Texture...\n"); #endif X_D3DPixelContainer *pPixelContainer = (X_D3DPixelContainer*)pResource; @@ -1598,7 +1644,7 @@ HRESULT WINAPI xd3d8::EmuIDirect3DResource8_Register dwHeight = 1 << ((pPixelContainer->Format & X_D3DFORMAT_VSIZE_MASK) >> X_D3DFORMAT_VSIZE_SHIFT); dwBPP = 4; } - else if(X_Format == 0x05 /* X_D3DFMT_R5G6B5 */) + else if(X_Format == 0x05 /* X_D3DFMT_R5G6B5 */ || X_Format == 0x04 /* X_D3DFMT_A4R4G4B4 */) { bSwizzled = TRUE; @@ -1721,6 +1767,38 @@ ULONG WINAPI xd3d8::EmuIDirect3DResource8_Release return uRet; } +// ****************************************************************** +// * func: EmuIDirect3DResource8_IsBusy +// ****************************************************************** +BOOL WINAPI xd3d8::EmuIDirect3DResource8_IsBusy +( + X_D3DResource *pThis +) +{ + EmuSwapFS(); // Win2k/XP FS + + // ****************************************************************** + // * debug trace + // ****************************************************************** + #ifdef _DEBUG_TRACE + { + printf("EmuD3D8 (0x%X): EmuIDirect3DResource8_IsBusy\n" + "(\n" + " pThis : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pThis); + } + #endif + + IDirect3DResource8 *pResource8 = pThis->EmuResource8; + + // I guess we arent doing anything, just return false.. + + EmuSwapFS(); // XBox FS + + return FALSE; +} + // ****************************************************************** // * func: EmuIDirect3DSurface8_GetDesc // ****************************************************************** @@ -2336,6 +2414,37 @@ VOID WINAPI xd3d8::EmuIDirect3DDevice8_SetRenderState_ZEnable return; } + +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetRenderState_StencilEnable +// ****************************************************************** +VOID WINAPI xd3d8::EmuIDirect3DDevice8_SetRenderState_StencilEnable +( + DWORD Value +) +{ + EmuSwapFS(); // Win2k/XP FS + + // ****************************************************************** + // * debug trace + // ****************************************************************** + #ifdef _DEBUG_TRACE + { + printf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SetRenderState_StencilEnable\n" + "(\n" + " Value : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), Value); + } + #endif + + g_pD3DDevice8->SetRenderState(D3DRS_STENCILENABLE, Value); + + EmuSwapFS(); // XBox FS + + return; +} + // ****************************************************************** // * func: EmuIDirect3DDevice8_SetRenderState_MultiSampleAntiAlias // ****************************************************************** diff --git a/Source/Win32/CxbxKrnl/EmuKrnl.cpp b/Source/Win32/CxbxKrnl/EmuKrnl.cpp index eb26985f1..710e6133b 100644 --- a/Source/Win32/CxbxKrnl/EmuKrnl.cpp +++ b/Source/Win32/CxbxKrnl/EmuKrnl.cpp @@ -599,6 +599,36 @@ XBSYSAPI EXPORTNUM(166) xboxkrnl::PVOID NTAPI xboxkrnl::MmAllocateContiguousMemo return pRet; } +// ****************************************************************** +// * 0x00AB - MmFreeContiguousMemory +// ****************************************************************** +XBSYSAPI EXPORTNUM(171) VOID NTAPI xboxkrnl::MmFreeContiguousMemory +( + IN PVOID BaseAddress +) +{ + EmuSwapFS(); // Win2k/XP FS + + // ****************************************************************** + // * debug trace + // ****************************************************************** + #ifdef _DEBUG_TRACE + { + printf("EmuKrnl (0x%X): MmFreeContiguousMemory\n" + "(\n" + " BaseAddress : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), BaseAddress); + } + #endif + + delete BaseAddress; + + EmuSwapFS(); // Xbox FS + + return; +} + // ****************************************************************** // * 0x00B8 - NtAllocateVirtualMemory // ****************************************************************** diff --git a/Source/Win32/CxbxKrnl/EmuXapi.cpp b/Source/Win32/CxbxKrnl/EmuXapi.cpp index 5f83dc8fa..88a85d402 100644 --- a/Source/Win32/CxbxKrnl/EmuXapi.cpp +++ b/Source/Win32/CxbxKrnl/EmuXapi.cpp @@ -368,6 +368,38 @@ DWORD WINAPI xapi::EmuXInputGetState return ret; } +// ****************************************************************** +// * func: EmuInputGetState +// ****************************************************************** +DWORD WINAPI xapi::EmuXInputSetState +( + IN HANDLE hDevice, + IN OUT PXINPUT_FEEDBACK pFeedback +) +{ + EmuSwapFS(); // Win2k/XP FS + + // ****************************************************************** + // * debug trace + // ****************************************************************** + #ifdef _DEBUG_TRACE + { + printf("EmuXapi (0x%X): EmuXInputSetState\n" + "(\n" + " hDevice : 0x%.08X\n" + " pFeedback : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), hDevice, pFeedback); + } + #endif + + printf("*Warning* Ignoring EmuXInputSetState!\n"); + + EmuSwapFS(); // XBox FS + + return ERROR_SUCCESS; +} + // ****************************************************************** // * func: EmuCloseHandle // ****************************************************************** diff --git a/Source/Win32/CxbxKrnl/KernelThunk.cpp b/Source/Win32/CxbxKrnl/KernelThunk.cpp index 93674ce02..800b2bd02 100644 --- a/Source/Win32/CxbxKrnl/KernelThunk.cpp +++ b/Source/Win32/CxbxKrnl/KernelThunk.cpp @@ -236,7 +236,7 @@ extern "C" CXBXKRNL_API uint32 KernelThunkTable[367] = (uint32)PANIC(0x00A8), // 0x00A8 (168) (uint32)PANIC(0x00A9), // 0x00A9 (169) (uint32)PANIC(0x00AA), // 0x00AA (170) - (uint32)PANIC(0x00AB), // 0x00AB (171) + (uint32)&xboxkrnl::MmFreeContiguousMemory, // 0x00AB (171) (uint32)PANIC(0x00AC), // 0x00AC (172) (uint32)PANIC(0x00AD), // 0x00AD (173) (uint32)PANIC(0x00AE), // 0x00AE (174) diff --git a/Source/Win32/CxbxKrnl/Xapi.1.0.4361.inl b/Source/Win32/CxbxKrnl/Xapi.1.0.4361.inl index 529d45285..fbafae4c9 100644 --- a/Source/Win32/CxbxKrnl/Xapi.1.0.4361.inl +++ b/Source/Win32/CxbxKrnl/Xapi.1.0.4361.inl @@ -266,6 +266,39 @@ SOOVPA<12> XInputGetState_1_0_4361 = } }; +// ****************************************************************** +// * XInputSetState +// ****************************************************************** +SOOVPA<12> XInputSetState_1_0_4361 = +{ + 0, // Large == 0 + 12, // Count == 12 + + { + // XInputSetState+0x04 : lea eax, [ecx+0x0A3] + { 0x04, 0x8D }, // (Offset,Value)-Pair #1 + { 0x05, 0x81 }, // (Offset,Value)-Pair #2 + { 0x06, 0xA3 }, // (Offset,Value)-Pair #3 + + // XInputSetState+0x15 : push 0x57 + { 0x15, 0x6A }, // (Offset,Value)-Pair #4 + { 0x16, 0x57 }, // (Offset,Value)-Pair #5 + + // XInputSetState+0x18 : jmp +0x19 + { 0x18, 0xEB }, // (Offset,Value)-Pair #6 + { 0x19, 0x19 }, // (Offset,Value)-Pair #7 + + // XInputSetState+0x2B : mov [edx+0x41], al + { 0x2B, 0x88 }, // (Offset,Value)-Pair #8 + { 0x2C, 0x42 }, // (Offset,Value)-Pair #9 + { 0x2D, 0x41 }, // (Offset,Value)-Pair #10 + + // XInputSetState+0x33 : retn 0x08 + { 0x33, 0xC2 }, // (Offset,Value)-Pair #11 + { 0x34, 0x08 }, // (Offset,Value)-Pair #12 + } +}; + // ****************************************************************** // * CreateThread // ****************************************************************** @@ -492,6 +525,16 @@ OOVPATable XAPI_1_0_4361[] = "EmuXInputGetState" #endif }, + // XInputSetState + { + (OOVPA*)&XInputSetState_1_0_4361, + + xapi::EmuXInputSetState, + + #ifdef _DEBUG_TRACE + "EmuXInputSetState" + #endif + }, //* Too High Level // XapiInitProcess {