Merge remote-tracking branch 'refs/remotes/LukeUsher/master'
This commit is contained in:
commit
79432acafc
|
@ -67,7 +67,7 @@ XBSYSAPI EXPORTNUM(89) BOOLEAN KdDebuggerNotPresent;
|
|||
// ******************************************************************
|
||||
// * KfRaiseIrql
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(160) UCHAR* NTAPI KfRaiseIrql
|
||||
XBSYSAPI EXPORTNUM(160) UCHAR _fastcall KfRaiseIrql
|
||||
(
|
||||
IN UCHAR NewIrql
|
||||
);
|
||||
|
@ -75,7 +75,7 @@ XBSYSAPI EXPORTNUM(160) UCHAR* NTAPI KfRaiseIrql
|
|||
// ******************************************************************
|
||||
// * KfLowerIrql
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(161) VOID NTAPI KfLowerIrql
|
||||
XBSYSAPI EXPORTNUM(161) VOID _fastcall KfLowerIrql
|
||||
(
|
||||
IN UCHAR NewIrql
|
||||
);
|
||||
|
|
|
@ -95,7 +95,7 @@ extern thread_local std::string _logPrefix;
|
|||
|
||||
// LOG_FUNC_RESULT logs the function return result
|
||||
#define LOG_FUNC_RESULT(r) \
|
||||
std::cout << _logPrefix << " returns " << r;
|
||||
std::cout << _logPrefix << " returns " << r << "\n";
|
||||
#else
|
||||
#define LOG_FUNC_BEGIN
|
||||
#define LOG_FUNC_ARG(arg)
|
||||
|
|
|
@ -147,6 +147,9 @@ XTL::D3DFORMAT XTL::EmuXB2PC_D3DFormat(X_D3DFORMAT Format)
|
|||
case X_D3DFMT_A8: // Swizzled
|
||||
result = D3DFMT_A8;
|
||||
break;
|
||||
case X_D3DFMT_LIN_X1R5G5B5: // Linear
|
||||
result = D3DFMT_X1R5G5B5;
|
||||
break;
|
||||
case X_D3DFMT_LIN_A4R4G4B4: case // Linear
|
||||
X_D3DFMT_A4R4G4B4: // Swizzled
|
||||
result = D3DFMT_A4R4G4B4;
|
||||
|
@ -311,7 +314,9 @@ XTL::X_D3DFORMAT XTL::EmuPC2XB_D3DFormat(D3DFORMAT Format)
|
|||
result = X_D3DFMT_LIN_A4R4G4B4;
|
||||
break; // Linear
|
||||
// Result := X_D3DFMT_A4R4G4B4; // Swizzled
|
||||
|
||||
case D3DFMT_X1R5G5B5: // Linear
|
||||
result = X_D3DFMT_LIN_X1R5G5B5;
|
||||
break;
|
||||
case D3DFMT_A8:
|
||||
result = X_D3DFMT_A8;
|
||||
break;
|
||||
|
|
|
@ -328,6 +328,10 @@ void EmuInitFS()
|
|||
// generate fs segment selector
|
||||
void EmuGenerateFS(Xbe::TLS *pTLS, void *pTLSData)
|
||||
{
|
||||
// Make sure the TLS Start and End addresses are within Xbox Memory
|
||||
if (pTLS->dwDataStartAddr > XBOX_MEMORY_SIZE || pTLS->dwDataEndAddr > XBOX_MEMORY_SIZE) {
|
||||
return;
|
||||
}
|
||||
|
||||
NT_TIB *OrgNtTib;
|
||||
xboxkrnl::KPCR *NewPcr;
|
||||
|
|
|
@ -47,6 +47,8 @@ namespace xboxkrnl
|
|||
|
||||
#include "Logging.h"
|
||||
|
||||
#include "CxbxKrnl.h"
|
||||
|
||||
// prevent name collisions
|
||||
namespace NtDll
|
||||
{
|
||||
|
@ -126,24 +128,42 @@ using namespace xboxkrnl;
|
|||
// ******************************************************************
|
||||
// * 0x00A0 - KfRaiseIrql
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(160) xboxkrnl::UCHAR* NTAPI xboxkrnl::KfRaiseIrql
|
||||
XBSYSAPI EXPORTNUM(160) xboxkrnl::UCHAR _fastcall xboxkrnl::KfRaiseIrql
|
||||
(
|
||||
IN UCHAR NewIrql
|
||||
)
|
||||
{
|
||||
// HACK: Not thread safe!
|
||||
static xboxkrnl::UCHAR previousIrqlValue = 0;
|
||||
|
||||
LOG_FUNC_ONE_ARG(NewIrql);
|
||||
|
||||
// Return addr where old irq level should be stored
|
||||
RETURN(&previousIrqlValue);
|
||||
UCHAR OldIrql;
|
||||
KPCR* Pcr = nullptr;
|
||||
|
||||
// Fetch KPCR data structure
|
||||
__asm {
|
||||
push eax
|
||||
mov eax, fs:[0x14]
|
||||
mov Pcr, eax
|
||||
pop eax
|
||||
}
|
||||
|
||||
if (NewIrql < Pcr->Irql) {
|
||||
// TODO: Enable this after KeBugCheck is implemented
|
||||
//KeBugCheck(IRQL_NOT_GREATER_OR_EQUAL);
|
||||
// for (;;);
|
||||
|
||||
CxbxKrnlCleanup("IRQL_NOT_GREATER_OR_EQUAL");
|
||||
}
|
||||
|
||||
OldIrql = Pcr->Irql;
|
||||
Pcr->Irql = NewIrql;
|
||||
|
||||
RETURN(OldIrql);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00A1 - KfLowerIrql
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(161) VOID NTAPI xboxkrnl::KfLowerIrql
|
||||
XBSYSAPI EXPORTNUM(161) VOID _fastcall xboxkrnl::KfLowerIrql
|
||||
(
|
||||
IN UCHAR NewIrql
|
||||
)
|
||||
|
|
|
@ -316,7 +316,7 @@ XBSYSAPI EXPORTNUM(129) xboxkrnl::UCHAR NTAPI xboxkrnl::KeRaiseIrqlToDpcLevel()
|
|||
// I really tried to avoid adding this...
|
||||
// __asm int 3;
|
||||
// CxbxKrnlCleanup("KeRaiseIrqlToDpcLevel not implemented! (Tell blueshogun -_-)");
|
||||
// LOG_UNIMPLEMENTED();
|
||||
LOG_UNIMPLEMENTED();
|
||||
|
||||
RETURN(0);
|
||||
}
|
||||
|
|
|
@ -76,6 +76,8 @@ DWORD* EmuX86_GetRegisterPointer(LPEXCEPTION_POINTERS e, Zydis::Register reg)
|
|||
return &e->ContextRecord->Edi;
|
||||
case Zydis::Register::ESI:
|
||||
return &e->ContextRecord->Esi;
|
||||
case Zydis::Register::EBP:
|
||||
return &e->ContextRecord->Ebp;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
|
|
|
@ -157,15 +157,6 @@ void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHead
|
|||
}
|
||||
}
|
||||
|
||||
//
|
||||
// initialize openxdk emulation (TODO)
|
||||
//
|
||||
|
||||
if(pLibraryVersion == 0)
|
||||
{
|
||||
DbgPrintf("HLE: Detected OpenXDK application...\n");
|
||||
}
|
||||
|
||||
//
|
||||
// initialize Microsoft XDK emulation
|
||||
//
|
||||
|
@ -776,7 +767,11 @@ static void EmuInstallWrappers(OOVPATable *OovpaTable, uint32 OovpaTableSize, Xb
|
|||
DbgPrintf("HLE: 0x%.08X -> %s\n", pFunc, OovpaTable[a].szFuncName);
|
||||
#endif
|
||||
|
||||
if(OovpaTable[a].lpRedirect != 0)
|
||||
if(OovpaTable[a].lpRedirect == 0)
|
||||
{
|
||||
EmuInstallWrapper(pFunc, EmuXRefFailure);
|
||||
}
|
||||
else
|
||||
{
|
||||
EmuInstallWrapper(pFunc, OovpaTable[a].lpRedirect);
|
||||
funcExclude[fcount++] = (uint32)pFunc;
|
||||
|
@ -792,3 +787,4 @@ static void EmuXRefFailure()
|
|||
CxbxKrnlCleanup("XRef-only function body reached. Fatal Error.");
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue