Merge remote-tracking branch 'refs/remotes/LukeUsher/master'

This commit is contained in:
PatrickvL 2016-11-28 09:29:40 +01:00
commit 79432acafc
8 changed files with 51 additions and 24 deletions

View File

@ -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
);

View File

@ -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)

View File

@ -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;

View File

@ -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;

View File

@ -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
)

View File

@ -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);
}

View File

@ -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;

View File

@ -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.");
}