WIP : Interlocked functions from Dxbx

This commit is contained in:
PatrickvL 2016-11-30 23:38:51 +01:00
parent f9f3fa4b86
commit 6fd697663f
1 changed files with 223 additions and 0 deletions

View File

@ -124,10 +124,157 @@ std::ostream& operator<<(std::ostream& os, const xboxkrnl::PLARGE_INTEGER& value
using namespace xboxkrnl;
/*
XBSYSAPI EXPORTNUM(51) __fastcall xboxkrnl::InterlockedCompareExchange(
{0 EAX}FASTCALL_FIX_ARGUMENT_TAKING_EAX: DWORD;
{2 EDX}Exchange: LONG;
{1 ECX}Destination: PLONG;
{3 stack}Comparand: LONG
): LONG; register; // fastcall simulation - See Translation guide
// Source:ReactOS Branch:Dxbx Translator:PatrickvL Done:100
{
if MayLog(lfUnit) then
DbgPrintf('EmuKrnl : InterlockedCompareExchange' +
#13#10'(' +
#13#10' Exchange : 0x%.08X' +
#13#10' Destination : 0x%.08X' +
#13#10' Comparand : 0x%.08X' +
#13#10');',
[Exchange, Destination, Comparand]);
RETURN(InterlockedCompareExchange({var}Destination^, Exchange, Comparand);
};
XBSYSAPI EXPORTNUM(52) __fastcall xboxkrnl::InterlockedDecrement(
{0 EAX}FASTCALL_FIX_ARGUMENT_TAKING_EAX: DWORD;
{2 EDX}FASTCALL_FIX_ARGUMENT_TAKING_EDX: DWORD;
{1 ECX}Addend: PLONG // OUT, volatile
): LONG; register; // fastcall simulation - See Translation guide
// Source:ReactOS Branch:Dxbx Translator:PatrickvL Done:100
{
if MayLog(lfUnit) then
DbgPrintf('EmuKrnl : InterlockedDecrement' +
#13#10'(' +
#13#10' Addend : 0x%.08X' +
#13#10');',
[Addend]);
RETURN(InterlockedDecrement({var}Addend^);
};
XBSYSAPI EXPORTNUM(53) __fastcall xboxkrnl::InterlockedIncrement(
{0 EAX}FASTCALL_FIX_ARGUMENT_TAKING_EAX: DWORD;
{2 EDX}FASTCALL_FIX_ARGUMENT_TAKING_EDX: DWORD;
{1 ECX}Addend: PLONG // OUT, volatile
): LONG; register; // fastcall simulation - See Translation guide
// Source:ReactOS Branch:Dxbx Translator:PatrickvL Done:100
{
if MayLog(lfUnit) then
DbgPrintf('EmuKrnl : InterlockedIncrement' +
#13#10'(' +
#13#10' Addend : 0x%.08X' +
#13#10');',
[Addend]);
RETURN(InterlockedIncrement({var}Addend^);
};
XBSYSAPI EXPORTNUM(54) __fastcall xboxkrnl::InterlockedExchange(
{0 EAX}FASTCALL_FIX_ARGUMENT_TAKING_EAX: DWORD;
{2 EDX}Value: LONG;
{1 ECX}Destination: PLONG
): LONG; register; // fastcall simulation - See Translation guide
// Source:ReactOS Branch:Dxbx Translator:PatrickvL Done:100
{
if MayLog(lfUnit) then
DbgPrintf('EmuKrnl : InterlockedExchange' +
#13#10'(' +
#13#10' Value : 0x%.08X' +
#13#10' Destination : 0x%.08X' +
#13#10');',
[Value, Destination]);
RETURN(InterlockedExchange({var}Destination^, Value);
};
XBSYSAPI EXPORTNUM(55) __fastcall xboxkrnl::InterlockedExchangeAdd(
{0 EAX}FASTCALL_FIX_ARGUMENT_TAKING_EAX: DWORD;
{2 EDX}Value: LONG;
{1 ECX}Addend: PLONG
): LONG; register; // fastcall simulation - See Translation guide
// Source:ReactOS Branch:Dxbx Translator:PatrickvL Done:100
{
if MayLog(lfUnit) then
DbgPrintf('EmuKrnl : InterlockedExchangeAdd' +
#13#10'(' +
#13#10' Value : 0x%.08X' +
#13#10' Addend : 0x%.08X' +
#13#10');',
[Value, Addend]);
RETURN(InterlockedExchangeAdd({var}Addend^, Value);
};
// Dxbx Note : The Xbox1 SINGLE_LIST strucures are the same as in WinNT
XBSYSAPI EXPORTNUM(56) __fastcall xboxkrnl::InterlockedFlushSList(
{0 EAX}FASTCALL_FIX_ARGUMENT_TAKING_EAX: DWORD;
{2 EDX}FASTCALL_FIX_ARGUMENT_TAKING_EDX: DWORD;
{1 ECX}ListHead: PSLIST_HEADER
): PSINGLE_LIST_ENTRY; register; // fastcall simulation - See Translation guide
// Source:ReactOS Branch:Dxbx Translator:PatrickvL Done:100
{
if MayLog(lfUnit) then
DbgPrintf('EmuKrnl : InterlockedFlushSList' +
#13#10'(' +
#13#10' ListHead : 0x%.08X' +
#13#10');',
[ListHead]);
RETURN(InterlockedFlushSList(ListHead);
};
XBSYSAPI EXPORTNUM(57) __fastcall xboxkrnl::InterlockedPopEntrySList(
{0 EAX}FASTCALL_FIX_ARGUMENT_TAKING_EAX: DWORD;
{2 EDX}FASTCALL_FIX_ARGUMENT_TAKING_EDX: DWORD;
{1 ECX}ListHead: PSLIST_HEADER
): PSLIST_ENTRY; register; // fastcall simulation - See Translation guide
// Source:ReactOS Branch:Dxbx Translator:PatrickvL Done:100
{
if MayLog(lfUnit) then
DbgPrintf('EmuKrnl : InterlockedPopEntrySList' +
#13#10'(' +
#13#10' ListHead : 0x%.08X' +
#13#10');',
[ListHead]);
RETURN(InterlockedPopEntrySList(ListHead);
};
XBSYSAPI EXPORTNUM(58) __fastcall xboxkrnl::InterlockedPushEntrySList(
{0 EAX}FASTCALL_FIX_ARGUMENT_TAKING_EAX: DWORD;
{2 EDX}ListEntry: PSLIST_ENTRY;
{1 ECX}ListHead: PSLIST_HEADER
): PSLIST_ENTRY; register; // fastcall simulation - See Translation guide
// Source:ReactOS Branch:Dxbx Translator:PatrickvL Done:100
{
if MayLog(lfUnit) then
DbgPrintf('EmuKrnl : InterlockedPopEntrySList' +
#13#10'(' +
#13#10' ListEntry : 0x%.08X' +
#13#10' ListHead : 0x%.08X' +
#13#10');',
[ListEntry, ListHead]);
RETURN(InterlockedPushEntrySList(ListHead, ListEntry);
};
*/
// ******************************************************************
// * 0x00A0 - KfRaiseIrql
// ******************************************************************
// Raises the hardware priority (irql)
// NewIrql = Irql to raise to
// RETURN VALUE previous irq level
XBSYSAPI EXPORTNUM(160) xboxkrnl::UCHAR _fastcall xboxkrnl::KfRaiseIrql
(
IN UCHAR NewIrql
@ -163,6 +310,8 @@ XBSYSAPI EXPORTNUM(160) xboxkrnl::UCHAR _fastcall xboxkrnl::KfRaiseIrql
// ******************************************************************
// * 0x00A1 - KfLowerIrql
// ******************************************************************
// Restores the irq level on the current processor
// ARGUMENTS NewIrql = Irql to lower to
XBSYSAPI EXPORTNUM(161) VOID _fastcall xboxkrnl::KfLowerIrql
(
IN UCHAR NewIrql
@ -176,5 +325,79 @@ XBSYSAPI EXPORTNUM(161) VOID _fastcall xboxkrnl::KfLowerIrql
// Source:ReactOS
XBSYSAPI EXPORTNUM(162) xboxkrnl::ULONG_PTR xboxkrnl::KiBugCheckData[5] = { NULL, NULL, NULL, NULL, NULL };
/*
XBSYSAPI EXPORTNUM(163) xboxkrnl::KiUnlockDispatcherDatabase(): NTSTATUS; stdcall;
// Branch:Dxbx Translator:PatrickvL Done:0
{
Unimplemented('KiUnlockDispatcherDatabase');
RETURN(S_OK;
};
XBSYSAPI EXPORTNUM(252) xboxkrnl::PhyGetLinkState(): NTSTATUS; stdcall;
// Branch:Dxbx Translator:PatrickvL Done:0
{
Unimplemented('PhyGetLinkState');
RETURN(S_OK;
};
XBSYSAPI EXPORTNUM(253) xboxkrnl::PhyInitialize(): NTSTATUS; stdcall;
// Branch:Dxbx Translator:PatrickvL Done:0
{
Unimplemented('PhyInitialize');
RETURN(S_OK;
};
*/
// TODO : Determine size, structure & filling behind this
XBSYSAPI EXPORTNUM(357) xboxkrnl::BYTE xboxkrnl::IdexChannelObject[0x100] = { };
/*
XBSYSAPI EXPORTNUM(367) xboxkrnl::UnknownAPI367(): NTSTATUS; stdcall;
// Branch:Dxbx Translator:PatrickvL Done:0
{
Unimplemented('UnknownAPI367');
RETURN(S_OK;
};
XBSYSAPI EXPORTNUM(368) xboxkrnl::UnknownAPI368(): NTSTATUS; stdcall;
// Branch:Dxbx Translator:PatrickvL Done:0
{
Unimplemented('UnknownAPI368');
RETURN(S_OK;
};
XBSYSAPI EXPORTNUM(369) xboxkrnl::UnknownAPI369(): NTSTATUS; stdcall;
// Branch:Dxbx Translator:PatrickvL Done:0
{
Unimplemented('UnknownAPI369');
RETURN(S_OK;
};
XBSYSAPI EXPORTNUM(370} PROFILING XProfpControl(): NTSTATUS; stdcall;
// Branch:Dxbx Translator:PatrickvL Done:0
{
Unimplemented('UnknownAPI370');
RETURN(S_OK;
};
XBSYSAPI EXPORTNUM(371} PROFILING XProfpGetData(): NTSTATUS; stdcall;
// Branch:Dxbx Translator:PatrickvL Done:0
{
Unimplemented('UnknownAPI371');
RETURN(S_OK;
};
XBSYSAPI EXPORTNUM(372} PROFILING IrtClientInitFast(): NTSTATUS; stdcall;
// Branch:Dxbx Translator:PatrickvL Done:0
{
Unimplemented('UnknownAPI372');
RETURN(S_OK;
};
XBSYSAPI EXPORTNUM(373} PROFILING IrtSweep(): NTSTATUS; stdcall;
// Branch:Dxbx Translator:PatrickvL Done:0
{
Unimplemented('UnknownAPI373');
RETURN(S_OK;
};
*/