diff --git a/.gitattributes b/.gitattributes index 412eeda78..cfd07fbb0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,6 +1,3 @@ -# Auto detect text files and perform LF normalization -* text=auto - # Custom for Visual Studio *.cs diff=csharp *.sln merge=union diff --git a/build/win32/CxbxKrnl.vcproj b/build/win32/CxbxKrnl.vcproj index 83eb1e1b9..8ae641f2f 100644 --- a/build/win32/CxbxKrnl.vcproj +++ b/build/win32/CxbxKrnl.vcproj @@ -539,6 +539,10 @@ + + @@ -1951,6 +1955,10 @@ + + diff --git a/doc/ShogunChangelog.txt b/doc/ShogunChangelog.txt index 87d9ef43e..cde057cda 100644 --- a/doc/ShogunChangelog.txt +++ b/doc/ShogunChangelog.txt @@ -1310,4 +1310,97 @@ TODO: Verify that Lock3DSurface is the same on other XDKs like Lock2DSurface for Castlevania). (*) Needed an alternative signature for this one. -(**) Needed a new signature. \ No newline at end of file +(**) Needed a new signature. + +1/14/12 +- Added the following function(s) + D3DDevice_SetVertexShaderConstant1Fast (5558) + D3DDevice_LoadVertexShaderProgram (5558) + D3DDevice_SetPixelShaderProgram (5558) + XID_fCloseDevice (5558) + XInputClose (5558) + CDirectSound::SetPosition (5558) + IDirectSound8_SetPosition (5558) + CDirectSound::SetVelocity (5558) + IDirectSound8_SetPosition (5558) + CDirectSound::CreateStream (5558) + IDirectSound8_CreateStream (5558) + CDirectSoundStream::SetRolloffCurve (5558) + CDirectSoundStream::SetMinDistance (5558) + CDirectSoundStream::SetHeadroom (5558) + CDirectSoundStream::SetFrequency (5558) + +2/29/12 +- Added the following function(s) + D3DDevice_SetRenderState_BackFillMode (5344-5558) + D3DDevice_SetRenderState_TextureFactor (5344-5558) + D3DDevice_SetRenderState_MultiSampleMask (5344-5558) + D3DDevice_SetRenderState_MultiSampleMode (5455, 5558) + D3DDevice_SetRenderState_MultiSampleRenderTargetMode (5455, 5558) + D3DDevice_SetRenderState_Dxt1NoiseEnable (5455, 5558) + D3DDevice_SetRenderState_StencilCullEnable (5344-5558) + D3DDevice_SetTextureState_ColorKeyColor (5344-5558) + +9/24/12 +- Added the following function(s) + D3DDevice_GetBackBuffer2 (5344) + D3DDevice_SetVerticalBlankCallback (5344) + D3DDevice_SetSwapCallback (5344) + D3DDevice_GetViewport (5344) + CDirectSoundVoice::SetMaxDistance (5344) + CDirectSoundBuffer::SetMaxDistance (5344) + IDirectSoundBuffer_SetMaxDistance (5344) + CDirectSoundVoice::SetMinDistance (5344) + CDirectSoundBuffer::SetMinDistance (5344) + IDirectSoundBuffer_SetMinDistance (5344) + CDirectSound::SetI3DL2Listener (5344) + IDirectSound_SetI3DL2Listener (5344) + CDirectSound::SetRolloffFactor (5344) + IDirectSound_SetRolloffFactor (5344) + CDirectSound::SetDistanceFactor (5344) + IDirectSound_SetDistanceFactor (5344) + CDirectSound::SetDopplerFactor (5344) + IDirectSound_SetDopplerFactor (5344) + D3DDevice_SetRenderTargetFast (5344) + D3DDevice_SetScreenSpaceOffset (5344) + D3DDevice_SetScissors (5344) + D3DDevice_SetMaterial (5344) + D3DCubeTexture_GetCubeMapSurface2 (5344, 5849) + D3DDevice_SetVertexShaderConstant1Fast (5788, 5849) + +9/27/12 +- Added the following function(s) + XAudioDownloadEffectsImage (5849) + IDirectSound_SetEffectData (5849) (No X-Refs!) + D3DDevice_SetScissors (5849) + D3DDevice_GetScissors (5849) + D3DDevice_GetBackMaterial (5849) + D3DDevice_CaptureStateBlock (5849) + D3DDevice_ApplyStateBlock (5849) + D3DDevice_SetRenderState_StencilCullEnable (5849) + D3DDevice_SetRenderState_OcclusionCullEnable (5849) + XFileMediaObject_Seek (XDK Independent) + CDirectSoundStream::SetFormat (5849) + CDirectSoundStream::SetPitch (5849) + CDirectSoundStream::SetHeadroom (5849) + XFileMediaObject_AddRef (XDK Independent) + XFileMediaObject_Release (XDK Independent) + XFileMediaObject_GetInfo (XDK Independent) + XFileMediaObject_GetStatus (XDK Independent) + XFileMediaObject_Process (XDK Independent) + XFileMediaObject_DoWork (XDK Independent) + XFileMediaObject_Discontinuity (XDK Independent) + CDirectSoundBuffer::Play (5849) + IDirectSoundBuffer_Play (5849) + D3DDevice_GetTexture2 (5849) + +- Fixed a bug in EmuIDirect3DResource8_Register to prevent crashing. +- Outrun2 is starting to work! + +9/28/12 +- Added the following function(s) + D3DDevice_SetRenderTargetFast (5455 - 5849) + +- Fixed a [stupid] error in D3DDevice_GetTexture2. It was my fault, so +I have no one to blame but myself this time. This should (hopefully) +fix Panzer Dragoon ORTA's issue with Pandora's Box. \ No newline at end of file diff --git a/src/CxbxKrnl/Emu.cpp b/src/CxbxKrnl/Emu.cpp index c7405201a..b6e517bf3 100644 --- a/src/CxbxKrnl/Emu.cpp +++ b/src/CxbxKrnl/Emu.cpp @@ -762,10 +762,12 @@ extern int EmuException(LPEXCEPTION_POINTERS e) " EIP := 0x%.08X EFL := 0x%.08X\n" " EAX := 0x%.08X EBX := 0x%.08X ECX := 0x%.08X EDX := 0x%.08X\n" " ESI := 0x%.08X EDI := 0x%.08X ESP := 0x%.08X EBP := 0x%.08X\n" + " CR2 := 0x%.08X\n" "\n", e->ContextRecord->Eip, e->ContextRecord->EFlags, e->ContextRecord->Eax, e->ContextRecord->Ebx, e->ContextRecord->Ecx, e->ContextRecord->Edx, - e->ContextRecord->Esi, e->ContextRecord->Edi, e->ContextRecord->Esp, e->ContextRecord->Ebp); + e->ContextRecord->Esi, e->ContextRecord->Edi, e->ContextRecord->Esp, e->ContextRecord->Ebp, + e->ContextRecord->Dr2); #ifdef _DEBUG CONTEXT Context = *(e->ContextRecord); diff --git a/src/CxbxKrnl/EmuD3D8.cpp b/src/CxbxKrnl/EmuD3D8.cpp index 18bdc9e5c..02e1ce64e 100644 --- a/src/CxbxKrnl/EmuD3D8.cpp +++ b/src/CxbxKrnl/EmuD3D8.cpp @@ -98,6 +98,9 @@ static volatile bool g_bRenderWindowActive = false; static XBVideo g_XBVideo; static XTL::D3DVBLANKCALLBACK g_pVBCallback = NULL; // Vertical-Blank callback routine static XTL::D3DSWAPCALLBACK g_pSwapCallback = NULL; // Swap/Present callback routine +static XTL::D3DCALLBACK g_pCallback = NULL; // D3DDevice::InsertCallback routine +static XTL::X_D3DCALLBACKTYPE g_CallbackType; // Callback type +static DWORD g_CallbackParam; // Callback param //static DWORD g_dwPrimPerFrame = 0; // Number of primitives within one frame // wireframe toggle @@ -1736,7 +1739,8 @@ HRESULT WINAPI XTL::EmuIDirect3D8_EnumAdapterModes EmuSwapFS(); // XBox FS - return hRet; + // return hRet; + return S_OK; // Hack } // ****************************************************************** @@ -3183,7 +3187,7 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_CreateTexture PCPool = D3DPOOL_DEFAULT; }*/ - EmuAdjustPower2(&Width, &Height); +// EmuAdjustPower2(&Width, &Height); *ppTexture = new X_D3DTexture(); @@ -4545,7 +4549,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register { DWORD dwSize = EmuCheckAllocationSize(pBase, true); - if(dwSize == -1) + if(dwSize == -1 || dwSize == 0) { // TODO: once this is known to be working, remove the warning EmuWarning("Index buffer allocation size unknown"); @@ -4563,8 +4567,8 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register ); if(FAILED(hRet)) - CxbxKrnlCleanup("CreateIndexBuffer Failed!\n\nError: %s\nDesc: %s", - DXGetErrorString8A(hRet), DXGetErrorDescription8A(hRet)); + CxbxKrnlCleanup("CreateIndexBuffer Failed!\n\nError: %s\nDesc: %s\nSize: %d", + DXGetErrorString8A(hRet), DXGetErrorDescription8A(hRet), dwSize); BYTE *pData = 0; @@ -4924,7 +4928,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register BYTE *pSrc = (BYTE*)pBase; - pThis->Data = (DWORD)pSrc; + if( pBase != NULL ) pThis->Data = (DWORD)pSrc; if(( IsSpecialResource(pResource->Data) && (pResource->Data & X_D3DRESOURCE_DATA_FLAG_SURFACE)) ||( IsSpecialResource(pBase) && ((DWORD)pBase & X_D3DRESOURCE_DATA_FLAG_SURFACE))) @@ -5039,6 +5043,8 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register { BYTE *pDest = (BYTE*)LockedRect.pBits; + if( pSrc ) + { if((DWORD)LockedRect.Pitch == dwMipPitch && dwMipPitch == dwMipWidth*dwBPP) { memcpy(pDest, pSrc + dwMipOffs, dwMipWidth*dwMipHeight*dwBPP); @@ -5053,6 +5059,7 @@ HRESULT WINAPI XTL::EmuIDirect3DResource8_Register pSrc += dwMipPitch; } } + } } } @@ -5677,6 +5684,7 @@ HRESULT WINAPI XTL::EmuIDirect3DSurface8_LockRect if(!pThis->EmuSurface8) { EmuWarning("Invalid Surface!" ); + __asm int 3; EmuSwapFS(); return E_FAIL; } @@ -6390,7 +6398,16 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_BlockUntilVerticalBlank() // segaGT tends to freeze with this on // if(g_XBVideo.GetVSync()) - g_pDD7->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, 0); +// g_pDD7->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, 0); + + // HACK: For many games (when used in mutithreaded code), using + // DDraw::WaitForVerticalBlank will wreak havoc on CPU usage and really + // slow things down. This is the case for various SEGA and other Japanese + // titles. On Xbox, it isn't a big deal, but for PC, I can't even + // guarantee this is a good idea. So instead, I'll be "faking" + // the vertical blank thing. + + Sleep( 1000/60 ); EmuSwapFS(); // XBox FS @@ -7768,6 +7785,19 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_DrawVertices VertPatch.Restore(); + // Execute callback procedure + if( g_CallbackType == X_D3DCALLBACK_WRITE ) + { + if( g_pCallback ) + { + EmuSwapFS(); + g_pCallback(g_CallbackParam); + EmuSwapFS(); + + // TODO: Reset pointer? + } + } + EmuSwapFS(); // XBox FS return; @@ -7849,6 +7879,19 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_DrawVerticesUP VertPatch.Restore(); + // Execute callback procedure + if( g_CallbackType == X_D3DCALLBACK_WRITE ) + { + if( g_pCallback ) + { + EmuSwapFS(); + g_pCallback(g_CallbackParam); + EmuSwapFS(); + + // TODO: Reset pointer? + } + } + EmuSwapFS(); // XBox FS return; @@ -8031,6 +8074,20 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_DrawIndexedVertices #endif VertPatch.Restore(); + + // Execute callback procedure + if( g_CallbackType == X_D3DCALLBACK_WRITE ) + { + if( g_pCallback ) + { + EmuSwapFS(); + g_pCallback(g_CallbackParam); + EmuSwapFS(); + + // TODO: Reset pointer? + } + } + //#endif EmuSwapFS(); // XBox FS @@ -8105,6 +8162,19 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_DrawIndexedVerticesUP VertPatch.Restore(); + // Execute callback procedure + if( g_CallbackType == X_D3DCALLBACK_WRITE ) + { + if( g_pCallback ) + { + EmuSwapFS(); + g_pCallback(g_CallbackParam); + EmuSwapFS(); + + // TODO: Reset pointer? + } + } + EmuSwapFS(); // XBox FS return; @@ -9298,7 +9368,7 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_InsertCallback { EmuSwapFS(); // Win2K/XP FS - DbgPrintf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_InsertCallback\n" + /*DbgP*/printf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_InsertCallback\n" "(\n" " Type : 0x%.08X\n" " pCallback : 0x%.08X\n" @@ -9309,6 +9379,9 @@ VOID WINAPI XTL::EmuIDirect3DDevice8_InsertCallback EmuWarning("InsertCallback ignored!\n"); // TODO: Implement + g_pCallback = (D3DCALLBACK) pCallback; + g_CallbackType = Type; + g_CallbackParam = Context; EmuSwapFS(); // Xbox FS } @@ -9469,59 +9542,22 @@ VOID WINAPI XTL::EmuD3DDevice_KickOff() // ****************************************************************** // * func: EmuIDirect3DDevice8_GetTexture2 // ****************************************************************** -HRESULT WINAPI XTL::EmuIDirect3DDevice8_GetTexture2 -( - X_D3DResource* pTexture -) +XTL::X_D3DResource* WINAPI XTL::EmuIDirect3DDevice8_GetTexture2(DWORD Stage) { EmuSwapFS(); // Win2k/XP FS DbgPrintf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_GetTexture2\n" "(\n" - " pTexture : 0x%.08X\n" + " Stage : 0x%.08X\n" ");\n", - GetCurrentThreadId(), pTexture); - - HRESULT hRet = S_OK; - - // TODO: I'm sure there is a better way to handle this. - - /*if(!pTexture) - { - printf( "Creating new texture...\n" ); - pTexture = new X_D3DResource(); - } - else - { - printf( "pTexture: = 0x%.08X\npTexture->EmuTexture8", pTexture, (pTexture)->EmuBaseTexture8 ); - }*/ - - // Since this function does not specify any texture stages, - // I guess we can assume it's just the first one. According - // to the XDK documentation, this function should also add - // to the reference count. - // TODO: Verify texture? - -// printf( "Setting texture...\n" ); -// pTexture->EmuBaseTexture8 = EmuD3DActiveTexture[0]->EmuBaseTexture8; - pTexture = EmuD3DActiveTexture[0]; - pTexture->Data = (X_D3DRESOURCE_DATA_FLAG_SPECIAL | X_D3DRESOURCE_DATA_FLAG_TEXCLON); - -// printf( "Adding reference...\n" ); -// pTexture->EmuBaseTexture8->AddRef(); - -// EmuSwapFS(); // Xbox FS -// EmuIDirect3DResource8_AddRef(pTexture); -// EmuSwapFS(); // Win2k/XP FS - -// hRet = g_pD3DDevice8->GetTexture(0, &(*ppTexture)->EmuBaseTexture8); - -// printf( "Verifying resource...\n" ); -// EmuVerifyResourceIsRegistered((*ppTexture)); + GetCurrentThreadId(), Stage); + // Get the active texture from this stage + X_D3DResource* pRet = EmuD3DActiveTexture[Stage]; + EmuSwapFS(); // Xbox FS - return hRet; + return pRet; } // ****************************************************************** @@ -9538,6 +9574,7 @@ VOID WINAPI XTL::EmuD3DDevice_SetStateVB( ULONG Unknown1 ) GetCurrentThreadId(), Unknown1); // TODO: Anything? + __asm int 3; EmuSwapFS(); } @@ -9552,6 +9589,7 @@ VOID WINAPI XTL::EmuD3DDevice_SetStateUP() DbgPrintf("EmuD3D8 (0x%X): EmuD3DDevice_SetStateUP()\n"); // TODO: Anything? + __asm int 3; EmuSwapFS(); } @@ -10300,4 +10338,99 @@ XTL::X_D3DSurface* WINAPI XTL::EmuIDirect3DDevice8_GetPersistedSurface2() EmuSwapFS(); // Xbox FS return pSurface; +} + +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetRenderTargetFast +// ****************************************************************** +HRESULT WINAPI XTL::EmuIDirect3DDevice8_SetRenderTargetFast +( + X_D3DSurface *pRenderTarget, + X_D3DSurface *pNewZStencil, + DWORD Flags +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_SetRenderTarget\n" + "(\n" + " pRenderTarget : 0x%.08X (0x%.08X)\n" + " pNewZStencil : 0x%.08X (0x%.08X)\n" + " Flags : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pRenderTarget, (pRenderTarget != 0) ? pRenderTarget->EmuSurface8 : 0, pNewZStencil, + (pNewZStencil != 0) ? pNewZStencil->EmuSurface8 : 0, Flags); + + // Redirect to the standard version. + EmuSwapFS(); + HRESULT hr = EmuIDirect3DDevice8_SetRenderTarget(pRenderTarget, pNewZStencil); + EmuSwapFS(); + + EmuSwapFS(); + + return hr; +} + +// ****************************************************************** +// * func: EmuIDirect3DDevice8_GetScissors +// ****************************************************************** +HRESULT WINAPI XTL::EmuIDirect3DDevice8_GetScissors +( + DWORD *pCount, + BOOL *pExclusive, + D3DRECT *pRects +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_GetScissors\n" + "(\n" + " pCount : 0x%.08X\n" + " pExclusive : 0x%.08X\n" + " pRects : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pCount, pExclusive, pRects); + + // TODO: Save a copy of each scissor rect in case this function is called + // in conjunction with D3DDevice::SetScissors. So far, only Outrun2 uses + // this function. For now, just return the values within the current + // viewport. + + D3DVIEWPORT8 vp; + + g_pD3DDevice8->GetViewport( &vp ); + + pRects->x1 = pRects->x2 = 0; + pRects->x2 = vp.Width; + pRects->y2 = vp.Height; + + pExclusive[0] = FALSE; + + EmuSwapFS(); // XBox FS + + return D3D_OK; +} + +// ****************************************************************** +// * func: EmuIDirect3DDevice8_GetBackMaterial +// ****************************************************************** +HRESULT WINAPI XTL::EmuIDirect3DDevice8_GetBackMaterial(D3DMATERIAL8* pMaterial) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuD3D8 (0x%X): EmuIDirect3DDevice8_GetBackMaterial\n" + "(\n" + " pMaterial : 0x%.08X\n" + ");\n", GetCurrentThreadId(), pMaterial); + + EmuWarning("GetBackMaterial is not supported!"); + + // TODO: HACK: This is wrong, but better than nothing, right? + + if( pMaterial ) + g_pD3DDevice8->GetMaterial( pMaterial ); + + EmuSwapFS(); // Xbox FS + + return S_OK; } \ No newline at end of file diff --git a/src/CxbxKrnl/EmuD3D8.h b/src/CxbxKrnl/EmuD3D8.h index 3c78cd81d..e0711e94a 100644 --- a/src/CxbxKrnl/EmuD3D8.h +++ b/src/CxbxKrnl/EmuD3D8.h @@ -1736,10 +1736,7 @@ VOID WINAPI EmuD3DDevice_KickOff(); // ****************************************************************** // * func: EmuIDirect3DDevice8_GetTexture2 // ****************************************************************** -HRESULT WINAPI EmuIDirect3DDevice8_GetTexture2 -( - X_D3DResource* pTexture -); +X_D3DResource* WINAPI EmuIDirect3DDevice8_GetTexture2(DWORD Stage); // ****************************************************************** // * func: EmuD3DDevice_SetStateVB (D3D::CDevice::SetStateVB) @@ -1930,4 +1927,28 @@ HRESULT WINAPI EmuIDirect3DDevice8_GetPixelShader DWORD* pHandle ); +// ****************************************************************** +// * func: EmuIDirect3DDevice8_SetRenderTargetFast +// ****************************************************************** +HRESULT WINAPI EmuIDirect3DDevice8_SetRenderTargetFast +( + X_D3DSurface *pRenderTarget, + X_D3DSurface *pNewZStencil, + DWORD Flags +); + +// ****************************************************************** +// * func: EmuIDirect3DDevice8_GetScissors +// ****************************************************************** +HRESULT WINAPI EmuIDirect3DDevice8_GetScissors +( + DWORD *pCount, + BOOL *pExclusive, + D3DRECT *pRects +); +// ****************************************************************** +// * func: EmuIDirect3DDevice8_GetBackMaterial +// ****************************************************************** +HRESULT WINAPI EmuIDirect3DDevice8_GetBackMaterial(D3DMATERIAL8* pMaterial); + #endif diff --git a/src/CxbxKrnl/EmuD3D8/Convert.cpp b/src/CxbxKrnl/EmuD3D8/Convert.cpp index 3f9d0225b..8e69412db 100644 --- a/src/CxbxKrnl/EmuD3D8/Convert.cpp +++ b/src/CxbxKrnl/EmuD3D8/Convert.cpp @@ -166,10 +166,10 @@ XTL::D3DFORMAT XTL::EmuXB2PC_D3DFormat(X_D3DFORMAT Format) return D3DFMT_R5G6B5; // NOTE: HACK: Totally and utterly wrong :) } - case 0x3A: // Swizzled (X_D3DFMT_A8B8G8R8) + case 0x3A: // Swizzled (X_D3DFMT_Q8W8V8U8) { - EmuWarning("X_D3DFMT_A8B8G8R8 -> D3DFMT_A8R8G8B8"); - return D3DFMT_A8R8G8B8; // NOTE: HACK: R<->B Swapped! + // EmuWarning("X_D3DFMT_A8B8G8R8 -> D3DFMT_A8R8G8B8"); + return D3DFMT_Q8W8V8U8; // NOTE: HACK: R<->B Swapped! } case 0x3B: // Swizzled (X_D3DFMT_A8B8G8R8) @@ -279,6 +279,9 @@ XTL::X_D3DFORMAT XTL::EmuPC2XB_D3DFormat(D3DFORMAT Format) case D3DFMT_D16_LOCKABLE: return 0x2C; + case D3DFMT_Q8W8V8U8: + return 0x3A; + case D3DFMT_UNKNOWN: return 0xFFFFFFFF; } diff --git a/src/CxbxKrnl/EmuD3D8/VertexShader.cpp b/src/CxbxKrnl/EmuD3D8/VertexShader.cpp index ca8b82baa..01ea4ef48 100644 --- a/src/CxbxKrnl/EmuD3D8/VertexShader.cpp +++ b/src/CxbxKrnl/EmuD3D8/VertexShader.cpp @@ -2134,6 +2134,9 @@ extern boolean XTL::IsValidCurrentShader(void) EmuSwapFS(); EmuIDirect3DDevice8_GetVertexShader(&Handle); EmuSwapFS(); + + //printf( "VS = 0x%.08X\n", Handle ); + if (VshHandleIsVertexShader(Handle)) { X_D3DVertexShader *pD3DVertexShader = (X_D3DVertexShader *)(Handle & 0x7FFFFFFF); diff --git a/src/CxbxKrnl/EmuD3D8Types.h b/src/CxbxKrnl/EmuD3D8Types.h index 92a22cb20..42b8a08af 100644 --- a/src/CxbxKrnl/EmuD3D8Types.h +++ b/src/CxbxKrnl/EmuD3D8Types.h @@ -446,6 +446,9 @@ typedef void (__cdecl * D3DVBLANKCALLBACK)(D3DVBLANKDATA *pData); // D3DSWAPCALLBACK typedef void (__cdecl * D3DSWAPCALLBACK)(D3DSWAPDATA *pData); +// D3DCALLBACK +typedef void (__cdecl * D3DCALLBACK)(DWORD Context); + // deferred render state "unknown" flag #define X_D3DRS_UNK 0x7fffffff diff --git a/src/CxbxKrnl/EmuDSound.cpp b/src/CxbxKrnl/EmuDSound.cpp index 5468b00b6..7ecdc31d8 100644 --- a/src/CxbxKrnl/EmuDSound.cpp +++ b/src/CxbxKrnl/EmuDSound.cpp @@ -83,6 +83,21 @@ XTL::X_CDirectSoundStream::_vtbl XTL::X_CDirectSoundStream::vtbl = 0xBEEFB00A, // 0x38 }; +XTL::X_XFileMediaObject::_vtbl XTL::X_XFileMediaObject::vtbl = +{ + &XTL::EmuXFileMediaObject_AddRef, // 0x00 + &XTL::EmuXFileMediaObject_Release, // 0x04 + &XTL::EmuXFileMediaObject_GetInfo, // 0x08 + &XTL::EmuXFileMediaObject_GetStatus, // 0x0C + &XTL::EmuXFileMediaObject_Process, // 0x10 + &XTL::EmuXFileMediaObject_Discontinuity,// 0x14 + 0xBEEFD007, // 0x18 + &XTL::EmuXFileMediaObject_Seek, // 0x1C + 0xBEEFD009, // 0x20 + &XTL::EmuXFileMediaObject_DoWork, // 0x24 +}; + + // size of sound buffer cache (used for periodic sound buffer updates) #define SOUNDBUFFER_CACHE_SIZE 0x100 @@ -3397,7 +3412,7 @@ HRESULT WINAPI XTL::EmuIDirectSound8_GetCaps // ****************************************************************** // * func: EmuIDirectSoundStream_SetPitch // ****************************************************************** -HRESULT WINAPI XTL::EmuIDirectSoundStream_SetPitch +HRESULT WINAPI XTL::EmuCDirectSoundStream_SetPitch ( X_CDirectSoundStream* pThis, LONG lPitch @@ -3794,4 +3809,295 @@ HRESULT WINAPI XTL::EmuIDirectSoundBuffer8_SetNotificationPositions EmuSwapFS(); // Xbox FS return hr; +} + +// ****************************************************************** +// * func EmuCDirectSoundStream::SetRolloffCurve +// ****************************************************************** +HRESULT WINAPI XTL::EmuCDirectSoundStream_SetRolloffCurve +( + X_CDirectSoundBuffer *pThis, + const FLOAT *pflPoints, + DWORD dwPointCount, + DWORD dwApply +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuDSound (0x%X): EmuCDirectSoundStream_SetRolloffCurve\n" + "(\n" + " pThis : 0x%.08X\n" + " pflPoints : 0x%.08X\n" + " dwPointCount : 0x%.08X\n" + " dwApply : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pThis, pflPoints, dwPointCount, dwApply); + + // TODO: Implement + + EmuSwapFS(); // XBox FS + + return DS_OK; +} + +// ****************************************************************** +// * func: EmuIDirectSound8_SetEffectData +// ****************************************************************** +HRESULT WINAPI XTL::EmuIDirectSound8_SetEffectData +( + LPVOID pThis, + DWORD dwEffectIndex, + DWORD dwOffset, + LPCVOID pvData, + DWORD dwDataSize, + DWORD dwApply +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuDSound (0x%X): EmuIDirectSound8_SetEffectData\n" + "(\n" + " pThis : 0x%.08X\n" + " dwEfectIndex : 0x%.08X\n" + " dwOffset : 0x%.08X\n" + " pvData : 0x%.08X\n" + " dwDataSize : 0x%.08X\n" + " dwApply : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pThis, dwEffectIndex, dwOffset, pvData, dwDataSize, dwApply); + + // TODO: Implement + + EmuSwapFS(); // XBox FS + + return DS_OK; +} + +// ****************************************************************** +// * func: EmuXFileCreateMediaObjectAsync +// ****************************************************************** +HRESULT WINAPI XTL::EmuXFileCreateMediaObjectAsync +( + HANDLE hFile, + DWORD dwMaxPackets, + void **ppMediaObject +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuDSound (0x%X): EmuXFileCreateMediaObjectAsync\n" + "(\n" + " hFile : 0x%.08X\n" + " dwMaxPackets : 0x%.08X\n" + " ppMediaObject : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), hFile, ppMediaObject); + + // TODO: Implement + + EmuWarning( "XFileCreateMediaObjectAsync not yet (properly) implemented!!!\n" ); + + *ppMediaObject = new X_XFileMediaObject(); + + EmuSwapFS(); // Xbox FS + + return S_OK; +} + +// ****************************************************************** +// * func: EmuXFileMediaObject_Seek +// ****************************************************************** +HRESULT WINAPI XTL::EmuXFileMediaObject_Seek +( + X_XFileMediaObject* pThis, + LONG lOffset, + DWORD dwOrigin, + LPDWORD pdwAbsolute +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuDSound (0x%X): EmuXFileMediaObject_Seek\n" + "(\n" + " pThis : 0x%.08X\n" + " lOffset : 0x%.08X\n" + " dwOrigin : 0x%.08X\n" + " pdwAbsolute : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pThis, lOffset, dwOrigin, pdwAbsolute); + + // TODO: Implement + + EmuSwapFS(); // Xbox FS + + return S_OK; +} + +// ****************************************************************** +// * func: EmuXFileMediaObject_DoWork +// ****************************************************************** +VOID WINAPI XTL::EmuXFileMediaObject_DoWork(X_XFileMediaObject* pThis) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuDSound (0x%X): EmuXFileMediaObject_DoWork\n" + "(\n" + " pThis : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pThis); + + // TODO: Implement + + EmuSwapFS(); // Xbox FS +} + +// ****************************************************************** +// * func: EmuXFileMediaObject_GetStatus +// ****************************************************************** +HRESULT WINAPI XTL::EmuXFileMediaObject_GetStatus +( + X_XFileMediaObject* pThis, + LPDWORD pdwStatus +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuDSound (0x%X): EmuXFileMediaObject_GetStatus\n" + "(\n" + " pThis : 0x%.08X\n" + " pdwStatus : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pThis, pdwStatus); + + // TODO: Implement + + EmuSwapFS(); // Xbox FS + + return DS_OK; +} + +// ****************************************************************** +// * func: EmuXFileMediaObject_GetInfo +// ****************************************************************** +HRESULT WINAPI XTL::EmuXFileMediaObject_GetInfo +( + X_XFileMediaObject *pThis, + XMEDIAINFO *pInfo +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuDSound (0x%X): EmuXFileMediaObject_GetStatus\n" + "(\n" + " pThis : 0x%.08X\n" + " pInfo : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pThis, pInfo); + + // TODO: Implement + + EmuSwapFS(); // Xbox FS + + return DS_OK; +} + +// ****************************************************************** +// * func: EmuXFileMediaObject_Process +// ****************************************************************** +HRESULT WINAPI XTL::EmuXFileMediaObject_Process +( + X_XFileMediaObject *pThis, + LPXMEDIAPACKET pInputBuffer, + LPXMEDIAPACKET pOutputBuffer +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuDSound (0x%X): EmuXFileMediaObject_Process\n" + "(\n" + " pThis : 0x%.08X\n" + " pInputBuffer : 0x%.08X\n" + " pOutputBuffer : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pThis, pInputBuffer, pOutputBuffer); + + // TODO: Implement + + EmuSwapFS(); // Xbox FS + + return DS_OK; +} + +// ****************************************************************** +// * func: EmuXFileMediaObject_AddRef +// ****************************************************************** +ULONG WINAPI XTL::EmuXFileMediaObject_AddRef(X_XFileMediaObject *pThis) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuDSound (0x%X): EmuXFileMediaObject_AddRef\n" + "(\n" + " pThis : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pThis); + + ULONG Ret = 0; + + if( pThis ) + { + pThis->EmuRefCount++; + Ret = pThis->EmuRefCount; + } + + EmuSwapFS(); // Xbox FS + + return Ret; +} + +// ****************************************************************** +// * func: EmuXFileMediaObject_Release +// ****************************************************************** +ULONG WINAPI XTL::EmuXFileMediaObject_Release(X_XFileMediaObject *pThis) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuDSound (0x%X): EmuXFileMediaObject_Release\n" + "(\n" + " pThis : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pThis); + + ULONG Ret = 0; + + if( pThis ) + { + pThis->EmuRefCount--; + + if( pThis->EmuRefCount < 1 ) + delete pThis; + + Ret = pThis->EmuRefCount; + } + + EmuSwapFS(); // Xbox FS + + return Ret; +} + +// ****************************************************************** +// * func: EmuXFileMediaObject_Discontinuity +// ****************************************************************** +HRESULT WINAPI XTL::EmuXFileMediaObject_Discontinuity(X_XFileMediaObject *pThis) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuDSound (0x%X): EmuXFileMediaObject_Discontinuity\n" + "(\n" + " pThis : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), pThis); + + EmuSwapFS(); // Xbox FS + + return DS_OK; } \ No newline at end of file diff --git a/src/CxbxKrnl/EmuDSound.h b/src/CxbxKrnl/EmuDSound.h index ccf573e91..75512b65e 100644 --- a/src/CxbxKrnl/EmuDSound.h +++ b/src/CxbxKrnl/EmuDSound.h @@ -348,6 +348,81 @@ class X_CDirectSoundStream DWORD EmuPlayFlags; }; +// ****************************************************************** +// * X_XFileMediaObject +// ****************************************************************** +class X_XFileMediaObject +{ + public: + X_XFileMediaObject() : pVtbl(&vtbl) { EmuRefCount = 1; } + + private: + // vtable (cached by each instance, via constructor) + struct _vtbl + { + ULONG (WINAPI *AddRef)(X_XFileMediaObject *pThis); // 0x00 + ULONG (WINAPI *Release)(X_XFileMediaObject *pThis); // 0x04 + + HRESULT (WINAPI *GetInfo) // 0x08 + ( + X_XFileMediaObject *pThis, + XMEDIAINFO *pInfo + ); + + HRESULT (WINAPI *GetStatus) // 0x0C + ( + X_XFileMediaObject *pThis, + DWORD *pdwStatus + ); + + HRESULT (WINAPI *Process) // 0x10 + ( + X_XFileMediaObject *pThis, + PXMEDIAPACKET pInputBuffer, + PXMEDIAPACKET pOutputBuffer + ); + + HRESULT (WINAPI *Discontinuity)(X_XFileMediaObject *pThis); // 0x14 + + DWORD Unknown7; +/* + HRESULT (WINAPI *Flush)(X_XFileMediaObject *pThis); // 0x18 +*/ + HRESULT (WINAPI *Seek) // 0x1C + ( + X_XFileMediaObject *pThis, + LONG lOffset, + DWORD dwOrigin, + LPDWORD pdwAbsolute + ); +/* + HRESULT (WINAPI *GetLength) // 0x20 + ( + X_XFileMediaObject *pThis, + LPDWORD pdwLength + );*/ + + DWORD Unknown9; + + void (WINAPI *DoWork)(X_XFileMediaObject *pThis); // 0x24 + } + *pVtbl; + + // global vtbl for this class + static _vtbl vtbl; + + // debug mode guard for detecting naughty data accesses + #ifdef _DEBUG + DWORD DebugGuard[256]; + #endif + + public: + // TODO: More? + LPVOID EmuBuffer; + HANDLE EmuHandle; + UINT EmuRefCount; +}; + // ****************************************************************** // * func: EmuDirectSoundCreate // ****************************************************************** @@ -1279,9 +1354,9 @@ HRESULT WINAPI EmuIDirectSound8_GetCaps ); // ****************************************************************** -// * func: EmuIDirectSoundStream_SetPitch +// * func: EmuCDirectSoundStream_SetPitch // ****************************************************************** -HRESULT WINAPI EmuIDirectSoundStream_SetPitch +HRESULT WINAPI EmuCDirectSoundStream_SetPitch ( X_CDirectSoundStream* pThis, LONG lPitch @@ -1408,5 +1483,97 @@ HRESULT WINAPI EmuIDirectSoundBuffer8_SetNotificationPositions LPCDSBPOSITIONNOTIFY paNotifies ); +// ****************************************************************** +// * func EmuCDirectSoundStream::SetRolloffCurve +// ****************************************************************** +HRESULT WINAPI EmuCDirectSoundStream_SetRolloffCurve +( + X_CDirectSoundBuffer *pThis, + const FLOAT *pflPoints, + DWORD dwPointCount, + DWORD dwApply +); + +// ****************************************************************** +// * func: EmuIDirectSound8_SetEffectData +// ****************************************************************** +HRESULT WINAPI EmuIDirectSound8_SetEffectData +( + LPVOID pThis, + DWORD dwEffectIndex, + DWORD dwOffset, + LPCVOID pvData, + DWORD dwDataSize, + DWORD dwApply +); + +// ****************************************************************** +// * func: EmuXFileCreateMediaObjectAsync +// ****************************************************************** +HRESULT WINAPI EmuXFileCreateMediaObjectAsync +( + HANDLE hFile, + DWORD dwMaxPackets, + void **ppMediaObject +); + +// ****************************************************************** +// * func: EmuXFileMediaObject_Seek +// ****************************************************************** +HRESULT WINAPI EmuXFileMediaObject_Seek +( + X_XFileMediaObject* pThis, + LONG lOffset, + DWORD dwOrigin, + LPDWORD pdwAbsolute +); + +// ****************************************************************** +// * func: EmuXFileMediaObject_DoWork +// ****************************************************************** +VOID WINAPI EmuXFileMediaObject_DoWork(X_XFileMediaObject* pThis); + +// ****************************************************************** +// * func: EmuXFileMediaObject_GetStatus +// ****************************************************************** +HRESULT WINAPI EmuXFileMediaObject_GetStatus +( + X_XFileMediaObject* pThis, + LPDWORD pdwStatus +); + +// ****************************************************************** +// * func: EmuXFileMediaObject_GetInfo +// ****************************************************************** +HRESULT WINAPI EmuXFileMediaObject_GetInfo +( + X_XFileMediaObject *pThis, + XMEDIAINFO *pInfo +); + +// ****************************************************************** +// * func: EmuXFileMediaObject_Process +// ****************************************************************** +HRESULT WINAPI EmuXFileMediaObject_Process +( + X_XFileMediaObject *pThis, + LPXMEDIAPACKET pInputBuffer, + LPXMEDIAPACKET pOutputBuffer +); + +// ****************************************************************** +// * func: EmuXFileMediaObject_AddRef +// ****************************************************************** +ULONG WINAPI EmuXFileMediaObject_AddRef(X_XFileMediaObject *pThis); + +// ****************************************************************** +// * func: EmuXFileMediaObject_Release +// ****************************************************************** +ULONG WINAPI EmuXFileMediaObject_Release(X_XFileMediaObject *pThis); + +// ****************************************************************** +// * func: EmuXFileMediaObject_Discontinuity +// ****************************************************************** +HRESULT WINAPI EmuXFileMediaObject_Discontinuity(X_XFileMediaObject *pThis); #endif diff --git a/src/CxbxKrnl/EmuKrnl.cpp b/src/CxbxKrnl/EmuKrnl.cpp index 82c615106..f1cff4313 100644 --- a/src/CxbxKrnl/EmuKrnl.cpp +++ b/src/CxbxKrnl/EmuKrnl.cpp @@ -120,6 +120,933 @@ int FindCriticalSection(xboxkrnl::PRTL_CRITICAL_SECTION CriticalSection) return FreeSection; } +static CHAR* NtStatusToString ( IN NTSTATUS Status ) +{ + switch(Status) + { + case 0x00000000: return "STATUS_SUCCESS"; + case 0x00000001: return "STATUS_WAIT_1"; + case 0x00000002: return "STATUS_WAIT_2"; + case 0x00000003: return "STATUS_WAIT_3"; + case 0x0000003F: return "STATUS_WAIT_63"; + case 0x00000080: return "STATUS_ABANDONED_WAIT_0"; + case 0x000000BF: return "STATUS_ABANDONED_WAIT_63"; + case 0x000000C0: return "STATUS_USER_APC"; + case 0x00000100: return "STATUS_KERNEL_APC"; + case 0x00000101: return "STATUS_ALERTED"; + case 0x00000102: return "STATUS_TIMEOUT"; + case 0x00000103: return "STATUS_PENDING"; + case 0x00000104: return "STATUS_REPARSE"; + case 0x00000105: return "STATUS_MORE_ENTRIES"; + case 0x00000106: return "STATUS_NOT_ALL_ASSIGNED"; + case 0x00000107: return "STATUS_SOME_NOT_MAPPED"; + case 0x00000108: return "STATUS_OPLOCK_BREAK_IN_PROGRESS"; + case 0x00000109: return "STATUS_VOLUME_MOUNTED"; + case 0x0000010A: return "STATUS_RXACT_COMMITTED"; + case 0x0000010B: return "STATUS_NOTIFY_CLEANUP"; + case 0x0000010C: return "STATUS_NOTIFY_ENUM_DIR"; + case 0x0000010D: return "STATUS_NO_QUOTAS_FOR_ACCOUNT"; + case 0x0000010E: return "STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED"; + case 0x00000110: return "STATUS_PAGE_FAULT_TRANSITION"; + case 0x00000111: return "STATUS_PAGE_FAULT_DEMAND_ZERO"; + case 0x00000112: return "STATUS_PAGE_FAULT_COPY_ON_WRITE"; + case 0x00000113: return "STATUS_PAGE_FAULT_GUARD_PAGE"; + case 0x00000114: return "STATUS_PAGE_FAULT_PAGING_FILE"; + case 0x00000115: return "STATUS_CACHE_PAGE_LOCKED"; + case 0x00000116: return "STATUS_CRASH_DUMP"; + case 0x00000117: return "STATUS_BUFFER_ALL_ZEROS"; + case 0x00000118: return "STATUS_REPARSE_OBJECT"; + case 0x00000119: return "STATUS_RESOURCE_REQUIREMENTS_CHANGED"; + case 0x00000120: return "STATUS_TRANSLATION_COMPLETE"; + case 0x00000121: return "STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY"; + case 0x00010001: return "DBG_EXCEPTION_HANDLED"; + case 0x00010002: return "DBG_CONTINUE"; + case 0x40000000: return "STATUS_OBJECT_NAME_EXISTS"; + case 0x40000001: return "STATUS_THREAD_WAS_SUSPENDED"; + case 0x40000002: return "STATUS_WORKING_SET_LIMIT_RANGE"; + case 0x40000003: return "STATUS_IMAGE_NOT_AT_BASE"; + case 0x40000004: return "STATUS_RXACT_STATE_CREATED"; + case 0x40000005: return "STATUS_SEGMENT_NOTIFICATION"; + case 0x40000006: return "STATUS_LOCAL_USER_SESSION_KEY"; + case 0x40000007: return "STATUS_BAD_CURRENT_DIRECTORY"; + case 0x40000008: return "STATUS_SERIAL_MORE_WRITES"; + case 0x40000009: return "STATUS_REGISTRY_RECOVERED"; + case 0x4000000A: return "STATUS_FT_READ_RECOVERY_FROM_BACKUP"; + case 0x4000000B: return "STATUS_FT_WRITE_RECOVERY"; + case 0x4000000C: return "STATUS_SERIAL_COUNTER_TIMEOUT"; + case 0x4000000D: return "STATUS_NULL_LM_PASSWORD"; + case 0x4000000E: return "STATUS_IMAGE_MACHINE_TYPE_MISMATCH"; + case 0x4000000F: return "STATUS_RECEIVE_PARTIAL"; + case 0x40000010: return "STATUS_RECEIVE_EXPEDITED"; + case 0x40000011: return "STATUS_RECEIVE_PARTIAL_EXPEDITED"; + case 0x40000012: return "STATUS_EVENT_DONE"; + case 0x40000013: return "STATUS_EVENT_PENDING"; + case 0x40000014: return "STATUS_CHECKING_FILE_SYSTEM"; + case 0x40000015: return "STATUS_FATAL_APP_EXIT"; + case 0x40000016: return "STATUS_PREDEFINED_HANDLE"; + case 0x40000017: return "STATUS_WAS_UNLOCKED"; + case 0x40000018: return "STATUS_SERVICE_NOTIFICATION"; + case 0x40000019: return "STATUS_WAS_LOCKED"; + case 0x4000001A: return "STATUS_LOG_HARD_ERROR"; + case 0x4000001B: return "STATUS_ALREADY_WIN32"; + case 0x4000001C: return "STATUS_WX86_UNSIMULATE"; + case 0x4000001D: return "STATUS_WX86_CONTINUE"; + case 0x4000001E: return "STATUS_WX86_SINGLE_STEP"; + case 0x4000001F: return "STATUS_WX86_BREAKPOINT"; + case 0x40000020: return "STATUS_WX86_EXCEPTION_CONTINUE"; + case 0x40000021: return "STATUS_WX86_EXCEPTION_LASTCHANCE"; + case 0x40000022: return "STATUS_WX86_EXCEPTION_CHAIN"; + case 0x40000023: return "STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE"; + case 0x40000024: return "STATUS_NO_YIELD_PERFORMED"; + case 0x40000025: return "STATUS_TIMER_RESUME_IGNORED"; + case 0x40000026: return "STATUS_ARBITRATION_UNHANDLED"; + case 0x40000027: return "STATUS_CARDBUS_NOT_SUPPORTED"; + case 0x40000028: return "STATUS_WX86_CREATEWX86TIB"; + case 0x40000029: return "STATUS_MP_PROCESSOR_MISMATCH"; + case 0x40010001: return "DBG_REPLY_LATER"; + case 0x40010002: return "DBG_UNABLE_TO_PROVIDE_HANDLE"; + case 0x40010003: return "DBG_TERMINATE_THREAD"; + case 0x40010004: return "DBG_TERMINATE_PROCESS"; + case 0x40010005: return "DBG_CONTROL_C"; + case 0x40010006: return "DBG_PRINTEXCEPTION_C"; + case 0x40010007: return "DBG_RIPEXCEPTION"; + case 0x40010008: return "DBG_CONTROL_BREAK"; + case 0x80000001: return "STATUS_GUARD_PAGE_VIOLATION"; + case 0x80000002: return "STATUS_DATATYPE_MISALIGNMENT"; + case 0x80000003: return "STATUS_BREAKPOINT"; + case 0x80000004: return "STATUS_SINGLE_STEP"; + case 0x80000005: return "STATUS_BUFFER_OVERFLOW"; + case 0x80000006: return "STATUS_NO_MORE_FILES"; + case 0x80000007: return "STATUS_WAKE_SYSTEM_DEBUGGER"; + case 0x8000000A: return "STATUS_HANDLES_CLOSED"; + case 0x8000000B: return "STATUS_NO_INHERITANCE"; + case 0x8000000C: return "STATUS_GUID_SUBSTITUTION_MADE"; + case 0x8000000D: return "STATUS_PARTIAL_COPY"; + case 0x8000000E: return "STATUS_DEVICE_PAPER_EMPTY"; + case 0x8000000F: return "STATUS_DEVICE_POWERED_OFF"; + case 0x80000010: return "STATUS_DEVICE_OFF_LINE"; + case 0x80000011: return "STATUS_DEVICE_BUSY"; + case 0x80000012: return "STATUS_NO_MORE_EAS"; + case 0x80000013: return "STATUS_INVALID_EA_NAME"; + case 0x80000014: return "STATUS_EA_LIST_INCONSISTENT"; + case 0x80000015: return "STATUS_INVALID_EA_FLAG"; + case 0x80000016: return "STATUS_VERIFY_REQUIRED"; + case 0x80000017: return "STATUS_EXTRANEOUS_INFORMATION"; + case 0x80000018: return "STATUS_RXACT_COMMIT_NECESSARY"; + case 0x8000001A: return "STATUS_NO_MORE_ENTRIES"; + case 0x8000001B: return "STATUS_FILEMARK_DETECTED"; + case 0x8000001C: return "STATUS_MEDIA_CHANGED"; + case 0x8000001D: return "STATUS_BUS_RESET"; + case 0x8000001E: return "STATUS_END_OF_MEDIA"; + case 0x8000001F: return "STATUS_BEGINNING_OF_MEDIA"; + case 0x80000020: return "STATUS_MEDIA_CHECK"; + case 0x80000021: return "STATUS_SETMARK_DETECTED"; + case 0x80000022: return "STATUS_NO_DATA_DETECTED"; + case 0x80000023: return "STATUS_REDIRECTOR_HAS_OPEN_HANDLES"; + case 0x80000024: return "STATUS_SERVER_HAS_OPEN_HANDLES"; + case 0x80000025: return "STATUS_ALREADY_DISCONNECTED"; + case 0x80000026: return "STATUS_LONGJUMP"; + case 0x80010001: return "DBG_EXCEPTION_NOT_HANDLED"; + case 0xC0000001: return "STATUS_UNSUCCESSFUL"; + case 0xC0000002: return "STATUS_NOT_IMPLEMENTED"; + case 0xC0000003: return "STATUS_INVALID_INFO_CLASS"; + case 0xC0000004: return "STATUS_INFO_LENGTH_MISMATCH"; + case 0xC0000005: return "STATUS_ACCESS_VIOLATION"; + case 0xC0000006: return "STATUS_IN_PAGE_ERROR"; + case 0xC0000007: return "STATUS_PAGEFILE_QUOTA"; + case 0xC0000008: return "STATUS_INVALID_HANDLE"; + case 0xC0000009: return "STATUS_BAD_INITIAL_STACK"; + case 0xC000000A: return "STATUS_BAD_INITIAL_PC"; + case 0xC000000B: return "STATUS_INVALID_CID"; + case 0xC000000C: return "STATUS_TIMER_NOT_CANCELED"; + case 0xC000000D: return "STATUS_INVALID_PARAMETER"; + case 0xC000000E: return "STATUS_NO_SUCH_DEVICE"; + case 0xC000000F: return "STATUS_NO_SUCH_FILE"; + case 0xC0000010: return "STATUS_INVALID_DEVICE_REQUEST"; + case 0xC0000011: return "STATUS_END_OF_FILE"; + case 0xC0000012: return "STATUS_WRONG_VOLUME"; + case 0xC0000013: return "STATUS_NO_MEDIA_IN_DEVICE"; + case 0xC0000014: return "STATUS_UNRECOGNIZED_MEDIA"; + case 0xC0000015: return "STATUS_NONEXISTENT_SECTOR"; + case 0xC0000016: return "STATUS_MORE_PROCESSING_REQUIRED"; + case 0xC0000017: return "STATUS_NO_MEMORY"; + case 0xC0000018: return "STATUS_CONFLICTING_ADDRESSES"; + case 0xC0000019: return "STATUS_NOT_MAPPED_VIEW"; + case 0xC000001A: return "STATUS_UNABLE_TO_FREE_VM"; + case 0xC000001B: return "STATUS_UNABLE_TO_DELETE_SECTION"; + case 0xC000001C: return "STATUS_INVALID_SYSTEM_SERVICE"; + case 0xC000001D: return "STATUS_ILLEGAL_INSTRUCTION"; + case 0xC000001E: return "STATUS_INVALID_LOCK_SEQUENCE"; + case 0xC000001F: return "STATUS_INVALID_VIEW_SIZE"; + case 0xC0000020: return "STATUS_INVALID_FILE_FOR_SECTION"; + case 0xC0000021: return "STATUS_ALREADY_COMMITTED"; + case 0xC0000022: return "STATUS_ACCESS_DENIED"; + case 0xC0000023: return "STATUS_BUFFER_TOO_SMALL"; + case 0xC0000024: return "STATUS_OBJECT_TYPE_MISMATCH"; + case 0xC0000025: return "STATUS_NONCONTINUABLE_EXCEPTION"; + case 0xC0000026: return "STATUS_INVALID_DISPOSITION"; + case 0xC0000027: return "STATUS_UNWIND"; + case 0xC0000028: return "STATUS_BAD_STACK"; + case 0xC0000029: return "STATUS_INVALID_UNWIND_TARGET"; + case 0xC000002A: return "STATUS_NOT_LOCKED"; + case 0xC000002B: return "STATUS_PARITY_ERROR"; + case 0xC000002C: return "STATUS_UNABLE_TO_DECOMMIT_VM"; + case 0xC000002D: return "STATUS_NOT_COMMITTED"; + case 0xC000002E: return "STATUS_INVALID_PORT_ATTRIBUTES"; + case 0xC000002F: return "STATUS_PORT_MESSAGE_TOO_LONG"; + case 0xC0000030: return "STATUS_INVALID_PARAMETER_MIX"; + case 0xC0000031: return "STATUS_INVALID_QUOTA_LOWER"; + case 0xC0000032: return "STATUS_DISK_CORRUPT_ERROR"; + case 0xC0000033: return "STATUS_OBJECT_NAME_INVALID"; + case 0xC0000034: return "STATUS_OBJECT_NAME_NOT_FOUND"; + case 0xC0000035: return "STATUS_OBJECT_NAME_COLLISION"; + case 0xC0000037: return "STATUS_PORT_DISCONNECTED"; + case 0xC0000038: return "STATUS_DEVICE_ALREADY_ATTACHED"; + case 0xC0000039: return "STATUS_OBJECT_PATH_INVALID"; + case 0xC000003A: return "STATUS_OBJECT_PATH_NOT_FOUND"; + case 0xC000003B: return "STATUS_OBJECT_PATH_SYNTAX_BAD"; + case 0xC000003C: return "STATUS_DATA_OVERRUN"; + case 0xC000003D: return "STATUS_DATA_LATE_ERROR"; + case 0xC000003E: return "STATUS_DATA_ERROR"; + case 0xC000003F: return "STATUS_CRC_ERROR"; + case 0xC0000040: return "STATUS_SECTION_TOO_BIG"; + case 0xC0000041: return "STATUS_PORT_CONNECTION_REFUSED"; + case 0xC0000042: return "STATUS_INVALID_PORT_HANDLE"; + case 0xC0000043: return "STATUS_SHARING_VIOLATION"; + case 0xC0000044: return "STATUS_QUOTA_EXCEEDED"; + case 0xC0000045: return "STATUS_INVALID_PAGE_PROTECTION"; + case 0xC0000046: return "STATUS_MUTANT_NOT_OWNED"; + case 0xC0000047: return "STATUS_SEMAPHORE_LIMIT_EXCEEDED"; + case 0xC0000048: return "STATUS_PORT_ALREADY_SET"; + case 0xC0000049: return "STATUS_SECTION_NOT_IMAGE"; + case 0xC000004A: return "STATUS_SUSPEND_COUNT_EXCEEDED"; + case 0xC000004B: return "STATUS_THREAD_IS_TERMINATING"; + case 0xC000004C: return "STATUS_BAD_WORKING_SET_LIMIT"; + case 0xC000004D: return "STATUS_INCOMPATIBLE_FILE_MAP"; + case 0xC000004E: return "STATUS_SECTION_PROTECTION"; + case 0xC000004F: return "STATUS_EAS_NOT_SUPPORTED"; + case 0xC0000050: return "STATUS_EA_TOO_LARGE"; + case 0xC0000051: return "STATUS_NONEXISTENT_EA_ENTRY"; + case 0xC0000052: return "STATUS_NO_EAS_ON_FILE"; + case 0xC0000053: return "STATUS_EA_CORRUPT_ERROR"; + case 0xC0000054: return "STATUS_FILE_LOCK_CONFLICT"; + case 0xC0000055: return "STATUS_LOCK_NOT_GRANTED"; + case 0xC0000056: return "STATUS_DELETE_PENDING"; + case 0xC0000057: return "STATUS_CTL_FILE_NOT_SUPPORTED"; + case 0xC0000058: return "STATUS_UNKNOWN_REVISION"; + case 0xC0000059: return "STATUS_REVISION_MISMATCH"; + case 0xC000005A: return "STATUS_INVALID_OWNER"; + case 0xC000005B: return "STATUS_INVALID_PRIMARY_GROUP"; + case 0xC000005C: return "STATUS_NO_IMPERSONATION_TOKEN"; + case 0xC000005D: return "STATUS_CANT_DISABLE_MANDATORY"; + case 0xC000005E: return "STATUS_NO_LOGON_SERVERS"; + case 0xC000005F: return "STATUS_NO_SUCH_LOGON_SESSION"; + case 0xC0000060: return "STATUS_NO_SUCH_PRIVILEGE"; + case 0xC0000061: return "STATUS_PRIVILEGE_NOT_HELD"; + case 0xC0000062: return "STATUS_INVALID_ACCOUNT_NAME"; + case 0xC0000063: return "STATUS_USER_EXISTS"; + case 0xC0000064: return "STATUS_NO_SUCH_USER"; + case 0xC0000065: return "STATUS_GROUP_EXISTS"; + case 0xC0000066: return "STATUS_NO_SUCH_GROUP"; + case 0xC0000067: return "STATUS_MEMBER_IN_GROUP"; + case 0xC0000068: return "STATUS_MEMBER_NOT_IN_GROUP"; + case 0xC0000069: return "STATUS_LAST_ADMIN"; + case 0xC000006A: return "STATUS_WRONG_PASSWORD"; + case 0xC000006B: return "STATUS_ILL_FORMED_PASSWORD"; + case 0xC000006C: return "STATUS_PASSWORD_RESTRICTION"; + case 0xC000006D: return "STATUS_LOGON_FAILURE"; + case 0xC000006E: return "STATUS_ACCOUNT_RESTRICTION"; + case 0xC000006F: return "STATUS_INVALID_LOGON_HOURS"; + case 0xC0000070: return "STATUS_INVALID_WORKSTATION"; + case 0xC0000071: return "STATUS_PASSWORD_EXPIRED"; + case 0xC0000072: return "STATUS_ACCOUNT_DISABLED"; + case 0xC0000073: return "STATUS_NONE_MAPPED"; + case 0xC0000074: return "STATUS_TOO_MANY_LUIDS_REQUESTED"; + case 0xC0000075: return "STATUS_LUIDS_EXHAUSTED"; + case 0xC0000076: return "STATUS_INVALID_SUB_AUTHORITY"; + case 0xC0000077: return "STATUS_INVALID_ACL"; + case 0xC0000078: return "STATUS_INVALID_SID"; + case 0xC0000079: return "STATUS_INVALID_SECURITY_DESCR"; + case 0xC000007A: return "STATUS_PROCEDURE_NOT_FOUND"; + case 0xC000007B: return "STATUS_INVALID_IMAGE_FORMAT"; + case 0xC000007C: return "STATUS_NO_TOKEN"; + case 0xC000007D: return "STATUS_BAD_INHERITANCE_ACL"; + case 0xC000007E: return "STATUS_RANGE_NOT_LOCKED"; + case 0xC000007F: return "STATUS_DISK_FULL"; + case 0xC0000080: return "STATUS_SERVER_DISABLED"; + case 0xC0000081: return "STATUS_SERVER_NOT_DISABLED"; + case 0xC0000082: return "STATUS_TOO_MANY_GUIDS_REQUESTED"; + case 0xC0000083: return "STATUS_GUIDS_EXHAUSTED"; + case 0xC0000084: return "STATUS_INVALID_ID_AUTHORITY"; + case 0xC0000085: return "STATUS_AGENTS_EXHAUSTED"; + case 0xC0000086: return "STATUS_INVALID_VOLUME_LABEL"; + case 0xC0000087: return "STATUS_SECTION_NOT_EXTENDED"; + case 0xC0000088: return "STATUS_NOT_MAPPED_DATA"; + case 0xC0000089: return "STATUS_RESOURCE_DATA_NOT_FOUND"; + case 0xC000008A: return "STATUS_RESOURCE_TYPE_NOT_FOUND"; + case 0xC000008B: return "STATUS_RESOURCE_NAME_NOT_FOUND"; + case 0xC000008C: return "STATUS_ARRAY_BOUNDS_EXCEEDED"; + case 0xC000008D: return "STATUS_FLOAT_DENORMAL_OPERAND"; + case 0xC000008E: return "STATUS_FLOAT_DIVIDE_BY_ZERO"; + case 0xC000008F: return "STATUS_FLOAT_INEXACT_RESULT"; + case 0xC0000090: return "STATUS_FLOAT_INVALID_OPERATION"; + case 0xC0000091: return "STATUS_FLOAT_OVERFLOW"; + case 0xC0000092: return "STATUS_FLOAT_STACK_CHECK"; + case 0xC0000093: return "STATUS_FLOAT_UNDERFLOW"; + case 0xC0000094: return "STATUS_INTEGER_DIVIDE_BY_ZERO"; + case 0xC0000095: return "STATUS_INTEGER_OVERFLOW"; + case 0xC0000096: return "STATUS_PRIVILEGED_INSTRUCTION"; + case 0xC0000097: return "STATUS_TOO_MANY_PAGING_FILES"; + case 0xC0000098: return "STATUS_FILE_INVALID"; + case 0xC0000099: return "STATUS_ALLOTTED_SPACE_EXCEEDED"; + case 0xC000009A: return "STATUS_INSUFFICIENT_RESOURCES"; + case 0xC000009B: return "STATUS_DFS_EXIT_PATH_FOUND"; + case 0xC000009C: return "STATUS_DEVICE_DATA_ERROR"; + case 0xC000009D: return "STATUS_DEVICE_NOT_CONNECTED"; + case 0xC000009E: return "STATUS_DEVICE_POWER_FAILURE"; + case 0xC000009F: return "STATUS_FREE_VM_NOT_AT_BASE"; + case 0xC00000A0: return "STATUS_MEMORY_NOT_ALLOCATED"; + case 0xC00000A1: return "STATUS_WORKING_SET_QUOTA"; + case 0xC00000A2: return "STATUS_MEDIA_WRITE_PROTECTED"; + case 0xC00000A3: return "STATUS_DEVICE_NOT_READY"; + case 0xC00000A4: return "STATUS_INVALID_GROUP_ATTRIBUTES"; + case 0xC00000A5: return "STATUS_BAD_IMPERSONATION_LEVEL"; + case 0xC00000A6: return "STATUS_CANT_OPEN_ANONYMOUS"; + case 0xC00000A7: return "STATUS_BAD_VALIDATION_CLASS"; + case 0xC00000A8: return "STATUS_BAD_TOKEN_TYPE"; + case 0xC00000A9: return "STATUS_BAD_MASTER_BOOT_RECORD"; + case 0xC00000AA: return "STATUS_INSTRUCTION_MISALIGNMENT"; + case 0xC00000AB: return "STATUS_INSTANCE_NOT_AVAILABLE"; + case 0xC00000AC: return "STATUS_PIPE_NOT_AVAILABLE"; + case 0xC00000AD: return "STATUS_INVALID_PIPE_STATE"; + case 0xC00000AE: return "STATUS_PIPE_BUSY"; + case 0xC00000AF: return "STATUS_ILLEGAL_FUNCTION"; + case 0xC00000B0: return "STATUS_PIPE_DISCONNECTED"; + case 0xC00000B1: return "STATUS_PIPE_CLOSING"; + case 0xC00000B2: return "STATUS_PIPE_CONNECTED"; + case 0xC00000B3: return "STATUS_PIPE_LISTENING"; + case 0xC00000B4: return "STATUS_INVALID_READ_MODE"; + case 0xC00000B5: return "STATUS_IO_TIMEOUT"; + case 0xC00000B6: return "STATUS_FILE_FORCED_CLOSED"; + case 0xC00000B7: return "STATUS_PROFILING_NOT_STARTED"; + case 0xC00000B8: return "STATUS_PROFILING_NOT_STOPPED"; + case 0xC00000B9: return "STATUS_COULD_NOT_INTERPRET"; + case 0xC00000BA: return "STATUS_FILE_IS_A_DIRECTORY"; + case 0xC00000BB: return "STATUS_NOT_SUPPORTED"; + case 0xC00000BC: return "STATUS_REMOTE_NOT_LISTENING"; + case 0xC00000BD: return "STATUS_DUPLICATE_NAME"; + case 0xC00000BE: return "STATUS_BAD_NETWORK_PATH"; + case 0xC00000BF: return "STATUS_NETWORK_BUSY"; + case 0xC00000C0: return "STATUS_DEVICE_DOES_NOT_EXIST"; + case 0xC00000C1: return "STATUS_TOO_MANY_COMMANDS"; + case 0xC00000C2: return "STATUS_ADAPTER_HARDWARE_ERROR"; + case 0xC00000C3: return "STATUS_INVALID_NETWORK_RESPONSE"; + case 0xC00000C4: return "STATUS_UNEXPECTED_NETWORK_ERROR"; + case 0xC00000C5: return "STATUS_BAD_REMOTE_ADAPTER"; + case 0xC00000C6: return "STATUS_PRINT_QUEUE_FULL"; + case 0xC00000C7: return "STATUS_NO_SPOOL_SPACE"; + case 0xC00000C8: return "STATUS_PRINT_CANCELLED"; + case 0xC00000C9: return "STATUS_NETWORK_NAME_DELETED"; + case 0xC00000CA: return "STATUS_NETWORK_ACCESS_DENIED"; + case 0xC00000CB: return "STATUS_BAD_DEVICE_TYPE"; + case 0xC00000CC: return "STATUS_BAD_NETWORK_NAME"; + case 0xC00000CD: return "STATUS_TOO_MANY_NAMES"; + case 0xC00000CE: return "STATUS_TOO_MANY_SESSIONS"; + case 0xC00000CF: return "STATUS_SHARING_PAUSED"; + case 0xC00000D0: return "STATUS_REQUEST_NOT_ACCEPTED"; + case 0xC00000D1: return "STATUS_REDIRECTOR_PAUSED"; + case 0xC00000D2: return "STATUS_NET_WRITE_FAULT"; + case 0xC00000D3: return "STATUS_PROFILING_AT_LIMIT"; + case 0xC00000D4: return "STATUS_NOT_SAME_DEVICE"; + case 0xC00000D5: return "STATUS_FILE_RENAMED"; + case 0xC00000D6: return "STATUS_VIRTUAL_CIRCUIT_CLOSED"; + case 0xC00000D7: return "STATUS_NO_SECURITY_ON_OBJECT"; + case 0xC00000D8: return "STATUS_CANT_WAIT"; + case 0xC00000D9: return "STATUS_PIPE_EMPTY"; + case 0xC00000DA: return "STATUS_CANT_ACCESS_DOMAIN_INFO"; + case 0xC00000DB: return "STATUS_CANT_TERMINATE_SELF"; + case 0xC00000DC: return "STATUS_INVALID_SERVER_STATE"; + case 0xC00000DD: return "STATUS_INVALID_DOMAIN_STATE"; + case 0xC00000DE: return "STATUS_INVALID_DOMAIN_ROLE"; + case 0xC00000DF: return "STATUS_NO_SUCH_DOMAIN"; + case 0xC00000E0: return "STATUS_DOMAIN_EXISTS"; + case 0xC00000E1: return "STATUS_DOMAIN_LIMIT_EXCEEDED"; + case 0xC00000E2: return "STATUS_OPLOCK_NOT_GRANTED"; + case 0xC00000E3: return "STATUS_INVALID_OPLOCK_PROTOCOL"; + case 0xC00000E4: return "STATUS_INTERNAL_DB_CORRUPTION"; + case 0xC00000E5: return "STATUS_INTERNAL_ERROR"; + case 0xC00000E6: return "STATUS_GENERIC_NOT_MAPPED"; + case 0xC00000E7: return "STATUS_BAD_DESCRIPTOR_FORMAT"; + case 0xC00000E8: return "STATUS_INVALID_USER_BUFFER"; + case 0xC00000E9: return "STATUS_UNEXPECTED_IO_ERROR"; + case 0xC00000EA: return "STATUS_UNEXPECTED_MM_CREATE_ERR"; + case 0xC00000EB: return "STATUS_UNEXPECTED_MM_MAP_ERROR"; + case 0xC00000EC: return "STATUS_UNEXPECTED_MM_EXTEND_ERR"; + case 0xC00000ED: return "STATUS_NOT_LOGON_PROCESS"; + case 0xC00000EE: return "STATUS_LOGON_SESSION_EXISTS"; + case 0xC00000EF: return "STATUS_INVALID_PARAMETER_1"; + case 0xC00000F0: return "STATUS_INVALID_PARAMETER_2"; + case 0xC00000F1: return "STATUS_INVALID_PARAMETER_3"; + case 0xC00000F2: return "STATUS_INVALID_PARAMETER_4"; + case 0xC00000F3: return "STATUS_INVALID_PARAMETER_5"; + case 0xC00000F4: return "STATUS_INVALID_PARAMETER_6"; + case 0xC00000F5: return "STATUS_INVALID_PARAMETER_7"; + case 0xC00000F6: return "STATUS_INVALID_PARAMETER_8"; + case 0xC00000F7: return "STATUS_INVALID_PARAMETER_9"; + case 0xC00000F8: return "STATUS_INVALID_PARAMETER_10"; + case 0xC00000F9: return "STATUS_INVALID_PARAMETER_11"; + case 0xC00000FA: return "STATUS_INVALID_PARAMETER_12"; + case 0xC00000FB: return "STATUS_REDIRECTOR_NOT_STARTED"; + case 0xC00000FC: return "STATUS_REDIRECTOR_STARTED"; + case 0xC00000FD: return "STATUS_STACK_OVERFLOW"; + case 0xC00000FE: return "STATUS_NO_SUCH_PACKAGE"; + case 0xC00000FF: return "STATUS_BAD_FUNCTION_TABLE"; + case 0xC0000100: return "STATUS_VARIABLE_NOT_FOUND"; + case 0xC0000101: return "STATUS_DIRECTORY_NOT_EMPTY"; + case 0xC0000102: return "STATUS_FILE_CORRUPT_ERROR"; + case 0xC0000103: return "STATUS_NOT_A_DIRECTORY"; + case 0xC0000104: return "STATUS_BAD_LOGON_SESSION_STATE"; + case 0xC0000105: return "STATUS_LOGON_SESSION_COLLISION"; + case 0xC0000106: return "STATUS_NAME_TOO_LONG"; + case 0xC0000107: return "STATUS_FILES_OPEN"; + case 0xC0000108: return "STATUS_CONNECTION_IN_USE"; + case 0xC0000109: return "STATUS_MESSAGE_NOT_FOUND"; + case 0xC000010A: return "STATUS_PROCESS_IS_TERMINATING"; + case 0xC000010B: return "STATUS_INVALID_LOGON_TYPE"; + case 0xC000010C: return "STATUS_NO_GUID_TRANSLATION"; + case 0xC000010D: return "STATUS_CANNOT_IMPERSONATE"; + case 0xC000010E: return "STATUS_IMAGE_ALREADY_LOADED"; + case 0xC000010F: return "STATUS_ABIOS_NOT_PRESENT"; + case 0xC0000110: return "STATUS_ABIOS_LID_NOT_EXIST"; + case 0xC0000111: return "STATUS_ABIOS_LID_ALREADY_OWNED"; + case 0xC0000112: return "STATUS_ABIOS_NOT_LID_OWNER"; + case 0xC0000113: return "STATUS_ABIOS_INVALID_COMMAND"; + case 0xC0000114: return "STATUS_ABIOS_INVALID_LID"; + case 0xC0000115: return "STATUS_ABIOS_SELECTOR_NOT_AVAILABLE"; + case 0xC0000116: return "STATUS_ABIOS_INVALID_SELECTOR"; + case 0xC0000117: return "STATUS_NO_LDT"; + case 0xC0000118: return "STATUS_INVALID_LDT_SIZE"; + case 0xC0000119: return "STATUS_INVALID_LDT_OFFSET"; + case 0xC000011A: return "STATUS_INVALID_LDT_DESCRIPTOR"; + case 0xC000011B: return "STATUS_INVALID_IMAGE_NE_FORMAT"; + case 0xC000011C: return "STATUS_RXACT_INVALID_STATE"; + case 0xC000011D: return "STATUS_RXACT_COMMIT_FAILURE"; + case 0xC000011E: return "STATUS_MAPPED_FILE_SIZE_ZERO"; + case 0xC000011F: return "STATUS_TOO_MANY_OPENED_FILES"; + case 0xC0000120: return "STATUS_CANCELLED"; + case 0xC0000121: return "STATUS_CANNOT_DELETE"; + case 0xC0000122: return "STATUS_INVALID_COMPUTER_NAME"; + case 0xC0000123: return "STATUS_FILE_DELETED"; + case 0xC0000124: return "STATUS_SPECIAL_ACCOUNT"; + case 0xC0000125: return "STATUS_SPECIAL_GROUP"; + case 0xC0000126: return "STATUS_SPECIAL_USER"; + case 0xC0000127: return "STATUS_MEMBERS_PRIMARY_GROUP"; + case 0xC0000128: return "STATUS_FILE_CLOSED"; + case 0xC0000129: return "STATUS_TOO_MANY_THREADS"; + case 0xC000012A: return "STATUS_THREAD_NOT_IN_PROCESS"; + case 0xC000012B: return "STATUS_TOKEN_ALREADY_IN_USE"; + case 0xC000012C: return "STATUS_PAGEFILE_QUOTA_EXCEEDED"; + case 0xC000012D: return "STATUS_COMMITMENT_LIMIT"; + case 0xC000012E: return "STATUS_INVALID_IMAGE_LE_FORMAT"; + case 0xC000012F: return "STATUS_INVALID_IMAGE_NOT_MZ"; + case 0xC0000130: return "STATUS_INVALID_IMAGE_PROTECT"; + case 0xC0000131: return "STATUS_INVALID_IMAGE_WIN_16"; + case 0xC0000132: return "STATUS_LOGON_SERVER_CONFLICT"; + case 0xC0000133: return "STATUS_TIME_DIFFERENCE_AT_DC"; + case 0xC0000134: return "STATUS_SYNCHRONIZATION_REQUIRED"; + case 0xC0000135: return "STATUS_DLL_NOT_FOUND"; + case 0xC0000136: return "STATUS_OPEN_FAILED"; + case 0xC0000137: return "STATUS_IO_PRIVILEGE_FAILED"; + case 0xC0000138: return "STATUS_ORDINAL_NOT_FOUND"; + case 0xC0000139: return "STATUS_ENTRYPOINT_NOT_FOUND"; + case 0xC000013A: return "STATUS_CONTROL_C_EXIT"; + case 0xC000013B: return "STATUS_LOCAL_DISCONNECT"; + case 0xC000013C: return "STATUS_REMOTE_DISCONNECT"; + case 0xC000013D: return "STATUS_REMOTE_RESOURCES"; + case 0xC000013E: return "STATUS_LINK_FAILED"; + case 0xC000013F: return "STATUS_LINK_TIMEOUT"; + case 0xC0000140: return "STATUS_INVALID_CONNECTION"; + case 0xC0000141: return "STATUS_INVALID_ADDRESS"; + case 0xC0000142: return "STATUS_DLL_INIT_FAILED"; + case 0xC0000143: return "STATUS_MISSING_SYSTEMFILE"; + case 0xC0000144: return "STATUS_UNHANDLED_EXCEPTION"; + case 0xC0000145: return "STATUS_APP_INIT_FAILURE"; + case 0xC0000146: return "STATUS_PAGEFILE_CREATE_FAILED"; + case 0xC0000147: return "STATUS_NO_PAGEFILE"; + case 0xC0000148: return "STATUS_INVALID_LEVEL"; + case 0xC0000149: return "STATUS_WRONG_PASSWORD_CORE"; + case 0xC000014A: return "STATUS_ILLEGAL_FLOAT_CONTEXT"; + case 0xC000014B: return "STATUS_PIPE_BROKEN"; + case 0xC000014C: return "STATUS_REGISTRY_CORRUPT"; + case 0xC000014D: return "STATUS_REGISTRY_IO_FAILED"; + case 0xC000014E: return "STATUS_NO_EVENT_PAIR"; + case 0xC000014F: return "STATUS_UNRECOGNIZED_VOLUME"; + case 0xC0000150: return "STATUS_SERIAL_NO_DEVICE_INITED"; + case 0xC0000151: return "STATUS_NO_SUCH_ALIAS"; + case 0xC0000152: return "STATUS_MEMBER_NOT_IN_ALIAS"; + case 0xC0000153: return "STATUS_MEMBER_IN_ALIAS"; + case 0xC0000154: return "STATUS_ALIAS_EXISTS"; + case 0xC0000155: return "STATUS_LOGON_NOT_GRANTED"; + case 0xC0000156: return "STATUS_TOO_MANY_SECRETS"; + case 0xC0000157: return "STATUS_SECRET_TOO_LONG"; + case 0xC0000158: return "STATUS_INTERNAL_DB_ERROR"; + case 0xC0000159: return "STATUS_FULLSCREEN_MODE"; + case 0xC000015A: return "STATUS_TOO_MANY_CONTEXT_IDS"; + case 0xC000015B: return "STATUS_LOGON_TYPE_NOT_GRANTED"; + case 0xC000015C: return "STATUS_NOT_REGISTRY_FILE"; + case 0xC000015D: return "STATUS_NT_CROSS_ENCRYPTION_REQUIRED"; + case 0xC000015E: return "STATUS_DOMAIN_CTRLR_CONFIG_ERROR"; + case 0xC000015F: return "STATUS_FT_MISSING_MEMBER"; + case 0xC0000160: return "STATUS_ILL_FORMED_SERVICE_ENTRY"; + case 0xC0000161: return "STATUS_ILLEGAL_CHARACTER"; + case 0xC0000162: return "STATUS_UNMAPPABLE_CHARACTER"; + case 0xC0000163: return "STATUS_UNDEFINED_CHARACTER"; + case 0xC0000164: return "STATUS_FLOPPY_VOLUME"; + case 0xC0000165: return "STATUS_FLOPPY_ID_MARK_NOT_FOUND"; + case 0xC0000166: return "STATUS_FLOPPY_WRONG_CYLINDER"; + case 0xC0000167: return "STATUS_FLOPPY_UNKNOWN_ERROR"; + case 0xC0000168: return "STATUS_FLOPPY_BAD_REGISTERS"; + case 0xC0000169: return "STATUS_DISK_RECALIBRATE_FAILED"; + case 0xC000016A: return "STATUS_DISK_OPERATION_FAILED"; + case 0xC000016B: return "STATUS_DISK_RESET_FAILED"; + case 0xC000016C: return "STATUS_SHARED_IRQ_BUSY"; + case 0xC000016D: return "STATUS_FT_ORPHANING"; + case 0xC000016E: return "STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT"; + case 0xC0000172: return "STATUS_PARTITION_FAILURE"; + case 0xC0000173: return "STATUS_INVALID_BLOCK_LENGTH"; + case 0xC0000174: return "STATUS_DEVICE_NOT_PARTITIONED"; + case 0xC0000175: return "STATUS_UNABLE_TO_LOCK_MEDIA"; + case 0xC0000176: return "STATUS_UNABLE_TO_UNLOAD_MEDIA"; + case 0xC0000177: return "STATUS_EOM_OVERFLOW"; + case 0xC0000178: return "STATUS_NO_MEDIA"; + case 0xC000017A: return "STATUS_NO_SUCH_MEMBER"; + case 0xC000017B: return "STATUS_INVALID_MEMBER"; + case 0xC000017C: return "STATUS_KEY_DELETED"; + case 0xC000017D: return "STATUS_NO_LOG_SPACE"; + case 0xC000017E: return "STATUS_TOO_MANY_SIDS"; + case 0xC000017F: return "STATUS_LM_CROSS_ENCRYPTION_REQUIRED"; + case 0xC0000180: return "STATUS_KEY_HAS_CHILDREN"; + case 0xC0000181: return "STATUS_CHILD_MUST_BE_VOLATILE"; + case 0xC0000182: return "STATUS_DEVICE_CONFIGURATION_ERROR"; + case 0xC0000183: return "STATUS_DRIVER_INTERNAL_ERROR"; + case 0xC0000184: return "STATUS_INVALID_DEVICE_STATE"; + case 0xC0000185: return "STATUS_IO_DEVICE_ERROR"; + case 0xC0000186: return "STATUS_DEVICE_PROTOCOL_ERROR"; + case 0xC0000187: return "STATUS_BACKUP_CONTROLLER"; + case 0xC0000188: return "STATUS_LOG_FILE_FULL"; + case 0xC0000189: return "STATUS_TOO_LATE"; + case 0xC000018A: return "STATUS_NO_TRUST_LSA_SECRET"; + case 0xC000018B: return "STATUS_NO_TRUST_SAM_ACCOUNT"; + case 0xC000018C: return "STATUS_TRUSTED_DOMAIN_FAILURE"; + case 0xC000018D: return "STATUS_TRUSTED_RELATIONSHIP_FAILURE"; + case 0xC000018E: return "STATUS_EVENTLOG_FILE_CORRUPT"; + case 0xC000018F: return "STATUS_EVENTLOG_CANT_START"; + case 0xC0000190: return "STATUS_TRUST_FAILURE"; + case 0xC0000191: return "STATUS_MUTANT_LIMIT_EXCEEDED"; + case 0xC0000192: return "STATUS_NETLOGON_NOT_STARTED"; + case 0xC0000193: return "STATUS_ACCOUNT_EXPIRED"; + case 0xC0000194: return "STATUS_POSSIBLE_DEADLOCK"; + case 0xC0000195: return "STATUS_NETWORK_CREDENTIAL_CONFLICT"; + case 0xC0000196: return "STATUS_REMOTE_SESSION_LIMIT"; + case 0xC0000197: return "STATUS_EVENTLOG_FILE_CHANGED"; + case 0xC0000198: return "STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT"; + case 0xC0000199: return "STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT"; + case 0xC000019A: return "STATUS_NOLOGON_SERVER_TRUST_ACCOUNT"; + case 0xC000019B: return "STATUS_DOMAIN_TRUST_INCONSISTENT"; + case 0xC000019C: return "STATUS_FS_DRIVER_REQUIRED"; + case 0xC0000202: return "STATUS_NO_USER_SESSION_KEY"; + case 0xC0000203: return "STATUS_USER_SESSION_DELETED"; + case 0xC0000204: return "STATUS_RESOURCE_LANG_NOT_FOUND"; + case 0xC0000205: return "STATUS_INSUFF_SERVER_RESOURCES"; + case 0xC0000206: return "STATUS_INVALID_BUFFER_SIZE"; + case 0xC0000207: return "STATUS_INVALID_ADDRESS_COMPONENT"; + case 0xC0000208: return "STATUS_INVALID_ADDRESS_WILDCARD"; + case 0xC0000209: return "STATUS_TOO_MANY_ADDRESSES"; + case 0xC000020A: return "STATUS_ADDRESS_ALREADY_EXISTS"; + case 0xC000020B: return "STATUS_ADDRESS_CLOSED"; + case 0xC000020C: return "STATUS_CONNECTION_DISCONNECTED"; + case 0xC000020D: return "STATUS_CONNECTION_RESET"; + case 0xC000020E: return "STATUS_TOO_MANY_NODES"; + case 0xC000020F: return "STATUS_TRANSACTION_ABORTED"; + case 0xC0000210: return "STATUS_TRANSACTION_TIMED_OUT"; + case 0xC0000211: return "STATUS_TRANSACTION_NO_RELEASE"; + case 0xC0000212: return "STATUS_TRANSACTION_NO_MATCH"; + case 0xC0000213: return "STATUS_TRANSACTION_RESPONDED"; + case 0xC0000214: return "STATUS_TRANSACTION_INVALID_ID"; + case 0xC0000215: return "STATUS_TRANSACTION_INVALID_TYPE"; + case 0xC0000216: return "STATUS_NOT_SERVER_SESSION"; + case 0xC0000217: return "STATUS_NOT_CLIENT_SESSION"; + case 0xC0000218: return "STATUS_CANNOT_LOAD_REGISTRY_FILE"; + case 0xC0000219: return "STATUS_DEBUG_ATTACH_FAILED"; + case 0xC000021A: return "STATUS_SYSTEM_PROCESS_TERMINATED"; + case 0xC000021B: return "STATUS_DATA_NOT_ACCEPTED"; + case 0xC000021C: return "STATUS_NO_BROWSER_SERVERS_FOUND"; + case 0xC000021D: return "STATUS_VDM_HARD_ERROR"; + case 0xC000021E: return "STATUS_DRIVER_CANCEL_TIMEOUT"; + case 0xC000021F: return "STATUS_REPLY_MESSAGE_MISMATCH"; + case 0xC0000220: return "STATUS_MAPPED_ALIGNMENT"; + case 0xC0000221: return "STATUS_IMAGE_CHECKSUM_MISMATCH"; + case 0xC0000222: return "STATUS_LOST_WRITEBEHIND_DATA"; + case 0xC0000223: return "STATUS_CLIENT_SERVER_PARAMETERS_INVALID"; + case 0xC0000224: return "STATUS_PASSWORD_MUST_CHANGE"; + case 0xC0000225: return "STATUS_NOT_FOUND"; + case 0xC0000226: return "STATUS_NOT_TINY_STREAM"; + case 0xC0000227: return "STATUS_RECOVERY_FAILURE"; + case 0xC0000228: return "STATUS_STACK_OVERFLOW_READ"; + case 0xC0000229: return "STATUS_FAIL_CHECK"; + case 0xC000022A: return "STATUS_DUPLICATE_OBJECTID"; + case 0xC000022B: return "STATUS_OBJECTID_EXISTS"; + case 0xC000022C: return "STATUS_CONVERT_TO_LARGE"; + case 0xC000022D: return "STATUS_RETRY"; + case 0xC000022E: return "STATUS_FOUND_OUT_OF_SCOPE"; + case 0xC000022F: return "STATUS_ALLOCATE_BUCKET"; + case 0xC0000230: return "STATUS_PROPSET_NOT_FOUND"; + case 0xC0000231: return "STATUS_MARSHALL_OVERFLOW"; + case 0xC0000232: return "STATUS_INVALID_VARIANT"; + case 0xC0000233: return "STATUS_DOMAIN_CONTROLLER_NOT_FOUND"; + case 0xC0000234: return "STATUS_ACCOUNT_LOCKED_OUT"; + case 0xC0000235: return "STATUS_HANDLE_NOT_CLOSABLE"; + case 0xC0000236: return "STATUS_CONNECTION_REFUSED"; + case 0xC0000237: return "STATUS_GRACEFUL_DISCONNECT"; + case 0xC0000238: return "STATUS_ADDRESS_ALREADY_ASSOCIATED"; + case 0xC0000239: return "STATUS_ADDRESS_NOT_ASSOCIATED"; + case 0xC000023A: return "STATUS_CONNECTION_INVALID"; + case 0xC000023B: return "STATUS_CONNECTION_ACTIVE"; + case 0xC000023C: return "STATUS_NETWORK_UNREACHABLE"; + case 0xC000023D: return "STATUS_HOST_UNREACHABLE"; + case 0xC000023E: return "STATUS_PROTOCOL_UNREACHABLE"; + case 0xC000023F: return "STATUS_PORT_UNREACHABLE"; + case 0xC0000240: return "STATUS_REQUEST_ABORTED"; + case 0xC0000241: return "STATUS_CONNECTION_ABORTED"; + case 0xC0000242: return "STATUS_BAD_COMPRESSION_BUFFER"; + case 0xC0000243: return "STATUS_USER_MAPPED_FILE"; + case 0xC0000244: return "STATUS_AUDIT_FAILED"; + case 0xC0000245: return "STATUS_TIMER_RESOLUTION_NOT_SET"; + case 0xC0000246: return "STATUS_CONNECTION_COUNT_LIMIT"; + case 0xC0000247: return "STATUS_LOGIN_TIME_RESTRICTION"; + case 0xC0000248: return "STATUS_LOGIN_WKSTA_RESTRICTION"; + case 0xC0000249: return "STATUS_IMAGE_MP_UP_MISMATCH"; + case 0xC0000250: return "STATUS_INSUFFICIENT_LOGON_INFO"; + case 0xC0000251: return "STATUS_BAD_DLL_ENTRYPOINT"; + case 0xC0000252: return "STATUS_BAD_SERVICE_ENTRYPOINT"; + case 0xC0000253: return "STATUS_LPC_REPLY_LOST"; + case 0xC0000254: return "STATUS_IP_ADDRESS_CONFLICT1"; + case 0xC0000255: return "STATUS_IP_ADDRESS_CONFLICT2"; + case 0xC0000256: return "STATUS_REGISTRY_QUOTA_LIMIT"; + case 0xC0000257: return "STATUS_PATH_NOT_COVERED"; + case 0xC0000258: return "STATUS_NO_CALLBACK_ACTIVE"; + case 0xC0000259: return "STATUS_LICENSE_QUOTA_EXCEEDED"; + case 0xC000025A: return "STATUS_PWD_TOO_SHORT"; + case 0xC000025B: return "STATUS_PWD_TOO_RECENT"; + case 0xC000025C: return "STATUS_PWD_HISTORY_CONFLICT"; + case 0xC000025E: return "STATUS_PLUGPLAY_NO_DEVICE"; + case 0xC000025F: return "STATUS_UNSUPPORTED_COMPRESSION"; + case 0xC0000260: return "STATUS_INVALID_HW_PROFILE"; + case 0xC0000261: return "STATUS_INVALID_PLUGPLAY_DEVICE_PATH"; + case 0xC0000262: return "STATUS_DRIVER_ORDINAL_NOT_FOUND"; + case 0xC0000263: return "STATUS_DRIVER_ENTRYPOINT_NOT_FOUND"; + case 0xC0000264: return "STATUS_RESOURCE_NOT_OWNED"; + case 0xC0000265: return "STATUS_TOO_MANY_LINKS"; + case 0xC0000266: return "STATUS_QUOTA_LIST_INCONSISTENT"; + case 0xC0000267: return "STATUS_FILE_IS_OFFLINE"; + case 0xC0000268: return "STATUS_EVALUATION_EXPIRATION"; + case 0xC0000269: return "STATUS_ILLEGAL_DLL_RELOCATION"; + case 0xC000026A: return "STATUS_LICENSE_VIOLATION"; + case 0xC000026B: return "STATUS_DLL_INIT_FAILED_LOGOFF"; + case 0xC000026C: return "STATUS_DRIVER_UNABLE_TO_LOAD"; + case 0xC000026D: return "STATUS_DFS_UNAVAILABLE"; + case 0xC000026E: return "STATUS_VOLUME_DISMOUNTED"; + case 0xC000026F: return "STATUS_WX86_INTERNAL_ERROR"; + case 0xC0000270: return "STATUS_WX86_FLOAT_STACK_CHECK"; + case 0xC0000271: return "STATUS_VALIDATE_CONTINUE"; + case 0xC0000272: return "STATUS_NO_MATCH"; + case 0xC0000273: return "STATUS_NO_MORE_MATCHES"; + case 0xC0000275: return "STATUS_NOT_A_REPARSE_POINT"; + case 0xC0000276: return "STATUS_IO_REPARSE_TAG_INVALID"; + case 0xC0000277: return "STATUS_IO_REPARSE_TAG_MISMATCH"; + case 0xC0000278: return "STATUS_IO_REPARSE_DATA_INVALID"; + case 0xC0000279: return "STATUS_IO_REPARSE_TAG_NOT_HANDLED"; + case 0xC0000280: return "STATUS_REPARSE_POINT_NOT_RESOLVED"; + case 0xC0000281: return "STATUS_DIRECTORY_IS_A_REPARSE_POINT"; + case 0xC0000282: return "STATUS_RANGE_LIST_CONFLICT"; + case 0xC0000283: return "STATUS_SOURCE_ELEMENT_EMPTY"; + case 0xC0000284: return "STATUS_DESTINATION_ELEMENT_FULL"; + case 0xC0000285: return "STATUS_ILLEGAL_ELEMENT_ADDRESS"; + case 0xC0000286: return "STATUS_MAGAZINE_NOT_PRESENT"; + case 0xC0000287: return "STATUS_REINITIALIZATION_NEEDED"; + case 0x80000288: return "STATUS_DEVICE_REQUIRES_CLEANING"; + case 0x80000289: return "STATUS_DEVICE_DOOR_OPEN"; + case 0xC000028A: return "STATUS_ENCRYPTION_FAILED"; + case 0xC000028B: return "STATUS_DECRYPTION_FAILED"; + case 0xC000028C: return "STATUS_RANGE_NOT_FOUND"; + case 0xC000028D: return "STATUS_NO_RECOVERY_POLICY"; + case 0xC000028E: return "STATUS_NO_EFS"; + case 0xC000028F: return "STATUS_WRONG_EFS"; + case 0xC0000290: return "STATUS_NO_USER_KEYS"; + case 0xC0000291: return "STATUS_FILE_NOT_ENCRYPTED"; + case 0xC0000292: return "STATUS_NOT_EXPORT_FORMAT"; + case 0xC0000293: return "STATUS_FILE_ENCRYPTED"; + case 0x40000294: return "STATUS_WAKE_SYSTEM"; + case 0xC0000295: return "STATUS_WMI_GUID_NOT_FOUND"; + case 0xC0000296: return "STATUS_WMI_INSTANCE_NOT_FOUND"; + case 0xC0000297: return "STATUS_WMI_ITEMID_NOT_FOUND"; + case 0xC0000298: return "STATUS_WMI_TRY_AGAIN"; + case 0xC0000299: return "STATUS_SHARED_POLICY"; + case 0xC000029A: return "STATUS_POLICY_OBJECT_NOT_FOUND"; + case 0xC000029B: return "STATUS_POLICY_ONLY_IN_DS"; + case 0xC000029C: return "STATUS_VOLUME_NOT_UPGRADED"; + case 0xC000029D: return "STATUS_REMOTE_STORAGE_NOT_ACTIVE"; + case 0xC000029E: return "STATUS_REMOTE_STORAGE_MEDIA_ERROR"; + case 0xC000029F: return "STATUS_NO_TRACKING_SERVICE"; + case 0xC00002A0: return "STATUS_SERVER_SID_MISMATCH"; + case 0xC00002A1: return "STATUS_DS_NO_ATTRIBUTE_OR_VALUE"; + case 0xC00002A2: return "STATUS_DS_INVALID_ATTRIBUTE_SYNTAX"; + case 0xC00002A3: return "STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED"; + case 0xC00002A4: return "STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS"; + case 0xC00002A5: return "STATUS_DS_BUSY"; + case 0xC00002A6: return "STATUS_DS_UNAVAILABLE"; + case 0xC00002A7: return "STATUS_DS_NO_RIDS_ALLOCATED"; + case 0xC00002A8: return "STATUS_DS_NO_MORE_RIDS"; + case 0xC00002A9: return "STATUS_DS_INCORRECT_ROLE_OWNER"; + case 0xC00002AA: return "STATUS_DS_RIDMGR_INIT_ERROR"; + case 0xC00002AB: return "STATUS_DS_OBJ_CLASS_VIOLATION"; + case 0xC00002AC: return "STATUS_DS_CANT_ON_NON_LEAF"; + case 0xC00002AD: return "STATUS_DS_CANT_ON_RDN"; + case 0xC00002AE: return "STATUS_DS_CANT_MOD_OBJ_CLASS"; + case 0xC00002AF: return "STATUS_DS_CROSS_DOM_MOVE_FAILED"; + case 0xC00002B0: return "STATUS_DS_GC_NOT_AVAILABLE"; + case 0xC00002B1: return "STATUS_DIRECTORY_SERVICE_REQUIRED"; + case 0xC00002B2: return "STATUS_REPARSE_ATTRIBUTE_CONFLICT"; + case 0xC00002B3: return "STATUS_CANT_ENABLE_DENY_ONLY"; + case 0xC00002B4: return "STATUS_FLOAT_MULTIPLE_FAULTS"; + case 0xC00002B5: return "STATUS_FLOAT_MULTIPLE_TRAPS"; + case 0xC00002B6: return "STATUS_DEVICE_REMOVED"; + case 0xC00002B7: return "STATUS_JOURNAL_DELETE_IN_PROGRESS"; + case 0xC00002B8: return "STATUS_JOURNAL_NOT_ACTIVE"; + case 0xC00002B9: return "STATUS_NOINTERFACE"; + case 0xC00002C1: return "STATUS_DS_ADMIN_LIMIT_EXCEEDED"; + case 0xC00002C2: return "STATUS_DRIVER_FAILED_SLEEP"; + case 0xC00002C3: return "STATUS_MUTUAL_AUTHENTICATION_FAILED"; + case 0xC00002C4: return "STATUS_CORRUPT_SYSTEM_FILE"; + case 0xC00002C5: return "STATUS_DATATYPE_MISALIGNMENT_ERROR"; + case 0xC00002C6: return "STATUS_WMI_READ_ONLY"; + case 0xC00002C7: return "STATUS_WMI_SET_FAILURE"; + case 0xC00002C8: return "STATUS_COMMITMENT_MINIMUM"; + case 0xC00002C9: return "STATUS_REG_NAT_CONSUMPTION"; + case 0xC00002CA: return "STATUS_TRANSPORT_FULL"; + case 0xC00002CB: return "STATUS_DS_SAM_INIT_FAILURE"; + case 0xC00002CC: return "STATUS_ONLY_IF_CONNECTED"; + case 0xC00002CD: return "STATUS_DS_SENSITIVE_GROUP_VIOLATION"; + case 0xC00002CE: return "STATUS_PNP_RESTART_ENUMERATION"; + case 0xC00002CF: return "STATUS_JOURNAL_ENTRY_DELETED"; + case 0xC00002D0: return "STATUS_DS_CANT_MOD_PRIMARYGROUPID"; + case 0xC00002D1: return "STATUS_SYSTEM_IMAGE_BAD_SIGNATURE"; + case 0xC00002D2: return "STATUS_PNP_REBOOT_REQUIRED"; + case 0xC00002D3: return "STATUS_POWER_STATE_INVALID"; + case 0xC00002D4: return "STATUS_DS_INVALID_GROUP_TYPE"; + case 0xC00002D5: return "STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN"; + case 0xC00002D6: return "STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN"; + case 0xC00002D7: return "STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER"; + case 0xC00002D8: return "STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER"; + case 0xC00002D9: return "STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER"; + case 0xC00002DA: return "STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER"; + case 0xC00002DB: return "STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER"; + case 0xC00002DC: return "STATUS_DS_HAVE_PRIMARY_MEMBERS"; + case 0xC00002DD: return "STATUS_WMI_NOT_SUPPORTED"; + case 0xC00002DE: return "STATUS_INSUFFICIENT_POWER"; + case 0xC00002DF: return "STATUS_SAM_NEED_BOOTKEY_PASSWORD"; + case 0xC00002E0: return "STATUS_SAM_NEED_BOOTKEY_FLOPPY"; + case 0xC00002E1: return "STATUS_DS_CANT_START"; + case 0xC00002E2: return "STATUS_DS_INIT_FAILURE"; + case 0xC00002E3: return "STATUS_SAM_INIT_FAILURE"; + case 0xC00002E4: return "STATUS_DS_GC_REQUIRED"; + case 0xC00002E5: return "STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY"; + case 0xC00002E6: return "STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS"; + case 0xC00002E7: return "STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED"; + case 0xC00002E8: return "STATUS_MULTIPLE_FAULT_VIOLATION"; + case 0xC0000300: return "STATUS_NOT_SUPPORTED_ON_SBS"; + case 0xC0009898: return "STATUS_WOW_ASSERTION"; + case 0xC0010001: return "DBG_NO_STATE_CHANGE"; + case 0xC0010002: return "DBG_APP_NOT_IDLE"; + case 0xC0020001: return "RPC_NT_INVALID_STRING_BINDING"; + case 0xC0020002: return "RPC_NT_WRONG_KIND_OF_BINDING"; + case 0xC0020003: return "RPC_NT_INVALID_BINDING"; + case 0xC0020004: return "RPC_NT_PROTSEQ_NOT_SUPPORTED"; + case 0xC0020005: return "RPC_NT_INVALID_RPC_PROTSEQ"; + case 0xC0020006: return "RPC_NT_INVALID_STRING_UUID"; + case 0xC0020007: return "RPC_NT_INVALID_ENDPOINT_FORMAT"; + case 0xC0020008: return "RPC_NT_INVALID_NET_ADDR"; + case 0xC0020009: return "RPC_NT_NO_ENDPOINT_FOUND"; + case 0xC002000A: return "RPC_NT_INVALID_TIMEOUT"; + case 0xC002000B: return "RPC_NT_OBJECT_NOT_FOUND"; + case 0xC002000C: return "RPC_NT_ALREADY_REGISTERED"; + case 0xC002000D: return "RPC_NT_TYPE_ALREADY_REGISTERED"; + case 0xC002000E: return "RPC_NT_ALREADY_LISTENING"; + case 0xC002000F: return "RPC_NT_NO_PROTSEQS_REGISTERED"; + case 0xC0020010: return "RPC_NT_NOT_LISTENING"; + case 0xC0020011: return "RPC_NT_UNKNOWN_MGR_TYPE"; + case 0xC0020012: return "RPC_NT_UNKNOWN_IF"; + case 0xC0020013: return "RPC_NT_NO_BINDINGS"; + case 0xC0020014: return "RPC_NT_NO_PROTSEQS"; + case 0xC0020015: return "RPC_NT_CANT_CREATE_ENDPOINT"; + case 0xC0020016: return "RPC_NT_OUT_OF_RESOURCES"; + case 0xC0020017: return "RPC_NT_SERVER_UNAVAILABLE"; + case 0xC0020018: return "RPC_NT_SERVER_TOO_BUSY"; + case 0xC0020019: return "RPC_NT_INVALID_NETWORK_OPTIONS"; + case 0xC002001A: return "RPC_NT_NO_CALL_ACTIVE"; + case 0xC002001B: return "RPC_NT_CALL_FAILED"; + case 0xC002001C: return "RPC_NT_CALL_FAILED_DNE"; + case 0xC002001D: return "RPC_NT_PROTOCOL_ERROR"; + case 0xC002001F: return "RPC_NT_UNSUPPORTED_TRANS_SYN"; + case 0xC0020021: return "RPC_NT_UNSUPPORTED_TYPE"; + case 0xC0020022: return "RPC_NT_INVALID_TAG"; + case 0xC0020023: return "RPC_NT_INVALID_BOUND"; + case 0xC0020024: return "RPC_NT_NO_ENTRY_NAME"; + case 0xC0020025: return "RPC_NT_INVALID_NAME_SYNTAX"; + case 0xC0020026: return "RPC_NT_UNSUPPORTED_NAME_SYNTAX"; + case 0xC0020028: return "RPC_NT_UUID_NO_ADDRESS"; + case 0xC0020029: return "RPC_NT_DUPLICATE_ENDPOINT"; + case 0xC002002A: return "RPC_NT_UNKNOWN_AUTHN_TYPE"; + case 0xC002002B: return "RPC_NT_MAX_CALLS_TOO_SMALL"; + case 0xC002002C: return "RPC_NT_STRING_TOO_LONG"; + case 0xC002002D: return "RPC_NT_PROTSEQ_NOT_FOUND"; + case 0xC002002E: return "RPC_NT_PROCNUM_OUT_OF_RANGE"; + case 0xC002002F: return "RPC_NT_BINDING_HAS_NO_AUTH"; + case 0xC0020030: return "RPC_NT_UNKNOWN_AUTHN_SERVICE"; + case 0xC0020031: return "RPC_NT_UNKNOWN_AUTHN_LEVEL"; + case 0xC0020032: return "RPC_NT_INVALID_AUTH_IDENTITY"; + case 0xC0020033: return "RPC_NT_UNKNOWN_AUTHZ_SERVICE"; + case 0xC0020034: return "EPT_NT_INVALID_ENTRY"; + case 0xC0020035: return "EPT_NT_CANT_PERFORM_OP"; + case 0xC0020036: return "EPT_NT_NOT_REGISTERED"; + case 0xC0020037: return "RPC_NT_NOTHING_TO_EXPORT"; + case 0xC0020038: return "RPC_NT_INCOMPLETE_NAME"; + case 0xC0020039: return "RPC_NT_INVALID_VERS_OPTION"; + case 0xC002003A: return "RPC_NT_NO_MORE_MEMBERS"; + case 0xC002003B: return "RPC_NT_NOT_ALL_OBJS_UNEXPORTED"; + case 0xC002003C: return "RPC_NT_INTERFACE_NOT_FOUND"; + case 0xC002003D: return "RPC_NT_ENTRY_ALREADY_EXISTS"; + case 0xC002003E: return "RPC_NT_ENTRY_NOT_FOUND"; + case 0xC002003F: return "RPC_NT_NAME_SERVICE_UNAVAILABLE"; + case 0xC0020040: return "RPC_NT_INVALID_NAF_ID"; + case 0xC0020041: return "RPC_NT_CANNOT_SUPPORT"; + case 0xC0020042: return "RPC_NT_NO_CONTEXT_AVAILABLE"; + case 0xC0020043: return "RPC_NT_INTERNAL_ERROR"; + case 0xC0020044: return "RPC_NT_ZERO_DIVIDE"; + case 0xC0020045: return "RPC_NT_ADDRESS_ERROR"; + case 0xC0020046: return "RPC_NT_FP_DIV_ZERO"; + case 0xC0020047: return "RPC_NT_FP_UNDERFLOW"; + case 0xC0020048: return "RPC_NT_FP_OVERFLOW"; + case 0xC0030001: return "RPC_NT_NO_MORE_ENTRIES"; + case 0xC0030002: return "RPC_NT_SS_CHAR_TRANS_OPEN_FAIL"; + case 0xC0030003: return "RPC_NT_SS_CHAR_TRANS_SHORT_FILE"; + case 0xC0030004: return "RPC_NT_SS_IN_NULL_CONTEXT"; + case 0xC0030005: return "RPC_NT_SS_CONTEXT_MISMATCH"; + case 0xC0030006: return "RPC_NT_SS_CONTEXT_DAMAGED"; + case 0xC0030007: return "RPC_NT_SS_HANDLES_MISMATCH"; + case 0xC0030008: return "RPC_NT_SS_CANNOT_GET_CALL_HANDLE"; + case 0xC0030009: return "RPC_NT_NULL_REF_POINTER"; + case 0xC003000A: return "RPC_NT_ENUM_VALUE_OUT_OF_RANGE"; + case 0xC003000B: return "RPC_NT_BYTE_COUNT_TOO_SMALL"; + case 0xC003000C: return "RPC_NT_BAD_STUB_DATA"; + case 0xC0020049: return "RPC_NT_CALL_IN_PROGRESS"; + case 0xC002004A: return "RPC_NT_NO_MORE_BINDINGS"; + case 0xC002004B: return "RPC_NT_GROUP_MEMBER_NOT_FOUND"; + case 0xC002004C: return "EPT_NT_CANT_CREATE"; + case 0xC002004D: return "RPC_NT_INVALID_OBJECT"; + case 0xC002004F: return "RPC_NT_NO_INTERFACES"; + case 0xC0020050: return "RPC_NT_CALL_CANCELLED"; + case 0xC0020051: return "RPC_NT_BINDING_INCOMPLETE"; + case 0xC0020052: return "RPC_NT_COMM_FAILURE"; + case 0xC0020053: return "RPC_NT_UNSUPPORTED_AUTHN_LEVEL"; + case 0xC0020054: return "RPC_NT_NO_PRINC_NAME"; + case 0xC0020055: return "RPC_NT_NOT_RPC_ERROR"; + case 0x40020056: return "RPC_NT_UUID_LOCAL_ONLY"; + case 0xC0020057: return "RPC_NT_SEC_PKG_ERROR"; + case 0xC0020058: return "RPC_NT_NOT_CANCELLED"; + case 0xC0030059: return "RPC_NT_INVALID_ES_ACTION"; + case 0xC003005A: return "RPC_NT_WRONG_ES_VERSION"; + case 0xC003005B: return "RPC_NT_WRONG_STUB_VERSION"; + case 0xC003005C: return "RPC_NT_INVALID_PIPE_OBJECT"; + case 0xC003005D: return "RPC_NT_INVALID_PIPE_OPERATION"; + case 0xC003005E: return "RPC_NT_WRONG_PIPE_VERSION"; + case 0xC003005F: return "RPC_NT_PIPE_CLOSED"; + case 0xC0030060: return "RPC_NT_PIPE_DISCIPLINE_ERROR"; + case 0xC0030061: return "RPC_NT_PIPE_EMPTY"; + case 0xC0020062: return "RPC_NT_INVALID_ASYNC_HANDLE"; + case 0xC0020063: return "RPC_NT_INVALID_ASYNC_CALL"; + case 0x400200AF: return "RPC_NT_SEND_INCOMPLETE"; + case 0xC0140001: return "STATUS_ACPI_INVALID_OPCODE"; + case 0xC0140002: return "STATUS_ACPI_STACK_OVERFLOW"; + case 0xC0140003: return "STATUS_ACPI_ASSERT_FAILED"; + case 0xC0140004: return "STATUS_ACPI_INVALID_INDEX"; + case 0xC0140005: return "STATUS_ACPI_INVALID_ARGUMENT"; + case 0xC0140006: return "STATUS_ACPI_FATAL"; + case 0xC0140007: return "STATUS_ACPI_INVALID_SUPERNAME"; + case 0xC0140008: return "STATUS_ACPI_INVALID_ARGTYPE"; + case 0xC0140009: return "STATUS_ACPI_INVALID_OBJTYPE"; + case 0xC014000A: return "STATUS_ACPI_INVALID_TARGETTYPE"; + case 0xC014000B: return "STATUS_ACPI_INCORRECT_ARGUMENT_COUNT"; + case 0xC014000C: return "STATUS_ACPI_ADDRESS_NOT_MAPPED"; + case 0xC014000D: return "STATUS_ACPI_INVALID_EVENTTYPE"; + case 0xC014000E: return "STATUS_ACPI_HANDLER_COLLISION"; + case 0xC014000F: return "STATUS_ACPI_INVALID_DATA"; + case 0xC0140010: return "STATUS_ACPI_INVALID_REGION"; + case 0xC0140011: return "STATUS_ACPI_INVALID_ACCESS_SIZE"; + case 0xC0140012: return "STATUS_ACPI_ACQUIRE_GLOBAL_LOCK"; + case 0xC0140013: return "STATUS_ACPI_ALREADY_INITIALIZED"; + case 0xC0140014: return "STATUS_ACPI_NOT_INITIALIZED"; + case 0xC0140015: return "STATUS_ACPI_INVALID_MUTEX_LEVEL"; + case 0xC0140016: return "STATUS_ACPI_MUTEX_NOT_OWNED"; + case 0xC0140017: return "STATUS_ACPI_MUTEX_NOT_OWNER"; + case 0xC0140018: return "STATUS_ACPI_RS_ACCESS"; + case 0xC0140019: return "STATUS_ACPI_INVALID_TABLE"; + case 0xC0140020: return "STATUS_ACPI_REG_HANDLER_FAILED"; + case 0xC0140021: return "STATUS_ACPI_POWER_REQUEST_FAILED"; + case 0xC00A0001: return "STATUS_CTX_WINSTATION_NAME_INVALID"; + case 0xC00A0002: return "STATUS_CTX_INVALID_PD"; + case 0xC00A0003: return "STATUS_CTX_PD_NOT_FOUND"; + case 0x400A0004: return "STATUS_CTX_CDM_CONNECT"; + case 0x400A0005: return "STATUS_CTX_CDM_DISCONNECT"; + case 0xC00A0006: return "STATUS_CTX_CLOSE_PENDING"; + case 0xC00A0007: return "STATUS_CTX_NO_OUTBUF"; + case 0xC00A0008: return "STATUS_CTX_MODEM_INF_NOT_FOUND"; + case 0xC00A0009: return "STATUS_CTX_INVALID_MODEMNAME"; + case 0xC00A000A: return "STATUS_CTX_RESPONSE_ERROR"; + case 0xC00A000B: return "STATUS_CTX_MODEM_RESPONSE_TIMEOUT"; + case 0xC00A000C: return "STATUS_CTX_MODEM_RESPONSE_NO_CARRIER"; + case 0xC00A000D: return "STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE"; + case 0xC00A000E: return "STATUS_CTX_MODEM_RESPONSE_BUSY"; + case 0xC00A000F: return "STATUS_CTX_MODEM_RESPONSE_VOICE"; + case 0xC00A0010: return "STATUS_CTX_TD_ERROR"; + case 0xC00A0012: return "STATUS_CTX_LICENSE_CLIENT_INVALID"; + case 0xC00A0013: return "STATUS_CTX_LICENSE_NOT_AVAILABLE"; + case 0xC00A0014: return "STATUS_CTX_LICENSE_EXPIRED"; + case 0xC00A0015: return "STATUS_CTX_WINSTATION_NOT_FOUND"; + case 0xC00A0016: return "STATUS_CTX_WINSTATION_NAME_COLLISION"; + case 0xC00A0017: return "STATUS_CTX_WINSTATION_BUSY"; + case 0xC00A0018: return "STATUS_CTX_BAD_VIDEO_MODE"; + case 0xC00A0022: return "STATUS_CTX_GRAPHICS_INVALID"; + case 0xC00A0024: return "STATUS_CTX_NOT_CONSOLE"; + case 0xC00A0026: return "STATUS_CTX_CLIENT_QUERY_TIMEOUT"; + case 0xC00A0027: return "STATUS_CTX_CONSOLE_DISCONNECT"; + case 0xC00A0028: return "STATUS_CTX_CONSOLE_CONNECT"; + case 0xC00A002A: return "STATUS_CTX_SHADOW_DENIED"; + case 0xC00A002B: return "STATUS_CTX_WINSTATION_ACCESS_DENIED"; + case 0xC00A002E: return "STATUS_CTX_INVALID_WD"; + case 0xC00A002F: return "STATUS_CTX_WD_NOT_FOUND"; + case 0xC00A0030: return "STATUS_CTX_SHADOW_INVALID"; + case 0xC00A0031: return "STATUS_CTX_SHADOW_DISABLED"; + case 0xC00A0032: return "STATUS_RDP_PROTOCOL_ERROR"; + case 0xC00A0033: return "STATUS_CTX_CLIENT_LICENSE_NOT_SET"; + case 0xC00A0034: return "STATUS_CTX_CLIENT_LICENSE_IN_USE"; + case 0xC0040035: return "STATUS_PNP_BAD_MPS_TABLE"; + case 0xC0040036: return "STATUS_PNP_TRANSLATION_FAILED"; + case 0xC0040037: return "STATUS_PNP_IRQ_TRANSLATION_FAILED"; + default: return "STATUS_UNKNOWN"; + } +} + // PsCreateSystemThread proxy procedure #pragma warning(push) #pragma warning(disable: 4731) // disable ebp modification warning @@ -2440,7 +3367,7 @@ XBSYSAPI EXPORTNUM(219) xboxkrnl::NTSTATUS NTAPI xboxkrnl::NtReadFile NTSTATUS ret = NtDll::NtReadFile(FileHandle, Event, ApcRoutine, ApcContext, IoStatusBlock, Buffer, Length, (NtDll::LARGE_INTEGER*)ByteOffset, 0); if(FAILED(ret)) - EmuWarning("NtReadFile Failed!"); + EmuWarning("NtReadFile Failed! (0x%.08X)", ret); EmuSwapFS(); // Xbox FS diff --git a/src/CxbxKrnl/EmuXapi.cpp b/src/CxbxKrnl/EmuXapi.cpp index fabbee9dc..407a951f8 100644 --- a/src/CxbxKrnl/EmuXapi.cpp +++ b/src/CxbxKrnl/EmuXapi.cpp @@ -2782,7 +2782,7 @@ DWORD WINAPI XTL::EmuXMountMURootA PCHAR pchDrive ) { - { + EmuSwapFS(); // Win2k/XP FS DbgPrintf("EmuXapi (0x%X): EmuXMountMURootA\n" @@ -2799,4 +2799,71 @@ DWORD WINAPI XTL::EmuXMountMURootA return ERROR_SUCCESS; } -} \ No newline at end of file + +// ****************************************************************** +// * func: EmuReadFileEx +// ****************************************************************** +BOOL WINAPI XTL::EmuReadFileEx +( + HANDLE hFile, // handle to file + LPVOID lpBuffer, // data buffer + DWORD nNumberOfBytesToRead, // number of bytes to read + LPOVERLAPPED lpOverlapped, // offset + LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine // completion routine +) +{ + EmuSwapFS(); // Win2k/XP FS + + DbgPrintf("EmuXapi (0x%X): EmuReadFileEx\n" + "(\n" + " hFile : 0x%.08X\n" + " lpBuffer : 0x%.08X\n" + " nNumberOfBytesToRead : 0x%.08X\n" + " lpOverlapped : 0x%.08X\n" + " lpCompletionRoutine : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), hFile, lpBuffer, nNumberOfBytesToRead, + lpOverlapped, lpCompletionRoutine); + + BOOL bRet = ReadFileEx( hFile, lpBuffer, nNumberOfBytesToRead, lpOverlapped, lpCompletionRoutine ); + if(!bRet) + printf("ReadFilEx failed!"); + + EmuSwapFS(); + + return bRet; +} + +// ****************************************************************** +// * func: EmuWriteFileEx +// ****************************************************************** +BOOL WINAPI XTL::EmuWriteFileEx +( + HANDLE hFile, // handle to output file + LPCVOID lpBuffer, // data buffer + DWORD nNumberOfBytesToWrite, // number of bytes to write + LPOVERLAPPED lpOverlapped, // overlapped buffer + LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine // completion routine +) +{ + EmuSwapFS(); // Win2k/XP FS + + printf("EmuXapi (0x%X): EmuWriteFileEx\n" + "(\n" + " hFile : 0x%.08X\n" + " lpBuffer : 0x%.08X\n" + " nNumberOfBytesToWrite: 0x%.08X\n" + " lpOverlapped : 0x%.08X\n" + " lpCompletionRoutine : 0x%.08X\n" + ");\n", + GetCurrentThreadId(), hFile, lpBuffer, nNumberOfBytesToWrite, + lpOverlapped, lpCompletionRoutine); + + BOOL bRet = WriteFileEx( hFile, lpBuffer, nNumberOfBytesToWrite, lpOverlapped, lpCompletionRoutine );; + if(!bRet) + printf("WriteFilEx failed!"); + + EmuSwapFS(); + + return bRet; +} diff --git a/src/CxbxKrnl/EmuXapi.h b/src/CxbxKrnl/EmuXapi.h index 6ecdd215f..3ae8094db 100644 --- a/src/CxbxKrnl/EmuXapi.h +++ b/src/CxbxKrnl/EmuXapi.h @@ -992,6 +992,30 @@ DWORD WINAPI EmuXInputGetDeviceDescription // ****************************************************************** int WINAPI EmuXAutoPowerDownResetTimer(); +// ****************************************************************** +// * func: EmuReadFileEx +// ****************************************************************** +BOOL WINAPI EmuReadFileEx +( + HANDLE hFile, // handle to file + LPVOID lpBuffer, // data buffer + DWORD nNumberOfBytesToRead, // number of bytes to read + LPOVERLAPPED lpOverlapped, // offset + LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine // completion routine +); + +// ****************************************************************** +// * func: EmuWriteFileEx +// ****************************************************************** +BOOL WINAPI EmuWriteFileEx +( + HANDLE hFile, // handle to output file + LPCVOID lpBuffer, // data buffer + DWORD nNumberOfBytesToWrite, // number of bytes to write + LPOVERLAPPED lpOverlapped, // overlapped buffer + LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine // completion routine +); + // s+ /* not necessary? // ****************************************************************** diff --git a/src/CxbxKrnl/HLEDataBase.cpp b/src/CxbxKrnl/HLEDataBase.cpp index 5aa91a860..e74e7a8bd 100644 --- a/src/CxbxKrnl/HLEDataBase.cpp +++ b/src/CxbxKrnl/HLEDataBase.cpp @@ -574,6 +574,7 @@ extern uint32 XRefDataBase[] = -1, // XREF_DirectSound_CDirectSoundBuffer_SetEG -1, // XREF_DirectSound_CDirectSound_GetEffectData -1, // XREF_CDirectSoundBuffer_SetNotificationPositions + -1, // XREF_DirectSound_CMcpxBuffer_Play2 // XACT -1, // XREF_XACT_CEngine_RegisterWaveBank -1, // XREF_XACT_CEngine_RegisterStreamedWaveBank diff --git a/src/CxbxKrnl/HLEDataBase.h b/src/CxbxKrnl/HLEDataBase.h index b573d4487..363c75c8e 100644 --- a/src/CxbxKrnl/HLEDataBase.h +++ b/src/CxbxKrnl/HLEDataBase.h @@ -309,6 +309,7 @@ enum XRefDataBaseOffset XREF_DirectSound_CDirectSoundBuffer_SetEG, XREF_DirectSound_CDirectSound_GetEffectData, XREF_CDirectSoundBuffer_SetNotificationPositions, + XREF_DirectSound_CMcpxBuffer_Play2, // XACT // +s XREF_XACT_CEngine_RegisterWaveBank, diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.inl index 42523a52f..e0790fa0d 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.inl @@ -574,6 +574,36 @@ SOOVPA<10> Get2DSurfaceDesc_1_0_5233 = } }; +// ****************************************************************** +// * Get2DSurfaceDesc +// ****************************************************************** +SOOVPA<10> Get2DSurfaceDesc_1_0_5344 = +{ + 0, // Large == 0 + 10, // Count == 10 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // Get2DSurfaceDesc+0x2B : movzx edx, byte ptr [edi+0x0D] + { 0x2B, 0x0F }, // (Offset,Value)-Pair #1 + { 0x2C, 0xB6 }, // (Offset,Value)-Pair #2 + { 0x2D, 0x57 }, // (Offset,Value)-Pair #3 + { 0x2E, 0x0D }, // (Offset,Value)-Pair #4 + + // Get2DSurfaceDesc+0x52 : mov edx, [eax+0x15F4] + { 0x52, 0x8B }, // (Offset,Value)-Pair #5 + { 0x53, 0x90 }, // (Offset,Value)-Pair #6 + { 0x54, 0xF4 }, // (Offset,Value)-Pair #7 + { 0x55, 0x15 }, // (Offset,Value)-Pair #8 + + // Get2DSurfaceDesc+0xAE : retn 0x0C + { 0xAE, 0xC2 }, // (Offset,Value)-Pair #9 + { 0xAF, 0x0C }, // (Offset,Value)-Pair #10 + } +}; + // ****************************************************************** // * IDirect3DDevice8_GetBackBuffer2 // ****************************************************************** @@ -1823,6 +1853,187 @@ SOOVPA<8> D3DDevice_SetTransform_1_0_5344 = } }; +// ****************************************************************** +// * D3DDevice_GetBackBuffer2 +// ****************************************************************** +SOOVPA<7> D3DDevice_GetBackBuffer2_1_0_5344 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x07, 0x8B }, + { 0x10, 0x01 }, + { 0x19, 0x15 }, + { 0x22, 0x8B }, + { 0x2B, 0xC0 }, + { 0x34, 0x15 }, + { 0x3D, 0x8B }, + } +}; + + +// ****************************************************************** +// * D3DDevice_SetVerticalBlankCallback +// ****************************************************************** +SOOVPA<7> D3DDevice_SetVerticalBlankCallback_1_0_5344 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x01, 0x44 }, + { 0x04, 0x8B }, + { 0x0A, 0x89 }, + { 0x0B, 0x81 }, + { 0x0C, 0x88 }, + { 0x0D, 0x19 }, + { 0x10, 0xC2 }, + } +}; + +// ****************************************************************** +// * D3DDevice_SetSwapCallback +// ****************************************************************** +SOOVPA<7> D3DDevice_SetSwapCallback_1_0_5344 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x01, 0x44 }, + { 0x04, 0x8B }, + { 0x0A, 0x89 }, + { 0x0B, 0x81 }, + { 0x0C, 0x84 }, + { 0x0D, 0x19 }, + { 0x10, 0xC2 }, + } +}; + +// ****************************************************************** +// * D3DDevice_GetViewport +// ****************************************************************** +SOOVPA<7> D3DDevice_GetViewport_1_0_5344 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x05, 0x56 }, + { 0x06, 0x57 }, + { 0x0A, 0x0C }, + { 0x0E, 0x0A }, + { 0x12, 0x06 }, + { 0x16, 0xF3 }, + { 0x1A, 0xC2 }, + } +}; + +// ****************************************************************** +// * D3DDevice_SetRenderTargetFast +// ****************************************************************** +SOOVPA<8> D3DDevice_SetRenderTargetFast_1_0_5344 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x1D, 0xC9 }, + { 0x3C, 0x89 }, + { 0x5F, 0x8B }, + { 0x7A, 0x04 }, + { 0x99, 0x04 }, + { 0xB8, 0x02 }, + { 0xD7, 0x0C }, + { 0xF6, 0xC5 }, + } +}; + +// ****************************************************************** +// * D3DDevice_SetScreenSpaceOffset +// ****************************************************************** +SOOVPA<7> D3DDevice_SetScreenSpaceOffset_1_0_5344 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x08, 0x44 }, + { 0x12, 0xCE }, + { 0x1F, 0xD8 }, + { 0x26, 0x0A }, + { 0x30, 0x3B }, + { 0x3A, 0x8B }, + { 0x44, 0x06 }, + } +}; + +// ****************************************************************** +// * D3DDevice_SetScissors +// ****************************************************************** +SOOVPA<8> D3DDevice_SetScissors_1_0_5344 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x1D, 0x44 }, + { 0x3C, 0x8B }, + { 0x5D, 0xD9 }, + { 0x7D, 0xD8 }, + { 0x99, 0x0A }, + { 0xB8, 0xE8 }, + { 0xD7, 0x24 }, + { 0xF6, 0x8B }, + } +}; + +// ****************************************************************** +// * D3DDevice_SetMaterial +// ****************************************************************** +SOOVPA<9> D3DDevice_SetMaterial_1_0_5344 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x04, 0x08 }, + { 0x0C, 0x81 }, + { 0x0E, 0xE0 }, + { 0x10, 0x00 }, + { 0x16, 0x00 }, + { 0x1F, 0x81 }, + { 0x22, 0x90 }, + { 0x2C, 0x5E }, + { 0x2E, 0x04 }, + } +}; + // ****************************************************************** // * D3D8_1_0_5233 // ****************************************************************** @@ -2595,6 +2806,16 @@ OOVPATable D3D8_1_0_5233[] = #ifdef _DEBUG_TRACE "EmuIDirect3DDevice8_SetMaterial" #endif + }, + // IDirect3DDevice8::SetMaterial + { + (OOVPA*)&D3DDevice_SetMaterial_1_0_5344, + + XTL::EmuIDirect3DDevice8_SetMaterial, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetMaterial (5344)" + #endif }, // IDirect3DVertexBuffer8::GetDesc { @@ -2755,6 +2976,16 @@ OOVPATable D3D8_1_0_5233[] = #ifdef _DEBUG_TRACE "EmuGet2DSurfaceDesc" #endif + }, + // Get2DSurfaceDesc + { + (OOVPA*)&Get2DSurfaceDesc_1_0_5344, + + XTL::EmuGet2DSurfaceDesc, + + #ifdef _DEBUG_TRACE + "EmuGet2DSurfaceDesc (5344)" + #endif }, // IDirect3DSurface8::GetDesc (* unchanged since 4361 *) { @@ -3142,6 +3373,86 @@ OOVPATable D3D8_1_0_5233[] = "EmuIDirect3DDevice8_SetTransform_5344" #endif }, + // IDirect3DDevice8::GetBackBuffer2 + { + (OOVPA*)&D3DDevice_GetBackBuffer2_1_0_5344, + + XTL::EmuIDirect3DDevice8_GetBackBuffer2, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_GetBackBuffer2 (5344)" + #endif + }, + // IDirect3DDevice8::SetVerticalBlankCallback + { + (OOVPA*)&D3DDevice_SetVerticalBlankCallback_1_0_5344, + + XTL::EmuIDirect3DDevice8_SetVerticalBlankCallback, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetVerticalBlankCallback (5344)" + #endif + }, + // IDirect3DDevice8::SetVerticalBlankCallback + { + (OOVPA*)&D3DDevice_SetSwapCallback_1_0_5344, + + XTL::EmuIDirect3DDevice8_SetSwapCallback, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetSwapCallback (5344)" + #endif + }, + // IDirect3DDevice8::GetViewport + { + (OOVPA*)&D3DDevice_GetViewport_1_0_5344, + + XTL::EmuIDirect3DDevice8_GetViewport, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_GetViewport (5344)" + #endif + }, + // IDirect3DDevice8::SetRenderTargetFast + { + (OOVPA*)&D3DDevice_SetRenderTargetFast_1_0_5344, + + XTL::EmuIDirect3DDevice8_SetRenderTargetFast, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderTargetFast (5344)" + #endif + }, + // IDirect3DDevice8::SetScreenSpaceOffset + { + (OOVPA*)&D3DDevice_SetScreenSpaceOffset_1_0_5344, + + XTL::EmuIDirect3DDevice8_SetScreenSpaceOffset, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetScreenSpaceOffset (5344)" + #endif + }, + // IDirect3DDevice8::SetScissors + { + (OOVPA*)&D3DDevice_SetScissors_1_0_5344, + + XTL::EmuIDirect3DDevice8_SetScissors, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetScissors (5344)" + #endif + }, + // IDirect3DCubeTexture8::GetCubeMapSurface2 (* Unchanged since 4627 *) + { + (OOVPA*)&D3DCubeTexture_GetCubeMapSurface2_1_0_4627, + + XTL::EmuIDirect3DCubeTexture8_GetCubeMapSurface2, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DCubeTexture8_GetCubeMapSurface2" + #endif + }, }; // ****************************************************************** diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl index 88d679537..5c484d506 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl @@ -201,6 +201,41 @@ SOOVPA<11> IDirect3DDevice8_SetVertexShaderConstant1_1_0_5558 = } }; +// ****************************************************************** +// * IDirect3DDevice8_SetVertexShaderConstant1Fast +// ****************************************************************** +SOOVPA<11> IDirect3DDevice8_SetVertexShaderConstant1Fast_1_0_5558 = +{ + 0, // Large == 0 + 11, // Count == 11 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // IDirect3DDevice8_SetVertexShaderConstant1Fast+0x05 : add eax, 0x1C + { 0x05, 0x83 }, // (Offset,Value)-Pair #1 + { 0x06, 0xC0 }, // (Offset,Value)-Pair #2 + { 0x07, 0x1C }, // (Offset,Value)-Pair #3 + + // IDirect3DDevice8_SetVertexShaderConstant1Fast+0x0E : jnb +0x2E + { 0x0E, 0x73 }, // (Offset,Value)-Pair #4 + { 0x0F, 0x2E }, // (Offset,Value)-Pair #5 + + // IDirect3DDevice8_SetVertexShaderConstant1Fast+0x28 : mov [eax-0x10], ecx + { 0x28, 0x89 }, // (Offset,Value)-Pair #6 + { 0x29, 0x48 }, // (Offset,Value)-Pair #7 + { 0x2A, 0xF0 }, // (Offset,Value)-Pair #8 + + // IDirect3DDevice8_SetVertexShaderConstant1Fast+0x3D : retn + { 0x3D, 0xC3 }, // (Offset,Value)-Pair #9 + + // IDirect3DDevice8_SetVertexShaderConstant1Fast+0x47 : jmp +0xB7 + { 0x47, 0xEB }, // (Offset,Value)-Pair #10 + { 0x48, 0xB7 }, // (Offset,Value)-Pair #11 + } +}; + // ****************************************************************** // * IDirect3DDevice8_SetViewport // ****************************************************************** @@ -1921,6 +1956,192 @@ SOOVPA<8> D3DDevice_SetVertexData2f_1_0_5558 = } }; +// ****************************************************************** +// * D3DDevice_LoadVertexShaderProgram +// ****************************************************************** +SOOVPA<7> D3DDevice_LoadVertexShaderProgram_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x0B, 0x2D }, + { 0x18, 0x10 }, + { 0x25, 0xE0 }, + { 0x32, 0x5F }, + { 0x3F, 0x24 }, + { 0x4C, 0x83 }, + { 0x5C, 0x89 }, + } +}; + +// ****************************************************************** +// * D3DDevice_SetPixelShaderProgram +// ****************************************************************** +SOOVPA<7> D3DDevice_SetPixelShaderProgram_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x06, 0xA1 }, + { 0x0E, 0x88 }, + { 0x16, 0x00 }, + { 0x1E, 0x00 }, + { 0x26, 0x09 }, + { 0x32, 0xC7 }, + { 0x36, 0x00 }, + } +}; + +// ****************************************************************** +// * D3DDevice_SetRenderState_MultiSampleMode +// ****************************************************************** +SOOVPA<9> D3DDevice_SetRenderState_MultiSampleMode_1_0_5558 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x03, 0x04 }, + { 0x0A, 0xA3 }, + { 0x0F, 0x8B }, + { 0x12, 0x19 }, + { 0x17, 0x04 }, + { 0x1B, 0x75 }, + { 0x1C, 0x07 }, + { 0x24, 0xC2 }, + { 0x26, 0x00 }, + } +}; + +// ****************************************************************** +// * D3DDevice_SetRenderState_MultiSampleMode +// ****************************************************************** +SOOVPA<9> D3DDevice_SetRenderState_MultiSampleMode_1_0_5455 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x03, 0x04 }, + { 0x0A, 0xA3 }, + { 0x0F, 0x8B }, + { 0x12, 0x15 }, + { 0x17, 0xF4 }, + { 0x1B, 0x75 }, + { 0x1C, 0x07 }, + { 0x24, 0xC2 }, + { 0x26, 0x00 }, + } +}; + + +// ****************************************************************** +// * D3DDevice_SetRenderState_MultiSampleRenderTargetMode +// ****************************************************************** +SOOVPA<9> D3DDevice_SetRenderState_MultiSampleRenderTargetMode_1_0_5455 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x03, 0x04 }, + { 0x0A, 0xA3 }, + { 0x0F, 0x8B }, + { 0x12, 0x15 }, + { 0x17, 0xF4 }, + { 0x1B, 0x74 }, + { 0x1C, 0x07 }, + { 0x24, 0xC2 }, + { 0x26, 0x00 }, + } +}; + +// ****************************************************************** +// * D3DDevice_SetRenderState_MultiSampleRenderTargetMode +// ****************************************************************** +SOOVPA<9> D3DDevice_SetRenderState_MultiSampleRenderTargetMode_1_0_5558 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x03, 0x04 }, + { 0x0A, 0xA3 }, + { 0x0F, 0x8B }, + { 0x12, 0x19 }, + { 0x17, 0x04 }, + { 0x1B, 0x74 }, + { 0x1C, 0x07 }, + { 0x24, 0xC2 }, + { 0x26, 0x00 }, + } +}; + +// ****************************************************************** +// * D3DDevice_SetRenderState_Dxt1NoiseEnable +// ****************************************************************** +SOOVPA<8> D3DDevice_SetRenderState_Dxt1NoiseEnable_1_0_5558 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x0D, 0x8B }, + { 0x1D, 0x80 }, + { 0x2B, 0x08 }, + { 0x3A, 0x01 }, + { 0x49, 0xC7 }, + { 0x58, 0x05 }, + { 0x67, 0xC0 }, + { 0x76, 0x00 }, + } +}; + +// ****************************************************************** +// * D3DDevice_IsFencePending +// ****************************************************************** +SOOVPA<7> D3DDevice_IsFencePending_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x05, 0x8B }, + { 0x06, 0x48 }, + { 0x0A, 0x2C }, + { 0x0E, 0xD0 }, + { 0x12, 0x44 }, + { 0x16, 0xC2 }, + { 0x1A, 0xD8 }, + } +}; + // ****************************************************************** // * D3D8_1_0_5558 // ****************************************************************** @@ -2033,6 +2254,16 @@ OOVPATable D3D8_1_0_5558[] = #ifdef _DEBUG_TRACE "EmuIDirect3DDevice8_SetVertexShaderConstant1" #endif + }, + // IDirect3DDevice8::SetVertexShaderConstant1Fast + { + (OOVPA*)&IDirect3DDevice8_SetVertexShaderConstant1Fast_1_0_5558, + + XTL::EmuIDirect3DDevice8_SetVertexShaderConstant1, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetVertexShaderConstant1Fast" + #endif }, // IDirect3DDevice8::SetVertexShaderConstantNotInline (* unchanged since 5233 *) { @@ -3288,6 +3519,145 @@ OOVPATable D3D8_1_0_5558[] = "EmuIDirect3DDevice8_SetRenderState_DoNotCullUncompressed" #endif }, + // D3DDevice_LoadVertexShaderProgram + { + (OOVPA*)&D3DDevice_LoadVertexShaderProgram_1_0_5558, + + XTL::EmuIDirect3DDevice8_LoadVertexShaderProgram, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_LoadVertexShaderProgram" + #endif + }, + // D3DDevice_SetPixelShaderProgram + { + (OOVPA*)&D3DDevice_SetPixelShaderProgram_1_0_5558, + XTL::EmuIDirect3DDevice8_SetPixelShaderProgram, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetPixelShaderProgram" + #endif + }, + // IDirect3DDevice8::SetRenderState_BackFillMode (* unchanged since 4134 *) + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_BackFillMode_1_0_4134, + + XTL::EmuIDirect3DDevice8_SetRenderState_BackFillMode, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_BackFillMode" + #endif + }, + // IDirect3DDevice8::SetRenderState_TextureFactor (* unchanged since 5233 *) + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_TextureFactor_1_0_5233, + + XTL::EmuIDirect3DDevice8_SetRenderState_TextureFactor, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_TextureFactor" + #endif + }, + // D3DDevice_SetRenderState_MultiSampleMask (* unchanged since 5233 *) + { + (OOVPA*)&D3DDevice_SetRenderState_MultiSampleMask_1_0_5233, + + XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleMask, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_MultiSampleMask" + #endif + }, + // IDirect3DDevice8::SetRenderState_MultiSampleMode + { + (OOVPA*)&D3DDevice_SetRenderState_MultiSampleMode_1_0_5558, + + XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleMode, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_MultiSampleMode" + #endif + }, + // IDirect3DDevice8::SetRenderState_MultiSampleMode + { + (OOVPA*)&D3DDevice_SetRenderState_MultiSampleMode_1_0_5455, + + XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleMode, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_MultiSampleMode (5455)" + #endif + }, + // IDirect3DDevice8::SetRenderState_MultiSampleRenderTargetMode + { + (OOVPA*)&D3DDevice_SetRenderState_MultiSampleRenderTargetMode_1_0_5558, + + XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode" + #endif + }, + // IDirect3DDevice8::SetRenderState_MultiSampleRenderTargetMode + { + (OOVPA*)&D3DDevice_SetRenderState_MultiSampleRenderTargetMode_1_0_5455, + + XTL::EmuIDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_MultiSampleRenderTargetMode (5455)" + #endif + }, + // IDirect3DDevice8::SetRenderState_Dxt1NoiseEnable + { + (OOVPA*)&D3DDevice_SetRenderState_Dxt1NoiseEnable_1_0_5558, + + XTL::EmuIDirect3DDevice8_SetRenderState_Dxt1NoiseEnable, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_Dxt1NoiseEnable" + #endif + }, + // IDirect3DDevice8::SetRenderState_StencilCullEnable (* unchanged since 4134 *) + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_StencilCullEnable_1_0_4134, + + XTL::EmuIDirect3DDevice8_SetRenderState_StencilCullEnable, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_StencilCullEnable" + #endif + }, + // IDirect3DDevice8::SetTextureState_ColorKeyColor (* unchanged since 4134 *) + { + (OOVPA*)&IDirect3DDevice8_SetTextureState_ColorKeyColor_1_0_4134, + + XTL::EmuIDirect3DDevice8_SetTextureState_ColorKeyColor, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetTextureState_ColorKeyColor" + #endif + }, + // IDirect3DDevice8::IsFencePending + { + (OOVPA*)&D3DDevice_IsFencePending_1_0_5558, + + XTL::EmuIDirect3DDevice8_IsFencePending, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_IsFencePending" + #endif + }, + // IDirect3DDevice8::SetRenderTargetFast (* unchanged since 5344 *) + { + (OOVPA*)&D3DDevice_SetRenderTargetFast_1_0_5344, + + XTL::EmuIDirect3DDevice8_SetRenderTargetFast, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderTargetFast" + #endif + }, }; // ****************************************************************** diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl index d79af232e..b4b0c71b2 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl @@ -1583,6 +1583,143 @@ SOOVPA<7> D3DDevice_GetDisplayFieldStatus_1_0_5849 = } }; +// ****************************************************************** +// * D3DDevice_GetScissors +// ****************************************************************** +SOOVPA<7> D3DDevice_GetScissors_1_0_5849 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x0B, 0x74 }, + { 0x14, 0x11 }, + { 0x1F, 0x04 }, + { 0x2A, 0x85 }, + { 0x35, 0xE1 }, + { 0x40, 0xC1 }, + { 0x4B, 0xA4 }, + } +}; + +// ****************************************************************** +// * D3DDevice_SetScissors +// ****************************************************************** +SOOVPA<8> D3DDevice_SetScissors_1_0_5849 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x1D, 0x44 }, + { 0x3C, 0x8B }, + { 0x5D, 0xD9 }, + { 0x7D, 0xD8 }, + { 0x99, 0x0E }, + { 0xB8, 0xE8 }, + { 0xD7, 0x24 }, + { 0xF6, 0x8B }, + } +}; + +// ****************************************************************** +// * D3DDevice_GetBackMaterial +// ****************************************************************** +SOOVPA<8> D3DDevice_GetBackMaterial_1_0_5849 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x05, 0x56 }, + { 0x06, 0x57 }, + { 0x0A, 0x0C }, + { 0x0D, 0x44 }, + { 0x0E, 0x0F }, + { 0x12, 0x11 }, + { 0x16, 0xF3 }, + { 0x1A, 0xC2 }, + } +}; + +// ****************************************************************** +// * D3DDevice_CaptureStateBlock +// ****************************************************************** +SOOVPA<8> D3DDevice_CaptureStateBlock_1_0_5849 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x1E, 0x3C }, + { 0x3E, 0xC0 }, + { 0x5E, 0x7E }, + { 0x7E, 0x00 }, + { 0x9E, 0x74 }, + { 0xC0, 0x8B }, + { 0xDE, 0x83 }, + { 0xFE, 0x45 }, + } +}; + +// ****************************************************************** +// * D3DDevice_SetRenderState_RopZCmpAlwaysRead +// ****************************************************************** +SOOVPA<7> D3DDevice_SetRenderState_RopZCmpAlwaysRead_1_0_5849 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x05, XREF_D3DRS_ROPZCMPALWAYSREAD }, + + { 0x01, 0x44 }, + { 0x04, 0xA3 }, + { 0x09, 0xE8 }, + { 0x0E, 0xC2 }, + { 0x0F, 0x04 }, + { 0x10, 0x00 }, + } +}; + +// ****************************************************************** +// * D3DDevice_GetTexture2 +// ****************************************************************** +SOOVPA<8> D3DDevice_GetTexture2_1_0_5849 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x03, 0x04 }, + { 0x0A, 0x56 }, + { 0x0D, 0x81 }, + { 0x0E, 0x88 }, + { 0x12, 0x8B }, + { 0x17, 0x06 }, + { 0x1E, 0x8B }, + { 0x21, 0xC2 }, + } +}; + // ****************************************************************** // * D3D8_1_0_5849 // ****************************************************************** @@ -2809,6 +2946,154 @@ OOVPATable D3D8_1_0_5849[] = "EmuIDirect3DDevice8_GetDisplayFieldStatus" #endif }, + // IDirect3DCubeTexture8::GetCubeMapSurface2 (* Unchanged since 4627 *) + { + (OOVPA*)&D3DCubeTexture_GetCubeMapSurface2_1_0_4627, + + XTL::EmuIDirect3DCubeTexture8_GetCubeMapSurface2, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DCubeTexture8_GetCubeMapSurface2" + #endif + }, + // IDirect3DDevice8::SetVertexShaderConstant1Fast (* Unchanged since 5558 *) + { + (OOVPA*)&IDirect3DDevice8_SetVertexShaderConstant1Fast_1_0_5558, + + XTL::EmuIDirect3DDevice8_SetVertexShaderConstant1, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetVertexShaderConstant1Fast" + #endif + }, + // D3DDevice_SetPixelShaderProgram (* Unchanged since 5558 *) + { + (OOVPA*)&D3DDevice_SetPixelShaderProgram_1_0_5558, + XTL::EmuIDirect3DDevice8_SetPixelShaderProgram, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetPixelShaderProgram" + #endif + }, + // IDirect3DDevice8::SetScissors + { + (OOVPA*)&D3DDevice_SetScissors_1_0_5849, + + XTL::EmuIDirect3DDevice8_SetScissors, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetScissors" + #endif + }, + // IDirect3DDevice8::GetScissors + { + (OOVPA*)&D3DDevice_GetScissors_1_0_5849, + + XTL::EmuIDirect3DDevice8_GetScissors, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_GetScissors" + #endif + }, + // IDirect3DDevice8::GetBackMaterial + { + (OOVPA*)&D3DDevice_GetBackMaterial_1_0_5849, + + XTL::EmuIDirect3DDevice8_GetBackMaterial, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_GetBackMaterial" + #endif + }, + // IDirect3DDevice8::ApplyStateBlock (* unchanged since 4627 *) + { + (OOVPA*)&D3DDevice_ApplyStateBlock_1_0_4627, + + XTL::EmuIDirect3DDevice8_ApplyStateBlock, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_ApplyStateBlock" + #endif + }, + // IDirect3DDevice8::CaptureStateBlock + { + (OOVPA*)&D3DDevice_CaptureStateBlock_1_0_5849, + + XTL::EmuIDirect3DDevice8_CaptureStateBlock, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_CaptureStateBlock" + #endif + }, + // IDirect3DDevice8::SetRenderState_StencilCullEnable (* unchanged since 4134 *) + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_StencilCullEnable_1_0_4134, + + XTL::EmuIDirect3DDevice8_SetRenderState_StencilCullEnable, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_StencilCullEnable" + #endif + }, + // IDirect3DDevice8::SetRenderState_OcclusionCullEnable (* unchanged since 4134 *) + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_OcclusionCullEnable_1_0_4134, + + XTL::EmuIDirect3DDevice8_SetRenderState_OcclusionCullEnable, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_OcclusionCullEnable" + #endif + }, + // IDirect3DDevice8::SetRenderState_RopZCmpAlwaysRead + { + (OOVPA*)&D3DDevice_SetRenderState_RopZCmpAlwaysRead_1_0_5849, + + XTL::EmuIDirect3DDevice8_SetRenderState_RopZCmpAlwaysRead, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_RopZCmpAlwaysRead" + #endif + }, + // IDirect3DDevice8::SetRenderState_RopZRead (* unchanged since 4134 *) + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_RopZRead_1_0_4134, + + XTL::EmuIDirect3DDevice8_SetRenderState_RopZRead, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_RopZRead" + #endif + }, + // IDirect3DDevice8::SetRenderState_DoNotCullUncompressed (* unchanged since 4134 *) + { + (OOVPA*)&IDirect3DDevice8_SetRenderState_DoNotCullUncompressed_1_0_4134, + + XTL::EmuIDirect3DDevice8_SetRenderState_DoNotCullUncompressed, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderState_DoNotCullUncompressed" + #endif + }, + // D3DDevice_GetTexture2 + { + (OOVPA*)&D3DDevice_GetTexture2_1_0_5849, + XTL::EmuIDirect3DDevice8_GetTexture2, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_GetTexture2" + #endif + }, + // IDirect3DDevice8::SetRenderTargetFast (* unchanged since 5344 *) + { + (OOVPA*)&D3DDevice_SetRenderTargetFast_1_0_5344, + + XTL::EmuIDirect3DDevice8_SetRenderTargetFast, + + #ifdef _DEBUG_TRACE + "EmuIDirect3DDevice8_SetRenderTargetFast" + #endif + }, }; // ****************************************************************** diff --git a/src/CxbxKrnl/HLEDataBase/DSound.1.0.3936.inl b/src/CxbxKrnl/HLEDataBase/DSound.1.0.3936.inl index 89f6ca2fa..294f6b85f 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.1.0.3936.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.1.0.3936.inl @@ -6041,7 +6041,7 @@ OOVPATable DSound_1_0_3936[] = 0, #ifdef _DEBUG_TRACE - "CMcpxVoiceClient::SetI3DL2Source (XREF) NIGGER (1) **************" + "CMcpxVoiceClient::SetI3DL2Source (XREF)" #endif }, // CDirectSoundVoice::SetI3DL2Source (XREF) @@ -6050,7 +6050,7 @@ OOVPATable DSound_1_0_3936[] = XTL::EmuCDirectSoundStream_SetI3DL2Source, #ifdef _DEBUG_TRACE - "CDirectSoundVoice::SetI3DL2Source (XREF) NIGGER (2) *************" + "CDirectSoundVoice::SetI3DL2Source (XREF)" #endif }, // IDirectSoundBuffer_SetI3DL2Source diff --git a/src/CxbxKrnl/HLEDataBase/DSound.1.0.5233.inl b/src/CxbxKrnl/HLEDataBase/DSound.1.0.5233.inl index 7d7e3d07d..fd9cbf5ff 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.1.0.5233.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.1.0.5233.inl @@ -572,6 +572,467 @@ SOOVPA<8> IDirectSoundBuffer8_SetRolloffCurve_1_0_5233 = } }; +// ****************************************************************** +// * DirectSound::CDirectSoundVoice::SetMaxDistance +// ****************************************************************** +SOOVPA<7> CDirectSoundVoice_SetMaxDistance_1_0_5344 = +{ + 0, // Large == 0 + 7, // Count == 7 + + XREF_DSVOICESETMAXDISTANCE, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x05, 0x41 }, + { 0x0C, 0x00 }, + { 0x13, 0x3C }, + { 0x1A, 0x00 }, + { 0x21, 0xF6 }, + { 0x28, 0x51 }, + { 0x2F, 0xC0 }, + } +}; +// ****************************************************************** +// * CDirectSoundBuffer::SetMaxDistance +// ****************************************************************** +SOOVPA<11> CDirectSoundBuffer_SetMaxDistance_1_0_5344 = +{ + 0, // Large == 0 + 11, // Count == 11 + + XREF_DSBUFFERSETMAXDISTANCE, // XRef Is Saved + 1, // XRef Is Used + + { + // CDirectSoundBuffer_SetMaxDistance+0x39 : call [CDirectSoundVoice::SetMaxDistance] + { 0x3A, XREF_DSVOICESETMAXDISTANCE }, + + { 0x00, 0x56 }, + // CDirectSoundBuffer_SetMaxDistance+0x21 : mov eax, 80004005h + { 0x22, 0x05 }, + { 0x23, 0x40 }, + { 0x24, 0x00 }, + { 0x25, 0x80 }, + + // CDirectSoundBuffer_SetMaxDistance+0x32 : fstp [esp+0Ch+var_C] + { 0x32, 0xD9 }, + { 0x33, 0x1C }, + { 0x34, 0x24 }, + + // CDirectSoundBuffer_SetMaxDistance+0x53 : retn 0Ch + { 0x54, 0x0C }, + { 0x55, 0x00 } + } +}; + +// ****************************************************************** +// * IDirectSoundBuffer_SetMaxDistance +// ****************************************************************** +SOOVPA<11> IDirectSoundBuffer_SetMaxDistance_1_0_5344 = +{ + 0, // Large == 0 + 11, // Count == 11 + + -1, // XRef Not Saved + 1, // XRef Is Used + + { + // IDirectSoundBuffer_SetMaxDistance+0x1C : call [CDirectSoundBuffer::SetMaxDistance] + { 0x1D, XREF_DSBUFFERSETMAXDISTANCE }, + + { 0x00, 0xFF }, + // IDirectSoundBuffer_SetMaxDistance+0x04 : fld [esp+4+arg_4] + { 0x04, 0xD9 }, + { 0x05, 0x44 }, + { 0x06, 0x24 }, + { 0x07, 0x0C }, + + // IDirectSoundBuffer_SetMaxDistance+0x12 : add eax, 0FFFFFFE4 + { 0x12, 0x83 }, + { 0x13, 0xC0 }, + { 0x14, 0xE4 }, + + // IDirectSoundBuffer_SetMaxDistance+0x21 : retn 0Ch + { 0x22, 0x0C }, + { 0x23, 0x00 } + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSoundVoice::SetMinDistance +// ****************************************************************** +SOOVPA<7> CDirectSoundVoice_SetMinDistance_1_0_5344 = +{ + 0, // Large == 0 + 7, // Count == 7 + + XREF_DSVOICESETMINDISTANCE, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x05, 0x41 }, + { 0x0C, 0x00 }, + { 0x13, 0x38 }, + { 0x1A, 0x00 }, + { 0x21, 0xF6 }, + { 0x28, 0x51 }, + { 0x2F, 0xC0 }, + } +}; +// ****************************************************************** +// * CDirectSoundBuffer::SetMinDistance +// ****************************************************************** +SOOVPA<11> CDirectSoundBuffer_SetMinDistance_1_0_5344 = +{ + 0, // Large == 0 + 11, // Count == 11 + + XREF_DSBUFFERSETMINDISTANCE, // XRef Is Saved + 1, // XRef Is Used + + { + // CDirectSoundBuffer_SetMinDistance+0x39 : call [CDirectSoundVoice::SetMinDistance] + { 0x3A, XREF_DSVOICESETMINDISTANCE }, + + { 0x00, 0x56 }, + // CDirectSoundBuffer_SetMinDistance+0x21 : mov eax, 80004005h + { 0x22, 0x05 }, + { 0x23, 0x40 }, + { 0x24, 0x00 }, + { 0x25, 0x80 }, + + // CDirectSoundBuffer_SetMinDistance+0x32 : fstp [esp+0Ch+var_C] + { 0x32, 0xD9 }, + { 0x33, 0x1C }, + { 0x34, 0x24 }, + + // CDirectSoundBuffer_SetMinDistance+0x53 : retn 0Ch + { 0x54, 0x0C }, + { 0x55, 0x00 } + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSoundStream::SetMinDistance +// ****************************************************************** +SOOVPA<8> DirectSound_CDirectSoundStream_SetMinDistance_1_0_5344 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x3E, XREF_DSVOICESETROLLOFFCURVE }, + + { 0x0C, 0x00 }, + { 0x16, 0x68 }, + { 0x22, 0x05 }, + { 0x2E, 0x24 }, + { 0x3A, 0x1C }, + { 0x46, 0x74 }, + { 0x53, 0x8B }, + } +}; + +// ****************************************************************** +// * IDirectSoundBuffer_SetMinDistance +// ****************************************************************** +SOOVPA<11> IDirectSoundBuffer_SetMinDistance_1_0_5344 = +{ + 0, // Large == 0 + 11, // Count == 11 + + -1, // XRef Not Saved + 1, // XRef Is Used + + { + // IDirectSoundBuffer_SetMinDistance+0x1C : call [CDirectSoundBuffer::SetMinDistance] + { 0x1D, XREF_DSBUFFERSETMINDISTANCE }, + + { 0x00, 0xFF }, + // IDirectSoundBuffer_SetMinDistance+0x04 : fld [esp+4+arg_4] + { 0x04, 0xD9 }, + { 0x05, 0x44 }, + { 0x06, 0x24 }, + { 0x07, 0x0C }, + + // IDirectSoundBuffer_SetMinDistance+0x12 : add eax, 0FFFFFFE4 + { 0x12, 0x83 }, + { 0x13, 0xC0 }, + { 0x14, 0xE4 }, + + // IDirectSoundBuffer_SetMinDistance+0x21 : retn 0Ch + { 0x22, 0x0C }, + { 0x23, 0x00 } + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSound::SetI3DL2Listener +// ****************************************************************** +SOOVPA<8> DirectSound_CDirectSound_SetI3DL2Listener_1_0_5344 = +{ + 0, // Large == 0 + 8, // Count == 8 + + XREF_DSSETI3DL2LISTENER, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x1E, 0x15 }, + { 0x3E, 0x88 }, + { 0x5E, 0x41 }, + { 0x7E, 0x00 }, + { 0x9E, 0x08 }, + { 0xBE, 0x41 }, + { 0xDE, 0x00 }, + { 0xFE, 0x8B }, + } +}; + +// ****************************************************************** +// * IDirectSound_SetI3DL2Listener +// ****************************************************************** +SOOVPA<9> IDirectSound_SetI3DL2Listener_1_0_5344 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x19, XREF_DSSETI3DL2LISTENER }, + + { 0x02, 0x24 }, + { 0x06, 0x24 }, + { 0x0A, 0xFF }, + { 0x0E, 0x83 }, + { 0x12, 0xD9 }, + { 0x16, 0xC8 }, + { 0x1D, 0xC2 }, + { 0x1E, 0x0C }, + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSound::SetRolloffFactor +// ****************************************************************** +SOOVPA<9> DirectSound_CDirectSound_SetRolloffFactor_1_0_5344 = +{ + 0, // Large == 0 + 9, // Count == 9 + + XREF_SETROLLOFFFACTORA, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x0C, 0x00 }, + { 0x16, 0x68 }, + { 0x22, 0x05 }, + { 0x2E, 0x08 }, + { 0x35, 0x70 }, + { 0x3A, 0x48 }, + { 0x4A, 0x85 }, + { 0x53, 0xFF }, + { 0x5E, 0x00 }, + } +}; + +// ****************************************************************** +// * IDirectSound_SetRolloffFactor +// ****************************************************************** +SOOVPA<8> IDirectSound_SetRolloffFactor_1_0_5344 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x1D, XREF_SETROLLOFFFACTORA }, + + { 0x03, 0x0C }, + { 0x08, 0x8B }, + { 0x0D, 0x8B }, + { 0x12, 0x83 }, + { 0x17, 0x1B }, + { 0x1C, 0xE8 }, + { 0x21, 0xC2 }, + } +}; + +// ****************************************************************** +// * CDirectSoundVoice::SetDistanceFactor +// ****************************************************************** +SOOVPA<7> CDirectSoundVoice_SetDistanceFactor_1_0_5344 = +{ + 0, // Large == 0 + 7, // Count == 7 + + XREF_DSVOICESETDISTANCEFACTOR, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x05, 0x41 }, + { 0x0C, 0x00 }, + { 0x13, 0x44 }, + { 0x1A, 0x00 }, + { 0x21, 0xF6 }, + { 0x28, 0x51 }, + { 0x2F, 0xC0 }, + } +}; + +// ****************************************************************** +// * CDirectSoundBuffer::SetDistanceFactor +// ****************************************************************** +SOOVPA<8> CDirectSoundBuffer_SetDistanceFactor_1_0_5344 = +{ + 0, // Large == 0 + 8, // Count == 8 + + XREF_DSBUFFERSETDISTANCEFACTOR, // Xref Is Saved + 1, // Xref Is Used + + { + { 0x3A, XREF_DSVOICESETDISTANCEFACTOR }, + + { 0x0C, 0x00 }, + { 0x14, 0x74 }, + { 0x21, 0xB8 }, + { 0x2A, 0x24 }, + { 0x35, 0xFF }, + { 0x40, 0x8B }, + { 0x4F, 0x8B }, + } +}; + +// ****************************************************************** +// * IDirectSoundBuffer8_SetDistanceFactor +// ****************************************************************** +SOOVPA<8> IDirectSoundBuffer8_SetDistanceFactor_1_0_5344 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x1D, XREF_DSBUFFERSETDISTANCEFACTOR }, + + { 0x03, 0x0C }, + { 0x08, 0x8B }, + { 0x0D, 0x8B }, + { 0x12, 0x83 }, + { 0x17, 0x1B }, + { 0x1C, 0xE8 }, + { 0x21, 0xC2 }, + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSound::SetDistanceFactor +// ****************************************************************** +SOOVPA<9> DirectSound_CDirectSound_SetDistanceFactor_1_0_5344 = +{ + 0, // Large == 0 + 9, // Count == 9 + + XREF_SETDISTANCEFACTORA, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x0C, 0x00 }, + { 0x16, 0x68 }, + { 0x22, 0x05 }, + { 0x2E, 0x08 }, + { 0x35, 0x6C }, + { 0x3A, 0x48 }, + { 0x4A, 0x85 }, + { 0x53, 0xFF }, + { 0x5E, 0x00 }, + } +}; + +// ****************************************************************** +// * IDirectSound_SetDistanceFactor +// ****************************************************************** +SOOVPA<8> IDirectSound_SetDistanceFactor_1_0_5344 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x1D, XREF_SETDISTANCEFACTORA }, + + { 0x03, 0x0C }, + { 0x08, 0x8B }, + { 0x0D, 0x8B }, + { 0x12, 0x83 }, + { 0x17, 0x1B }, + { 0x1C, 0xE8 }, + { 0x21, 0xC2 }, + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSound::SetDopplerFactor +// ****************************************************************** +SOOVPA<9> DirectSound_CDirectSound_SetDopplerFactor_1_0_5344 = +{ + 0, // Large == 0 + 9, // Count == 9 + + XREF_SETDOPPLERFACTOR, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x0C, 0x00 }, + { 0x16, 0x68 }, + { 0x22, 0x05 }, + { 0x2E, 0x08 }, + { 0x35, 0x74 }, + { 0x3A, 0x48 }, + { 0x4A, 0x85 }, + { 0x53, 0xFF }, + { 0x5E, 0x00 }, + } +}; + + +// ****************************************************************** +// * IDirectSound_SetDopplerFactor +// ****************************************************************** +SOOVPA<8> IDirectSound_SetDopplerFactor_1_0_5344 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x1D, XREF_SETDOPPLERFACTOR }, + + { 0x03, 0x0C }, + { 0x08, 0x8B }, + { 0x0D, 0x8B }, + { 0x12, 0x83 }, + { 0x17, 0x1B }, + { 0x1C, 0xE8 }, + { 0x21, 0xC2 }, + } +}; + // ****************************************************************** // * Direct_1_0_5233 // ****************************************************************** @@ -1044,6 +1505,24 @@ OOVPATable DSound_1_0_5233[] = #ifdef _DEBUG_TRACE "EmuIDirectSound8_SetOrientation" #endif + }, + // CDirectSound::SetDistanceFactorA (XREF) + { + (OOVPA*)&DirectSound_CDirectSound_SetDistanceFactor_1_0_5344, 0, + + #ifdef _DEBUG_TRACE + "CDirectSound::SetDistanceFactorA (XREF) (5344)@" + #endif + }, + // IDirectSound8::SetDistanceFactor + { + (OOVPA*)&IDirectSound_SetDistanceFactor_1_0_5344, + + XTL::EmuIDirectSound8_SetDistanceFactor, + + #ifdef _DEBUG_TRACE + "EmuIDirectSound8_SetDistanceFactor (5344)@" + #endif }, // CDirectSound::SetDistanceFactorA (XREF) (* unchanged since 4627 *) { @@ -1080,6 +1559,24 @@ OOVPATable DSound_1_0_5233[] = #ifdef _DEBUG_TRACE "EmuIDirectSound8_SetRolloffFactor" #endif + }, + // CDirectSound::SetDopplerFactor (XREF) + { + (OOVPA*)&DirectSound_CDirectSound_SetDopplerFactor_1_0_5344, 0, + + #ifdef _DEBUG_TRACE + "CDirectSound::SetDopplerFactor (XREF) (5344)@@" + #endif + }, + // IDirectSound8::SetDopplerFactor + { + (OOVPA*)&IDirectSound_SetDopplerFactor_1_0_5344, + + XTL::EmuIDirectSound8_SetDopplerFactor, + + #ifdef _DEBUG_TRACE + "EmuIDirectSound8_SetDopplerFactor (5344)@@" + #endif }, // CDirectSound::SetDopplerFactor (XREF) (* unchanged since 4627 *) { @@ -1109,30 +1606,54 @@ OOVPATable DSound_1_0_5233[] = "EmuCDirectSound_CommitDeferredSettings" #endif }, - // CDirectSoundVoice::SetMaxDistance (XREF) (* unchanged since 4432 *) + // CDirectSoundVoice::SetMaxDistance (XREF) { - (OOVPA*)&CDirectSoundVoice_SetMaxDistance_1_0_4432, 0, + (OOVPA*)&CDirectSoundVoice_SetMaxDistance_1_0_5344, 0, #ifdef _DEBUG_TRACE - "CDirectSoundVoice::SetMaxDistance (XREF)" + "CDirectSoundVoice::SetMaxDistance (XRef) (5344)" #endif }, - // CDirectSoundBuffer::SetMaxDistance (XREF) (* unchanged since 4432 *) + // CDirectSoundBuffer::SetMaxDistance (XREF) { - (OOVPA*)&CDirectSoundBuffer_SetMaxDistance_1_0_4432, 0, + (OOVPA*)&CDirectSoundBuffer_SetMaxDistance_1_0_5344, 0, #ifdef _DEBUG_TRACE - "CDirectSoundBuffer::SetMaxDistance (XREF)" + "CDirectSoundBuffer::SetMaxDistance (XRef) (5344)" #endif }, - // IDirectSoundBuffer_SetMaxDistance (* unchanged since 4432 *) + // IDirectSoundBuffer_SetMaxDistance { - (OOVPA*)&IDirectSoundBuffer_SetMaxDistance_1_0_4432, - + (OOVPA*)&IDirectSoundBuffer_SetMaxDistance_1_0_5344, XTL::EmuIDirectSoundBuffer8_SetMaxDistance, #ifdef _DEBUG_TRACE - "EmuIDirectSoundBuffer8_SetMaxDistance" + "IDirectSoundBuffer8_SetMaxDistance (5344)" + #endif + }, + // CDirectSoundVoice::SetMinDistance (XREF) + { + (OOVPA*)&CDirectSoundVoice_SetMinDistance_1_0_5344, 0, + + #ifdef _DEBUG_TRACE + "CDirectSoundVoice::SetMinDistance (XRef) (5344)" + #endif + }, + // CDirectSoundBuffer::SetMinDistance (XREF) + { + (OOVPA*)&CDirectSoundBuffer_SetMinDistance_1_0_5344, 0, + + #ifdef _DEBUG_TRACE + "CDirectSoundBuffer::SetMinDistance (XRef) (5344)" + #endif + }, + // IDirectSoundBuffer_SetMinDistance + { + (OOVPA*)&IDirectSoundBuffer_SetMinDistance_1_0_5344, + XTL::EmuIDirectSoundBuffer8_SetMinDistance, + + #ifdef _DEBUG_TRACE + "IDirectSoundBuffer8_SetMinDistance (5344)" #endif }, // CDirectSoundVoice::SetMinDistance (XREF) (* unchanged since 4432 *) @@ -1161,6 +1682,32 @@ OOVPATable DSound_1_0_5233[] = "EmuIDirectSoundBuffer8_SetMinDistance" #endif }, + // CDirectSoundVoice::SetMaxDistance (XREF) (* unchanged since 4432 *) + { + (OOVPA*)&CDirectSoundVoice_SetMaxDistance_1_0_4432, 0, + + #ifdef _DEBUG_TRACE + "CDirectSoundVoice::SetMaxDistance (XREF)" + #endif + }, + // CDirectSoundBuffer::SetMaxDistance (XREF) (* unchanged since 4432 *) + { + (OOVPA*)&CDirectSoundBuffer_SetMaxDistance_1_0_4432, 0, + + #ifdef _DEBUG_TRACE + "CDirectSoundBuffer::SetMaxDistance (XREF)" + #endif + }, + // IDirectSoundBuffer_SetMaxDistance (* unchanged since 4432 *) + { + (OOVPA*)&IDirectSoundBuffer_SetMaxDistance_1_0_4432, + + XTL::EmuIDirectSoundBuffer8_SetMaxDistance, + + #ifdef _DEBUG_TRACE + "EmuIDirectSoundBuffer8_SetMaxDistance" + #endif + }, // CDirectSoundVoice::SetPosition (XREF) (* unchanged since 4627 *) { (OOVPA*)&CDirectSoundVoice_SetPosition_1_0_4627, 0, @@ -1359,6 +1906,69 @@ OOVPATable DSound_1_0_5233[] = "EmuIDirectSound8_AddRef" #endif }, + // CDirectSound_SetI3DL2Listener + { + (OOVPA*)&DirectSound_CDirectSound_SetI3DL2Listener_1_0_5344, 0, + + #ifdef _DEBUG_TRACE + "CDirectSound::SetI3DL2Listener (XREF) (5344)" + #endif + }, + // IDirectSound8_SetI3DL2Listener + { + (OOVPA*)&IDirectSound_SetI3DL2Listener_1_0_5344, + + XTL::EmuIDirectSound8_SetI3DL2Listener, + + #ifdef _DEBUG_TRACE + "EmuIDirectSound8_SetI3DL2Listener (5344)" + #endif + }, + // CDirectSound::SetRolloffFactor (XREF) + { + (OOVPA*)&DirectSound_CDirectSound_SetRolloffFactor_1_0_5344, 0, + + #ifdef _DEBUG_TRACE + "CDirectSound_SetRolloffFactor (XRef) (5344)" + #endif + }, + // IDirectSound8::SetRolloffFactor + { + (OOVPA*)&IDirectSound_SetRolloffFactor_1_0_5344, + + XTL::EmuIDirectSound8_SetRolloffFactor, + + #ifdef _DEBUG_TRACE + "EmuIDirectSound8_SetRolloffFactor (5344)" + #endif + }, +#if 0 // Add when needed... + // CDirectSoundVoice::SetDistanceFactor (XREF) + { + (OOVPA*)&CDirectSoundVoice_SetDistanceFactor_1_0_5558, 0, + + #ifdef _DEBUG_TRACE + "CDirectSoundVoice::SetDistanceFactor (XRef)" + #endif + }, + // CDirectSoundBuffer::SetDistanceFactor (XREF) + { + (OOVPA*)&CDirectSoundBuffer_SetDistanceFactor_1_0_5558, 0, + + #ifdef _DEBUG_TRACE + "CDirectSoundBuffer::SetDistanceFactor (XRef)" + #endif + }, + // IDirectSoundBuffer_SetDistanceFactor + { + (OOVPA*)&IDirectSoundBuffer8_SetDistanceFactor_1_0_5558, + XTL::EmuIDirectSoundBuffer8_SetDistanceFactor, + + #ifdef _DEBUG_TRACE + "IDirectSoundBuffer8_SetDistanceFactor" + #endif + }, +#endif }; // ****************************************************************** diff --git a/src/CxbxKrnl/HLEDataBase/DSound.1.0.5558.inl b/src/CxbxKrnl/HLEDataBase/DSound.1.0.5558.inl index bb22065ca..3642a4750 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.1.0.5558.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.1.0.5558.inl @@ -1243,6 +1243,30 @@ SOOVPA<11> CDirectSoundBuffer_SetMinDistance_1_0_5558 = } }; +// ****************************************************************** +// * DirectSound::CDirectSoundStream::SetMinDistance +// ****************************************************************** +SOOVPA<8> DirectSound_CDirectSoundStream_SetMinDistance_1_0_5558 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x3E, XREF_DSVOICESETROLLOFFCURVE }, + + { 0x0C, 0x00 }, + { 0x16, 0x68 }, + { 0x22, 0x05 }, + { 0x2E, 0x24 }, + { 0x3A, 0x1C }, + { 0x46, 0x74 }, + { 0x53, 0x8B }, + } +}; + // ****************************************************************** // * IDirectSoundBuffer_SetMinDistance // ****************************************************************** @@ -1925,7 +1949,7 @@ SOOVPA<9> DirectSound_CDirectSoundStream_SetHeadroom_1_0_5558 = 0, // Large == 0 9, // Count == 9 - XREF_DirectSound_CDirectSoundStream_SetHeadroom, // Xref Is Saved + -1, // Xref Not Saved 1, // Xref Is Used { @@ -2228,6 +2252,193 @@ SOOVPA<8> XAudioDownloadEffectsImage_1_0_5558 = } }; +// ****************************************************************** +// * DirectSound::CDirectSound::SetPosition +// ****************************************************************** +SOOVPA<7> DirectSound_CDirectSound_SetPosition_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + XREF_DSSETPOSITIONA, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x0F, 0x00 }, + { 0x1E, 0xFF }, + { 0x2B, 0x8B }, + { 0x3A, 0x8B }, + { 0x49, 0x40 }, + { 0x58, 0xE8 }, + { 0x67, 0x15 }, + } +}; + +// ****************************************************************** +// * IDirectSound_SetPosition +// ****************************************************************** +SOOVPA<8> IDirectSound_SetPosition_1_0_5558 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x2D, XREF_DSSETPOSITIONA }, + + { 0x05, 0x18 }, + { 0x0C, 0x83 }, + { 0x13, 0x8B }, + { 0x1A, 0xF8 }, + { 0x21, 0xD9 }, + { 0x28, 0xD9 }, + { 0x31, 0x5D }, + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSound::SetVelocity +// ****************************************************************** +SOOVPA<7> DirectSound_CDirectSound_SetVelocity_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + XREF_DSSETVELOCITYA, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x0F, 0x00 }, + { 0x1E, 0xFF }, + { 0x2B, 0x8B }, + { 0x3A, 0x8B }, + { 0x49, 0x4C }, + { 0x58, 0xE8 }, + { 0x67, 0x15 }, + } +}; + +// ****************************************************************** +// * IDirectSound_SetVelocity +// ****************************************************************** +SOOVPA<8> IDirectSound_SetVelocity_1_0_5558 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x2D, XREF_DSSETVELOCITYA }, + + { 0x05, 0x18 }, + { 0x0C, 0x83 }, + { 0x13, 0x8B }, + { 0x1A, 0xF8 }, + { 0x21, 0xD9 }, + { 0x28, 0xD9 }, + { 0x31, 0x5D }, + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSound::CreateSoundStream +// ****************************************************************** +SOOVPA<7> DirectSound_CDirectSound_CreateSoundStream_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + XREF_DSCREATESOUNDSTREAM, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x11, 0xD8 }, + { 0x24, 0x05 }, + { 0x37, 0x74 }, + { 0x4A, 0x81 }, + { 0x5D, 0xE8 }, + { 0x70, 0x85 }, + { 0x83, 0xFF }, + } +}; + +// ****************************************************************** +// * IDirectSound_CreateSoundStream +// ****************************************************************** +SOOVPA<8> IDirectSound_CreateSoundStream_1_0_5558 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x1D, XREF_DSCREATESOUNDSTREAM }, + + { 0x03, 0x10 }, + { 0x08, 0xFF }, + { 0x0D, 0xC8 }, + { 0x12, 0x83 }, + { 0x17, 0x1B }, + { 0x1C, 0xE8 }, + { 0x21, 0xC2 }, + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSoundStream::SetRolloffCurve +// ****************************************************************** +SOOVPA<8> DirectSound_CDirectSoundStream_SetRolloffCurve_1_0_5558 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x3E, XREF_DSVOICESETROLLOFFCURVE }, + + { 0x0C, 0x00 }, + { 0x16, 0x68 }, + { 0x22, 0x05 }, + { 0x2E, 0x74 }, + { 0x3A, 0x24 }, + { 0x46, 0x74 }, + { 0x53, 0x8B }, + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSoundStream::SetFrequency +// ****************************************************************** +SOOVPA<9> DirectSound_CDirectSoundStream_SetFrequency_1_0_5558 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x36, XREF_DSBUFFERSETFREQUENCYB }, + + { 0x00, 0x56 }, + { 0x0C, 0x00 }, + { 0x14, 0x74 }, + { 0x21, 0xB8 }, + { 0x2A, 0x24 }, + { 0x35, 0xE8 }, + { 0x40, 0x68 }, + { 0x4B, 0x8B }, + } +}; + // ****************************************************************** // * Direct_1_0_5558 // ****************************************************************** @@ -2430,6 +2641,16 @@ OOVPATable DSound_1_0_5558[] = #ifdef _DEBUG_TRACE "EmuCDirectSoundBuffer_SetFrequency (XREF)" #endif + }, + // CDirectSoundStream::SetFrequency + { + (OOVPA*)&DirectSound_CDirectSoundStream_SetFrequency_1_0_5558, + + XTL::EmuCDirectSoundStream_SetFrequency, + + #ifdef _DEBUG_TRACE + "EmuCDirectSoundStream_SetFrequency" + #endif }, // IDirectSoundBuffer8::SetFrequency (* unchanged since 4627 *) { @@ -2537,6 +2758,14 @@ OOVPATable DSound_1_0_5558[] = #ifdef _DEBUG_TRACE "CDirectSoundBuffer::SetMinDistance (XRef)" #endif + }, + // CDirectSoundStream::SetRolloffCurve (XREF) + { + (OOVPA*)&DirectSound_CDirectSoundStream_SetRolloffCurve_1_0_5558, 0, + + #ifdef _DEBUG_TRACE + "CDirectSoundStream::SetRolloffCurve" + #endif }, // IDirectSoundBuffer_SetMinDistance { @@ -3014,6 +3243,15 @@ OOVPATable DSound_1_0_5558[] = #ifdef _DEBUG_TRACE "CDirectSoundBuffer::SetRolloffCurve (XREF)" #endif + }, + // CDirectSoundStream::SetRolloffCurve + { + (OOVPA*)&DirectSound_CDirectSoundStream_SetRolloffCurve_1_0_5558, + XTL::EmuCDirectSoundStream_SetRolloffCurve, + + #ifdef _DEBUG_TRACE + "CDirectSoundBuffer::SetRolloffCurve" + #endif }, // IDirectSoundBuffer8::SetRolloffCurve (* unchanged since 5233 *) { @@ -3247,8 +3485,7 @@ OOVPATable DSound_1_0_5558[] = // DirectSound::CDirectSoundStream::SetHeadroom { (OOVPA*)&DirectSound_CDirectSoundStream_SetHeadroom_1_0_5558, - //XTL::EmuCDirectSoundStream_SetHeadroom, - 0, // TODO + XTL::EmuIDirectSoundStream_SetHeadroom, #ifdef _DEBUG_TRACE "DirectSound::CDirectSoundStream::SetHeadroom" @@ -3353,6 +3590,59 @@ OOVPATable DSound_1_0_5558[] = "XAudioDownloadEffectsImage" #endif }, + // CDirectSound::SetPosition (XREF) + { + (OOVPA*)&DirectSound_CDirectSound_SetPosition_1_0_5558, 0, + + #ifdef _DEBUG_TRACE + "CDirectSound_SetPosition (XRef)" + #endif + }, + // IDirectSound8::SetPosition + { + (OOVPA*)&IDirectSound_SetPosition_1_0_5558, + + XTL::EmuIDirectSound8_SetPosition, + + #ifdef _DEBUG_TRACE + "EmuIDirectSound_SetPosition" + #endif + }, + // CDirectSound::SetVelocity (XREF) + { + (OOVPA*)&DirectSound_CDirectSound_SetVelocity_1_0_5558, 0, + + #ifdef _DEBUG_TRACE + "CDirectSound_SetVelocity (XRef)" + #endif + }, + // IDirectSound8::SetVelocity + { + (OOVPA*)&IDirectSound_SetVelocity_1_0_5558, + + XTL::EmuIDirectSound8_SetVelocity, + + #ifdef _DEBUG_TRACE + "EmuIDirectSound8_SetVelocity" + #endif + }, + // CDirectSound_CreateSoundStream + { + (OOVPA*)&DirectSound_CDirectSound_CreateSoundStream_1_0_5558, 0, + + #ifdef _DEBUG_TRACE + "CDirectSound::CreateSoundStream (XREF)" + #endif + }, + // IDirectSound_CreateSoundStream + { + (OOVPA*)&IDirectSound_CreateSoundStream_1_0_5558, + XTL::EmuIDirectSound8_CreateStream, + + #ifdef _DEBUG_TRACE + "IDirectSound_CreateSoundStream" + #endif + }, }; // ****************************************************************** diff --git a/src/CxbxKrnl/HLEDataBase/DSound.1.0.5849.inl b/src/CxbxKrnl/HLEDataBase/DSound.1.0.5849.inl index 56420cf47..0dc079a90 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.1.0.5849.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.1.0.5849.inl @@ -217,35 +217,35 @@ SOOVPA<8> IDirectSoundBuffer8_SetFormat_1_0_5849 = // ****************************************************************** // * CMcpxBuffer_Play // ****************************************************************** -//SOOVPA<11> CMcpxBuffer_Play_1_0_5849 = -//{ -// 0, // Large == 0 -// 11, // Count == 11 -// -// XREF_DSOUNDPLAY, // XRef Is Saved -// 0, // XRef Not Used -// -// { -// // CMcpxBuffer_Play+0x0B : test dword ptr [eax+8], 0x182000 -// { 0x0B, 0xF7 }, // (Offset,Value)-Pair #1 -// { 0x0C, 0x40 }, // (Offset,Value)-Pair #2 -// -// // CMcpxBuffer_Play+0x13 : jz +0x09 -// { 0x13, 0x74 }, // (Offset,Value)-Pair #3 -// { 0x14, 0x05 }, // (Offset,Value)-Pair #4 -// -// // CMcpxBuffer_Play+0x32 : test byte ptr [esi+0x12], 0x42 -// { 0x32, 0xF6 }, // (Offset,Value)-Pair #5 -// { 0x33, 0x46 }, // (Offset,Value)-Pair #6 -// { 0x34, 0x12 }, // (Offset,Value)-Pair #7 -// { 0x35, 0x42 }, // (Offset,Value)-Pair #8 -// -// // CMcpxBuffer_Play+0xA4 : call dword ptr [eax+0x1C] -// { 0xA4, 0xFF }, // (Offset,Value)-Pair #9 -// { 0xA5, 0x50 }, // (Offset,Value)-Pair #10 -// { 0xA6, 0x1C }, // (Offset,Value)-Pair #11 -// } -//}; +SOOVPA<11> CMcpxBuffer_Play_1_0_5849 = +{ + 0, // Large == 0 + 11, // Count == 11 + + XREF_DirectSound_CMcpxBuffer_Play, // XRef Is Saved + 0, // XRef Not Used + + { + // CMcpxBuffer_Play+0x0B : test dword ptr [eax+8], 0x182000 + { 0x0B, 0xF7 }, // (Offset,Value)-Pair #1 + { 0x0C, 0x40 }, // (Offset,Value)-Pair #2 + + // CMcpxBuffer_Play+0x13 : jz +0x09 + { 0x13, 0x74 }, // (Offset,Value)-Pair #3 + { 0x14, 0x05 }, // (Offset,Value)-Pair #4 + + // CMcpxBuffer_Play+0x32 : test byte ptr [esi+0x12], 0x42 + { 0x32, 0xF6 }, // (Offset,Value)-Pair #5 + { 0x33, 0x46 }, // (Offset,Value)-Pair #6 + { 0x34, 0x12 }, // (Offset,Value)-Pair #7 + { 0x35, 0x42 }, // (Offset,Value)-Pair #8 + + // CMcpxBuffer_Play+0xA4 : call dword ptr [eax+0x1C] + { 0xA4, 0xFF }, // (Offset,Value)-Pair #9 + { 0xA5, 0x50 }, // (Offset,Value)-Pair #10 + { 0xA6, 0x1C }, // (Offset,Value)-Pair #11 + } +}; // ****************************************************************** // * DirectSound::CMcpxBuffer::Play @@ -270,6 +270,76 @@ SOOVPA<8> DirectSound_CMcpxBuffer_Play_1_0_5849 = } }; +// ****************************************************************** +// * DirectSound::CMcpxBuffer::Play +// ****************************************************************** +SOOVPA<7> DirectSound_CMcpxBuffer_Play2_1_0_5849 = +{ + 0, // Large == 0 + 7, // Count == 7 + + XREF_DirectSound_CMcpxBuffer_Play2, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x17, 0x43 }, + { 0x2D, 0xF6 }, + { 0x2E, 0xC3 }, + { 0x2F, 0x04 }, + { 0xAD, 0xC2 }, + { 0xAE, 0x04 }, + { 0xAF, 0x00 }, + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSoundBuffer::Play +// ****************************************************************** +SOOVPA<9> DirectSound_CDirectSoundBuffer_Play_1_0_5849 = +{ + 0, // Large == 0 + 9, // Count == 9 + + XREF_DSOUNDPLAY2, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x0C, 0x00 }, + { 0x14, 0x74 }, + { 0x21, 0xB8 }, + { 0x2A, 0x24 }, + { 0x2E, 0x20 }, + { 0x33, 0x18 }, + { 0x39, 0x85 }, + { 0x44, 0xFF }, + { 0x4B, 0xC7 }, + } +}; + +// ****************************************************************** +// * IDirectSoundBuffer_Play +// ****************************************************************** +SOOVPA<8> IDirectSoundBuffer_Play_1_0_5849 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x1D, XREF_DSOUNDPLAY2 }, + + { 0x03, 0x10 }, + { 0x08, 0xFF }, + { 0x0D, 0xC8 }, + { 0x12, 0x83 }, + { 0x17, 0x1B }, + { 0x1C, 0xE8 }, + { 0x21, 0xC2 }, + } +}; + // ****************************************************************** // * DirectSound::CDirectSoundVoice::SetHeadroom // ****************************************************************** @@ -1842,6 +1912,131 @@ SOOVPA<7> DirectSoundDoWork_1_0_5849 = } }; +// ****************************************************************** +// * IDirectSound_SetEffectData +// ****************************************************************** +// * No XRefs! Woohoo! +// ****************************************************************** +SOOVPA<7> IDirectSound_SetEffectData_1_0_5849 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x04, 0x75 }, + { 0x0A, 0x75 }, + { 0x10, 0x14 }, + { 0x16, 0x10 }, + { 0x1C, 0x1B }, + { 0x26, 0x5D }, + { 0x28, 0x18 }, + } +}; + +// ****************************************************************** +// * DirectSound::CMemoryManager::PoolAlloc +// ****************************************************************** +SOOVPA<10> DirectSound_CMemoryManager_PoolAlloc_1_0_5849 = +{ + 0, // Large == 0 + 10, // Count == 10 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x24, 0x83 }, + { 0x25, 0x7C }, + { 0x26, 0x24 }, + { 0x27, 0x10 }, + { 0x28, 0x00 }, + { 0x37, 0xF3 }, + { 0x38, 0xAB }, + { 0x44, 0xC2 }, + { 0x45, 0x0C }, + { 0x46, 0x00 }, + } +}; + +// ****************************************************************** +// * XFileCreateMediaObjectAsync +// ****************************************************************** +SOOVPA<8> XFileCreateMediaObjectAsync_1_0_5849 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x0A, 0xC0 }, + { 0x16, 0xF8 }, + { 0x22, 0xE6 }, + { 0x2E, 0x20 }, + { 0x3D, 0x8B }, + { 0x49, 0x8B }, + { 0x52, 0x06 }, + { 0x5E, 0x0C }, + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSoundStream::SetPitch +// ****************************************************************** +SOOVPA<12> DirectSound_CDirectSoundStream_SetPitch_1_0_5849 = +{ + 0, // Large == 0 + 12, // Count == 12 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x36, XREF_DSBUFFERSETPITCHB }, + + { 0x00, 0x56 }, + { 0x0C, 0x00 }, + { 0x14, 0x74 }, + { 0x21, 0xB8 }, + { 0x2A, 0x24 }, + { 0x35, 0xE8 }, + { 0x40, 0x68 }, + { 0x4B, 0x8B }, + { 0x4F, 0xC2 }, + { 0x50, 0x08 }, + { 0x51, 0x00 }, + } +}; + +// ****************************************************************** +// * DirectSound::CDirectSoundStream::SetHeadroom +// ****************************************************************** +SOOVPA<9> DirectSound_CDirectSoundStream_SetHeadroom_1_0_5849 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x36, XREF_DirectSound_CDirectSoundVoice_SetHeadroom }, + + { 0x00, 0x56 }, + { 0x0C, 0x00 }, + { 0x14, 0x74 }, + { 0x21, 0xB8 }, + { 0x2A, 0x24 }, + { 0x35, 0xE8 }, + { 0x40, 0x68 }, + { 0x4B, 0x8B }, + } +}; + // ****************************************************************** // * Direct_1_0_5849 // ****************************************************************** @@ -2149,7 +2344,7 @@ OOVPATable DSound_1_0_5849[] = "IDirectSoundBuffer8_SetMinDistance" #endif }, - // CMcpxBuffer::Play + // CMcpxBuffer::Play { (OOVPA*)&DirectSound_CMcpxBuffer_Play_1_0_5849, 0, @@ -2157,24 +2352,14 @@ OOVPATable DSound_1_0_5849[] = "CMcpxBuffer_Play (XREF)" #endif }, - // CDirectSoundBuffer::Play (* unchanged since 4361 *) - { - (OOVPA*)&CDirectSoundBuffer_Play_1_0_4361, 0, + // CMcpxBuffer::Play + /*{ + (OOVPA*)&CMcpxBuffer_Play_1_0_5849, 0, #ifdef _DEBUG_TRACE - "CDirectSoundBuffer_Play (XREF)" + "CMcpxBuffer_Play2 (XREF)" #endif - }, - // IDirectSoundBuffer8::Play (* unchanged since 4361 *) - { - (OOVPA*)&IDirectSoundBuffer8_Play_1_0_4361, - - XTL::EmuIDirectSoundBuffer8_Play, - - #ifdef _DEBUG_TRACE - "IDirectSoundBuffer8_Play" - #endif - }, + },*/ // IDirectSoundBuffer_Stop (Possibly weak, but quite OK for 4627 DSOUND) { (OOVPA*)&IDirectSoundBuffer_Stop_1_0_4627, @@ -2742,6 +2927,95 @@ OOVPATable DSound_1_0_5849[] = "CDirectSound_SynchPlayback_1_0_5558" #endif }, + // XAudioDownloadEffectsImage (* unchanged since 4627 *) + { + (OOVPA*)&XAudioDownloadEffectsImage_1_0_4627, + XTL::EmuXAudioDownloadEffectsImage, + + #ifdef _DEBUG_TRACE + "EmuXAudioDownloadEffectsImage" + #endif + }, + // IDirectSoundStream_FlushEx + { + (OOVPA*)&IDirectSound_SetEffectData_1_0_5849, + XTL::EmuIDirectSound8_SetEffectData, + + #ifdef _DEBUG_TRACE + "EmuIDirectSound_SetEffectData" + #endif + }, + // DirectSound::CMemoryManager::PoolAlloc + { + (OOVPA*)&DirectSound_CMemoryManager_PoolAlloc_1_0_5849, 0, + + #ifdef _DEBUG_TRACE + "DirectSound::CMemoryManager::PoolAlloc (XREF)" + #endif + }, + // XFileCreateMediaObjectAsync + { + (OOVPA*)&XFileCreateMediaObjectAsync_1_0_5849, + + XTL::EmuXFileCreateMediaObjectAsync, + + #ifdef _DEBUG_TRACE + "XFileCreateMediaObjectAsync" + #endif + }, + // CDirectSoundStream::SetFormat (* unchanged since 5558 *) + { + (OOVPA*)&DirectSound_CDirectSoundStream_SetFormat_1_0_5558, + XTL::EmuCDirectSoundStream_SetFormat, + + #ifdef _DEBUG_TRACE + "CDirectSoundStream::SetFormat" + #endif + }, + // CDirectSoundStream::SetPitch + { + (OOVPA*)&DirectSound_CDirectSoundStream_SetPitch_1_0_5849, + XTL::EmuCDirectSoundStream_SetPitch, + + #ifdef _DEBUG_TRACE + "CDirectSoundStream::SetPitch" + #endif + }, + // DirectSound::CDirectSoundStream::SetHeadroom + { + (OOVPA*)&DirectSound_CDirectSoundStream_SetHeadroom_1_0_5849, + XTL::EmuIDirectSoundStream_SetHeadroom, + + #ifdef _DEBUG_TRACE + "DirectSound::CDirectSoundStream::SetHeadroom" + #endif + }, + // CMcpxBuffer::Play2 + { + (OOVPA*)&DirectSound_CMcpxBuffer_Play2_1_0_5849, 0, + + #ifdef _DEBUG_TRACE + "CMcpxBuffer_Play2 (XREF)" + #endif + }, + // CDirectSoundBuffer::Play + { + (OOVPA*)&DirectSound_CDirectSoundBuffer_Play_1_0_5849, 0, + + #ifdef _DEBUG_TRACE + "CDirectSoundBuffer_Play (XREF)" + #endif + }, + // IDirectSoundBuffer8::Play + { + (OOVPA*)&IDirectSoundBuffer_Play_1_0_5849, + + XTL::EmuIDirectSoundBuffer8_Play, + + #ifdef _DEBUG_TRACE + "IDirectSoundBuffer8_Play" + #endif + }, }; // ****************************************************************** diff --git a/src/CxbxKrnl/HLEDataBase/Xapi.1.0.3911.inl b/src/CxbxKrnl/HLEDataBase/Xapi.1.0.3911.inl index 75ce4d0cd..a7004e5f8 100644 --- a/src/CxbxKrnl/HLEDataBase/Xapi.1.0.3911.inl +++ b/src/CxbxKrnl/HLEDataBase/Xapi.1.0.3911.inl @@ -1613,6 +1613,52 @@ SOOVPA<7> GetFileAttributesA_1_0_3911 = } }; +// ****************************************************************** +// * ReadFileEx@20 +// ****************************************************************** +SOOVPA<8> ReadFileEx_1_0_3911 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x09, 0x48 }, + { 0x14, 0x8D }, + { 0x1F, 0xFF }, + { 0x2A, 0xFF }, + { 0x2F, 0x00 }, + { 0x35, 0x00 }, + { 0x40, 0x50 }, + { 0x4B, 0xC0 }, + } +}; + +// ****************************************************************** +// * WriteFileEx +// ****************************************************************** +SOOVPA<8> WriteFileEx_1_0_3911 = +{ + 0, // Large == 0 + 8, // Count == 8 + + -1, // Xref Not Saved + 0, // Xref Not Used + + { + { 0x09, 0x48 }, + { 0x14, 0x8D }, + { 0x1F, 0xFF }, + { 0x2A, 0xFF }, + { 0x2F, 0xFC }, + { 0x35, 0x00 }, + { 0x40, 0x50 }, + { 0x4B, 0xC0 }, + } +}; + // ****************************************************************** // * XAPI_1_0_3911 // ****************************************************************** @@ -2120,6 +2166,24 @@ OOVPATable XAPI_1_0_3911[] = "EmuGetFileAttributesA" #endif }, + // ReadFileEx + /*{ + (OOVPA*)&ReadFileEx_1_0_3911, + XTL::EmuReadFileEx, + + #ifdef _DEBUG_TRACE + "EmuReadFileEx" + #endif + }, + // WriteFileEx + { + (OOVPA*)&WriteFileEx_1_0_3911, + XTL::EmuWriteFileEx, + + #ifdef _DEBUG_TRACE + "EmuWriteFileEx" + #endif + },*/ // CloseHandle /*{ (OOVPA*)&CloseHandle_1_0_3911, diff --git a/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.h b/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.h index 5e055412b..e960511f6 100644 --- a/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.h +++ b/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.h @@ -36,6 +36,7 @@ #include "OOVPA.h" +extern SOOVPA<7> XapiInitProcess_1_0_4831; extern SOOVPA<7> XapiInitProcess_1_0_4928; extern SOOVPA<7> XapiInitProcess_1_0_5028; extern OOVPATable XAPI_1_0_4627[]; diff --git a/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl b/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl index e80b1eaee..7736ebdde 100644 --- a/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl +++ b/src/CxbxKrnl/HLEDataBase/Xapi.1.0.4627.inl @@ -32,7 +32,7 @@ // * // ****************************************************************** -// NOTE: This function actually came in with 4928 +// NOTE: This function actually came in with 4831, not 4928! // ****************************************************************** // * XapiApplyKernelPatches // ****************************************************************** @@ -78,6 +78,35 @@ SOOVPA<7> XapiInitProcess_1_0_4928 = } }; +// ****************************************************************** +// * XapiInitProcess +// ****************************************************************** +SOOVPA<7> XapiInitProcess_1_0_4831 = +{ + 0, // Large == 0 + 7, // Count == 7 + + -1, // XRef Not Saved + 0, // XRef Not Used + + { + // XapiInitProcess+0x03 : sub esp, 0x34 + { 0x05, 0x34 }, // (Offset,Value)-Pair #1 + + // XapiInitProcess+0x13 : push 0x0C + { 0x13, 0x6A }, // (Offset,Value)-Pair #2 + { 0x14, 0x0C }, // (Offset,Value)-Pair #3 + + // XapiInitProcess+0x2A : repe stosd + { 0x1B, 0xF3 }, // (Offset,Value)-Pair #4 + { 0x1C, 0xAB }, // (Offset,Value)-Pair #5 + + // XapiInitProcess+0x55 : jz +0x0B + { 0x48, 0x74 }, // (Offset,Value)-Pair #6 + { 0x49, 0x4A }, // (Offset,Value)-Pair #7 + } +}; + // ****************************************************************** // * XapiInitProcess // ****************************************************************** @@ -1217,6 +1246,16 @@ OOVPATable XAPI_1_0_4627[] = #endif }, // XapiInitProcess + { + (OOVPA*)&XapiInitProcess_1_0_4831, + + XTL::EmuXapiInitProcess, + + #ifdef _DEBUG_TRACE + "EmuXapiInitProcess (4831)" + #endif + }, + // XapiInitProcess { (OOVPA*)&XapiInitProcess_1_0_5028, diff --git a/src/CxbxKrnl/HLEDataBase/Xapi.1.0.5558.inl b/src/CxbxKrnl/HLEDataBase/Xapi.1.0.5558.inl index a940df937..2a34d3751 100644 --- a/src/CxbxKrnl/HLEDataBase/Xapi.1.0.5558.inl +++ b/src/CxbxKrnl/HLEDataBase/Xapi.1.0.5558.inl @@ -435,6 +435,53 @@ SOOVPA<7> XapiFiberStartup_1_0_5558 = } }; +// ****************************************************************** +// * XID_fCloseDevice +// ****************************************************************** +SOOVPA<7> XID_fCloseDevice_1_0_5558 = +{ + 0, // Large == 0 + 7, // Count == 7 + + XREF_FCLOSEDEVICE, // Xref Is Saved + 0, // Xref Not Used + + { + { 0x11, 0x45 }, + { 0x24, 0xFF }, + { 0x37, 0x89 }, + { 0x4A, 0x86 }, + { 0x5D, 0x53 }, + { 0x70, 0xFF }, + { 0x84, 0x89 }, + } +}; + +// ****************************************************************** +// * XInputClose +// ****************************************************************** +SOOVPA<9> XInputClose_1_0_5558 = +{ + 0, // Large == 0 + 9, // Count == 9 + + -1, // Xref Not Saved + 1, // Xref Is Used + + { + { 0x05, XREF_FCLOSEDEVICE }, + + { 0x00, 0x8B }, + { 0x01, 0x4C }, + { 0x02, 0x24 }, + { 0x03, 0x04 }, + { 0x04, 0xE8 }, + { 0x09, 0xC2 }, + { 0x0A, 0x04 }, + { 0x0B, 0x00 }, + } +}; + // ****************************************************************** // * XAPI_1_0_5558 // ****************************************************************** @@ -856,6 +903,24 @@ OOVPATable XAPI_1_0_5558[] = "EmuRtlDestroyHeap" #endif }, + // XID_fCloseDevice + { + (OOVPA*)&XID_fCloseDevice_1_0_5558, 0, + + #ifdef _DEBUG_TRACE + "XID_fCloseDevice (XREF)" + #endif + }, + // XInputClose + { + (OOVPA*)&XInputClose_1_0_5558, + + XTL::EmuXInputClose, + + #ifdef _DEBUG_TRACE + "EmuXInputClose" + #endif + }, }; // ****************************************************************** diff --git a/src/CxbxKrnl/HLEIntercept.cpp b/src/CxbxKrnl/HLEIntercept.cpp index 05c01b017..5f375a3bc 100644 --- a/src/CxbxKrnl/HLEIntercept.cpp +++ b/src/CxbxKrnl/HLEIntercept.cpp @@ -365,6 +365,12 @@ void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHead if(OrigBuildVersion == 4928 || OrigBuildVersion == 4831) { pFunc = EmuLocateFunction((OOVPA*)&XapiInitProcess_1_0_4928, lower, upper); + + if( pFunc == 0 ) + { + pFunc = EmuLocateFunction((OOVPA*)&XapiInitProcess_1_0_4831, lower, upper); + } + ProcessHeapOffs = 0x44; RtlCreateHeapOffs = 0x3B; } @@ -491,6 +497,7 @@ void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHead } DbgPrintf("HLE: 0x%.08X -> EmuD3DDeferredRenderState\n", XTL::EmuD3DDeferredRenderState); + //DbgPrintf("HLE: 0x%.08X -> XREF_D3DRS_ROPZCMPALWAYSREAD\n", XRefDataBase[XREF_D3DRS_ROPZCMPALWAYSREAD] ); } else {