Newer
Older
AMI-Aptio-BIOS-Reversed / StatusCodePei / StatusCodePei.c
@Ajax Dong Ajax Dong 2 days ago 88 KB Init
//
// StatusCodePei.efi - Full Decompilation
// Source: IDA Pro MCP port 13392
// Functions: 86
//

#include <Uefi.h>
#include <PiPei.h>

{"addr":"0xffe3f18c","code":"void *SetMem(void *buf, unsigned int count, char value)\n{\n memset(buf, value, count); /*0xffe3f199*/\n return buf; /*0xffe3f19f*/\n}"}

{"addr":"0xffe3f1ac","code":"char *CopyMem(char *dst, char *src, unsigned int count)\n{\n unsigned int count_1; // edx\n char *dst_1; // edi\n char *src_1; // esi\n\n count_1 = count; /*0xffe3f1b6*/\n if ( src < dst && &src[count - 1] >= dst ) /*0xffe3f1c4*/\n {\n src_1 = &src[count - 1]; /*0xffe3f1d8*/\n dst_1 = &dst[count - 1]; /*0xffe3f1da*/\n }\n else\n {\n count_1 = count & 3; /*0xffe3f1c8*/\n qmemcpy(dst, src, 4 * (count >> 2)); /*0xffe3f1d1*/\n src_1 = &src[4 * (count >> 2)]; /*0xffe3f1d1*/\n dst_1 = &dst[4 * (count >> 2)]; /*0xffe3f1d1*/\n }\n qmemcpy(dst_1, src_1, count_1); /*0xffe3f1e1*/\n return dst; /*0xffe3f1e8*/\n}"}

{"addr":"0xffe3f20c","code":"int CopyMemDwords(int a1, int a2, int a3, int a4)\n{\n do /*0xffe3f225*/\n {\n *(_DWORD *)(a1 + 8 *a2 - 8) = a3; /*0xffe3f21d*/\n *(_DWORD *)(a1 + 8 *a2-- - 4) = a4; /*0xffe3f221*/\n }\n while ( a2 ); /*0xffe3f225*/\n return a1; /*0xffe3f229*/\n}"}

{"addr":"0xffe3f22c","code":"void *SetMem32(void *buf, unsigned int count, int value)\n{\n memset32(buf, value, count); /*0xffe3f239*/\n return buf; /*0xffe3f23f*/\n}"}

{"addr":"0xffe3f2cc","code":"EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)\n{\n if ( (sub_FFE41DDF(1024068) & 0x80u) == 0 ) /*0xffe3f2d8*/\n {\n sub_FFE41F03(1024064, 1280); /*0xffe3f2e4*/\n sub_FFE416DB(); /*0xffe3f2e9*/\n }\n return sub_FFE3F77F(ImageHandle, SystemTable);\n}","refs":[{"addr":"0xffe41f03","name":"MmioWrite32"},{"addr":"0xffe416db","name":"IoOr32"},{"addr":"0xffe41ddf","name":"MmioRead32"},{"addr":"0xffe3f77f","name":"StatusCodePeiEntry"}]}

{"addr":"0xffe3f2fb","code":"int __thiscall StatusCodeAllocCallbackNode(void *Node)\n{\n int PeiServices; // eax\n int NodeBase; // [esp+0h] [ebp-4h]\n\n PeiServices = GetPeiServices(); /*0xffe3f2ff*/\n if ( (*(int (__stdcall **)(int))(*(_DWORD *)PeiServices + 52))(PeiServices) < 0 ) /*0xffe3f317*/\n return 0; /*0xffe3f319*/\n ZeroMem((unsigned int)Node + 8, src, 0x10u); /*0xffe3f32b*/\n *(_DWORD *)(NodeBase + 24) = 0; /*0xffe3f339*/\n return NodeBase + 24; /*0xffe3f33e*/\n}","refs":[{"addr":"0xffe3fdc4","name":"GetPeiServices"},{"addr":"0xffe424bc","name":"ZeroMem"},{"addr":"0xffe4359c","name":"src"}]}

{"addr":"0xffe3f340","code":"int StatusCodeRemoveCallback(_WORD *Callback)\n{\n _WORD *Callback_1; // esi\n _WORD *PpiList; // eax\n int GuidScanResult; // ecx\n int Index; // edx\n\n Callback_1 = Callback; /*0xffe3f344*/\n if ( !Callback ) /*0xffe3f349*/\n return -2147483646; /*0xffe3f34b*/\n PpiList = FindGuidInPpiList(src); /*0xffe3f357*/\nLABEL_4:\n for ( Callback = PpiList; ; PpiList = Callback ) /*0xffe3f35c*/\n {\n if ( !PpiList ) /*0xffe3f389*/\n return -2147483634; /*0xffe3f392*/\n Index = 0; /*0xffe3f361*/\n if ( *((_DWORD *)PpiList + 6) ) /*0xffe3f363*/\n break; /*0xffe3f363*/\nLABEL_8:\n if ( SPrintScanGuid(GuidScanResult, &Callback) < 0 ) /*0xffe3f37e*/\n {\n PpiList = 0; /*0xffe3f380*/\n goto LABEL_4; /*0xffe3f382*/\n }\n }\n while ( *(_WORD **)&PpiList[2 *Index + 14] != Callback_1 ) /*0xffe3f36c*/\n {\n if ( (unsigned int)++Index >= *((_DWORD *)PpiList + 6) ) /*0xffe3f372*/\n goto LABEL_8; /*0xffe3f372*/\n }\n *(_DWORD *)&PpiList[2 *Index + 14] = *(_DWORD *)&PpiList[2 * (*((_DWORD *)PpiList + 6))-- + 12]; /*0xffe3f39a*/\n return 0; /*0xffe3f390*/\n}","refs":[{"addr":"0xffe40bcf","name":"FindGuidInPpiList"},{"addr":"0xffe4359c","name":"src"},{"addr":"0xffe4124e","name":"SPrintScanGuid"}]}

{"addr":"0xffe3f3a5","code":"int StatusCodeRegisterCallback(_WORD *Callback)\n{\n _WORD *Callback_1; // edi\n _WORD *PpiList; // eax\n void *This; // ecx\n _DWORD *CallbackNode; // esi\n unsigned int CallbackCount; // edx\n unsigned int CallbackCount_1; // ecx\n _DWORD *CallbackPtr; // eax\n\n Callback_1 = Callback; /*0xffe3f3a9*/\n if ( !Callback ) /*0xffe3f3ae*/\n return -2147483646; /*0xffe3f3b0*/\n PpiList = FindGuidInPpiList(src); /*0xffe3f3bd*/\n CallbackNode = 0; /*0xffe3f3c2*/\n Callback = PpiList; /*0xffe3f3c4*/\n if ( PpiList ) /*0xffe3f3c9*/\n {\n do /*0xffe3f403*/\n {\n CallbackCount = *((_DWORD *)PpiList + 6); /*0xffe3f3cb*/\n if ( CallbackCount < 8 ) /*0xffe3f3d1*/\n CallbackNode = PpiList + 12; /*0xffe3f3d3*/\n CallbackCount_1 = 0; /*0xffe3f3d6*/\n if ( CallbackCount ) /*0xffe3f3da*/\n {\n CallbackPtr = PpiList + 14; /*0xffe3f3dc*/\n while ( (_WORD *)*CallbackPtr != Callback_1 ) /*0xffe3f3e1*/\n {\n ++CallbackCount_1; /*0xffe3f3e3*/\n ++CallbackPtr; /*0xffe3f3e4*/\n if ( CallbackCount_1 >= CallbackCount ) /*0xffe3f3e9*/\n goto LABEL_10; /*0xffe3f3e9*/\n }\n return -2147483628; /*0xffe3f420*/\n }\nLABEL_10:\n if ( SPrintScanGuid(CallbackCount_1, &Callback) >= 0 ) /*0xffe3f3f5*/\n {\n PpiList = Callback; /*0xffe3f3fe*/\n }\n else\n {\n PpiList = 0; /*0xffe3f3f7*/\n Callback = 0; /*0xffe3f3f9*/\n }\n }\n while ( PpiList ); /*0xffe3f403*/\n if ( CallbackNode ) /*0xffe3f407*/\n goto LABEL_18; /*0xffe3f407*/\n }\n CallbackNode = (_DWORD *)StatusCodeAllocCallbackNode(This); /*0xffe3f40e*/\n if ( !CallbackNode ) /*0xffe3f412*/\n return -2147483639; /*0xffe3f414*/\nLABEL_18:\n CallbackNode[++*CallbackNode] = Callback_1; /*0xffe3f422*/\n return 0; /*0xffe3f42d*/\n}","refs":[{"addr":"0xffe40bcf","name":"FindGuidInPpiList"},{"addr":"0xffe4359c","name":"src"},{"addr":"0xffe4124e","name":"SPrintScanGuid"},{"addr":"0xffe3f2fb","name":"StatusCodeAllocCallbackNode"}]}

{"addr":"0xffe3f430","code":"int StatusCodeDispatchCallbacks(\n int PeiServices,\n int CodeType,\n int Value,\n int Instance,\n int CallerId,\n int StatusCodeData)\n{\n int GuidScanResult; // ecx\n unsigned __int16 *GuidInPpiList; // esi\n unsigned int Index; // ebx\n void ( **Callback)(int, int, int, int, int, int); // edi\n unsigned __int16 *GuidInPpiList_1; // [esp+14h] [ebp-8h] BYREF\n int PeiServices_1; // [esp+18h] [ebp-4h]\n\n PeiServices_1 = PeiServices; /*0xffe3f436*/\n GuidInPpiList = FindGuidInPpiList(src); /*0xffe3f447*/\nLABEL_2:\n GuidInPpiList_1 = GuidInPpiList; /*0xffe3f449*/\n while ( GuidInPpiList ) /*0xffe3f493*/\n {\n Index = 0; /*0xffe3f44f*/\n if ( *((_DWORD *)GuidInPpiList + 6) ) /*0xffe3f451*/\n {\n Callback = (void ( **)(int, int, int, int, int, int))(GuidInPpiList + 14); /*0xffe3f456*/\n do /*0xffe3f47a*/\n {\n (*Callback++)(PeiServices_1, CodeType, Value, Instance, CallerId, StatusCodeData); /*0xffe3f46e*/\n ++Index; /*0xffe3f476*/\n }\n while ( Index < *((_DWORD *)GuidInPpiList + 6) ); /*0xffe3f47a*/\n }\n if ( SPrintScanGuid(GuidScanResult, &GuidInPpiList_1) < 0 ) /*0xffe3f487*/\n {\n GuidInPpiList = 0; /*0xffe3f489*/\n goto LABEL_2; /*0xffe3f48b*/\n }\n GuidInPpiList = GuidInPpiList_1; /*0xffe3f48d*/\n }\n return 0; /*0xffe3f495*/\n}","refs":[{"addr":"0xffe40bcf","name":"FindGuidInPpiList"},{"addr":"0xffe4359c","name":"src"},{"addr":"0xffe4124e","name":"SPrintScanGuid"}]}

{"addr":"0xffe3f49f","code":"int StatusCodeReport(int PeiServices, int CodeType, int Value, int Instance, int CallerId, int StatusCodeData)\n{\n char Buffer[256]; // [esp+0h] [ebp-100h] BYREF\n\n StatusCodeDispatchCallbacks(PeiServices, CodeType, Value, Instance, CallerId, StatusCodeData); /*0xffe3f4ba*/\n return SerialPortWrite(PeiServices, CodeType, Value, Instance, CallerId, StatusCodeData, Buffer); /*0xffe3f4e0*/\n}","refs":[{"addr":"0xffe3f430","name":"StatusCodeDispatchCallbacks"},{"addr":"0xffe3fb84","name":"SerialPortWrite"}]}

{"addr":"0xffe3f4e4","code":"int ( *StatusCodeSerialReport(int Value, unsigned __int8 *FormatString, int Args))(int a1, char *_r_n)\n{\n int Index; // ebx\n int ( *PeiServices_1)(int, char *); // eax\n int ( *PeiServices)(int, char *); // esi\n void ( *Callback)(char *, int); // eax\n int StatusCodeData[5]; // [esp+10h] [ebp-178h] BYREF\n int Value_1; // [esp+24h] [ebp-164h]\n int StatusCodeData2; // [esp+28h] [ebp-160h]\n int StatusCodeData3; // [esp+2Ch] [ebp-15Ch]\n int StatusCodeData4; // [esp+30h] [ebp-158h]\n int StatusCodeData5; // [esp+34h] [ebp-154h]\n int StatusCodeData6; // [esp+38h] [ebp-150h]\n int StatusCodeData7; // [esp+3Ch] [ebp-14Ch]\n int StatusCodeData8; // [esp+40h] [ebp-148h]\n int StatusCodeData9; // [esp+44h] [ebp-144h]\n int StatusCodeData10; // [esp+48h] [ebp-140h]\n int StatusCodeData11; // [esp+4Ch] [ebp-13Ch]\n int StatusCodeData12; // [esp+50h] [ebp-138h]\n int StatusCodeData13; // [esp+54h] [ebp-134h]\n int StatusCodeData14; // [esp+58h] [ebp-130h]\n int StatusCodeData15; // [esp+5Ch] [ebp-12Ch]\n int StatusCodeData16; // [esp+60h] [ebp-128h]\n int StatusCodeData17; // [esp+64h] [ebp-124h]\n int StatusCodeData18; // [esp+68h] [ebp-120h]\n int StatusCodeData19; // [esp+6Ch] [ebp-11Ch]\n int StatusCodeData20; // [esp+70h] [ebp-118h]\n int StatusCodeData21; // [esp+74h] [ebp-114h]\n int StatusCodeData22; // [esp+78h] [ebp-110h]\n int StatusCodeData23; // [esp+7Ch] [ebp-10Ch]\n int StatusCodeData24; // [esp+80h] [ebp-108h]\n int StatusCodeData25; // [esp+84h] [ebp-104h]\n char OutputBuffer; // [esp+88h] [ebp-100h] BYREF\n _BYTE TempBuffer[255]; // [esp+89h] [ebp-FFh] BYREF\n\n Index = 0; /*0xffe3f4f1*/\n StatusCodeData[1] = -1706126778; /*0xffe3f4f3*/\n StatusCodeData[0] = 23330836; /*0xffe3f500*/\n StatusCodeData[2] = 299226451; /*0xffe3f51d*/\n StatusCodeData[3] = 100721287; /*0xffe3f525*/\n StatusCodeData[4] = -1178385111; /*0xffe3f52d*/\n Value_1 = 0; /*0xffe3f535*/\n StatusCodeData2 = 0; /*0xffe3f539*/\n StatusCodeData3 = 0; /*0xffe3f53d*/\n StatusCodeData4 = 0; /*0xffe3f541*/\n StatusCodeData5 = 0; /*0xffe3f545*/\n StatusCodeData6 = 0; /*0xffe3f549*/\n StatusCodeData7 = 0; /*0xffe3f54d*/\n StatusCodeData8 = 0; /*0xffe3f551*/\n StatusCodeData9 = 0; /*0xffe3f555*/\n StatusCodeData10 = 0; /*0xffe3f559*/\n StatusCodeData11 = 0; /*0xffe3f55d*/\n StatusCodeData12 = 0; /*0xffe3f561*/\n StatusCodeData13 = 0; /*0xffe3f565*/\n StatusCodeData14 = 0; /*0xffe3f569*/\n StatusCodeData15 = 0; /*0xffe3f56d*/\n StatusCodeData16 = 0; /*0xffe3f571*/\n StatusCodeData17 = 0; /*0xffe3f575*/\n StatusCodeData18 = 0; /*0xffe3f579*/\n StatusCodeData19 = 0; /*0xffe3f57d*/\n StatusCodeData20 = 0; /*0xffe3f581*/\n StatusCodeData21 = 0; /*0xffe3f585*/\n StatusCodeData22 = 0; /*0xffe3f58c*/\n StatusCodeData23 = 0; /*0xffe3f593*/\n StatusCodeData24 = 0; /*0xffe3f59a*/\n StatusCodeData25 = 0; /*0xffe3f5a1*/\n OutputBuffer = 0; /*0xffe3f5a8*/\n SetMemWrapper((int)TempBuffer, TempBuffer, 0, 0xFFu); /*0xffe3f5af*/\n PeiServices_1 = (int ( *)(int, char *))GetPeiServices(); /*0xffe3f5b7*/\n PeiServices = PeiServices_1; /*0xffe3f5bc*/\n if ( FormatString ) /*0xffe3f5c1*/\n {\n AsciiSPrintUnicodeFormat(&OutputBuffer, 0x100u, 0, FormatString, Args, 0); /*0xffe3f5d7*/\n Value_1 = Value; /*0xffe3f5f0*/\n StatusCodeDispatchCallbacks((int)PeiServices, 3, 50659328, 0, 0, (int)StatusCodeData); /*0xffe3f5f4*/\n for ( Callback = (void ( *)(char *, int))i[0]; /*0xffe3f5f9*/\n Callback;\n Callback = (void ( *)(char *, int))dword_FFE43E14[Index++] )\n {\n Callback(&OutputBuffer, Value); /*0xffe3f60c*/\n }\n return PeiServicesInstallPpi((int)PeiServices, &OutputBuffer); /*0xffe3f625*/\n }\n return PeiServices_1; /*0xffe3f62a*/\n}","refs":[{"addr":"0xffe4245c","name":"SetMemWrapper"},{"addr":"0xffe3fdc4","name":"GetPeiServices"},{"addr":"0xffe3feb5","name":"AsciiSPrintUnicodeFormat"},{"addr":"0xffe3f430","name":"StatusCodeDispatchCallbacks"},{"addr":"0xffe43e10","name":"i"},{"addr":"0xffe43e14","name":"HandlerTable"},{"addr":"0xffe3fb5e","name":"PeiServicesInstallPpi"}]}

{"addr":"0xffe3f631","code":"int ( *StatusCodeDebugAssert(double AssertString, int LineNumber))(int a1, char *_r_n)\n{\n int Index; // ebx\n int PeiServices; // esi\n void ( *i)(char *, _DWORD, _DWORD); // eax\n double ExtraInfo; // [esp+0h] [ebp-180h]\n int StatusCodeData[30]; // [esp+8h] [ebp-178h] BYREF\n char AssertBuffer; // [esp+80h] [ebp-100h] BYREF\n _BYTE TempBuffer[255]; // [esp+81h] [ebp-FFh] BYREF\n\n Index = 0; /*0xffe3f63e*/\n StatusCodeData[1] = -1706126778; /*0xffe3f640*/\n StatusCodeData[0] = 23330836; /*0xffe3f64c*/\n StatusCodeData[2] = 299226451; /*0xffe3f669*/\n StatusCodeData[3] = 100721287; /*0xffe3f671*/\n StatusCodeData[4] = -1178385111; /*0xffe3f679*/\n memset(&StatusCodeData[6], 0, 96); /*0xffe3f685*/\n AssertBuffer = 0; /*0xffe3f6ee*/\n SetMemWrapper((int)TempBuffer, TempBuffer, 0, 0xFFu); /*0xffe3f6f5*/\n PeiServices = GetPeiServices(); /*0xffe3f705*/\n AsciiSPrint(\n &AssertBuffer,\n 0x100u,\n \"ASSERT %a(%d): %a\\n Press any key to continue. \\n\",\n AssertString,\n LineNumber,\n ExtraInfo);\n StatusCodeData[5] = 0x80000000; /*0xffe3f728*/\n StatusCodeDispatchCallbacks(PeiServices, 3, 50659328, 0, 0, (int)StatusCodeData); /*0xffe3f73d*/\n for ( i = (void ( *)(char *, _DWORD, _DWORD))i_0; i; i = (void ( *)(char *, _DWORD, _DWORD))::i[Index++] ) /*0xffe3f742*/\n i(&AssertBuffer, LODWORD(AssertString), HIDWORD(AssertString)); /*0xffe3f75a*/\n return PeiServicesInstallPpi(PeiServices, &AssertBuffer); /*0xffe3f779*/\n}","refs":[{"addr":"0xffe4245c","name":"SetMemWrapper"},{"addr":"0xffe3fdc4","name":"GetPeiServices"},{"addr":"0xffe3fdf6","name":"AsciiSPrint"},{"addr":"0xffe4284c","name":"ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n","string":"ASSERT %a(%d): %a\n Press any key to continue. \n"},{"addr":"0xffe3f430","name":"StatusCodeDispatchCallbacks"},{"addr":"0xffe43e0c","name":"i_0"},{"addr":"0xffe43e10","name":"i"},{"addr":"0xffe3fb5e","name":"PeiServicesInstallPpi"}]}

{"addr":"0xffe3f77f","code":"int StatusCodePeiEntry(int FileHandle, int __return_address)\n{\n int v4; // eax\n int PeiServices; // eax\n int Status; // eax\n int Status_1; // esi\n int ReportStatusCodePpi; // eax\n int v10; // eax\n int Status_2; // eax\n int v12; // eax\n int StatusCodePpi; // esi\n int v14; // eax\n int Status_3; // eax\n int v16; // eax\n int Descriptor_1; // esi\n int v18; // eax\n int Status_4; // eax\n int v20; // eax\n int Index; // edi\n int (*i)(); // eax\n void *This; // ecx\n char StatusCodePpiBuffer[4]; // [esp+8h] [ebp-10h] BYREF\n char StatusCodePpiBuffer2[4]; // [esp+Ch] [ebp-Ch] BYREF\n int Descriptor; // [esp+10h] [ebp-8h] BYREF\n int Descriptor2; // [esp+14h] [ebp-4h] BYREF\n\n v4 = GetPeiServices(); /*0xffe3f78b*/\n if ( (*(int ( **)(int))(*(_DWORD *)v4 + 116))(FileHandle) == -2147483628 ) /*0xffe3f79c*/\n {\n PeiServices = GetPeiServices(); /*0xffe3f7a2*/\n Status = (*(int ( **)(int, void *, _DWORD, int *, char *))(*(_DWORD *)PeiServices + 32))( /*0xffe3f7b9*/\n PeiServices,\n &unk_FFE4356C,\n 0,\n &Descriptor2,\n StatusCodePpiBuffer2);\n Status_1 = Status; /*0xffe3f7bc*/\n if ( Status >= 0 ) /*0xffe3f7c3*/\n {\n v10 = GetPeiServices(); /*0xffe3f7fd*/\n Status_2 = (*(int ( **)(int, void *, _DWORD, int *, char *))(*(_DWORD *)v10 + 32))( /*0xffe3f814*/\n v10,\n &unk_FFE4353C,\n 0,\n &Descriptor,\n StatusCodePpiBuffer);\n Status_1 = Status_2; /*0xffe3f817*/\n if ( Status_2 >= 0 ) /*0xffe3f81e*/\n {\n StatusCodePpi = Descriptor2; /*0xffe3f848*/\n v14 = GetPeiServices(); /*0xffe3f84b*/\n Status_3 = (*(int ( **)(int, int, void *))(*(_DWORD *)v14 + 28))(v14, StatusCodePpi, &unk_FFE4367C); /*0xffe3f859*/\n Status_1 = Status_3; /*0xffe3f85c*/\n if ( Status_3 >= 0 ) /*0xffe3f863*/\n {\n Descriptor_1 = Descriptor; /*0xffe3f894*/\n v18 = GetPeiServices(); /*0xffe3f897*/\n Status_4 = (*(int ( **)(int, int, void *))(*(_DWORD *)v18 + 28))(v18, Descriptor_1, &unk_FFE435B8); /*0xffe3f8a5*/\n Status_1 = Status_4; /*0xffe3f8a8*/\n if ( Status_4 < 0 ) /*0xffe3f8af*/\n {\n DebugPrint(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", Status_4); /*0xffe3f8c0*/\n v20 = LocateReportStatusCodePpi(); /*0xffe3f8c8*/\n if ( v20 ) /*0xffe3f8cf*/\n (*(void ( **)(const char *, int, const char *))(v20 + 4))( /*0xffe3f8df*/\n \"e:\\\\hs\\\\AmiModulePkg\\\\AmiStatusCode\\\\StatusCodePei.c\",\n 513,\n \"!EFI_ERROR (Status)\");\n }\n }\n else\n {\n DebugPrint(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", Status_3); /*0xffe3f870*/\n v16 = LocateReportStatusCodePpi(); /*0xffe3f878*/\n if ( v16 ) /*0xffe3f87f*/\n (*(void ( **)(const char *, int, const char *))(v16 + 4))( /*0xffe3f88f*/\n \"e:\\\\hs\\\\AmiModulePkg\\\\AmiStatusCode\\\\StatusCodePei.c\",\n 506,\n \"!EFI_ERROR (Status)\");\n }\n }\n else\n {\n DebugPrint(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", Status_2); /*0xffe3f82b*/\n v12 = LocateReportStatusCodePpi(); /*0xffe3f833*/\n if ( v12 ) /*0xffe3f83a*/\n (*(void ( **)(const char *, int, const char *))(v12 + 4))( /*0xffe3f846*/\n \"e:\\\\hs\\\\AmiModulePkg\\\\AmiStatusCode\\\\StatusCodePei.c\",\n 499,\n \"!EFI_ERROR (Status)\");\n }\n }\n else\n {\n DebugPrint(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", Status); /*0xffe3f7d0*/\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe3f7d8*/\n if ( ReportStatusCodePpi ) /*0xffe3f7df*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe3f7f0*/\n \"e:\\\\hs\\\\AmiModulePkg\\\\AmiStatusCode\\\\StatusCodePei.c\",\n 486,\n \"!EFI_ERROR (Status)\");\n }\n return Status_1; /*0xffe3f7f6*/\n }\n else\n {\n Index = 0; /*0xffe3f8e5*/\n for ( i = PpiDescriptorPtr; i; i = (int (*)())dword_FFE427FC[Index++] ) /*0xffe3f8e7*/\n i(); /*0xffe3f8f0*/\n (*(void ( **)(int, void *))(*(_DWORD *)__return_address + 24))(__return_address, &unk_FFE435AC); /*0xffe3f908*/\n StatusCodeAllocCallbackNode(This); /*0xffe3f90b*/\n (*(void ( **)(int, void *))(*(_DWORD *)__return_address + 24))(__return_address, &unk_FFE435B8); /*0xffe3f918*/\n return (*(int ( **)(int, void *))(*(_DWORD *)__return_address + 24))(__return_address, &unk_FFE4367C); /*0xffe3f923*/\n }\n}","refs":[{"addr":"0xffe3fdc4","name":"GetPeiServices"},{"addr":"0xffe4356c","name":"unk_FFE4356C"},{"addr":"0xffe4353c","name":"unk_FFE4353C"},{"addr":"0xffe4367c","name":"unk_FFE4367C"},{"addr":"0xffe435b8","name":"unk_FFE435B8"},{"addr":"0xffe3fd7c","name":"DebugPrint"},{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe4279c","name":"aEHsAmimodulepk","string":"e:\\hs\\AmiModulePkg\\AmiStatusCode\\StatusCodePei.c"},{"addr":"0xffe3fb56","name":"PpiDescriptorPtr"},{"addr":"0xffe427fc","name":"dword_FFE427FC"},{"addr":"0xffe435ac","name":"unk_FFE435AC"},{"addr":"0xffe3f2fb","name":"StatusCodeAllocCallbackNode"}]}

{"addr":"0xffe3f930","code":"int DebugAssertMsgs(int StatusCodeData, int _r_n)\n{\n int v2; // esi\n int v3; // eax\n\n v2 = StatusCodeData + 52; /*0xffe3f931*/\n v3 = 0; /*0xffe3f934*/\n if ( *(_BYTE *)(StatusCodeData + 52) ) /*0xffe3f936*/\n {\n do /*0xffe3f93b*/\n ++v3; /*0xffe3f93a*/\n while ( *(_BYTE *)(v3 + v2) ); /*0xffe3f93b*/\n }\n SPrintAsciiFormat(\n _r_n,\n 256,\n (int)\"ASSERT in %s on %i: %s\\n\",\n (const char *)(StatusCodeData + 52),\n *(_DWORD *)(StatusCodeData + 40),\n (const char *)(v2 + v3 + 1));\n return 0; /*0xffe3f95e*/\n}","refs":[{"addr":"0xffe411f9","name":"SPrintAsciiFormat"},{"addr":"0xffe42800","name":"aAssertInSOnIS","string":"ASSERT in %s on %i: %s\n"}]}

{"addr":"0xffe3f960","code":"int StatusCodeToErrorStr(int n7, int _r_n)\n{\n int n7_1; // esi\n int i; // eax\n double v5; // [esp-4h] [ebp-8h]\n\n n7_1 = ::n7; /*0xffe3f961*/\n for ( i = 0; ; ++i )\n {\n if ( !n7_1 )\n {\n SPrintAsciiFormat(\n _r_n,\n 256,\n (int)\"ERROR: Class:%X; Subclass:%X; Operation: %X\\n\",\n n7 & 0xFF000000,\n n7 & 0xFF0000,\n (unsigned __int16)n7);\n return 0; /*0xffe3f999*/\n }\n if ( n7_1 == n7 ) /*0xffe3f96d*/\n break; /*0xffe3f96d*/\n n7_1 = dword_FFE435E4[2 *i]; /*0xffe3f96f*/\n }\n LODWORD(v5) = (&off_FFE435E0)[2 *i]; // \"Memory not installed\" /*0xffe3f9a5*/\n SPrintAsciiFormat(_r_n, 256, (int)\"ERROR: %a\\n\", v5);\n return 0; /*0xffe3f9a3*/\n}","refs":[{"addr":"0xffe435dc","name":"n7"},{"addr":"0xffe411f9","name":"SPrintAsciiFormat"},{"addr":"0xffe42818","name":"aErrorClassXSub","string":"ERROR: Class:%X; Subclass:%X; Operation: %X\n"},{"addr":"0xffe435e4","name":"dword_FFE435E4"},{"addr":"0xffe435e0","name":"off_FFE435E0"},{"addr":"0xffe42790","name":"aErrorA","string":"ERROR: %a\n"}]}

{"addr":"0xffe3f9c1","code":"int StatusCodeFormatMsg(int CodeType, int Value, int StatusCodeData, _BYTE *Buffer)\n{\n char *SrcPtr; // esi\n char *WideSrcPtr; // ebp\n unsigned __int16 Index; // dx\n int DataType; // eax\n char CharByte; // al\n __int16 CharSize; // ax\n char WideCharByte; // al\n int DataPtr; // ecx\n\n if ( !StatusCodeData ) /*0xffe3f9d6*/\n goto LABEL_24; /*0xffe3f9d6*/\n if ( StrnCmp((_BYTE *)(StatusCodeData + 4), src_3) ) /*0xffe3f9e7*/\n {\n if ( !StrnCmp((_BYTE *)(StatusCodeData + 4), src_0) ) /*0xffe3fa69*/\n {\n AsciiSPrintUnicodeFormat( /*0xffe3fa8d*/\n Buffer,\n 0x100u,\n 0,\n (unsigned __int8 *)(StatusCodeData + 120),\n va,\n (unsigned __int16 *)(StatusCodeData + 24));\n return 0; /*0xffe3fa95*/\n }\n if ( !StrnCmp((_BYTE *)(StatusCodeData + 4), src_1) ) /*0xffe3fa9f*/\n {\n if ( (_BYTE)CodeType != 2 ) /*0xffe3faac*/\n return 0; /*0xffe3faac*/\n if ( (CodeType & 0xFF000000) == 0x90000000 && (_WORD)Value == 7 ) /*0xffe3fac0*/\n {\n DataPtr = StatusCodeData; /*0xffe3fac2*/\nLABEL_23:\n DebugAssertMsgs(DataPtr, (int)Buffer); /*0xffe3fadb*/\n return 0; /*0xffe3fae4*/\n }\nLABEL_25:\n StatusCodeToErrorStr(Value, (int)Buffer); /*0xffe3faeb*/\n return 0; /*0xffe3faf1*/\n }\n if ( !StrnCmp((_BYTE *)(StatusCodeData + 4), src_2) ) /*0xffe3face*/\n {\n DataPtr = StatusCodeData + 20; /*0xffe3fad8*/\n goto LABEL_23; /*0xffe3fad8*/\n }\nLABEL_24:\n if ( (_BYTE)CodeType != 2 ) /*0xffe3fae9*/\n return 0; /*0xffe3fae9*/\n goto LABEL_25; /*0xffe3fae9*/\n }\n SrcPtr = *(char **)(StatusCodeData + 24); /*0xffe3f9f1*/\n WideSrcPtr = SrcPtr; /*0xffe3f9f4*/\n for ( Index = 0; ; Index += CharSize ) /*0xffe3f9fa*/\n {\n DataType = *(_DWORD *)(StatusCodeData + 20); /*0xffe3f9fe*/\n if ( (DataType || !*SrcPtr) && (DataType != 1 || !*(_WORD *)WideSrcPtr) ) /*0xffe3fa10*/\n break; /*0xffe3fa10*/\n if ( Index >= 0xFFu ) /*0xffe3fa1e*/\n break; /*0xffe3fa1e*/\n if ( DataType ) /*0xffe3fa22*/\n {\n WideCharByte = *WideSrcPtr; /*0xffe3fa37*/\n WideSrcPtr += 2; /*0xffe3fa3a*/\n Buffer[Index] = WideCharByte; /*0xffe3fa42*/\n CharSize = 2; /*0xffe3fa45*/\n }\n else\n {\n CharByte = *SrcPtr++; /*0xffe3fa24*/\n Buffer[Index] = CharByte; /*0xffe3fa2a*/\n CharSize = 1; /*0xffe3fa2f*/\n }\n }\n Buffer[Index] = 0; /*0xffe3fa59*/\n return 0; /*0xffe3faf8*/\n}","refs":[{"addr":"0xffe3feb5","name":"AsciiSPrintUnicodeFormat"},{"addr":"0xffe43e2c","name":"va"},{"addr":"0xffe40c09","name":"StrnCmp"},{"addr":"0xffe4358c","name":"src_0"},{"addr":"0xffe3f930","name":"DebugAssertMsgs"},{"addr":"0xffe3f960","name":"StatusCodeToErrorStr"},{"addr":"0xffe4352c","name":"src_1"},{"addr":"0xffe4368c","name":"src_2"},{"addr":"0xffe4357c","name":"src_3"}]}

{"addr":"0xffe3fafe","code":"int SetMem16(int a1, char *_r_n)\n{\n char *_r_n_1; // ecx\n int n2; // edx\n char *v4; // esi\n char n10; // al\n\n _r_n_1 = _r_n; /*0xffe3fafe*/\n n2 = 0; /*0xffe3fb02*/\n if ( _r_n && *_r_n ) /*0xffe3fb08*/\n {\n do /*0xffe3fb43*/\n {\n v4 = &_r_n_1[n2]; /*0xffe3fb0d*/\n n10 = _r_n_1[n2]; /*0xffe3fb10*/\n if ( n10 == 13 && v4[1] == 10 ) /*0xffe3fb1a*/\n {\n n2 += 2; /*0xffe3fb1c*/\n }\n else if ( n10 == 10 ) /*0xffe3fb23*/\n {\n if ( n2 ) /*0xffe3fb27*/\n ComPortPollLsrTx(_r_n_1, n2); /*0xffe3fb29*/\n ComPortPollLsrTx(\"\\r\\n\", 2); /*0xffe3fb36*/\n _r_n_1 = v4 + 1; /*0xffe3fb3b*/\n n2 = 0; /*0xffe3fb3e*/\n }\n else\n {\n ++n2; /*0xffe3fb42*/\n }\n }\n while ( _r_n_1[n2] ); /*0xffe3fb43*/\n if ( n2 ) /*0xffe3fb4c*/\n ComPortPollLsrTx(_r_n_1, n2); /*0xffe3fb4e*/\n }\n return 0; /*0xffe3fb55*/\n}","refs":[{"addr":"0xffe414a9","name":"ComPortPollLsrTx"},{"addr":"0xffe42848","name":"_r_n","string":"\r\n"}]}

{"addr":"0xffe3fb56","code":"int PpiDescriptorPtr()\n{\n ComPortInitialize(); /*0xffe3fb56*/\n return 0; /*0xffe3fb5d*/\n}","refs":[{"addr":"0xffe413a5","name":"ComPortInitialize"}]}

{"addr":"0xffe3fb5e","code":"int ( *PeiServicesInstallPpi(int PeiServices, char *_r_n))(int a1, char *_r_n)\n{\n int v4; // esi\n int ( *SetMem16_1)(int, char *); // eax\n\n v4 = 0; /*0xffe3fb65*/\n for ( SetMem16_1 = SetMem16; SetMem16_1; SetMem16_1 = (int ( *)(int, char *))dword_FFE427F4[v4++] ) /*0xffe3fb67*/\n SetMem16_1(PeiServices, _r_n); /*0xffe3fb70*/\n return SetMem16_1; /*0xffe3fb80*/\n}","refs":[{"addr":"0xffe3fafe","name":"SetMem16"},{"addr":"0xffe427f4","name":"dword_FFE427F4"}]}

{"addr":"0xffe3fb84","code":"int SerialPortWrite(\n int PeiServices,\n int CodeType,\n int Value,\n int Instance,\n int CallerId,\n int StatusCodeData,\n char *Buffer)\n{\n int Index1; // edi\n void ( *Callback1)(int, unsigned __int8, int); // eax\n int Index2; // edi\n void ( *i)(int, int, __int16); // eax\n int *HandlerTable; // eax\n\n Index1 = 0; /*0xffe3fb90*/\n for ( Callback1 = (void ( *)(int, unsigned __int8, int))BasePrintFillBuffer; /*0xffe3fb92*/\n Callback1;\n Callback1 = (void ( *)(int, unsigned __int8, int))*(&funcs_FFE3FB9C + Index1++) )\n {\n Callback1(PeiServices, CodeType, Value); /*0xffe3fb9c*/\n }\n *Buffer = 0; /*0xffe3fbba*/\n StatusCodeFormatMsg(CodeType, Value, StatusCodeData, Buffer); /*0xffe3fbbc*/\n if ( *Buffer ) /*0xffe3fbc1*/\n PeiServicesInstallPpi(PeiServices, Buffer); /*0xffe3fbcc*/\n Index2 = 0; /*0xffe3fbd1*/\n for ( i = (void ( *)(int, int, __int16))BasePrintParseHexByte; /*0xffe3fbd3*/\n i;\n i = (void ( *)(int, int, __int16))dword_FFE427EC[Index2++] )\n {\n i(PeiServices, CodeType, Value); /*0xffe3fbe9*/\n }\n if ( (_BYTE)CodeType == 2 ) /*0xffe3fbfd*/\n {\n HandlerTable = ::HandlerTable; /*0xffe3fc06*/\n if ( byte_FFE43E1C ) /*0xffe3fc0b*/\n HandlerTable = (int *)&unk_FFE43E20; /*0xffe3fc0d*/\n while ( *HandlerTable ) /*0xffe3fc25*/\n {\n if ( *HandlerTable == Value && HandlerTable[1] ) /*0xffe3fc18*/\n {\n ((void ( *)(int, int))HandlerTable[1])(PeiServices, Value); /*0xffe3fc2b*/\n return 0; /*0xffe3fc2b*/\n }\n HandlerTable += 2; /*0xffe3fc1e*/\n }\n }\n return 0; /*0xffe3fc30*/\n}","refs":[{"addr":"0xffe3fc43","name":"BasePrintFillBuffer"},{"addr":"0xffe427e0","name":"funcs_FFE3FB9C"},{"addr":"0xffe3f9c1","name":"StatusCodeFormatMsg"},{"addr":"0xffe3fb5e","name":"PeiServicesInstallPpi"},{"addr":"0xffe3fd06","name":"BasePrintParseHexByte"},{"addr":"0xffe427ec","name":"dword_FFE427EC"},{"addr":"0xffe43e14","name":"HandlerTable"},{"addr":"0xffe43e20","name":"unk_FFE43E20"},{"addr":"0xffe43e1c","name":"byte_FFE43E1C"}]}

{"addr":"0xffe3fc37","code":"int BasePrintIsHexDigit(int a1, unsigned __int8 a2)\n{\n int result; // eax\n\n result = a2; /*0xffe3fc37*/\n __outbyte(0x80u, a2); /*0xffe3fc41*/\n return result; /*0xffe3fc42*/\n}"}

{"addr":"0xffe3fc43","code":"int BasePrintFillBuffer(int a1, unsigned __int8 a2, int a3)\n{\n unsigned int n2; // eax\n int v4; // eax\n int v5; // ebx\n unsigned __int8 v6; // al\n void ( *i)(int, unsigned __int8); // eax\n unsigned __int8 v9; // [esp+Ch] [ebp+Ch]\n\n n2 = a2 - 1; /*0xffe3fc4a*/\n if ( n2 < 2 ) /*0xffe3fc4e*/\n {\n v4 = (int)*(&off_FFE4287C + n2); /*0xffe3fc50*/\n v5 = 0; /*0xffe3fc58*/\n while ( 1 ) /*0xffe3fc64*/\n {\n if ( !*(_DWORD *)v4 ) /*0xffe3fc64*/\n {\n v6 = 0; /*0xffe3fc6a*/\n goto LABEL_7; /*0xffe3fc6a*/\n }\n if ( *(_DWORD *)v4 == a3 ) /*0xffe3fc5f*/\n break; /*0xffe3fc5f*/\n v4 += 8; /*0xffe3fc61*/\n }\n v6 = *(_BYTE *)(v4 + 4); /*0xffe3fc7a*/\nLABEL_7:\n v9 = v6; /*0xffe3fc6c*/\n if ( v6 ) /*0xffe3fc71*/\n {\n for ( i = (void ( *)(int, unsigned __int8))BasePrintIsHexDigit; /*0xffe3fc73*/\n i;\n i = (void ( *)(int, unsigned __int8))funcs_FFE3FC85[v5++] )\n {\n i(a1, v9); /*0xffe3fc85*/\n }\n }\n }\n return 0; /*0xffe3fc98*/\n}","refs":[{"addr":"0xffe4287c","name":"off_FFE4287C"},{"addr":"0xffe3fc37","name":"BasePrintIsHexDigit"},{"addr":"0xffe427d4","name":"funcs_FFE3FC85"}]}

{"addr":"0xffe3fc9a","code":"int BasePrintProduceSChar(int a1, unsigned __int8 n2, int a3)\n{\n unsigned int n2_1; // esi\n int i; // eax\n unsigned __int8 v5; // al\n int v6; // edi\n\n n2_1 = n2 - 1; /*0xffe3fca5*/\n if ( n2_1 < 2 ) /*0xffe3fcaa*/\n {\n for ( i = (int)*(&off_FFE42884 + n2_1); ; i += 8 ) /*0xffe3fcac*/\n {\n if ( !*(_DWORD *)i ) /*0xffe3fcbd*/\n {\n v5 = 0; /*0xffe3fcc3*/\n goto LABEL_7; /*0xffe3fcc3*/\n }\n if ( *(_DWORD *)i == a3 ) /*0xffe3fcb8*/\n break; /*0xffe3fcb8*/\n }\n v5 = *(_BYTE *)(i + 4); /*0xffe3fd01*/\nLABEL_7:\n if ( v5 ) /*0xffe3fcc7*/\n {\n v6 = v5; /*0xffe3fcc9*/\n do /*0xffe3fce8*/\n {\n ComPortSetBaud(0xE56Cu, 0x61A80u); /*0xffe3fcd6*/\n TimerDelay(0x186A0u); /*0xffe3fce0*/\n --v6; /*0xffe3fce5*/\n }\n while ( v6 ); /*0xffe3fce8*/\n }\n if ( n2 == 2 ) /*0xffe3fced*/\n TimerDelay(0xF4240u); /*0xffe3fcf4*/\n }\n return 0; /*0xffe3fcf9*/\n}","refs":[{"addr":"0xffe42884","name":"off_FFE42884"},{"addr":"0xffe41524","name":"ComPortSetBaud"},{"addr":"0xffe41339","name":"TimerDelay"}]}

{"addr":"0xffe3fd06","code":"int BasePrintParseHexByte(int a1, int a2, __int16 a3)\n{\n int v3; // esi\n\n if ( (a3 & 0xFF00) == 0x8100 && (_BYTE)a3 ) /*0xffe3fd21*/\n {\n v3 = (unsigned __int8)a3; /*0xffe3fd23*/\n do /*0xffe3fd42*/\n {\n ComPortSetBaud(0x33198u, 0x9C40u); /*0xffe3fd30*/\n TimerDelay(0x186A0u); /*0xffe3fd3a*/\n --v3; /*0xffe3fd3f*/\n }\n while ( v3 ); /*0xffe3fd42*/\n }\n return 0; /*0xffe3fd46*/\n}","refs":[{"addr":"0xffe41524","name":"ComPortSetBaud"},{"addr":"0xffe41339","name":"TimerDelay"}]}

{"addr":"0xffe3fd4b","code":"int LocateReportStatusCodePpi()\n{\n int PeiServices; // eax\n _BYTE v2[4]; // [esp+0h] [ebp-8h] BYREF\n int v3; // [esp+4h] [ebp-4h] BYREF\n\n PeiServices = GetPeiServices(); /*0xffe3fd50*/\n if ( (*(int ( **)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)PeiServices + 32))( /*0xffe3fd6f*/\n PeiServices,\n &unk_FFE4354C,\n 0,\n v2,\n &v3) >= 0 )\n return v3; /*0xffe3fd75*/\n else\n return 0; /*0xffe3fd71*/\n}","refs":[{"addr":"0xffe3fdc4","name":"GetPeiServices"},{"addr":"0xffe4354c","name":"unk_FFE4354C"}]}

{"addr":"0xffe3fd7c","code":"int DebugPrint(int a1, const char *a2, ...)\n{\n int result; // eax\n int ( **v3)(int, const char *, char *); // esi\n va_list va; // [esp+10h] [ebp+Ch] BYREF\n\n va_start(va, a2);\n result = LocateReportStatusCodePpi(); /*0xffe3fd7d*/\n v3 = (int ( **)(int, const char *, char *))result; /*0xffe3fd82*/\n if ( result ) /*0xffe3fd86*/\n {\n result = DebugEnabled(); /*0xffe3fd88*/\n if ( (result & a1) != 0 ) /*0xffe3fd93*/\n return (*v3)(a1, a2, (char *)va); /*0xffe3fd9f*/\n }\n return result; /*0xffe3fda4*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe41826","name":"DebugEnabled"}]}

{"addr":"0xffe3fda6","code":"int CpuDeadLoop(\n int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n int n48,\n const char *PeiServices____((void__)_0))\n{\n int result; // eax\n\n result = LocateReportStatusCodePpi(); /*0xffe3fdac*/\n if ( result ) /*0xffe3fdb3*/\n return (*(int ( **)(int, int, const char *))(result + 4))( /*0xffe3fdbb*/\n e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n n48,\n PeiServices____((void__)_0));\n return result; /*0xffe3fdc1*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"}]}

{"addr":"0xffe3fdc4","code":"int GetPeiServices()\n{\n int v0; // esi\n _BYTE v2[2]; // [esp+4h] [ebp-8h] BYREF\n int v3; // [esp+6h] [ebp-6h]\n\n PeiServicesGetTss(v2); /*0xffe3fdcd*/\n v0 = *(_DWORD *)(v3 - 4); /*0xffe3fdd5*/\n if ( !v0 ) /*0xffe3fdda*/\n CpuDeadLoop( /*0xffe3fde9*/\n (int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiServicesTablePointerLibIdt\\\\PeiServicesTablePointer.c\",\n 48,\n \"PeiServices != ((void *) 0)\");\n return v0; /*0xffe3fdf1*/\n}","refs":[{"addr":"0xffe418d4","name":"PeiServicesGetTss"},{"addr":"0xffe3fda6","name":"CpuDeadLoop"},{"addr":"0xffe428c4","name":"aEHsMdepkgLibra","string":"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c"},{"addr":"0xffe428a4","name":"PeiServices____((void__)_0)","string":"PeiServices != ((void *) 0)"}]}

{"addr":"0xffe3fdf6","code":"unsigned int AsciiSPrint(\n _BYTE *p__r_n,\n unsigned int n0xF4240,\n unsigned __int8 *ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n,\n ...)\n{\n va_list va; // [esp+10h] [ebp+10h] BYREF\n\n va_start(va, ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n);\n return AsciiSPrintUnicodeFormat(p__r_n, n0xF4240, 0, ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n, (int)va, 0); /*0xffe3fe13*/\n}","refs":[{"addr":"0xffe3feb5","name":"AsciiSPrintUnicodeFormat"}]}

{"addr":"0xffe3fe14","code":"_BYTE *BasePrintFillChar(_BYTE *a1, unsigned int a2, int i, __int16 a4, int a5)\n{\n int j; // esi\n\n for ( j = 0; j < i; ++j ) /*0xffe3fe20*/\n {\n if ( (unsigned int)a1 >= a2 ) /*0xffe3fe27*/\n break; /*0xffe3fe27*/\n *a1 = a4; /*0xffe3fe2d*/\n if ( a5 != 1 ) /*0xffe3fe2f*/\n a1[1] = HIBYTE(a4); /*0xffe3fe36*/\n a1 += a5; /*0xffe3fe39*/\n }\n return a1; /*0xffe3fe42*/\n}"}

{"addr":"0xffe3fe48","code":"_BYTE *SPrintMarker(_BYTE *_r_n, unsigned int n16, int a3, unsigned int a4)\n{\n _BYTE *_r_n_1; // esi\n int ReportStatusCodePpi; // eax\n int v7; // eax\n int v8; // edx\n unsigned __int64 v9; // rtt\n unsigned int v11; // [esp-4h] [ebp-1Ch]\n int v12; // [esp+Ch] [ebp-Ch] BYREF\n int *v13; // [esp+10h] [ebp-8h]\n unsigned int n16_1; // [esp+14h] [ebp-4h]\n\n _r_n_1 = _r_n; /*0xffe3fe4f*/\n v13 = &v12; /*0xffe3fe57*/\n n16_1 = n16; /*0xffe3fe5a*/\n *_r_n = 0; /*0xffe3fe5d*/\n do /*0xffe3fe9e*/\n {\n if ( !n16 ) /*0xffe3fe62*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe3fe64*/\n if ( ReportStatusCodePpi ) /*0xffe3fe6b*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe3fe79*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\DivU64x32Remainder.c\",\n 47,\n \"Divisor != 0\");\n }\n v11 = a4 / n16_1; /*0xffe3fe89*/\n LODWORD(v9) = a3; /*0xffe3fe8d*/\n HIDWORD(v9) = a4 % n16_1; /*0xffe3fe8d*/\n v7 = v9 / n16_1; /*0xffe3fe8d*/\n v8 = v9 % n16_1; /*0xffe3fe8d*/\n if ( v13 ) /*0xffe3fe92*/\n *v13 = v8; /*0xffe3fe94*/\n ++_r_n_1; /*0xffe3fe9a*/\n a3 = v7; /*0xffe3fe9b*/\n a4 = v11; /*0xffe3fea0*/\n *_r_n_1 = byte_FFE42EBC[v12]; /*0xffe3fea9*/\n }\n while ( v11 | v7 ); /*0xffe3fe9e*/\n return _r_n_1; /*0xffe3fead*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe42ebc","name":"byte_FFE42EBC"}]}

Output truncated. Run: curl -o .ida-mcp/19d922d8-8166-4d4e-b49a-0eae28caa306.json http://127.0.0.1:13392/output/19d922d8-8166-4d4e-b49a-0eae28caa306.json

{"addr":"0xffe40afd","code":"unsigned int PciCf8Read(_BYTE *_r_n, unsigned int n38, __int16 a3, char *%02d_%02d_%04d__%02d:%02d, ...)\n{\n va_list va; // [esp+18h] [ebp+18h] BYREF\n\n va_start(va, %02d_%02d_%04d__%02d:%02d);\n return AsciiSPrintUnicodeFormat(_r_n, n38, a3, (unsigned __int8 *)%02d_%02d_%04d__%02d:%02d, (int)va, 0); /*0xffe40b1a*/\n}","refs":[{"addr":"0xffe3feb5","name":"AsciiSPrintUnicodeFormat"}]}

{"addr":"0xffe40b1c","code":"int PpiListIteratorInit()\n{\n int PeiServices; // eax\n int v1; // eax\n int ReportStatusCodePpi; // eax\n int v3; // eax\n int v5; // [esp+4h] [ebp-4h] BYREF\n\n PeiServices = GetPeiServices(); /*0xffe40b21*/\n v1 = (*(int ( **)(int, int *))(*(_DWORD *)PeiServices + 48))(PeiServices, &v5); /*0xffe40b2d*/\n if ( v1 < 0 ) /*0xffe40b39*/\n {\n DebugPrint(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v1); /*0xffe40b46*/\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe40b4e*/\n if ( ReportStatusCodePpi ) /*0xffe40b55*/\n (*(void ( **)(char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe40b5f*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 50,\n \"!EFI_ERROR (Status)\");\n }\n if ( !v5 ) /*0xffe40b69*/\n {\n v3 = LocateReportStatusCodePpi(); /*0xffe40b6b*/\n if ( v3 ) /*0xffe40b72*/\n (*(void ( **)(char *, int, const char *))(v3 + 4))( /*0xffe40b7c*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 51,\n \"HobList != ((void *) 0)\");\n }\n return v5; /*0xffe40b85*/\n}","refs":[{"addr":"0xffe3fdc4","name":"GetPeiServices"},{"addr":"0xffe3fd7c","name":"DebugPrint"},{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe42ebd","name":"a123456789abcde","string":"123456789ABCDEFe:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c"},{"addr":"0xffe42ef4","name":"aHoblistVoid0","string":"HobList != ((void *) 0)"}]}

{"addr":"0xffe40b8a","code":"_WORD *PpiListIteratorNext(int a1, _WORD *i)\n{\n _WORD *i_1; // esi\n int ReportStatusCodePpi; // eax\n\n i_1 = i; /*0xffe40b8b*/\n if ( !i ) /*0xffe40b8f*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe40b91*/\n if ( ReportStatusCodePpi ) /*0xffe40b98*/\n (*(void ( **)(char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe40ba6*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 82,\n \"HobStart != ((void *) 0)\");\n }\n while ( 1 ) /*0xffe40bbf*/\n {\n if ( *i_1 == 0xFFFF ) /*0xffe40bc5*/\n return 0; /*0xffe40bca*/\n if ( *i_1 == 4 ) /*0xffe40bb7*/\n break; /*0xffe40bb7*/\n i_1 = (_WORD *)((char *)i_1 + (unsigned __int16)i_1[1]); /*0xffe40bbd*/\n }\n return i_1; /*0xffe40bc9*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe42ebd","name":"a123456789abcde","string":"123456789ABCDEFe:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c"},{"addr":"0xffe42f0c","name":"aHobstartVoid0","string":"HobStart != ((void *) 0)"}]}

{"addr":"0xffe40bcf","code":"_WORD *__thiscall FindGuidInPpiList(char *this)\n{\n _WORD *i; // edx\n int v3; // ecx\n _WORD *v4; // eax\n _WORD *v5; // esi\n\n for ( i = (_WORD *)PpiListIteratorInit(); ; i = (_WORD *)((char *)v5 + (unsigned __int16)v5[1]) ) /*0xffe40bde*/\n {\n v4 = PpiListIteratorNext(v3, i); /*0xffe40bf6*/\n v5 = v4; /*0xffe40bfb*/\n if ( !v4 || GuidCompare(this, (int)(v4 + 4)) ) /*0xffe40be7*/\n break; /*0xffe40be7*/\n }\n return v5; /*0xffe40c01*/\n}","refs":[{"addr":"0xffe40b1c","name":"PpiListIteratorInit"},{"addr":"0xffe40b8a","name":"PpiListIteratorNext"},{"addr":"0xffe41875","name":"GuidCompare"}]}

{"addr":"0xffe40c09","code":"int StrnCmp(_BYTE *a1, _BYTE *src)\n{\n _BYTE *v2; // esi\n _BYTE *v3; // edi\n int n4; // ebx\n int v5; // ecx\n\n v2 = a1; /*0xffe40c0b*/\n v3 = a1 + 16; /*0xffe40c10*/\n n4 = (unsigned __int8)a1 & 3; /*0xffe40c13*/\n if ( ((unsigned __int8)a1 & 3) != 0 && n4 == ((unsigned __int8)src & 3) ) /*0xffe40c1f*/\n {\n v5 = 4 - n4; /*0xffe40c24*/\n if ( n4 != 4 ) /*0xffe40c26*/\n {\n do /*0xffe40c33*/\n {\n if ( *v2 != *src ) /*0xffe40c2c*/\n break; /*0xffe40c2c*/\n ++v2; /*0xffe40c2e*/\n ++src; /*0xffe40c2f*/\n --v5; /*0xffe40c30*/\n }\n while ( v5 ); /*0xffe40c33*/\n }\n }\n while ( v2 <= v3 - 4 && *(_DWORD *)v2 == *(_DWORD *)src ) /*0xffe40c3e*/\n {\n v2 += 4; /*0xffe40c40*/\n src += 4; /*0xffe40c43*/\n }\n while ( 1 ) /*0xffe40c54*/\n {\n if ( v2 >= v3 ) /*0xffe40c56*/\n return 0; /*0xffe40c5d*/\n if ( *v2 != *src ) /*0xffe40c50*/\n break; /*0xffe40c50*/\n ++v2; /*0xffe40c52*/\n ++src; /*0xffe40c53*/\n }\n return (char)*v2 - (char)*src; /*0xffe40c5a*/\n}"}

{"addr":"0xffe40c68","code":"_BYTE *NumberToString(_BYTE *a1, unsigned int n10, __int64 n0xA, char a4)\n{\n int v4; // ebx\n int _EDX; // edx\n int n0xA_1; // ecx\n char v9; // al\n\n v4 = HIDWORD(n0xA); /*0xffe40c69*/\n if ( n0xA >= 0 ) /*0xffe40c7a*/\n goto LABEL_2; /*0xffe40c7a*/\n if ( n10 == 10 ) /*0xffe40c89*/\n {\n n0xA_1 = -(int)n0xA; /*0xffe40c8f*/\n _EDX = (unsigned __int64)-n0xA >> 32; /*0xffe40c94*/\n goto LABEL_8; /*0xffe40c96*/\n }\n if ( a4 ) /*0xffe40c9d*/\nLABEL_2:\n _EDX = HIDWORD(n0xA); /*0xffe40c82*/\n else\n _EDX = 0; /*0xffe40c9f*/\n n0xA_1 = n0xA; /*0xffe40ca1*/\nLABEL_8:\n if ( __PAIR64__(n0xA_1, _EDX) ) /*0xffe40ca7*/\n {\n do /*0xffe40cd0*/\n {\n n0xA_1 = Udiv64Remainder(n10, (unsigned int *)&n0xA, n0xA_1, _EDX); /*0xffe40cb8*/\n if ( (unsigned int)n0xA >= 0xA ) /*0xffe40cc1*/\n v9 = n0xA + 87; /*0xffe40cc7*/\n else\n v9 = n0xA + 48; /*0xffe40cc3*/\n *a1++ = v9; /*0xffe40cc9*/\n }\n while ( __PAIR64__(n0xA_1, _EDX) ); /*0xffe40cd0*/\n }\n else\n {\n *a1++ = 48; /*0xffe40cd4*/\n }\n if ( n10 == 10 && v4 < 0 ) /*0xffe40cdf*/\n *a1++ = 45; /*0xffe40ce7*/\n *a1 = 0; /*0xffe40cec*/\n return a1 - 1; /*0xffe40ceb*/\n}","refs":[{"addr":"0xffe41296","name":"Udiv64Remainder"}]}

{"addr":"0xffe40cf6","code":"char *StringReverse(char *a1, unsigned int n10, __int64 n0xA, char a4)\n{\n char *v5; // esi\n char *v6; // eax\n char v7; // dl\n\n v5 = a1; /*0xffe40d02*/\n v6 = NumberToString(a1, n10, n0xA, a4); /*0xffe40d08*/\n if ( a1 < v6 ) /*0xffe40d12*/\n {\n do /*0xffe40d20*/\n {\n v7 = *v5; /*0xffe40d16*/\n *v5++ = *v6; /*0xffe40d18*/\n *v6-- = v7; /*0xffe40d1b*/\n }\n while ( v5 < v6 ); /*0xffe40d20*/\n }\n return a1; /*0xffe40d24*/\n}","refs":[{"addr":"0xffe40c68","name":"NumberToString"}]}

{"addr":"0xffe40d27","code":"unsigned int AsciiStrDecimalToUintn(char *a1, char **p_Status_Code:_%X)\n{\n char v2; // bl\n unsigned int n0x7FFFFFFF; // esi\n char n57; // al\n char n10; // al\n char v7; // [esp+Ch] [ebp-4h]\n\n v2 = 1; /*0xffe40d2d*/\n v7 = 0; /*0xffe40d31*/\n n0x7FFFFFFF = 0; /*0xffe40d35*/\n while ( *a1 == 32 || *a1 == 9 ) /*0xffe40d3f*/\n ++a1; /*0xffe40d41*/\n if ( !*a1 ) /*0xffe40d44*/\n {\n *p_Status_Code:_%X = a1; /*0xffe40d4a*/\n return 0; /*0xffe40d4e*/\n }\n if ( *a1 == 45 ) /*0xffe40d52*/\n {\n v2 = -1; /*0xffe40d54*/\n ++a1; /*0xffe40d57*/\n }\n if ( *a1 == 43 ) /*0xffe40d5b*/\n ++a1; /*0xffe40d5d*/\n while ( 1 ) /*0xffe40d64*/\n {\n n57 = *a1; /*0xffe40d64*/\n if ( *a1 >= 48 && n57 <= 57 ) /*0xffe40d6c*/\n {\n n10 = n57 - 48; /*0xffe40d6e*/\n goto LABEL_17; /*0xffe40d70*/\n }\n if ( (n57 & 0xDFu) < 0x41 || (n57 & 0xDFu) > 0x5A ) /*0xffe40d7f*/\n break; /*0xffe40d7f*/\n n10 = (n57 & 0xDF) - 55; /*0xffe40d83*/\nLABEL_17:\n if ( n10 >= 10 ) /*0xffe40d8b*/\n break; /*0xffe40d8b*/\n n0x7FFFFFFF = n10 + 10 *n0x7FFFFFFF; /*0xffe40d90*/\n if ( v2 == 1 ) /*0xffe40d95*/\n {\n if ( n0x7FFFFFFF < 0x80000000 ) /*0xffe40d99*/\n goto LABEL_23; /*0xffe40d99*/\n }\n else if ( n0x7FFFFFFF <= 0x80000000 ) /*0xffe40d9f*/\n {\n goto LABEL_23; /*0xffe40d9f*/\n }\n v7 = 1; /*0xffe40da1*/\nLABEL_23:\n ++a1; /*0xffe40da6*/\n }\n *p_Status_Code:_%X = a1; /*0xffe40da9*/\n if ( v7 ) /*0xffe40db0*/\n {\n n0x7FFFFFFF = 0x7FFFFFFF; /*0xffe40db2*/\n if ( v2 == -1 ) /*0xffe40dba*/\n n0x7FFFFFFF = 0x80000000; /*0xffe40dbc*/\n }\n return n0x7FFFFFFF *v2; /*0xffe40dc5*/\n}"}

{"addr":"0xffe40dca","code":"char *__thiscall AsciiStrToUpper(char *this)\n{\n char *i; // eax\n char n122; // dl\n\n for ( i = this; *i; ++i ) /*0xffe40dca*/\n {\n n122 = *i; /*0xffe40dd1*/\n if ( *i >= 97 && n122 <= 122 ) /*0xffe40ddb*/\n *i = n122 - 32; /*0xffe40de0*/\n }\n return this; /*0xffe40dea*/\n}"}

{"addr":"0xffe40deb","code":"char *SPrintUnicodeFormat(int p_StatusText, char *Status_Code:_%X, ...)\n{\n va_list va; // [esp+Ch] [ebp+Ch] BYREF\n\n va_start(va, Status_Code:_%X);\n return (char *)SPrintAsciiFormatWorker(p_StatusText, 0, Status_Code:_%X, va); /*0xffe40e01*/\n}","refs":[{"addr":"0xffe40e84","name":"SPrintAsciiFormatWorker"}]}

{"addr":"0xffe40e02","code":"char *EfiStatusToStr(int n2)\n{\n unsigned int n3; // edx\n\n if ( !n2 ) /*0xffe40e04*/\n return \"EFI_SUCCESS\"; /*0xffe40e0b*/\n if ( n2 < 0 ) /*0xffe40e0c*/\n {\n n3 = n2 & 0x1FFFFFFF; /*0xffe40e42*/\n if ( (n2 & 0xA0000000) == 0xA0000000 ) /*0xffe40e4b*/\n {\n if ( n3 >= 3 ) /*0xffe40e50*/\n return 0; /*0xffe40e50*/\n // \"EFI_INTERRUPT_PENDING\"\n return &MEMORY[0xFFE43964][25 *n3]; /*0xffe40e55*/\n }\n else if ( (n2 & 0xC0000000) == 0xC0000000 ) /*0xffe40e64*/\n {\n if ( n3 > 2 ) /*0xffe40e69*/\n return 0; /*0xffe40e69*/\n // \"ABLE_YET\"\n return &MEMORY[0xFFE439A3][25 *n3]; /*0xffe40e6e*/\n }\n else\n {\n if ( n3 > 0x1E ) /*0xffe40e78*/\n return 0; /*0xffe40e78*/\n // \"E_BOF\"\n return &MEMORY[0xFFE439DB][25 *n3]; /*0xffe40e7d*/\n }\n }\n else if ( (n2 & 0x20000000) != 0 ) /*0xffe40e14*/\n {\n if ( (unsigned int)n2 >= 2 ) /*0xffe40e19*/\n return 0; /*0xffe40e1d*/\n // \"EFI_WARN_INTERRUPT_SOURCE_PENDING\"\n return &MEMORY[0xFFE4391C][35 *n2]; /*0xffe40e21*/\n }\n else\n {\n if ( (unsigned int)n2 > 4 ) /*0xffe40e2a*/\n return 0; /*0xffe40e2a*/\n return (char *)&unk_FFE4389A + 26 *n2; /*0xffe40e2f*/\n }\n}","refs":[{"addr":"0xffe42f28","name":"aEfiSuccess","string":"EFI_SUCCESS"},{"addr":"0xffe4389a","name":"unk_FFE4389A"}]}

Output truncated. Run: curl -o .ida-mcp/f736ced0-db34-44d9-baad-5879d69018ff.json http://127.0.0.1:13392/output/f736ced0-db34-44d9-baad-5879d69018ff.json

{"addr":"0xffe411f9","code":"int SPrintAsciiFormat(int a1, int a2, int a3, ...)\n{\n va_list va; // [esp+14h] [ebp+14h] BYREF\n\n va_start(va, a3);\n return SPrintAsciiFormatWorker(a3, va); /*0xffe41215*/\n}","refs":[{"addr":"0xffe40e84","name":"SPrintAsciiFormatWorker"}]}

{"addr":"0xffe41217","code":"int SPrintGuidMarker(int n8, unsigned __int16 **p_i)\n{\n unsigned __int16 *i; // ecx\n int n4; // eax\n\n if ( !p_i ) /*0xffe41219*/\n return -2147483646; /*0xffe4121b*/\n i = *p_i; /*0xffe41221*/\n if ( **p_i == 0xFFFF ) /*0xffe4122c*/\n return -2147483634; /*0xffe41241*/\n while ( 1 ) /*0xffe41232*/\n {\n i = (unsigned __int16 *)((char *)i + i[1]); /*0xffe41232*/\n n4 = *i; /*0xffe41234*/\n if ( n4 == 4 ) /*0xffe4123a*/\n break; /*0xffe4123a*/\n if ( (_WORD)n4 == 0xFFFF ) /*0xffe4123f*/\n return -2147483634; /*0xffe4123f*/\n }\n *p_i = i; /*0xffe41248*/\n return 0; /*0xffe41220*/\n}"}

{"addr":"0xffe4124e","code":"int SPrintScanGuid(int n8, unsigned __int16 **p_i)\n{\n unsigned __int16 *i_1; // edi\n int v4; // eax\n int result; // eax\n int n8_2; // ecx\n int n8_1; // [esp-4h] [ebp-10h]\n unsigned __int16 *i; // [esp+8h] [ebp-4h] BYREF\n\n if ( !p_i ) /*0xffe41258*/\n return -2147483646; /*0xffe4128b*/\n i = *p_i; /*0xffe4125c*/\n while ( 1 ) /*0xffe4127a*/\n {\n result = SPrintGuidMarker(n8, &i); /*0xffe4127a*/\n if ( result < 0 ) /*0xffe41281*/\n break; /*0xffe41281*/\n i_1 = i; /*0xffe41261*/\n n8_1 = n8_2; /*0xffe41269*/\n v4 = StrnCmp((_BYTE *)i + 8, src); /*0xffe4126d*/\n n8 = n8_1; /*0xffe41272*/\n if ( !v4 ) /*0xffe41275*/\n {\n *p_i = i_1; /*0xffe41285*/\n return 0; /*0xffe41289*/\n }\n }\n return result; /*0xffe41290*/\n}","refs":[{"addr":"0xffe41217","name":"SPrintGuidMarker"},{"addr":"0xffe40c09","name":"StrnCmp"},{"addr":"0xffe4359c","name":"src"}]}

{"addr":"0xffe41296","code":"int Udiv64Remainder(unsigned int _EDI, unsigned int *p_n0xA, int n0xA, int _EDX)\n{\n int n0xA_1; // eax\n int n64; // ecx\n\n n0xA_1 = n0xA; /*0xffe412a5*/\n _EDX = _EDX; /*0xffe412a8*/\n _EDI = 0; /*0xffe412ae*/\n n64 = 64; /*0xffe412b0*/\n do\n {\n __asm /*0xffe412b7*/\n {\n rcl edx, 1\n rcl edi, 1\n }\n n0xA_1 = 2 *n0xA_1 + (_EDI >= _EDI); /*0xffe412c0*/\n _EDI = _EDI - (_EDI >= _EDI ? _EDI : 0);\n --n64; /*0xffe412c6*/\n }\n while ( n64 );\n if ( p_n0xA ) /*0xffe412d9*/\n *p_n0xA = _EDI; /*0xffe412de*/\n return n0xA_1; /*0xffe412d4*/\n}"}

{"addr":"0xffe412ea","code":"unsigned int TimerDelayLoop(unsigned int a1)\n{\n unsigned int v1; // esi\n unsigned int n0x400000; // edi\n unsigned __int32 v3; // ebx\n unsigned int result; // eax\n\n v1 = a1 >> 22; /*0xffe412f7*/\n n0x400000 = a1 & 0x3FFFFF; /*0xffe412fa*/\n do /*0xffe41332*/\n {\n v3 = n0x400000 + (IoPortRead32(0x508u) & 0xFFFFFF); /*0xffe4130f*/\n n0x400000 = 0x400000; /*0xffe41311*/\n while ( ((v3 - IoPortRead32(0x508u)) & 0x800000) == 0 ) /*0xffe4132b*/\n _mm_pause(); /*0xffe41318*/\n result = v1--; /*0xffe4132d*/\n }\n while ( result ); /*0xffe41332*/\n return result; /*0xffe41334*/\n}","refs":[{"addr":"0xffe41795","name":"IoPortRead32"}]}

{"addr":"0xffe41339","code":"unsigned int __thiscall TimerDelay(unsigned int n100000)\n{\n unsigned __int64 v2; // rtt\n\n LODWORD(v2) = 3579545 *n100000; /*0xffe4136f*/\n HIDWORD(v2) = ((3579545 * (unsigned __int64)n100000) >> 32) % 0xF4240; /*0xffe4136f*/\n TimerDelayLoop(v2 / 0xF4240); /*0xffe41374*/\n return n100000; /*0xffe4137b*/\n}","refs":[{"addr":"0xffe412ea","name":"TimerDelayLoop"}]}

{"addr":"0xffe41380","code":"int ComPortGetBase()\n{\n unsigned __int8 n33; // al\n\n __outbyte(0x72u, 0x5Cu); /*0xffe4138a*/\n n33 = __inbyte(0x73u); /*0xffe41391*/\n return n33 != 33 ? 1016 : 760;\n}"}

{"addr":"0xffe413a5","code":"int __thiscall ComPortInitialize(void *this)\n{\n int result; // eax\n unsigned __int8 v2; // al\n unsigned int n115200; // ecx\n unsigned int v4; // ebx\n int Base; // eax\n unsigned __int16 Base_1; // di\n unsigned __int16 v7; // bp\n unsigned __int8 v8; // al\n unsigned __int8 v9; // cl\n unsigned __int8 v10; // al\n unsigned __int8 v11; // al\n int v12; // esi\n unsigned __int8 v13; // al\n int v14; // esi\n unsigned __int8 v15; // al\n unsigned __int8 v16; // al\n\n result = PciCfgInit((unsigned int)this); /*0xffe413a6*/\n if ( result >= 0 )\n {\n __outbyte(0x72u, 0x5Cu); /*0xffe413bc*/\n __inbyte(0x73u); /*0xffe413c3*/\n __outbyte(0x72u, 0x6Cu); /*0xffe413c9*/\n v2 = __inbyte(0x73u); /*0xffe413cd*/\n switch ( v2 )\n {\n case 0xA7:\n n115200 = 115200; /*0xffe413d7*/\n break;\n case 0xA6:\n n115200 = 57600; /*0xffe413df*/\n break;\n case 0xA5:\n n115200 = 38400; /*0xffe413ea*/\n break;\n case 0xA4:\n n115200 = 19200; /*0xffe413f5*/\n break;\n default:\n n115200 = v2 != 0xA3 ? 115200 : 9600;\n break;\n }\n v4 = 0x1C200 / n115200; /*0xffe41414*/\n Base = ComPortGetBase(); /*0xffe41416*/\n Base_1 = Base; /*0xffe4141b*/\n if ( Base ) /*0xffe4141f*/\n {\n v7 = Base + 3; /*0xffe41429*/\n v8 = __inbyte(Base + 3); /*0xffe4142f*/\n v9 = v8; /*0xffe41430*/\n v10 = __inbyte(Base_1 + 3); /*0xffe41432*/\n __outbyte(Base_1 + 3, v10 | 0x80); /*0xffe41435*/\n v11 = __inbyte(Base_1 + 1); /*0xffe41439*/\n v12 = v11 << 8; /*0xffe4143d*/\n v13 = __inbyte(Base_1); /*0xffe41443*/\n v14 = v13 | v12; /*0xffe41447*/\n v15 = __inbyte(Base_1 + 3); /*0xffe4144c*/\n __outbyte(Base_1 + 3, v15 & 0x7F); /*0xffe4144f*/\n if ( (((v9 & 0x3F) == 3) & (unsigned __int8)((v14 != v4) - 1)) == 0 ) /*0xffe41462*/\n {\n do /*0xffe4146f*/\n v16 = __inbyte(Base_1 + 5); /*0xffe4146a*/\n while ( (v16 & 0x60) != 0x60 ); /*0xffe4146f*/\n __outbyte(v7, 0x80u); /*0xffe41476*/\n __outbyte(Base_1 + 1, BYTE1(v4)); /*0xffe4147f*/\n __outbyte(Base_1, v4); /*0xffe41485*/\n __outbyte(v7, 3u); /*0xffe4148b*/\n __outbyte(Base_1 + 2, 0); /*0xffe41494*/\n __outbyte(Base_1 + 2, 1u); /*0xffe41497*/\n __outbyte(Base_1 + 4, 0); /*0xffe414a0*/\n }\n return 0; /*0xffe414a1*/\n }\n else\n {\n return -2147483641; /*0xffe41421*/\n }\n }\n return result; /*0xffe414a8*/\n}","refs":[{"addr":"0xffe41a58","name":"PciCfgInit"},{"addr":"0xffe41380","name":"ComPortGetBase"}]}

{"addr":"0xffe414a9","code":"int ComPortPollLsrTx(char *_r_n, int n2)\n{\n unsigned __int8 *_r_n_1; // ebp\n int n0xFFFF; // esi\n int Base; // eax\n unsigned __int16 Base_1; // cx\n unsigned __int16 v8; // cx\n unsigned __int8 v9; // al\n int v10; // ebx\n unsigned __int8 v11; // al\n unsigned int n0x10; // ebx\n int n2_1; // [esp+Ch] [ebp-4h]\n\n _r_n_1 = (unsigned __int8 *)_r_n; /*0xffe414ac*/\n n0xFFFF = 0; /*0xffe414ae*/\n if ( !_r_n ) /*0xffe414b5*/\n return 0; /*0xffe414b5*/\n Base = ComPortGetBase(); /*0xffe414bb*/\n Base_1 = Base; /*0xffe414c0*/\n if ( !Base ) /*0xffe414c4*/\n return 0; /*0xffe414b9*/\n if ( !n2 ) /*0xffe414c8*/\n {\n v8 = Base + 5; /*0xffe414ca*/\n do /*0xffe414de*/\n {\n v9 = __inbyte(v8); /*0xffe414d0*/\n if ( (v9 & 0x60) == 0x60 ) /*0xffe414d5*/\n break; /*0xffe414d5*/\n ++n0xFFFF; /*0xffe414d7*/\n }\n while ( n0xFFFF != 0xFFFF ); /*0xffe414de*/\n return 0; /*0xffe414de*/\n }\n n2_1 = n2; /*0xffe414e2*/\nLABEL_10:\n v10 = 0; /*0xffe414e7*/\n while ( 1 ) /*0xffe414ef*/\n {\n v11 = __inbyte(Base_1 + 5); /*0xffe414ef*/\n if ( (v11 & 0x40) != 0 ) /*0xffe414f2*/\n break; /*0xffe414f2*/\n if ( ++v10 == 0xFFFF ) /*0xffe414fb*/\n return 0; /*0xffe414ff*/\n }\n n0x10 = 0; /*0xffe41501*/\n while ( n2 ) /*0xffe41505*/\n {\n __outbyte(Base_1, *_r_n_1); /*0xffe4150d*/\n ++n0x10; /*0xffe4150e*/\n --n2; /*0xffe4150f*/\n ++_r_n_1; /*0xffe41510*/\n if ( n0x10 >= 0x10 ) /*0xffe41514*/\n {\n if ( n2 ) /*0xffe41518*/\n goto LABEL_10; /*0xffe41518*/\n return n2_1; /*0xffe41518*/\n }\n }\n return n2_1; /*0xffe4151f*/\n}","refs":[{"addr":"0xffe41380","name":"ComPortGetBase"}]}

{"addr":"0xffe41524","code":"unsigned __int8 ComPortSetBaud(unsigned int n209304, unsigned int n40000)\n{\n __int16 v2; // cx\n unsigned __int8 v3; // al\n unsigned __int8 v4; // al\n unsigned __int8 result; // al\n\n v2 = ((n209304 >> 1) + 119318200) / n209304; /*0xffe41536*/\n __outbyte(0x43u, 0x54u); /*0xffe41541*/\n __outbyte(0x41u, 0x12u); /*0xffe4154a*/\n __outbyte(0x43u, 0xB6u); /*0xffe41550*/\n __outbyte(0x42u, v2); /*0xffe41559*/\n __outbyte(0x42u, HIBYTE(v2)); /*0xffe4155f*/\n v3 = __inbyte(0x61u); /*0xffe41566*/\n __outbyte(0x61u, v3 | 3); /*0xffe41569*/\n TimerDelay(n40000); /*0xffe4156c*/\n v4 = __inbyte(0x61u); /*0xffe41574*/\n result = v4 & 0xFC; /*0xffe41575*/\n __outbyte(0x61u, result); /*0xffe41577*/\n return result; /*0xffe41578*/\n}","refs":[{"addr":"0xffe41339","name":"TimerDelay"}]}

{"addr":"0xffe4157c","code":"char __thiscall ProgressDisplay10(char *_10%)\n{\n int v2; // [esp-Ch] [ebp-5Ch]\n int v3; // [esp-8h] [ebp-58h]\n char v4; // [esp-4h] [ebp-54h]\n int v5[20]; // [esp+0h] [ebp-50h] BYREF\n\n SPrintUnicodeFormat((int)v5, \"== Progress : %s ==\", _10%);\n return VideoDisplayProgress(9u, 0, 7, (int)v5, v2, v3, v4, v5[0]); /*0xffe415a3*/\n}","refs":[{"addr":"0xffe40deb","name":"SPrintUnicodeFormat"},{"addr":"0xffe42f40","name":"Status_Code:_%X","string":"== Progress : %s =="},{"addr":"0xffe41d86","name":"VideoDisplayProgress"}]}

{"addr":"0xffe415a7","code":"void ProgressStatusCodeHandler(int PeiServices, unsigned __int8 StatusCode)\n{\n int StatusText; // [esp+8h] [ebp-50h] BYREF\n\n SPrintUnicodeFormat((int)&StatusText, \"Status Code: %X\", StatusCode);\n VideoDisplayProgress(0x18u, 0x3Eu, 7, &StatusText); /*0xffe415ce*/\n DebugPrint(64, \"Status Code: %X\\n\", StatusCode);\n switch ( StatusCode )\n {\n case 0x11u:\n ProgressDisplay10(\" 10%\"); /*0xffe416b5*/\n VideoScrollBackground(0, 5u); /*0xffe416be*/\n VideoDisplayProgress(0xBu, 0, 14, \"UPI initialization: Starting...\");\n break;\n case 0x19u:\n ProgressDisplay10(\" 20%\"); /*0xffe4167d*/\n VideoScrollBackground(5u, 0xAu); /*0xffe41686*/\n VideoDisplayProgress(0xBu, 0, 7, \"UPI initialization: Done \");\n VideoDisplayProgress(0xCu, 0, 14, \"Basic IO initialization: Starting... \");\n break;\n case 0x2Fu:\n ProgressDisplay10(\" 30%\"); /*0xffe41651*/\n VideoScrollBackground(0xAu, 0xFu); /*0xffe4165a*/\n VideoDisplayProgress(0xCu, 0, 7, \"Basic IO initialization: Done \");\n VideoDisplayProgress(0xDu, 0, 14, \"Memory initialization: Starting... \");\n break;\n case 0x33u:\n ProgressDisplay10(\" 40%\"); /*0xffe41639*/\n VideoScrollBackground(0xFu, 0x14u); /*0xffe41642*/\n break;\n case 0x4Fu:\n ProgressDisplay10(\" 50%\"); /*0xffe4160d*/\n VideoScrollBackground(0xFu, 0x19u); /*0xffe41616*/\n VideoDisplayProgress(0xDu, 0, 7, \"Memory initialization: Done \");\n VideoDisplayProgress(0xEu, 0, 14, \"UEFI kernel initialization: Starting... \");\n break;\n }\n}","refs":[{"addr":"0xffe40deb","name":"SPrintUnicodeFormat"},{"addr":"0xffe41d86","name":"VideoDisplayProgress"},{"addr":"0xffe3fd7c","name":"DebugPrint"},{"addr":"0xffe4157c","name":"ProgressDisplay10"},{"addr":"0xffe41ca4","name":"VideoScrollBackground"}]}

{"addr":"0xffe416db","code":"char IoOr32()\n{\n __int16 v0; // kr00_2\n unsigned int v1; // esi\n unsigned __int8 v2; // al\n char v3; // bl\n __int16 v5; // [esp+10h] [ebp-4h]\n\n v0 = __readeflags(); /*0xffe416e0*/\n v5 = v0; /*0xffe416e2*/\n _disable(); /*0xffe416e6*/\n v1 = IoPortRead32(0xCF8u); /*0xffe416fa*/\n IoPortWrite32(0xCF8u, 0x8000FA44); /*0xffe416fc*/\n v2 = __inbyte(0xCFCu); /*0xffe41707*/\n v3 = v2 | 0x80; /*0xffe4170a*/\n __outbyte(0xCFCu, v2 | 0x80); /*0xffe4170f*/\n IoPortWrite32(0xCF8u, v1); /*0xffe41714*/\n if ( (v5 & 0x200) != 0 ) /*0xffe41722*/\n _enable(); /*0xffe41724*/\n else\n _disable(); /*0xffe41727*/\n return v3; /*0xffe41728*/\n}","refs":[{"addr":"0xffe41795","name":"IoPortRead32"},{"addr":"0xffe417c1","name":"IoPortWrite32"}]}

{"addr":"0xffe41730","code":"int IoPortRead16(unsigned __int16 a1)\n{\n int ReportStatusCodePpi; // eax\n int result; // eax\n\n if ( (a1 & 1) != 0 ) /*0xffe41736*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe41738*/\n if ( ReportStatusCodePpi ) /*0xffe4173f*/\n (*(void ( **)(char *, int, char *))(ReportStatusCodePpi + 4))((char *)-1822440, 133, (char *)-1822456); /*0xffe41750*/\n }\n LOWORD(result) = __inword(a1); /*0xffe41759*/\n return (unsigned __int16)result; /*0xffe4175e*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"}]}

{"addr":"0xffe41760","code":"unsigned __int16 IoPortWrite16(unsigned __int16 a1, unsigned __int16 n1280)\n{\n int ReportStatusCodePpi; // eax\n\n if ( (a1 & 1) != 0 ) /*0xffe4176a*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe4176c*/\n if ( ReportStatusCodePpi ) /*0xffe41773*/\n (*(void ( **)(char *, int, char *))(ReportStatusCodePpi + 4))((char *)-1822440, 163, (char *)-1822456); /*0xffe41784*/\n }\n __outword(a1, n1280); /*0xffe41790*/\n return n1280; /*0xffe41792*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"}]}

{"addr":"0xffe41795","code":"unsigned __int32 IoPortRead32(unsigned __int16 a1)\n{\n int ReportStatusCodePpi; // eax\n\n if ( (a1 & 3) != 0 ) /*0xffe4179b*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe4179d*/\n if ( ReportStatusCodePpi ) /*0xffe417a4*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe417b5*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseIoLibIntrinsic\\\\IoLibMsc.c\",\n 193,\n \"(Port & 3) == 0\");\n }\n return __indword(a1); /*0xffe417bf*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"}]}

{"addr":"0xffe417c1","code":"unsigned int IoPortWrite32(unsigned __int16 a1, unsigned int a2)\n{\n int ReportStatusCodePpi; // eax\n\n if ( (a1 & 3) != 0 ) /*0xffe417ca*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe417cc*/\n if ( ReportStatusCodePpi ) /*0xffe417d3*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe417e4*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseIoLibIntrinsic\\\\IoLibMsc.c\",\n 223,\n \"(Port & 3) == 0\");\n }\n __outdword(a1, a2); /*0xffe417ef*/\n return a2; /*0xffe417f0*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"}]}

{"addr":"0xffe417f3","code":"__int16 IoPortWrite8(_WORD *a1, __int16 n1280)\n{\n int ReportStatusCodePpi; // eax\n\n if ( ((unsigned __int8)a1 & 1) != 0 ) /*0xffe417fd*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe417ff*/\n if ( ReportStatusCodePpi ) /*0xffe41806*/\n (*(void ( **)(char *, int, char *))(ReportStatusCodePpi + 4))((char *)-1822372, 183, (char *)-1822324); /*0xffe41817*/\n }\n *a1 = n1280; /*0xffe4181d*/\n return n1280; /*0xffe41823*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"}]}

{"addr":"0xffe41826","code":"int DebugEnabled()\n{\n unsigned __int8 v0; // al\n char n3; // al\n char n3_1; // cl\n\n v0 = __inbyte(0x70u); /*0xffe4182c*/\n __outbyte(0x70u, v0 & 0x80 | 0x4A); /*0xffe41831*/\n n3 = __inbyte(0x71u); /*0xffe41838*/\n n3_1 = n3; /*0xffe41839*/\n if ( (unsigned __int8)n3 <= 3u ) /*0xffe4183e*/\n {\nLABEL_4:\n if ( !n3_1 ) /*0xffe41859*/\n return 0; /*0xffe41859*/\n goto LABEL_5; /*0xffe41859*/\n }\n n3_1 = n3; /*0xffe41840*/\n if ( !n3 ) /*0xffe41848*/\n {\n n3_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe41854*/\n goto LABEL_4; /*0xffe41854*/\n }\nLABEL_5:\n if ( n3_1 != -1 )\n return n3_1 != 1 ? -2147483578 : -2147483644;\n return 0; /*0xffe41871*/\n}","refs":[{"addr":"0xffe43e28","name":"n3"}]}

{"addr":"0xffe41875","code":"bool GuidCompare(char *this, int a2)\n{\n __int64 v4; // rax\n int v5; // ebp\n __int64 v6; // rax\n int v7; // edi\n __int64 v8; // kr00_8\n __int64 v9; // rax\n int v11; // [esp+10h] [ebp-Ch]\n int v12; // [esp+14h] [ebp-8h]\n\n v4 = GuidCopy(this); /*0xffe41880*/\n v12 = HIDWORD(v4); /*0xffe41887*/\n v5 = v4; /*0xffe4188b*/\n v6 = GuidCopy((void *)a2); /*0xffe4188d*/\n v11 = HIDWORD(v6); /*0xffe41895*/\n v7 = v6; /*0xffe41899*/\n v8 = GuidCopy(this + 8); /*0xffe418a7*/\n v9 = GuidCopy((void *)(a2 + 8)); /*0xffe418a9*/\n return v5 == v7 && v12 == v11 && v8 == v9; /*0xffe418cc*/\n}","refs":[{"addr":"0xffe41947","name":"GuidCopy"}]}

{"addr":"0xffe418d4","code":"void *__thiscall PeiServicesGetTss(void *this)\n{\n void *this_1; // eax\n\n if ( !this ) /*0xffe418da*/\n CpuDeadLoop((int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\X86ReadIdtr.c\", 37, \"Idtr != ((void *) 0)\"); /*0xffe418e9*/\n this_1 = this; /*0xffe418ef*/\n __sidt(this); /*0xffe418f2*/\n return this_1; /*0xffe418f6*/\n}","refs":[{"addr":"0xffe3fda6","name":"CpuDeadLoop"}]}

{"addr":"0xffe418f7","code":"__int16 __thiscall PciReadBuffer(void *this)\n{\n int ReportStatusCodePpi; // eax\n\n if ( !this ) /*0xffe418fc*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe418fe*/\n if ( ReportStatusCodePpi ) /*0xffe41905*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41913*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\Unaligned.c\",\n 38,\n \"Buffer != ((void *) 0)\");\n }\n return *(_WORD *)this; /*0xffe4191c*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe4288c","name":"aBufferVoid0_0","string":"Buffer != ((void *) 0)"}]}

{"addr":"0xffe4191e","code":"int __thiscall PciWriteBuffer(void *this)\n{\n int ReportStatusCodePpi; // eax\n\n if ( !this ) /*0xffe41923*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe41925*/\n if ( ReportStatusCodePpi ) /*0xffe4192c*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe4193d*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\Unaligned.c\",\n 141,\n \"Buffer != ((void *) 0)\");\n }\n return *(_DWORD *)this; /*0xffe41945*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe4288c","name":"aBufferVoid0_0","string":"Buffer != ((void *) 0)"}]}

{"addr":"0xffe41947","code":"__int64 __thiscall GuidCopy(void *this)\n{\n int ReportStatusCodePpi; // eax\n\n if ( !this ) /*0xffe4194c*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe4194e*/\n if ( ReportStatusCodePpi ) /*0xffe41955*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41966*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\Unaligned.c\",\n 192,\n \"Buffer != ((void *) 0)\");\n }\n return *(_QWORD *)this; /*0xffe41971*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe4288c","name":"aBufferVoid0_0","string":"Buffer != ((void *) 0)"}]}

{"addr":"0xffe41973","code":"unsigned int PciCf8Write(_WORD *ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n)\n{\n int ReportStatusCodePpi; // eax\n unsigned int n0xF4240; // eax\n\n if ( ((unsigned __int8)ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n & 1) != 0 ) /*0xffe41979*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe4197b*/\n if ( ReportStatusCodePpi ) /*0xffe41982*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41993*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\SafeString.c\",\n 128,\n \"((UINTN) String & 0x00000001) == 0\");\n }\n if ( !ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n ) /*0xffe4199b*/\n return 0; /*0xffe419bd*/\n n0xF4240 = 0; /*0xffe4199f*/\n if ( *ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n ) /*0xffe419a1*/\n {\n while ( n0xF4240 < 0xF4240 ) /*0xffe419ab*/\n {\n if ( !ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n[++n0xF4240] ) /*0xffe419ae*/\n return n0xF4240; /*0xffe419b2*/\n }\n return 1000001; /*0xffe419b6*/\n }\n return n0xF4240; /*0xffe419b4*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"}]}

{"addr":"0xffe419c1","code":"unsigned int __thiscall PciCf8Modify(_BYTE *this)\n{\n unsigned int n0xF4240; // eax\n\n n0xF4240 = 0; /*0xffe419c1*/\n if ( this && *this ) /*0xffe419c7*/\n {\n while ( n0xF4240 < 0xF4240 ) /*0xffe419d0*/\n {\n if ( !*(this + ++n0xF4240) ) /*0xffe419d3*/\n return n0xF4240; /*0xffe419d7*/\n }\n return 1000001; /*0xffe419da*/\n }\n return n0xF4240; /*0xffe419d9*/\n}"}

{"addr":"0xffe419e0","code":"unsigned int __thiscall VideoAsciiStrLen(_BYTE *this)\n{\n _BYTE *this_1; // esi\n int ReportStatusCodePpi; // eax\n unsigned int n0xF4240; // edi\n int v4; // eax\n\n this_1 = this; /*0xffe419e2*/\n if ( !this ) /*0xffe419ec*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe419ee*/\n if ( ReportStatusCodePpi ) /*0xffe419f5*/\n (*(void ( **)(char *, int, char *))(ReportStatusCodePpi + 4))((char *)-1822044, 1082, (char *)-1822004); /*0xffe41a02*/\n }\n n0xF4240 = 0; /*0xffe41a08*/\n while ( *this_1 ) /*0xffe41a33*/\n {\n if ( n0xF4240 >= 0xF4240 ) /*0xffe41a12*/\n {\n v4 = LocateReportStatusCodePpi(); /*0xffe41a14*/\n if ( v4 ) /*0xffe41a1b*/\n (*(void ( **)(char *, int, char *))(v4 + 4))((char *)-1822044, 1090, (char *)-1821980); /*0xffe41a28*/\n }\n ++this_1; /*0xffe41a2e*/\n ++n0xF4240; /*0xffe41a2f*/\n }\n return n0xF4240; /*0xffe41a37*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"}]}

{"addr":"0xffe41a58","code":"int __thiscall PciCfgInit(void *This)\n{\n unsigned __int8 PlatformId; // al\n char *IoConfigTable; // esi\n int IoTableCount; // edi\n void *ConfigTable; // edx\n char *v5; // esi\n int n2; // edi\n unsigned int Index; // edi\n int PciAddr; // esi\n void *This_1; // [esp-4h] [ebp-14h]\n void *This_2; // [esp-4h] [ebp-14h]\n int Data; // [esp+Ch] [ebp-4h] BYREF\n\n __outbyte(0x72u, 0x5Cu); /*0xffe41a6a*/\n PlatformId = __inbyte(0x73u); /*0xffe41a71*/\n if ( PlatformId == 33 ) /*0xffe41a74*/\n {\n IoConfigTable = (char *)&unk_FFE43D6E; /*0xffe41a78*/\n IoTableCount = 3; /*0xffe41a7d*/\n do /*0xffe41a96*/\n {\n IoReadEx((int)This, *((_WORD *)IoConfigTable - 1), *IoConfigTable, *(_DWORD *)(IoConfigTable + 2)); /*0xffe41a89*/\n IoConfigTable += 8; /*0xffe41a8e*/\n This = This_1; /*0xffe41a92*/\n --IoTableCount; /*0xffe41a93*/\n }\n while ( IoTableCount ); /*0xffe41a96*/\n ConfigTable = &unk_FFE43D9C; /*0xffe41a98*/\n }\n else\n {\n v5 = (char *)&unk_FFE43D8E; /*0xffe41aa1*/\n n2 = 2; /*0xffe41aa6*/\n do /*0xffe41abf*/\n {\n IoReadEx((int)This, *((_WORD *)v5 - 1), *v5, *(_DWORD *)(v5 + 2)); /*0xffe41ab2*/\n v5 += 8; /*0xffe41ab7*/\n This = This_2; /*0xffe41abb*/\n --n2; /*0xffe41abc*/\n }\n while ( n2 ); /*0xffe41abf*/\n ConfigTable = &unk_FFE43D3C; /*0xffe41ac1*/\n }\n CopyMemWrapper((int)This, (int)ConfigTable); /*0xffe41ac7*/\n for ( Index = 0; Index < 18; Index += 3 ) /*0xffe41acf*/\n {\n PciAddr = (unsigned __int8)byte_FFE43DCC[Index *4] | 0x1E6E2000; /*0xffe41adc*/\n PciCfgAddrWrite(PciAddr, &Data); /*0xffe41ae4*/\n Data = dword_FFE43DD4[Index] | Data & dword_FFE43DD0[Index]; /*0xffe41afb*/\n PciCfgWriteVerify(PciAddr, Data); /*0xffe41aff*/\n }\n return 0; /*0xffe41b0c*/\n}","refs":[{"addr":"0xffe43d6e","name":"unk_FFE43D6E"},{"addr":"0xffe42188","name":"IoReadEx"},{"addr":"0xffe43d9c","name":"unk_FFE43D9C"},{"addr":"0xffe43d8e","name":"unk_FFE43D8E"},{"addr":"0xffe43d3c","name":"unk_FFE43D3C"},{"addr":"0xffe42422","name":"CopyMemWrapper"},{"addr":"0xffe43dcc","name":"byte_FFE43DCC"},{"addr":"0xffe41b14","name":"PciCfgAddrWrite"},{"addr":"0xffe43dd4","name":"dword_FFE43DD4"},{"addr":"0xffe43dd0","name":"dword_FFE43DD0"},{"addr":"0xffe41be5","name":"PciCfgWriteVerify"}]}

{"addr":"0xffe41b14","code":"char PciCfgAddrWrite(int Address, int *DataOut)\n{\n unsigned __int8 ConfigByte; // al\n unsigned __int8 ConfigByte2; // al\n unsigned __int8 DataByte0; // al\n unsigned __int8 DataByte0_1; // ah\n unsigned __int8 DataByte1; // al\n unsigned __int8 DataByte1_1; // cl\n unsigned __int8 DataByte2; // al\n unsigned __int8 DataByte2_1; // bl\n unsigned __int8 DataByte3; // al\n\n __outbyte(0x2Eu, 0xA5u); /*0xffe41b22*/\n __outbyte(0x2Eu, 0xA5u); /*0xffe41b23*/\n __outbyte(0x2Eu, 7u); /*0xffe41b26*/\n __outbyte(0x2Fu, 0xDu); /*0xffe41b2f*/\n __outbyte(0x2Eu, 0x30u); /*0xffe41b35*/\n ConfigByte = __inbyte(0x2Fu); /*0xffe41b39*/\n __outbyte(0x2Fu, ConfigByte | 1); /*0xffe41b3c*/\n __outbyte(0x2Eu, 0xF0u); /*0xffe41b42*/\n __outbyte(0x2Fu, HIBYTE(Address)); /*0xffe41b4b*/\n __outbyte(0x2Eu, 0xF1u); /*0xffe41b51*/\n __outbyte(0x2Fu, BYTE2(Address)); /*0xffe41b5a*/\n __outbyte(0x2Eu, 0xF2u); /*0xffe41b60*/\n __outbyte(0x2Fu, BYTE1(Address)); /*0xffe41b69*/\n __outbyte(0x2Eu, 0xF3u); /*0xffe41b6f*/\n __outbyte(0x2Fu, Address); /*0xffe41b75*/\n __outbyte(0x2Eu, 0xF8u); /*0xffe41b7b*/\n ConfigByte2 = __inbyte(0x2Fu); /*0xffe41b7f*/\n __outbyte(0x2Fu, ConfigByte2 & 0xFC | 2); /*0xffe41b84*/\n __outbyte(0x2Eu, 0xFEu); /*0xffe41b8a*/\n __inbyte(0x2Fu); /*0xffe41b8e*/\n __outbyte(0x2Eu, 0xF4u); /*0xffe41b94*/\n DataByte0 = __inbyte(0x2Fu); /*0xffe41b98*/\n DataByte0_1 = DataByte0; /*0xffe41b99*/\n __outbyte(0x2Eu, 0xF5u); /*0xffe41ba0*/\n DataByte1 = __inbyte(0x2Fu); /*0xffe41ba4*/\n DataByte1_1 = DataByte1; /*0xffe41ba5*/\n __outbyte(0x2Eu, 0xF6u); /*0xffe41bac*/\n DataByte2 = __inbyte(0x2Fu); /*0xffe41bb0*/\n DataByte2_1 = DataByte2; /*0xffe41bb1*/\n __outbyte(0x2Eu, 0xF7u); /*0xffe41bb8*/\n DataByte3 = __inbyte(0x2Fu); /*0xffe41bbc*/\n *DataOut = DataByte3 | ((DataByte2_1 | ((DataByte1_1 | (DataByte0_1 << 8)) << 8)) << 8); /*0xffe41bd8*/\n __outbyte(0x2Eu, 0xAAu); /*0xffe41bdf*/\n return -86; /*0xffe41be0*/\n}"}

{"addr":"0xffe41be5","code":"char PciCfgWriteVerify(int Address, int Data)\n{\n unsigned __int8 ConfigByte; // al\n unsigned __int8 ConfigByte2; // al\n\n __outbyte(0x2Eu, 0xA5u); /*0xffe41bf2*/\n __outbyte(0x2Eu, 0xA5u); /*0xffe41bf3*/\n __outbyte(0x2Eu, 7u); /*0xffe41bf6*/\n __outbyte(0x2Fu, 0xDu); /*0xffe41bff*/\n __outbyte(0x2Eu, 0x30u); /*0xffe41c05*/\n ConfigByte = __inbyte(0x2Fu); /*0xffe41c09*/\n __outbyte(0x2Fu, ConfigByte | 1); /*0xffe41c0c*/\n __outbyte(0x2Eu, 0xF0u); /*0xffe41c12*/\n __outbyte(0x2Fu, HIBYTE(Address)); /*0xffe41c1b*/\n __outbyte(0x2Eu, 0xF1u); /*0xffe41c21*/\n __outbyte(0x2Fu, BYTE2(Address)); /*0xffe41c2a*/\n __outbyte(0x2Eu, 0xF2u); /*0xffe41c30*/\n __outbyte(0x2Fu, BYTE1(Address)); /*0xffe41c39*/\n __outbyte(0x2Eu, 0xF3u); /*0xffe41c3f*/\n __outbyte(0x2Fu, Address); /*0xffe41c45*/\n __outbyte(0x2Eu, 0xF4u); /*0xffe41c4b*/\n __outbyte(0x2Fu, HIBYTE(Data)); /*0xffe41c54*/\n __outbyte(0x2Eu, 0xF5u); /*0xffe41c5a*/\n __outbyte(0x2Fu, BYTE2(Data)); /*0xffe41c63*/\n __outbyte(0x2Eu, 0xF6u); /*0xffe41c69*/\n __outbyte(0x2Fu, BYTE1(Data)); /*0xffe41c72*/\n __outbyte(0x2Eu, 0xF7u); /*0xffe41c78*/\n __outbyte(0x2Fu, Data); /*0xffe41c7e*/\n __outbyte(0x2Eu, 0xF8u); /*0xffe41c84*/\n ConfigByte2 = __inbyte(0x2Fu); /*0xffe41c88*/\n __outbyte(0x2Fu, ConfigByte2 & 0xFC | 2); /*0xffe41c8d*/\n __outbyte(0x2Eu, 0xFEu); /*0xffe41c93*/\n __outbyte(0x2Fu, 0xCFu); /*0xffe41c99*/\n __outbyte(0x2Eu, 0xAAu); /*0xffe41c9f*/\n return -86; /*0xffe41ca0*/\n}"}

{"addr":"0xffe41ca4","code":"void VideoScrollBackground(unsigned __int8 StartRow, unsigned __int8 StartRow_1)\n{\n int FbSize; // edi\n int FbBase; // esi\n _WORD *FbInfo; // eax\n int RowOffset; // edx\n int WidthPixels; // ebx\n int CurrentPtr; // edx\n int LineDistance; // ecx\n int NextLineBase; // ebp\n int RowCount; // eax\n unsigned int WidthPixels_3; // esi\n unsigned int WidthPixels_2; // eax\n int PixelPtr; // ecx\n int FbDelta; // ebx\n int WidthPixels_1; // [esp+8h] [ebp-Ch]\n int n68; // [esp+Ch] [ebp-8h]\n int LineDistance_1; // [esp+10h] [ebp-4h]\n\n FbSize = 0; /*0xffe41cad*/\n if ( StartRow <= StartRow_1 ) /*0xffe41cb1*/\n {\n FbBase = -1879048192; /*0xffe41cbe*/\n FbInfo = FindGuidInPpiList(byte_FFE4355C); /*0xffe41cc3*/\n if ( FbInfo && *((_BYTE *)FbInfo + 24) && (*((_DWORD *)FbInfo + 14) || *((_DWORD *)FbInfo + 15)) ) /*0xffe41cd7*/\n {\n FbSize = *((_DWORD *)FbInfo + 14); /*0xffe41cdc*/\n FbBase = *((_DWORD *)FbInfo + 10); /*0xffe41cdf*/\n }\n RowOffset = 12 *StartRow; /*0xffe41ce5*/\n WidthPixels = 3 * (StartRow_1 - StartRow + 1); /*0xffe41cf0*/\n CurrentPtr = FbBase + RowOffset + 690728; /*0xffe41cf9*/\n LineDistance = FbSize - FbBase; /*0xffe41cfb*/\n LineDistance_1 = FbSize - FbBase; /*0xffe41cff*/\n NextLineBase = FbSize - FbBase; /*0xffe41d03*/\n RowCount = 68; /*0xffe41d07*/\n WidthPixels_1 = WidthPixels; /*0xffe41d08*/\n n68 = 68; /*0xffe41d0c*/\n do /*0xffe41d7c*/\n {\n if ( FbSize ) /*0xffe41d12*/\n NextLineBase = LineDistance + CurrentPtr; /*0xffe41d14*/\n WidthPixels_3 = 0; /*0xffe41d17*/\n if ( WidthPixels ) /*0xffe41d1b*/\n {\n WidthPixels_2 = WidthPixels_1; /*0xffe41d1d*/\n PixelPtr = CurrentPtr + 1; /*0xffe41d21*/\n FbDelta = NextLineBase - CurrentPtr; /*0xffe41d26*/\n do /*0xffe41d61*/\n {\n if ( *(_BYTE *)(PixelPtr + 1) > 0x91u && *(_BYTE *)PixelPtr > 0x91u && *(_BYTE *)(PixelPtr - 1) > 0x91u ) /*0xffe41d37*/\n {\n *(_WORD *)PixelPtr = -13120; /*0xffe41d39*/\n *(_BYTE *)(PixelPtr - 1) = 10; /*0xffe41d3e*/\n if ( FbSize ) /*0xffe41d44*/\n {\n *(_BYTE *)(FbDelta + PixelPtr + 1) = -52; /*0xffe41d46*/\n *(_BYTE *)(FbDelta + PixelPtr) = *(_BYTE *)PixelPtr; /*0xffe41d4d*/\n *(_BYTE *)(NextLineBase + 4 *WidthPixels_3) = *(_BYTE *)(PixelPtr - 1); /*0xffe41d53*/\n WidthPixels_2 = WidthPixels_1; /*0xffe41d57*/\n }\n }\n ++WidthPixels_3; /*0xffe41d5b*/\n PixelPtr += 4; /*0xffe41d5c*/\n }\n while ( WidthPixels_3 < WidthPixels_2 ); /*0xffe41d61*/\n RowCount = n68; /*0xffe41d63*/\n WidthPixels = WidthPixels_1; /*0xffe41d67*/\n LineDistance = LineDistance_1; /*0xffe41d6b*/\n }\n CurrentPtr += 4096; /*0xffe41d6f*/\n n68 = --RowCount; /*0xffe41d78*/\n }\n while ( RowCount ); /*0xffe41d7c*/\n }\n}","refs":[{"addr":"0xffe40bcf","name":"FindGuidInPpiList"},{"addr":"0xffe4355c","name":"byte_FFE4355C"}]}

{"addr":"0xffe41d86","code":"char VideoDisplayProgress(unsigned __int8 a1, unsigned __int8 a2, char a3, _BYTE *a4)\n{\n unsigned int i_1; // ebp\n _BYTE *v7; // esi\n char n32; // al\n unsigned int i; // ecx\n\n i_1 = VideoAsciiStrLen(a4); /*0xffe41d9c*/\n v7 = (_BYTE *)(2 * (a2 + 80 *a1) + 753664); /*0xffe41da6*/\n n32 = 32; /*0xffe41dad*/\n __outbyte(0x3D4u, 0xAu); /*0xffe41db7*/\n __outbyte(0x3D5u, 0x20u); /*0xffe41dbf*/\n for ( i = 0; i < i_1; *(v7 - 1) = a3 ) /*0xffe41dc4*/\n {\n n32 = a4[i++]; /*0xffe41dca*/\n *v7 = n32; /*0xffe41dce*/\n v7 += 2; /*0xffe41dd0*/\n }\n return n32; /*0xffe41dda*/\n}","refs":[{"addr":"0xffe419e0","name":"VideoAsciiStrLen"}]}

{"addr":"0xffe41ddf","code":"unsigned __int8 __thiscall MmioRead32(unsigned int n1024068)\n{\n int ReportStatusCodePpi; // eax\n __int16 v3; // kr00_2\n unsigned int v4; // esi\n unsigned __int8 v5; // al\n unsigned __int8 v6; // bl\n __int16 v8; // [esp+10h] [ebp-4h]\n\n if ( (n1024068 & 0xF0000F00) != 0 ) /*0xffe41dec*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe41dee*/\n if ( ReportStatusCodePpi ) /*0xffe41df5*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41e03*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BasePciCf8Lib\\\\PciCf8Lib.c\",\n 121,\n \"((Address) & (~0xffff0ff | (0))) == 0\");\n }\n v3 = __readeflags(); /*0xffe41e09*/\n v8 = v3; /*0xffe41e0b*/\n _disable(); /*0xffe41e0f*/\n v4 = IoPortRead32(0xCF8u); /*0xffe41e2f*/\n IoPortWrite32(0xCF8u, n1024068 & 0xFC | (n1024068 >> 4) & 0xFFFF00 | 0x80000000); /*0xffe41e3b*/\n v5 = __inbyte((n1024068 & 3) + 3324); /*0xffe41e49*/\n v6 = v5; /*0xffe41e4a*/\n IoPortWrite32(0xCF8u, v4); /*0xffe41e50*/\n if ( (v8 & 0x200) != 0 ) /*0xffe41e5e*/\n _enable(); /*0xffe41e60*/\n else\n _disable(); /*0xffe41e63*/\n return v6; /*0xffe41e64*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe41795","name":"IoPortRead32"},{"addr":"0xffe417c1","name":"IoPortWrite32"}]}

{"addr":"0xffe41e6c","code":"__int16 __thiscall MmioRead16(unsigned int n1015936)\n{\n int ReportStatusCodePpi; // eax\n __int16 v3; // kr00_2\n unsigned int v4; // esi\n __int16 v5; // di\n __int16 v7; // [esp+Ch] [ebp-4h]\n\n if ( (n1015936 & 0xF0000F01) != 0 ) /*0xffe41e7b*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe41e7d*/\n if ( ReportStatusCodePpi ) /*0xffe41e84*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41e95*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BasePciCf8Lib\\\\PciCf8Lib.c\",\n 613,\n \"((Address) & (~0xffff0ff | (1))) == 0\");\n }\n v3 = __readeflags(); /*0xffe41e9b*/\n v7 = v3; /*0xffe41e9d*/\n _disable(); /*0xffe41ea0*/\n v4 = IoPortRead32(0xCF8u); /*0xffe41ec0*/\n IoPortWrite32(0xCF8u, n1015936 & 0xFC | (n1015936 >> 4) & 0xFFFF00 | 0x80000000); /*0xffe41ecc*/\n v5 = IoPortRead16((n1015936 & 2) + 3324); /*0xffe41ee1*/\n IoPortWrite32(0xCF8u, v4); /*0xffe41ee6*/\n if ( (v7 & 0x200) != 0 ) /*0xffe41ef3*/\n _enable(); /*0xffe41ef5*/\n else\n _disable(); /*0xffe41ef8*/\n return v5; /*0xffe41efc*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe41795","name":"IoPortRead32"},{"addr":"0xffe417c1","name":"IoPortWrite32"},{"addr":"0xffe41730","name":"IoPortRead16"}]}

{"addr":"0xffe41f03","code":"unsigned __int16 MmioWrite32(unsigned int n1024064, unsigned __int16 n1280)\n{\n int ReportStatusCodePpi; // eax\n __int16 v5; // kr00_2\n unsigned int v6; // esi\n unsigned __int16 v7; // di\n __int16 v9; // [esp+10h] [ebp-4h]\n\n if ( (n1024064 & 0xF0000F01) != 0 ) /*0xffe41f12*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe41f14*/\n if ( ReportStatusCodePpi ) /*0xffe41f1b*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41f2c*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BasePciCf8Lib\\\\PciCf8Lib.c\",\n 652,\n \"((Address) & (~0xffff0ff | (1))) == 0\");\n }\n v5 = __readeflags(); /*0xffe41f32*/\n v9 = v5; /*0xffe41f34*/\n _disable(); /*0xffe41f38*/\n v6 = IoPortRead32(0xCF8u); /*0xffe41f58*/\n IoPortWrite32(0xCF8u, n1024064 & 0xFC | (n1024064 >> 4) & 0xFFFF00 | 0x80000000); /*0xffe41f64*/\n v7 = IoPortWrite16((n1024064 & 2) + 3324, n1280); /*0xffe41f7b*/\n IoPortWrite32(0xCF8u, v6); /*0xffe41f80*/\n if ( (v9 & 0x200) != 0 ) /*0xffe41f8e*/\n _enable(); /*0xffe41f90*/\n else\n _disable(); /*0xffe41f93*/\n return v7; /*0xffe41f97*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe41795","name":"IoPortRead32"},{"addr":"0xffe417c1","name":"IoPortWrite32"},{"addr":"0xffe41760","name":"IoPortWrite16"}]}

{"addr":"0xffe41f9d","code":"unsigned __int32 IoRead32(unsigned int a1)\n{\n int ReportStatusCodePpi; // eax\n __int16 v3; // kr00_2\n unsigned int v4; // esi\n unsigned __int32 v5; // edi\n __int16 v7; // [esp+Ch] [ebp-4h]\n\n if ( (a1 & 0xF0000F03) != 0 ) /*0xffe41fac*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe41fae*/\n if ( ReportStatusCodePpi ) /*0xffe41fb5*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41fc6*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BasePciCf8Lib\\\\PciCf8Lib.c\",\n 1114,\n \"((Address) & (~0xffff0ff | (3))) == 0\");\n }\n v3 = __readeflags(); /*0xffe41fcc*/\n v7 = v3; /*0xffe41fce*/\n _disable(); /*0xffe41fd1*/\n v4 = IoPortRead32(0xCF8u); /*0xffe41ff1*/\n IoPortWrite32(0xCF8u, a1 & 0xFC | (a1 >> 4) & 0xFFFF00 | 0x80000000); /*0xffe41ffb*/\n v5 = IoPortRead32(0xCFCu); /*0xffe4200c*/\n IoPortWrite32(0xCF8u, v4); /*0xffe4200e*/\n if ( (v7 & 0x200) != 0 ) /*0xffe4201b*/\n _enable(); /*0xffe4201d*/\n else\n _disable(); /*0xffe42020*/\n return v5; /*0xffe42023*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe41795","name":"IoPortRead32"},{"addr":"0xffe417c1","name":"IoPortWrite32"}]}

{"addr":"0xffe4202a","code":"unsigned int IoAnd32(unsigned int a1, unsigned int OrMask)\n{\n int ReportStatusCodePpi; // eax\n __int16 v5; // kr00_2\n unsigned int v6; // esi\n unsigned int v7; // edi\n __int16 v9; // [esp+10h] [ebp-4h]\n\n if ( (a1 & 0xF0000F03) != 0 ) /*0xffe42039*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe4203b*/\n if ( ReportStatusCodePpi ) /*0xffe42042*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe42053*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BasePciCf8Lib\\\\PciCf8Lib.c\",\n 1153,\n \"((Address) & (~0xffff0ff | (3))) == 0\");\n }\n v5 = __readeflags(); /*0xffe42059*/\n v9 = v5; /*0xffe4205b*/\n _disable(); /*0xffe4205f*/\n v6 = IoPortRead32(0xCF8u); /*0xffe4207f*/\n IoPortWrite32(0xCF8u, a1 & 0xFC | (a1 >> 4) & 0xFFFF00 | 0x80000000); /*0xffe42089*/\n v7 = IoPortWrite32(0xCFCu, OrMask); /*0xffe4209c*/\n IoPortWrite32(0xCF8u, v6); /*0xffe4209e*/\n if ( (v9 & 0x200) != 0 ) /*0xffe420ac*/\n _enable(); /*0xffe420ae*/\n else\n _disable(); /*0xffe420b1*/\n return v7; /*0xffe420b4*/\n}","refs":[{"addr":"0xffe3fd4b","name":"LocateReportStatusCodePpi"},{"addr":"0xffe41795","name":"IoPortRead32"},{"addr":"0xffe417c1","name":"IoPortWrite32"}]}

{"addr":"0xffe420ba","code":"int IoOr32Ex(int PciHandle, __int16 RegMask)\n{\n unsigned __int8 ShiftCount; // bl\n unsigned __int16 SlotIndex; // di\n __int16 SlotValue; // ax\n unsigned __int16 Temp; // cx\n unsigned __int8 BitCount; // al\n unsigned __int16 n4; // cx\n unsigned int OrMask; // esi\n\n ShiftCount = 0; /*0xffe420c7*/\n for ( SlotIndex = 0; SlotIndex < 4u; ++SlotIndex ) /*0xffe420c9*/\n {\n SlotValue = IoRead32(4 *SlotIndex + 1015940); /*0xffe420d6*/\n if ( (SlotValue & 1) == 0 ) /*0xffe420dd*/\n break; /*0xffe420dd*/\n if ( (SlotValue & 0xFFFC) == RegMask ) /*0xffe420e7*/\n break; /*0xffe420e7*/\n }\n if ( SlotIndex == 4 ) /*0xffe420f2*/\n return -2147483639; /*0xffe420f4*/\n Temp = 4; /*0xffe42102*/\n BitCount = 0; /*0xffe42105*/\n do /*0xffe42114*/\n {\n Temp >>= 1; /*0xffe42107*/\n ++BitCount; /*0xffe4210a*/\n }\n while ( (Temp & 1) == 0 ); /*0xffe42114*/\n n4 = 4; /*0xffe4211a*/\n do /*0xffe42122*/\n {\n ++ShiftCount; /*0xffe4211d*/\n n4 >>= 1; /*0xffe4211f*/\n }\n while ( n4 ); /*0xffe42122*/\n if ( BitCount == ShiftCount - 1 ) /*0xffe4212d*/\n --ShiftCount; /*0xffe4212f*/\n OrMask = ((((1 << ShiftCount) - 1) & 0xFFFC) << 16) | (unsigned __int16)(RegMask & ~((1 << ShiftCount) - 1)) | 1; /*0xffe4215c*/\n IoAnd32(4 *SlotIndex + 1015940, OrMask); /*0xffe42168*/\n *(_DWORD *)((unsigned __int16)(4 *SlotIndex + 10032) | 0xFDEF0000) = OrMask; /*0xffe4217c*/\n return 0; /*0xffe42180*/\n}","refs":[{"addr":"0xffe41f9d","name":"IoRead32"},{"addr":"0xffe4202a","name":"IoAnd32"}]}

{"addr":"0xffe42188","code":"int IoReadEx(int PciHandle, __int16 Register, char SubFunction, int Width)\n{\n __int16 MaskLow; // bx\n __int16 MaskHigh; // bp\n __int16 WidthMask; // si\n __int16 DefaultValue; // di\n unsigned __int8 Index; // cl\n __int16 SearchReg; // ax\n __int16 MaskLow_2; // ax\n unsigned __int8 MaskLow_1; // cl\n __int16 n1016; // ax\n unsigned __int8 v14; // cl\n __int16 n1008; // ax\n __int16 AccessWidth; // [esp-4h] [ebp-40h]\n int n57672688; // [esp+14h] [ebp-28h]\n __int16 v18; // [esp+18h] [ebp-24h]\n _DWORD v19[2]; // [esp+1Ch] [ebp-20h]\n _DWORD v20[5]; // [esp+24h] [ebp-18h]\n __int16 v21; // [esp+38h] [ebp-4h]\n __int16 n5; // [esp+44h] [ebp+8h]\n __int16 ConfigLow; // [esp+44h] [ebp+8h]\n\n v20[0] = 49808376; /*0xffe4218e*/\n v21 = 0; /*0xffe42198*/\n MaskLow = 0; /*0xffe4219d*/\n v18 = 0; /*0xffe4219f*/\n MaskHigh = -1; /*0xffe421a4*/\n WidthMask = 0; /*0xffe421ad*/\n v20[1] = 36176416; /*0xffe421af*/\n v20[2] = 48759352; /*0xffe421b7*/\n v20[3] = 65536824; /*0xffe421bf*/\n v20[4] = 48235248; /*0xffe421c7*/\n v19[0] = 41419640; /*0xffe421cf*/\n v19[1] = 956; /*0xffe421d7*/\n n57672688 = 57672688; /*0xffe421df*/\n DefaultValue = -1; /*0xffe421e8*/\n if ( Width == 1 ) /*0xffe421ed*/\n {\n if ( !Register ) /*0xffe42378*/\n {\n DefaultValue = -9; /*0xffe4237a*/\n goto LABEL_47; /*0xffe4237f*/\n }\n v14 = 0; /*0xffe42381*/\n n1008 = 1008; /*0xffe42383*/\n do /*0xffe4239a*/\n {\n if ( n1008 == Register ) /*0xffe4238b*/\n break; /*0xffe4238b*/\n n1008 = *((_WORD *)&n57672688 + ++v14); /*0xffe42392*/\n }\n while ( n1008 ); /*0xffe4239a*/\n if ( !*((_WORD *)&n57672688 + v14) ) /*0xffe423a4*/\n return -2147483645; /*0xffe423a4*/\n MaskHigh = -4097; /*0xffe423ad*/\n AccessWidth = 8; /*0xffe423b2*/\n MaskLow_2 = v14 << 12; /*0xffe423b4*/\n goto LABEL_46; /*0xffe423b4*/\n }\n if ( Width <= 1 ) /*0xffe421f3*/\n return -2147483645; /*0xffe421f3*/\n if ( Width <= 5 )\n {\n DefaultValue = Register == 0 ? -1025 : -1;\n WidthMask = Register != 0 ? 0x400 : 0;\n goto LABEL_47; /*0xffe42373*/\n }\n switch ( Width ) /*0xffe42205*/\n {\n case 6: /*0xffe42205*/\n if ( !Register ) /*0xffe422eb*/\n {\n DefaultValue = (SubFunction == 0) - 3; /*0xffe422fb*/\n goto LABEL_47; /*0xffe422fe*/\n }\n MaskLow_1 = 0; /*0xffe42303*/\n n1016 = 1016; /*0xffe42305*/\n do /*0xffe4231c*/\n {\n if ( n1016 == Register ) /*0xffe4230d*/\n break; /*0xffe4230d*/\n n1016 = *((_WORD *)v20 + ++MaskLow_1); /*0xffe42314*/\n }\n while ( n1016 ); /*0xffe4231c*/\n if ( !*((_WORD *)v20 + MaskLow_1) ) /*0xffe42326*/\n return -2147483645; /*0xffe42326*/\n if ( !SubFunction ) /*0xffe42330*/\n {\n MaskLow = MaskLow_1; /*0xffe42344*/\n WidthMask = 1; /*0xffe42347*/\n MaskHigh = -8; /*0xffe42348*/\n goto LABEL_47; /*0xffe4234d*/\n }\n MaskHigh = -113; /*0xffe42335*/\n AccessWidth = 2; /*0xffe4233a*/\n MaskLow_2 = 16 *MaskLow_1; /*0xffe4233c*/\n goto LABEL_46; /*0xffe42340*/\n case 7: /*0xffe42205*/\n if ( !Register ) /*0xffe422a4*/\n {\n DefaultValue = -5; /*0xffe422a6*/\n goto LABEL_47; /*0xffe422ab*/\n }\n Index = 0; /*0xffe422b0*/\n SearchReg = 888; /*0xffe422b2*/\n do /*0xffe422c9*/\n {\n if ( SearchReg == Register ) /*0xffe422ba*/\n break; /*0xffe422ba*/\n SearchReg = *((_WORD *)v19 + ++Index); /*0xffe422c1*/\n }\n while ( SearchReg ); /*0xffe422c9*/\n if ( !*((_WORD *)v19 + Index) ) /*0xffe422d3*/\n return -2147483645; /*0xffe422d3*/\n MaskHigh = -769; /*0xffe422d8*/\n AccessWidth = 4; /*0xffe422dd*/\n MaskLow_2 = Index << 8; /*0xffe422df*/\nLABEL_46:\n WidthMask = AccessWidth; /*0xffe423b8*/\n MaskLow = MaskLow_2; /*0xffe423b9*/\n goto LABEL_47; /*0xffe423b9*/\n case 8: /*0xffe42205*/\n if ( !Register ) /*0xffe42266*/\n {\n DefaultValue = -769; /*0xffe42268*/\n goto LABEL_47; /*0xffe4226d*/\n }\n WidthMask = 512; /*0xffe42272*/\n if ( Register == 512 ) /*0xffe4227a*/\n {\n WidthMask = 256; /*0xffe4227c*/\n goto LABEL_47; /*0xffe42281*/\n }\n if ( Register == 520 ) /*0xffe4228e*/\n goto LABEL_47; /*0xffe4228e*/\n return -2147483645; /*0xffe4228e*/\n }\n if ( Width != 255 ) /*0xffe4221e*/\n return -2147483645; /*0xffe4221e*/\n if ( Register != 46 ) /*0xffe42224*/\n {\n if ( Register == 78 ) /*0xffe42234*/\n {\n WidthMask = 0x2000; /*0xffe42236*/\n goto LABEL_47; /*0xffe4223b*/\n }\n if ( Register == 98 ) /*0xffe42244*/\n {\n WidthMask = 2048; /*0xffe42246*/\n goto LABEL_47; /*0xffe4224b*/\n }\n if ( Register ) /*0xffe42253*/\n {\n IoOr32Ex(PciHandle, Register); /*0xffe42257*/\n goto LABEL_47; /*0xffe4225e*/\n }\n return -2147483645; /*0xffe422a0*/\n }\n WidthMask = 4096; /*0xffe42226*/\nLABEL_47:\n n5 = MaskLow | MaskHigh & MmioRead16(0xF8080u); /*0xffe423bc*/\n MmioWrite32(0xF8080u, n5); /*0xffe423d9*/\n IoPortWrite8((_WORD *)0xFDEF2770, n5); /*0xffe423e7*/\n ConfigLow = WidthMask | DefaultValue & MmioRead16(0xF8082u); /*0xffe42404*/\n MmioWrite32(0xF8082u, ConfigLow); /*0xffe42408*/\n IoPortWrite8((_WORD *)0xFDEF2774, ConfigLow); /*0xffe42416*/\n return 0; /*0xffe42299*/\n}","refs":[{"addr":"0xffe420ba","name":"IoOr32Ex"},{"addr":"0xffe41e6c","name":"MmioRead16"},{"addr":"0xffe41f03","name":"MmioWrite32"},{"addr":"0xffe417f3","name":"IoPortWrite8"}]}

{"addr":"0xffe42422","code":"unsigned __int8 CopyMemWrapper(int This, int ConfigTable)\n{\n unsigned __int8 *v2; // esi\n int n11; // edi\n unsigned __int8 v4; // bl\n unsigned __int8 v5; // al\n unsigned __int8 result; // al\n\n v2 = (unsigned __int8 *)(ConfigTable + 3); /*0xffe42427*/\n n11 = 11; /*0xffe4242a*/\n do /*0xffe4244e*/\n {\n if ( *(v2 - 1) ) /*0xffe4242b*/\n {\n v5 = __inbyte(*(_WORD *)(v2 - 3)); /*0xffe42439*/\n v4 = *v2 | v5 & *(v2 - 1); /*0xffe4243f*/\n }\n else\n {\n v4 = *v2; /*0xffe42431*/\n }\n result = v4; /*0xffe42445*/\n __outbyte(*(_WORD *)(v2 - 3), v4); /*0xffe42447*/\n v2 += 4; /*0xffe42448*/\n --n11; /*0xffe4244b*/\n }\n while ( n11 ); /*0xffe4244e*/\n return result; /*0xffe42450*/\n}"}

{"addr":"0xffe4245c","code":"_BYTE *__usercall SetMemWrapper@<eax>(int value@<eax>, _BYTE *buf, char a3, unsigned int n255)\n{\n unsigned int n255_1; // ecx\n _BYTE *buf_1; // edi\n __int16 value_1; // bx\n int value_2; // eax\n int v8; // edx\n char n255_2; // dl\n unsigned int count; // ecx\n\n n255_1 = n255; /*0xffe4245c*/\n LOBYTE(value) = a3; /*0xffe42460*/\n buf_1 = buf; /*0xffe4246f*/\n BYTE1(value) = a3; /*0xffe42478*/\n value_1 = value; /*0xffe4247a*/\n value_2 = value << 16; /*0xffe4247d*/\n LOWORD(value_2) = value_1; /*0xffe42480*/\n if ( n255 >= 4 ) /*0xffe42486*/\n {\n v8 = (unsigned __int8)buf & 3; /*0xffe4248a*/\n if ( ((unsigned __int8)buf & 3) != 0 ) /*0xffe4248d*/\n {\n memset(buf, value_1, 4 - v8); /*0xffe42498*/\n buf_1 = &buf[4 - v8]; /*0xffe42498*/\n n255_1 = n255 - (4 - v8); /*0xffe4249a*/\n }\n n255_2 = n255_1; /*0xffe4249c*/\n count = n255_1 >> 2; /*0xffe4249e*/\n memset32(buf_1, value_2, count); /*0xffe424a1*/\n buf_1 += 4 *count; /*0xffe424a1*/\n n255_1 = n255_2 & 3; /*0xffe424a6*/\n }\n memset(buf_1, value_1, n255_1); /*0xffe424a8*/\n return buf; /*0xffe424ad*/\n}"}

{"addr":"0xffe424bc","code":"unsigned int ZeroMem(unsigned int dst, char *src, unsigned int n16)\n{\n char *src_1; // esi\n unsigned int dst_1; // edi\n unsigned int n16_1; // ecx\n char v10; // dl\n char *n4; // eax\n unsigned int count; // eax\n int count_1; // ebx\n char n16_2; // al\n unsigned int v15; // ecx\n int n16_3; // eax\n\n __asm { pushfw } /*0xffe424c2*/\n src_1 = src; /*0xffe424c7*/\n dst_1 = dst; /*0xffe424ca*/\n n16_1 = n16; /*0xffe424cd*/\n v10 = 0; /*0xffe424d0*/\n n4 = &src[-dst]; /*0xffe424d4*/\n if ( (unsigned int)src < dst ) /*0xffe424d6*/\n {\n n4 = (char *)(dst - (_DWORD)src); /*0xffe424db*/\n if ( (unsigned int)&src[n16] >= dst ) /*0xffe424df*/\n {\n src_1 = &src[n16]; /*0xffe424e1*/\n dst_1 = n16 + dst; /*0xffe424e3*/\n v10 = 1; /*0xffe424e6*/\n }\n }\n if ( n16 < 4 || (unsigned int)n4 < 4 ) /*0xffe424f1*/\n goto LABEL_19; /*0xffe424f1*/\n count = (unsigned __int8)src_1 & 3; /*0xffe424f7*/\n count_1 = dst_1 & 3; /*0xffe424fa*/\n if ( v10 ) /*0xffe424ff*/\n {\n --src_1; /*0xffe42501*/\n --dst_1; /*0xffe42502*/\n }\n if ( count == count_1 && count ) /*0xffe42509*/\n {\n if ( !v10 ) /*0xffe4250d*/\n count = 4 - count; /*0xffe42511*/\n qmemcpy((void *)dst_1, src_1, count); /*0xffe42517*/\n src_1 += count; /*0xffe42517*/\n dst_1 += count; /*0xffe42517*/\n n16_1 = n16 - count; /*0xffe42519*/\n }\n if ( v10 ) /*0xffe4251d*/\n {\n src_1 -= 3; /*0xffe4251f*/\n dst_1 -= 3; /*0xffe42522*/\n }\n n16_2 = n16_1; /*0xffe42525*/\n v15 = n16_1 >> 2; /*0xffe42527*/\n qmemcpy((void *)dst_1, src_1, 4 *v15); /*0xffe4252a*/\n src_1 += 4 *v15; /*0xffe4252a*/\n dst_1 += 4 *v15; /*0xffe4252a*/\n n16_3 = n16_2 & 3; /*0xffe4252c*/\n if ( n16_3 ) /*0xffe4252f*/\n {\n if ( v10 ) /*0xffe42533*/\n {\n src_1 += 4; /*0xffe42535*/\n dst_1 += 4; /*0xffe42538*/\n }\n n16_1 = n16_3; /*0xffe4253b*/\nLABEL_19:\n if ( v10 ) /*0xffe4253f*/\n {\n --src_1; /*0xffe42541*/\n --dst_1; /*0xffe42542*/\n }\n qmemcpy((void *)dst_1, src_1, n16_1); /*0xffe42543*/\n }\n __asm { popfw } /*0xffe42545*/\n return dst; /*0xffe42548*/\n}"}