diff --git a/src/CxbxKrnl/HLEDataBase.h b/src/CxbxKrnl/HLEDataBase.h index f359848c9..fe533662a 100644 --- a/src/CxbxKrnl/HLEDataBase.h +++ b/src/CxbxKrnl/HLEDataBase.h @@ -215,8 +215,8 @@ enum XRefDataBaseOffset XREF_CDirectSoundVoiceSettings_SetMixBinVolumes, XREF_CDirectSound_SetPosition, XREF_CMcpxAPU_Set3dPosition, - XREF_DSSETVELOCITYA, - XREF_DSSETVELOCITYB, + XREF_CDirectSound_SetVelocity, + XREF_CMcpxAPU_Set3dVelocity, XREF_CDirectSound_DoWork, XREF_CMcpxAPU_ServiceDeferredCommandsLow, XREF_CDirectSound_SetAllParameters, diff --git a/src/CxbxKrnl/HLEDataBase/DSound.1.0.3911.inl b/src/CxbxKrnl/HLEDataBase/DSound.1.0.3911.inl index 3de579238..e40cde9a4 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.1.0.3911.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.1.0.3911.inl @@ -3404,6 +3404,7 @@ OOVPA_XREF(IDirectSound_SetPosition, 3911, 11, { 0x32, 0xC2 }, { 0x33, 0x14 }, OOVPA_END; + // ****************************************************************** // * CMcpxVoiceClient_Set3dVelocity // ****************************************************************** @@ -4676,7 +4677,7 @@ OOVPA_END; // ****************************************************************** OOVPA_XREF(CMcpxAPU_Set3dVelocity, 3911, 12, - XREF_DSSETVELOCITYB, + XREF_CMcpxAPU_Set3dVelocity, XRefZero) // CMcpxAPU_Set3dVelocity+0x0C : movsd; movsd; movsd @@ -4703,11 +4704,11 @@ OOVPA_END; // ****************************************************************** OOVPA_XREF(CDirectSound_SetVelocity, 3911, 10, - XREF_DSSETVELOCITYA, + XREF_CDirectSound_SetVelocity, XRefOne) // CDirectSound_SetVelocity+0x35 : call [CMcpxAPU_Set3dVelocity] - XREF_ENTRY( 0x35, XREF_DSSETVELOCITYB ), + XREF_ENTRY( 0x35, XREF_CMcpxAPU_Set3dVelocity ), // CDirectSound_SetVelocity+0x06 : push esi; push edi { 0x06, 0x56 }, @@ -4735,7 +4736,7 @@ OOVPA_XREF(IDirectSound_SetVelocity, 3911, 11, XRefOne) // IDirectSound_SetVelocity+0x2D : call [CDirectSound_SetVelocity] - XREF_ENTRY( 0x2D, XREF_DSSETVELOCITYA ), + XREF_ENTRY( 0x2D, XREF_CDirectSound_SetVelocity ), // IDirectSound_SetVelocity+0x06 : fld [ebp+0x14] { 0x06, 0xD9 }, diff --git a/src/CxbxKrnl/HLEDataBase/DSound.1.0.3936.inl b/src/CxbxKrnl/HLEDataBase/DSound.1.0.3936.inl index 1690e3100..83d3311d2 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.1.0.3936.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.1.0.3936.inl @@ -2932,7 +2932,7 @@ OOVPA_END; // ****************************************************************** OOVPA_XREF(CMcpxAPU_Set3dVelocity, 3936, 12, - XREF_DSSETVELOCITYB, + XREF_CMcpxAPU_Set3dVelocity, XRefZero) // CMcpxAPU_Set3dVelocity+0x0C : movsd; movsd; movsd @@ -2960,11 +2960,11 @@ OOVPA_END; // ****************************************************************** OOVPA_XREF(CDirectSound_SetVelocity, 3936, 10, - XREF_DSSETVELOCITYA, + XREF_CDirectSound_SetVelocity, XRefOne) // CDirectSound_SetVelocity+0x35 : call [CMcpxAPU_Set3dVelocity] - XREF_ENTRY( 0x35, XREF_DSSETVELOCITYB ), + XREF_ENTRY( 0x35, XREF_CMcpxAPU_Set3dVelocity ), // CDirectSound_SetVelocity+0x06 : push esi; push edi { 0x06, 0x56 }, @@ -2992,7 +2992,7 @@ OOVPA_XREF(IDirectSound_SetVelocity, 3936, 11, XRefOne) // IDirectSound_SetVelocity+0x2D : call [CDirectSound_SetVelocity] - XREF_ENTRY( 0x2D, XREF_DSSETVELOCITYA ), + XREF_ENTRY( 0x2D, XREF_CDirectSound_SetVelocity ), // IDirectSound_SetVelocity+0x06 : fld [ebp+0x14] { 0x06, 0xD9 }, diff --git a/src/CxbxKrnl/HLEDataBase/DSound.1.0.4039.inl b/src/CxbxKrnl/HLEDataBase/DSound.1.0.4039.inl index 14d6fb290..81443d012 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.1.0.4039.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.1.0.4039.inl @@ -2371,3 +2371,134 @@ OOVPA_XREF(CDirectSound_DownloadEffectsImage, 4039, 18, { 0x60, 0xC2 }, { 0x61, 0x14 }, OOVPA_END; + +// ****************************************************************** +// * IDirectSoundBuffer_SetHeadroom +// ****************************************************************** +//Generic OOVPA as of 4039 and newer. +OOVPA_XREF(IDirectSoundBuffer_SetHeadroom, 4039, 10, + + XRefNoSaveIndex, + XRefOne) + + // IDirectSoundBuffer_SetHeadroom+0x15 : call [CDirectSoundBuffer_SetHeadroom] + XREF_ENTRY( 0x15, XREF_CDirectSoundBuffer_SetHeadroom ), + + // IDirectSoundBuffer_SetHeadroom+0x04 : push [esp+0x08] + { 0x04, 0xFF }, + { 0x05, 0x74 }, + { 0x06, 0x24 }, + { 0x07, 0x08 }, + + // IDirectSoundBuffer_SetHeadroom+0x0A : add eax, 0xFFFFFFE4 + { 0x0A, 0x83 }, + { 0x0B, 0xC0 }, + { 0x0C, 0xE4 }, + + // IDirectSoundBuffer_SetHeadroom+0x19 : retn 0x08 + { 0x19, 0xC2 }, + { 0x1A, 0x08 }, +OOVPA_END; + +// ****************************************************************** +// * CDirectSound_SetPosition +// ****************************************************************** +OOVPA_XREF(CDirectSound_SetPosition, 4039, 14, + + XREF_CDirectSound_SetPosition, + XRefZero) + + // CDirectSound_SetPosition+0x00 : push ebp + { 0x00, 0x55}, + + // CDirectSound_SetPosition+0x2A : mov ecx, [ebp+0x08] + { 0x2A, 0x8B }, + { 0x2B, 0x4D }, + { 0x2C, 0x08 }, + + // CDirectSound_SetPosition+0x3E : mov [edx+0x1C], edi + { 0x3E, 0x89 }, + { 0x3F, 0x7A }, + { 0x40, 0x1C }, + + // CDirectSound_SetPosition+0x4B : or word ptr [eax+0x84], 0x01FF + { 0x4B, 0x80 }, + { 0x4C, 0x88 }, + { 0x4D, 0x84 }, + { 0x4E, 0x00 }, + { 0x51, 0xFF }, + + // CDirectSound_SetPosition+0x72 : retn 0x14 + { 0x72, 0xC2 }, + { 0x73, 0x14 }, +OOVPA_END; + +// ****************************************************************** +// * CDirectSound::SetVelocity +// ****************************************************************** +OOVPA_XREF(CDirectSound_SetVelocity, 4039, 16, + + XREF_CDirectSound_SetVelocity, + XRefZero) + + // CDirectSound_SetVelocity+0x00 : push ebp + { 0x00, 0x55}, + + // CDirectSound_SetVelocity+0x23 : mov eax, 0x80004005 + { 0x23, 0xB8 }, + { 0x24, 0x05 }, + { 0x25, 0x40 }, + { 0x26, 0x00 }, + { 0x27, 0x80 }, + + // CDirectSound_SetVelocity+0x36 : mov [edx+0x24], edi + { 0x36, 0x89 }, + { 0x37, 0x7A }, + { 0x38, 0x24 }, + + // CDirectSound_SetVelocity+0x4B : or dword ptr [eax+0x084], 0x40 + { 0x4B, 0x83 }, + { 0x4C, 0x88 }, + { 0x4D, 0x84 }, + { 0x4F, 0x00 }, + { 0x51, 0x40 }, + + // CDirectSound_SetVelocity+0x72 : retn 0x14 + { 0x72, 0xC2 }, + { 0x73, 0x14 }, +OOVPA_END; + +// ****************************************************************** +// * CDirectSound::SetI3DL2Listener +// ****************************************************************** +OOVPA_XREF(CDirectSound_SetI3DL2Listener, 4039, 16, + + XREF_CDirectSound_SetI3DL2Listener, + XRefZero) + // CDirectSound_SetI3DL2Listener+0x00 : push ebp + { 0x00, 0x55 }, + + // CDirectSound_SetI3DL2Listener+0x35 : cmp dword ptr [eax+0C],-01 + { 0x35, 0x83 }, + //{ 0x36, 0x78 }, + { 0x37, 0x0C }, + { 0x38, 0xFF }, + + // CDirectSound_SetI3DL2Listener+0x3B : mov [ebp-04h],0x88780032 + { 0x3B, 0xC7 }, + { 0x3C, 0x45 }, + { 0x3D, 0xFC }, + { 0x3E, 0x32 }, + { 0x3F, 0x00 }, + { 0x40, 0x78 }, + { 0x41, 0x88 }, + + // CDirectSound_SetI3DL2Listener+0x45 : mov esi,[ebp+0Ch] + { 0x45, 0x8B }, + { 0x46, 0x75 }, + { 0x47, 0x0C }, + + // CDirectSound_SetI3DL2Listener+0x7F : retn 0x0C + { 0x7F, 0xC2 }, + { 0x80, 0x0C }, +OOVPA_END; diff --git a/src/CxbxKrnl/HLEDataBase/DSound.1.0.4134.inl b/src/CxbxKrnl/HLEDataBase/DSound.1.0.4134.inl index dd73f4ed3..e73f4de71 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.1.0.4134.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.1.0.4134.inl @@ -248,7 +248,7 @@ OOVPA_XREF(CDirectSoundBuffer_SetHeadroom, 4134, 8, { 0x47, 0x8B }, OOVPA_END; - +#if 0 // Replaced with generic OOVPA 4039 // ****************************************************************** // * IDirectSoundBuffer_SetHeadroom // ****************************************************************** @@ -268,7 +268,7 @@ OOVPA_XREF(IDirectSoundBuffer_SetHeadroom, 4134, 8, { 0x19, 0xC2 }, { 0x1A, 0x08 }, OOVPA_END; - +#endif // ****************************************************************** // * CDirectSoundVoiceSettings::SetMixBins // ****************************************************************** @@ -405,11 +405,14 @@ OOVPA_END; // ****************************************************************** // * CDirectSound_SetPosition // ****************************************************************** -OOVPA_XREF(CDirectSound_SetPosition, 4134, 11, +OOVPA_XREF(CDirectSound_SetPosition, 4134, 14, XREF_CDirectSound_SetPosition, XRefZero) + // CDirectSound_SetPosition+0x00 : push ebp + { 0x00, 0x55}, + // CDirectSound_SetPosition+0x2B : mov ecx, [ebp+0x08] { 0x2B, 0x8B }, { 0x2C, 0x4D }, @@ -426,6 +429,10 @@ OOVPA_XREF(CDirectSound_SetPosition, 4134, 11, { 0x4E, 0xA4 }, { 0x4F, 0x00 }, { 0x52, 0xFF }, + + // CDirectSound_SetPosition+0x73 : retn 0x14 + { 0x73, 0xC2 }, + { 0x74, 0x14 }, OOVPA_END; // ****************************************************************** @@ -2392,11 +2399,14 @@ OOVPA_END; // ****************************************************************** // * CDirectSound::SetVelocity // ****************************************************************** -OOVPA_XREF(CDirectSound_SetVelocity, 4134, 15, +OOVPA_XREF(CDirectSound_SetVelocity, 4134, 16, - XREF_DSSETVELOCITYA, + XREF_CDirectSound_SetVelocity, XRefZero) + // CDirectSound_SetVelocity+0x00 : push ebp + { 0x00, 0x55}, + // CDirectSound_SetVelocity+0x24 : mov eax, 0x80004005 { 0x24, 0xB8 }, { 0x25, 0x05 }, @@ -3037,14 +3047,14 @@ OOVPATable DSound_4134[] = { REGISTER_OOVPA(IDirectSound_SetI3DL2Listener, 3911, PATCH), REGISTER_OOVPA(CDirectSoundVoice_SetHeadroom, 4134, XREF), REGISTER_OOVPA(CDirectSoundBuffer_SetHeadroom, 4134, XREF), - REGISTER_OOVPA(IDirectSoundBuffer_SetHeadroom, 4134, PATCH), + REGISTER_OOVPA(IDirectSoundBuffer_SetHeadroom, 4039, PATCH), REGISTER_OOVPA(IDirectSound_SetVelocity, 3911, PATCH), REGISTER_OOVPA(IDirectSound_SetAllParameters, 3911, PATCH), REGISTER_OOVPA(CDirectSoundVoiceSettings_SetMixBins, 4134, XREF), REGISTER_OOVPA(CDirectSoundVoice_SetMixBins, 4039, XREF), REGISTER_OOVPA(CDirectSoundBuffer_SetMixBins, 4134, XREF), REGISTER_OOVPA(IDirectSoundBuffer_SetMixBins, 4134, PATCH), - REGISTER_OOVPA(CDirectSound_SetPosition, 4134, XREF), // TODO: Find a cure for laziness... + REGISTER_OOVPA(CDirectSound_SetPosition, 4134, XREF), REGISTER_OOVPA(IDirectSound_SetPosition, 3911, PATCH), REGISTER_OOVPA(IDirectSound_CreateSoundBuffer, 3911, PATCH), REGISTER_OOVPA(IDirectSound_AddRef, 3911, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/DSound.1.0.4627.inl b/src/CxbxKrnl/HLEDataBase/DSound.1.0.4627.inl index e6d14a447..e3808a458 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.1.0.4627.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.1.0.4627.inl @@ -100,7 +100,7 @@ OOVPA_END; // ****************************************************************** OOVPA_XREF(CDirectSound_SetVelocity, 4627, 15, - XREF_DSSETVELOCITYA, + XREF_CDirectSound_SetVelocity, XRefZero) // CDirectSound_SetVelocity+0x24 : mov eax, 0x80004005 @@ -1489,7 +1489,7 @@ OOVPATable DSound_4627[] = { REGISTER_OOVPA(CDirectSound_SetMixBinHeadroom, 4627, XREF), REGISTER_OOVPA(IDirectSound_SetMixBinHeadroom, 4627, PATCH), REGISTER_OOVPA(CDirectSoundBuffer_SetHeadroom, 4134, XREF), - REGISTER_OOVPA(IDirectSoundBuffer_SetHeadroom, 4134, PATCH), + REGISTER_OOVPA(IDirectSoundBuffer_SetHeadroom, 4039, PATCH), REGISTER_OOVPA(CDirectSound_SetVelocity, 4627, XREF), REGISTER_OOVPA(IDirectSound_SetVelocity, 3911, PATCH), REGISTER_OOVPA(CDirectSound_SetAllParametersA, 4627, XREF), diff --git a/src/CxbxKrnl/HLEDataBase/DSound.1.0.5028.inl b/src/CxbxKrnl/HLEDataBase/DSound.1.0.5028.inl index f8c1e7dfd..82325d97c 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.1.0.5028.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.1.0.5028.inl @@ -65,7 +65,7 @@ OOVPATable DSound_5028[] = { REGISTER_OOVPA(CDirectSound_SetMixBinHeadroom, 4627, XREF), REGISTER_OOVPA(IDirectSound_SetMixBinHeadroom, 4627, PATCH), REGISTER_OOVPA(CDirectSoundBuffer_SetHeadroom, 4134, XREF), - REGISTER_OOVPA(IDirectSoundBuffer_SetHeadroom, 4134, PATCH), + REGISTER_OOVPA(IDirectSoundBuffer_SetHeadroom, 4039, PATCH), REGISTER_OOVPA(CDirectSound_SetVelocity, 4627, XREF), REGISTER_OOVPA(IDirectSound_SetVelocity, 3911, PATCH), REGISTER_OOVPA(CDirectSound_SetAllParametersA, 4627, XREF), diff --git a/src/CxbxKrnl/HLEDataBase/DSound.1.0.5344.inl b/src/CxbxKrnl/HLEDataBase/DSound.1.0.5344.inl index 41b7295c7..0f2709665 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.1.0.5344.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.1.0.5344.inl @@ -432,7 +432,7 @@ OOVPA_END; // ****************************************************************** OOVPA_XREF(CDirectSound_SetVelocity, 5344, 14, - XREF_DSSETVELOCITYA, + XREF_CDirectSound_SetVelocity, XRefZero) // CDirectSound_SetVelocity+0x24 : mov eax, 0x80004005 diff --git a/src/CxbxKrnl/HLEDataBase/DSound.1.0.5558.inl b/src/CxbxKrnl/HLEDataBase/DSound.1.0.5558.inl index ec29bce5d..0ae11919b 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.1.0.5558.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.1.0.5558.inl @@ -1422,7 +1422,7 @@ OOVPA_END; // ****************************************************************** OOVPA_XREF(CDirectSound_SetVelocity, 5558, 7, - XREF_DSSETVELOCITYA, + XREF_CDirectSound_SetVelocity, XRefZero) { 0x0F, 0x00 }, @@ -1442,7 +1442,7 @@ OOVPA_XREF(IDirectSound_SetVelocity, 5558, 8, XRefNoSaveIndex, XRefOne) - XREF_ENTRY( 0x2D, XREF_DSSETVELOCITYA ), + XREF_ENTRY( 0x2D, XREF_CDirectSound_SetVelocity ), { 0x05, 0x18 }, { 0x0C, 0x83 }, diff --git a/src/CxbxKrnl/HLEDataBase/DSound.OOVPA.inl b/src/CxbxKrnl/HLEDataBase/DSound.OOVPA.inl index ddc7ff2ad..006308b3b 100644 --- a/src/CxbxKrnl/HLEDataBase/DSound.OOVPA.inl +++ b/src/CxbxKrnl/HLEDataBase/DSound.OOVPA.inl @@ -275,12 +275,12 @@ OOVPATable DSound_OOVPAV2[] = { REGISTER_OOVPAS(CDirectSound_SetDistanceFactor, XREF, 3911, 4039, 4134, 4627, 5344, 5558), REGISTER_OOVPAS(CDirectSound_SetDopplerFactor, XREF, 3911, 4039, 4134, 4627, 5344, 5558, 5788), REGISTER_OOVPAS(CDirectSound_SetEffectData, XREF, 3911, 4134), - REGISTER_OOVPAS(CDirectSound_SetI3DL2Listener, XREF, 3911, 4134, 5344, 5558), + REGISTER_OOVPAS(CDirectSound_SetI3DL2Listener, XREF, 3911, 4039, 4134, 5344, 5558), REGISTER_OOVPAS(CDirectSound_SetMixBinHeadroom, XREF, 3911, 4627, 5558), REGISTER_OOVPAS(CDirectSound_SetOrientation, XREF, 3911, 4039, 4134), - REGISTER_OOVPAS(CDirectSound_SetPosition, XREF, 3911, 4134, 4627, 5344, 5558), // TODO: Find a cure for laziness... (from 4134's comment) + REGISTER_OOVPAS(CDirectSound_SetPosition, XREF, 3911, 4039, 4134, 4627, 5344, 5558), REGISTER_OOVPAS(CDirectSound_SetRolloffFactor, XREF, 3911, 4039, 4134, 5344, 5558, 5788, 5849), - REGISTER_OOVPAS(CDirectSound_SetVelocity, XREF, 3911, 4134, 4627, 5344, 5558), + REGISTER_OOVPAS(CDirectSound_SetVelocity, XREF, 3911, 4039, 4134, 4627, 5344, 5558), REGISTER_OOVPAS(CDirectSound_SynchPlayback, XREF, 5233, 5344, 5558), REGISTER_OOVPAS(IDirectSoundBuffer_AddRef, PATCH, 3911), REGISTER_OOVPAS(IDirectSoundBuffer_GetCurrentPosition, PATCH, 3911), @@ -302,7 +302,7 @@ OOVPATable DSound_OOVPAV2[] = { REGISTER_OOVPAS(IDirectSoundBuffer_SetFilter, PATCH, 3911, 4039), REGISTER_OOVPAS(IDirectSoundBuffer_SetFormat, PATCH, 4242, 5558), REGISTER_OOVPAS(IDirectSoundBuffer_SetFrequency, PATCH, 3911, 4039), - REGISTER_OOVPAS(IDirectSoundBuffer_SetHeadroom, PATCH, 3911, 4134, 5344, 5558), + REGISTER_OOVPAS(IDirectSoundBuffer_SetHeadroom, PATCH, 3911, 4039, 5344, 5558), REGISTER_OOVPAS(IDirectSoundBuffer_SetI3DL2Source, PATCH, 3911, 4134, 5558), REGISTER_OOVPAS(IDirectSoundBuffer_SetLFO, PATCH, 3911, 4039), REGISTER_OOVPAS(IDirectSoundBuffer_SetLoopRegion, PATCH, 3911),