HLEDatabase code cleanup
This commit is contained in:
parent
5965143104
commit
b7131a8cfe
|
@ -109,7 +109,7 @@ const char *Lib_XONLINES = "XONLINES";
|
||||||
// For example, HLE_ENTRY(Lib_XAPILIB, XAPI, 3911) results in:
|
// For example, HLE_ENTRY(Lib_XAPILIB, XAPI, 3911) results in:
|
||||||
// {Lib_XAPILIB, 3911, XAPI_1_0_3911, XAPI_1_0_3911_SIZE }
|
// {Lib_XAPILIB, 3911, XAPI_1_0_3911, XAPI_1_0_3911_SIZE }
|
||||||
|
|
||||||
HLEData HLEDataBase[] =
|
const HLEData HLEDataBase[] =
|
||||||
{
|
{
|
||||||
HLE_ENTRY(Lib_XAPILIB, XAPI, 3911),
|
HLE_ENTRY(Lib_XAPILIB, XAPI, 3911),
|
||||||
HLE_ENTRY(Lib_XAPILIB, XAPI, 4034),
|
HLE_ENTRY(Lib_XAPILIB, XAPI, 4034),
|
||||||
|
@ -167,228 +167,16 @@ HLEData HLEDataBase[] =
|
||||||
};
|
};
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * HLEDataBaseSize
|
// * HLEDataBaseCount
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
extern uint32 HLEDataBaseSize = sizeof(HLEDataBase);
|
extern const uint32 HLEDataBaseCount = sizeof(HLEDataBase) / sizeof(HLEData);
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * XRefDataBase
|
// * XRefDataBase
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
extern uint32 XRefDataBase[] =
|
extern uint32 XRefDataBase[XREF_COUNT] = { 0 }; // Reset and populated by EmuHLEIntercept
|
||||||
{
|
|
||||||
-1, // XREF_D3DDEVICE
|
|
||||||
-1, // XREF_DXSRSCULLMODE
|
|
||||||
-1, // XREF_D3DRS_MULTISAMPLEMODE
|
|
||||||
-1, // XREF_D3DRS_MULTISAMPLERENDERTARGETMODE
|
|
||||||
-1, // XREF_D3DRS_ROPZCMPALWAYSREAD
|
|
||||||
-1, // XREF_D3DRS_ROPZREAD
|
|
||||||
-1, // XREF_D3DRS_DONOTCULLUNCOMPRESSED
|
|
||||||
-1, // XREF_D3DRS_STENCILCULLENABLE
|
|
||||||
-1, // XREF_D3DCD_LAZYSETSTATEVB
|
|
||||||
-1, // XREF_D3D_BLOCKONTIME
|
|
||||||
-1, // XREF_D3D_SETFENCE
|
|
||||||
-1, // XREF_D3D_MakeRequestedSpace
|
|
||||||
-1, // XREF_D3D_KickOff
|
|
||||||
-1, // XREF_XNINIT
|
|
||||||
-1, // XREF_FCLOSEDEVICE
|
|
||||||
-1, // XREF_CLEARSTATEBLOCKFLAGS
|
|
||||||
-1, // XREF_RECORDSTATEBLOCK
|
|
||||||
-1, // XREF_SETDISTANCEFACTORA
|
|
||||||
-1, // XREF_SETDISTANCEFACTORB
|
|
||||||
-1, // XREF_SETROLLOFFFACTORA
|
|
||||||
-1, // XREF_SETROLLOFFFACTORB
|
|
||||||
-1, // XREF_SETDOPPLERFACTOR
|
|
||||||
-1, // XREF_SETBUFFERDATA
|
|
||||||
-1, // XREF_SETCURRENTPOSITION
|
|
||||||
-1, // XREF_SETCURRENTPOSITION2
|
|
||||||
-1, // XREF_GETCURRENTPOSITION
|
|
||||||
-1, // XREF_GETCURRENTPOSITION2
|
|
||||||
-1, // XREF_DSOUNDPLAY
|
|
||||||
-1, // XREF_DSOUNDPLAY2
|
|
||||||
-1, // XREF_DSOUNDSTOP
|
|
||||||
-1, // XREF_DSOUNDSTOP2
|
|
||||||
-1, // XREF_DSFLUSHEX2
|
|
||||||
-1, // XREF_DSSETBUFFERDATA
|
|
||||||
-1, // XREF_DSSETBUFFERDATA2
|
|
||||||
-1, // XREF_DSCREATESOUNDBUFFER
|
|
||||||
-1, // XREF_DSCREATESOUNDSTREAM
|
|
||||||
-1, // XREF_DSSTREAMPAUSE
|
|
||||||
-1, // XREF_DSSTREAMSETVOLUME
|
|
||||||
-1, // XREF_DSSETI3DL2LISTENER
|
|
||||||
-1, // XREF_DSSETMIXBINHEADROOMA
|
|
||||||
-1, // XREF_DSSETMIXBINHEADROOMB
|
|
||||||
-1, // XREF_DSSETMIXBINSA
|
|
||||||
-1, // XREF_DSSETMIXBINSB
|
|
||||||
-1, // XREF_DSSETMIXBINSC
|
|
||||||
-1, // XREF_DSSETMIXBINVOLUMESA
|
|
||||||
-1, // XREF_DSSETMIXBINVOLUMESB
|
|
||||||
-1, // XREF_DSSETMIXBINVOLUMESC
|
|
||||||
-1, // XREF_DSSETPOSITIONA
|
|
||||||
-1, // XREF_DSSETPOSITIONB
|
|
||||||
-1, // XREF_DSSETVELOCITYA
|
|
||||||
-1, // XREF_DSSETVELOCITYB
|
|
||||||
-1, // XREF_DSDOWORKA
|
|
||||||
-1, // XREF_DSDOWORKB
|
|
||||||
-1, // XREF_DSSETALLPARAMETERSA
|
|
||||||
-1, // XREF_DSSETALLPARAMETERSB
|
|
||||||
-1, // XREF_DSSETHEADROOMA
|
|
||||||
-1, // XREF_DSENABLEHEADPHONES
|
|
||||||
-1, // XREF_DSSYNCHPLAYBACKA
|
|
||||||
-1, // XREF_DSSYNCHPLAYBACKB
|
|
||||||
-1, // XREF_DSSETI3DL2SOURCE1A (Stream)
|
|
||||||
-1, // XREF_DSSETI3DL2SOURCE2A (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERSETPITCHA (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERSETPITCHB (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERGETSTATUSA (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERGETSTATUSB (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERSETVOLUMEA (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERSETVOLUMEB (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERSETCURRENTPOSITIONA (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERSETCURRENTPOSITIONB (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERSETLOOPREGIONA (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERSETPLAYREGIONA (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERLOCKA (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERSETHEADROOMA (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERSETFREQUENCYA (Buffer)
|
|
||||||
-1, // XREF_DSBUFFERSETFREQUENCYB
|
|
||||||
-1, // XREF_DSSTREAMSETMAXDISTANCE1A (Stream)
|
|
||||||
-1, // XREF_DSSTREAMSETMAXDISTANCE1B
|
|
||||||
-1, // XREF_DSSTREAMSETMAXDISTANCE1C
|
|
||||||
-1, // XREF_DSSTREAMSETMINDISTANCE1A (Stream)
|
|
||||||
-1, // XREF_DSSTREAMSETMINDISTANCE1B
|
|
||||||
-1, // XREF_DSSTREAMSETMINDISTANCE1C
|
|
||||||
-1, // XREF_DSSTREAMSETCONEANGLES1A
|
|
||||||
-1, // XREF_DSSTREAMSETCONEANGLES1B
|
|
||||||
-1, // XREF_DSSTREAMSETCONEOUTSIDEVOLUME1A (Stream)
|
|
||||||
-1, // XREF_DSSTREAMSETCONEOUTSIDEVOLUME1B
|
|
||||||
-1, // XREF_DSSTREAMSETALLPARAMETERS1A (Stream)
|
|
||||||
-1, // XREF_DSSTREAMSETALLPARAMETERS1B
|
|
||||||
-1, // XREF_DSSTREAMSETALLPARAMETERS1C
|
|
||||||
-1, // XREF_DSSTREAMSETVELOCITY1A (Stream)
|
|
||||||
-1, // XREF_DSSTREAMSETVELOCITY1B
|
|
||||||
-1, // XREF_DSSTREAMSETVELOCITY1C
|
|
||||||
-1, // XREF_DSSTREAMSETCONEORIENTATION1A (Stream)
|
|
||||||
-1, // XREF_DSSTREAMSETCONEORIENTATION1B
|
|
||||||
-1, // XREF_DSSTREAMSETCONEORIENTATION1C
|
|
||||||
-1, // XREF_DSSTREAMSETPOSITION1A (Stream)
|
|
||||||
-1, // XREF_DSSTREAMSETPOSITION1B
|
|
||||||
-1, // XREF_DSSTREAMSETPOSITION1C
|
|
||||||
-1, // XREF_DSSTREAMSETFREQUENCY1A (Stream)
|
|
||||||
-1, // XREF_DSSTREAMSETFREQUENCY1B
|
|
||||||
-1, // XREF_DSSTREAMSETROLLOFFFACTOR1A (Stream)
|
|
||||||
-1, // XREF_DSSTREAMSETROLLOFFFACTOR1B
|
|
||||||
-1, // XREF_GET2DSURFACEDESCB
|
|
||||||
-1, // XREF_COMMONSETRENDERTARGET
|
|
||||||
-1, // XREF_COMMITDEFERREDSETTINGSA
|
|
||||||
-1, // XREF_COMMITDEFERREDSETTINGSB
|
|
||||||
// s+
|
|
||||||
-1, // XREF_DSVOICESETMAXDISTANCE
|
|
||||||
-1, // XREF_DSVOICESETMINDISTANCE
|
|
||||||
-1, // XREF_DSVOICESETROLLOFFCURVE
|
|
||||||
-1, // XREF_DSVOICESETROLLOFFFACTOR
|
|
||||||
-1, // XREF_DSVOICESETDISTANCEFACTOR
|
|
||||||
-1, // XREF_DSVOICESETCONEANGLES
|
|
||||||
-1, // XREF_DSVOICESETCONEORIENTATION
|
|
||||||
-1, // XREF_DSVOICESETCONEOUTSIDEVOLUME
|
|
||||||
-1, // XREF_DSVOICESETPOSITION
|
|
||||||
-1, // XREF_DSVOICESETVELOCITY
|
|
||||||
-1, // XREF_DSVOICESETDOPPLERFACTOR
|
|
||||||
-1, // XREF_DSVOICESETI3DL2SOURCE
|
|
||||||
-1, // XREF_DSBUFFERSETMODEA
|
|
||||||
-1, // XREF_DSBUFFERSETMODEB
|
|
||||||
-1, // XREF_DSBUFFERSETMAXDISTANCE
|
|
||||||
-1, // XREF_DSBUFFERSETMINDISTANCE
|
|
||||||
-1, // XREF_DSBUFFERSETROLLOFFCURVE
|
|
||||||
-1, // XREF_DSBUFFERSETROLLOFFFACTOR
|
|
||||||
-1, // XREF_DSBUFFERSETDISTANCEFACTOR
|
|
||||||
-1, // XREF_DSBUFFERSETCONEANGLES
|
|
||||||
-1, // XREF_DSBUFFERSETCONEORIENTATION
|
|
||||||
-1, // XREF_DSBUFFERSETCONEOUTSIDEVOLUME
|
|
||||||
-1, // XREF_DSBUFFERSETPOSITION
|
|
||||||
-1, // XREF_DSBUFFERSETVELOCITY
|
|
||||||
-1, // XREF_DSBUFFERSETDOPPLERFACTOR
|
|
||||||
-1, // XREF_DSBUFFERSETI3DL2SOURCE
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundVoice_SetFormat
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_SetFormat
|
|
||||||
-1, // XREF_DirectSound_CFullHRTFSource_GetCenterVolume
|
|
||||||
-1, // XREF_DirectSound_CHRTFSource_SetFullHRTF5Channel
|
|
||||||
-1, // XREF_D3D_BlockOnResource
|
|
||||||
-1, // XREF_DirectSound_CMcpxVoiceClient_SetLFO
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundVoice_SetLFO
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_SetLFO
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundVoice_SetVolume
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_SetVolume
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_SetLoopRegion
|
|
||||||
-1, // XREF_DirectSound_CMcpxBuffer_Play
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_PlayEx
|
|
||||||
-1, // XREF_DirectSound_WaveFormat_CreateXboxAdpcmFormat
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundVoice_SetConeAngles
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_SetConeAngles
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundVoice_CommitDeferredSettings
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundVoice_SetAllParameters
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_SetAllParameters
|
|
||||||
-1, // XREF_DirectSound_CDirectSound_EnableHeadphones
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundVoice_SetHeadroom
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_SetHeadroom
|
|
||||||
-1, // XREF_DirectSound_CDirectSound_GetOutputLevels
|
|
||||||
-1, // XREF_DirectSound_CMcpxBuffer_Pause
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_Pause
|
|
||||||
-1, // XREF_DirectSound_CMcpxBuffer_GetStatus
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_GetStatus
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundVoice_SetEG
|
|
||||||
-1, // XREF_DirectSound_CMcpxVoiceClient_SetEG
|
|
||||||
-1, // XREF_DirectSound_CMcpxVoiceClient_SetFilter
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundVoice_SetFilter
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_SetFilter
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundStream_SetFilter
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_StopEx
|
|
||||||
-1, // XREF_CMcpxBuffer_Stop2
|
|
||||||
-1, // XREF_CMcpxAPU_Set3dDopplerFactor
|
|
||||||
-1, // XREF_CSensaura3d_GetFullHRTFFilterPair
|
|
||||||
-1, // XREF_CDirectSound_GetCaps
|
|
||||||
-1, // XREF_CDirectSoundVoice_SetPitch
|
|
||||||
-1, // XREF_DirectSoundEnterCriticalSection
|
|
||||||
-1, // XREF_CDirectSoundBuffer_SetMinDistance
|
|
||||||
-1, // XREF_CDirectSoundBuffer_SetMaxDistance
|
|
||||||
-1, // XREF_CMcpxVoiceClient_Commit3dSettings
|
|
||||||
-1, // XREF_CMcpxVoiceClient_SetI3DL2Source
|
|
||||||
-1, // XREF_CDirectSoundVoice_SetI3DL2Source
|
|
||||||
-1, // XREF_CDirectSoundVoice_SetMixBinVolumes
|
|
||||||
-1, // XREF_CDirectSoundStream_SetMixBinVolumes
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundStream_SetHeadroom
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundVoice_SetOutputBuffer
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_SetOutputBuffer
|
|
||||||
-1, // XREF_DirectSound_CDirectSoundBuffer_SetNotificationPositions
|
|
||||||
-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
|
|
||||||
-1, // XREF_XACT_CEngine_CreateSoundBank
|
|
||||||
-1, // XREF_XACT_CEngine_DownloadEffectsImage
|
|
||||||
-1, // XREF_XACT_CEngine_CreateSoundSource
|
|
||||||
-1, // XREF_XACT_CSoundBank_GetSoundCueIndexFromFriendlyName
|
|
||||||
-1, // XREF_XACT_CEngine_RegisterNotification
|
|
||||||
-1, // XREF_XACT_CEngine_GetNotification
|
|
||||||
-1, // XREF_XACT_CEngine_UnRegisterWaveBank
|
|
||||||
// XONLINE
|
|
||||||
-1, // XREF_XoUpdateLaunchNewImageInternal
|
|
||||||
-1, // XREF_CXo_XOnlineLogon
|
|
||||||
-1,
|
|
||||||
/* not necessary?
|
|
||||||
-1, //XREF_XAPIXCALCULATESIGNATUREBEGINEX
|
|
||||||
//*/
|
|
||||||
// +s
|
|
||||||
};
|
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * track XRef location
|
// * track XRef location
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
extern uint32 UnResolvedXRefs = sizeof(XRefDataBase)/sizeof(uint32);
|
extern uint32 UnResolvedXRefs = sizeof(XRefDataBase)/sizeof(uint32);
|
||||||
|
|
||||||
// ******************************************************************
|
|
||||||
// * Search Speed Optimization
|
|
||||||
// ******************************************************************
|
|
||||||
extern bool bXRefFirstPass = true;
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ extern const char *Lib_XONLINES;
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * HLEDataBase
|
// * HLEDataBase
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
extern struct HLEData
|
extern const struct HLEData
|
||||||
{
|
{
|
||||||
const char *Library;
|
const char *Library;
|
||||||
|
|
||||||
|
@ -107,25 +107,15 @@ extern struct HLEData
|
||||||
HLEDataBase[];
|
HLEDataBase[];
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * HLEDataBaseSize
|
// * HLEDataBaseCount
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
extern uint32 HLEDataBaseSize;
|
extern const uint32 HLEDataBaseCount;
|
||||||
|
|
||||||
// ******************************************************************
|
|
||||||
// * XRefDataBase
|
|
||||||
// ******************************************************************
|
|
||||||
extern uint32 XRefDataBase[];
|
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * UnResolvedXRefs
|
// * UnResolvedXRefs
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
extern uint32 UnResolvedXRefs;
|
extern uint32 UnResolvedXRefs;
|
||||||
|
|
||||||
// ******************************************************************
|
|
||||||
// * bXRefFirstPass
|
|
||||||
// ******************************************************************
|
|
||||||
extern bool bXRefFirstPass;
|
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * XRefDataBaseOffset
|
// * XRefDataBaseOffset
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
|
@ -343,6 +333,14 @@ enum XRefDataBaseOffset
|
||||||
// +s
|
// +s
|
||||||
// XREF_XLoadSectionByHandle,
|
// XREF_XLoadSectionByHandle,
|
||||||
// XREF_XFreeSectionByHandle,
|
// XREF_XFreeSectionByHandle,
|
||||||
|
|
||||||
|
XREF_COUNT // XREF_COUONT must always be last.
|
||||||
|
// Also, if XREF_COUNT > sizeof(byte), enlarge struct OOVPA.XRefSaveIndex (and Value somehow)
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
// ******************************************************************
|
||||||
|
// * XRefDataBase
|
||||||
|
// ******************************************************************
|
||||||
|
extern uint32 XRefDataBase[XREF_COUNT];
|
||||||
|
|
||||||
|
#endif /*HLEDATABASE_H*/
|
||||||
|
|
|
@ -63,10 +63,12 @@ static bool bCacheInp = false;
|
||||||
static std::vector<void *> vCacheInp;
|
static std::vector<void *> vCacheInp;
|
||||||
static std::vector<void*>::const_iterator vCacheInpIter;
|
static std::vector<void*>::const_iterator vCacheInpIter;
|
||||||
|
|
||||||
// Set these for experimental APU(sound) / GPU (graphics) LLE
|
|
||||||
bool bLLE_APU = false;
|
bool bLLE_APU = false; // Set this to true for experimental APU (sound) LLE
|
||||||
bool bLLE_GPU = false;
|
bool bLLE_GPU = false; // Set this to true for experimental GPU (graphics) LLE
|
||||||
bool bLLE_JIT = false;
|
bool bLLE_JIT = false; // Set this to true for experimental JIT
|
||||||
|
|
||||||
|
bool bXRefFirstPass; // For search speed optimization, set in EmuHLEIntercept, read in EmuLocateFunction
|
||||||
|
|
||||||
void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHeader)
|
void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHeader)
|
||||||
{
|
{
|
||||||
|
@ -164,13 +166,16 @@ void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHead
|
||||||
DbgPrintf("HLE: Detected Microsoft XDK application...\n");
|
DbgPrintf("HLE: Detected Microsoft XDK application...\n");
|
||||||
|
|
||||||
uint32 dwLibraryVersions = pXbeHeader->dwLibraryVersions;
|
uint32 dwLibraryVersions = pXbeHeader->dwLibraryVersions;
|
||||||
uint32 dwHLEEntries = HLEDataBaseSize / sizeof(HLEData);
|
|
||||||
|
|
||||||
uint32 LastUnResolvedXRefs = UnResolvedXRefs+1;
|
uint32 LastUnResolvedXRefs = UnResolvedXRefs+1;
|
||||||
uint32 OrigUnResolvedXRefs = UnResolvedXRefs;
|
uint32 OrigUnResolvedXRefs = UnResolvedXRefs;
|
||||||
|
|
||||||
bool bFoundD3D = false;
|
bool bFoundD3D = false;
|
||||||
|
|
||||||
|
bXRefFirstPass = true; // Set to false for search speed optimization
|
||||||
|
|
||||||
|
memset((void*)XRefDataBase, -1, sizeof(XRefDataBase));
|
||||||
|
|
||||||
|
|
||||||
for(int p=0;UnResolvedXRefs < LastUnResolvedXRefs;p++)
|
for(int p=0;UnResolvedXRefs < LastUnResolvedXRefs;p++)
|
||||||
{
|
{
|
||||||
DbgPrintf("HLE: Starting pass #%d...\n", p+1);
|
DbgPrintf("HLE: Starting pass #%d...\n", p+1);
|
||||||
|
@ -516,24 +521,23 @@ void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHead
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
DbgPrintf("HLE: * Searching HLE database for %s 1.0.%d...", szLibraryName, BuildVersion);
|
DbgPrintf("HLE: * Searching HLE database for %s version 1.0.%d...", szLibraryName, BuildVersion);
|
||||||
|
|
||||||
bool found=false;
|
const HLEData *FoundHLEData = nullptr;
|
||||||
|
for(uint32 d = 0; d < HLEDataBaseCount; d++) {
|
||||||
for(uint32 d=0;d<dwHLEEntries;d++)
|
if (BuildVersion == HLEDataBase[d].BuildVersion && strcmp(szLibraryName, HLEDataBase[d].Library) == 0) {
|
||||||
{
|
FoundHLEData = &HLEDataBase[d];
|
||||||
if(BuildVersion != HLEDataBase[d].BuildVersion || strcmp(szLibraryName, HLEDataBase[d].Library) != 0)
|
break;
|
||||||
continue;
|
}
|
||||||
|
|
||||||
found = true;
|
|
||||||
|
|
||||||
DbgPrintf("Found\n");
|
|
||||||
|
|
||||||
EmuInstallWrappers(HLEDataBase[d].OovpaTable, HLEDataBase[d].OovpaTableSize, pXbeHeader);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!found) { DbgPrintf("Skipped\n"); }
|
if (FoundHLEData) {
|
||||||
}
|
DbgPrintf("Found\n");
|
||||||
|
EmuInstallWrappers(FoundHLEData->OovpaTable, FoundHLEData->OovpaTableSize, pXbeHeader);
|
||||||
|
} else {
|
||||||
|
DbgPrintf("Skipped\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bXRefFirstPass = false;
|
bXRefFirstPass = false;
|
||||||
}
|
}
|
||||||
|
@ -606,7 +610,7 @@ static void *EmuLocateFunction(OOVPA *Oovpa, uint32 lower, uint32 upper)
|
||||||
|
|
||||||
// Skip out if this is an unnecessary search
|
// Skip out if this is an unnecessary search
|
||||||
if(!bXRefFirstPass && Oovpa->XRefCount == XRefZero && Oovpa->XRefSaveIndex == XRefNoSaveIndex)
|
if(!bXRefFirstPass && Oovpa->XRefCount == XRefZero && Oovpa->XRefSaveIndex == XRefNoSaveIndex)
|
||||||
return 0;
|
return nullptr;
|
||||||
|
|
||||||
// large
|
// large
|
||||||
if(Oovpa->Type == Large)
|
if(Oovpa->Type == Large)
|
||||||
|
@ -746,7 +750,7 @@ static void *EmuLocateFunction(OOVPA *Oovpa, uint32 lower, uint32 upper)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// install function interception wrappers
|
// install function interception wrappers
|
||||||
|
|
|
@ -34,9 +34,9 @@
|
||||||
#ifndef HLEINTERCEPT_H
|
#ifndef HLEINTERCEPT_H
|
||||||
#define HLEINTERCEPT_H
|
#define HLEINTERCEPT_H
|
||||||
|
|
||||||
extern bool bLLE_APU;
|
extern bool bLLE_APU; // Set this to true for experimental APU (sound) LLE
|
||||||
extern bool bLLE_GPU;
|
extern bool bLLE_GPU; // Set this to true for experimental GPU (graphics) LLE
|
||||||
extern bool bLLE_JIT;
|
extern bool bLLE_JIT; // Set this to true for experimental JIT
|
||||||
|
|
||||||
void EmuHLEIntercept(Xbe::LibraryVersion *LibraryVersion, Xbe::Header *XbeHeader);
|
void EmuHLEIntercept(Xbe::LibraryVersion *LibraryVersion, Xbe::Header *XbeHeader);
|
||||||
|
|
||||||
|
|
|
@ -56,8 +56,8 @@ template <class BaseClass, typename MFT> inline void *MFPtoFP( MFT pMemFunc)
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
|
|
||||||
enum OOVPAType : uint16 {
|
enum OOVPAType : uint16 {
|
||||||
Small,
|
Small, // Meaning, use SOVP, in which Offset is an uint08
|
||||||
Large,
|
Large, // Meaning, use LOVP, in which Offset is an uint16
|
||||||
};
|
};
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
|
@ -97,14 +97,14 @@ struct OOVPA
|
||||||
// that for each template instance, the type is redefined. Let's
|
// that for each template instance, the type is redefined. Let's
|
||||||
// avoid that.)
|
// avoid that.)
|
||||||
|
|
||||||
// Small (Offset,Value)-Pair(s)
|
// Small (byte-sized) {Offset, Value}-pair(s)
|
||||||
struct SOVP
|
struct SOVP
|
||||||
{
|
{
|
||||||
uint08 Offset;
|
uint08 Offset;
|
||||||
uint08 Value;
|
uint08 Value;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Large (Offset,Value)-Pair(s)
|
// Large (word-sized) {Offset, Value}-pair(s)
|
||||||
struct LOVP
|
struct LOVP
|
||||||
{
|
{
|
||||||
uint16 Offset;
|
uint16 Offset;
|
||||||
|
|
Loading…
Reference in New Issue