char *__thiscall VgaModeProgramMisc(int *this)
{
int v1; // eax
int v2; // ebx
char *result; // eax
int v4; // ecx
_DWORD *v5; // edi
unsigned int v6; // esi
int v7; // edi
int Width; // eax
int v9; // eax
int n88_9; // eax
int n88_10; // eax
int n88_11; // eax
int n88; // ecx
unsigned int n68; // edx
int n88_12; // eax
int n88_13; // eax
int BootMode; // eax
char *BootMode_1; // esi
int n88_14; // ecx
char *BootMode_2; // ecx
int n88_15; // eax
char *dst; // eax
int n88_16; // ecx
int PeiServices; // eax
int n88_2; // ecx
int v26; // esi
int v27; // eax
int v28; // esi
int v29; // eax
int v30; // edi
int v31; // esi
int v32; // eax
int v33; // esi
int v34; // eax
char *v35; // esi
int n88_5; // ecx
int n88_6; // ecx
int n88_7; // eax
char *v39; // esi
int n88_8; // ecx
int v41; // [esp+0h] [ebp-84h]
int n88_1; // [esp+0h] [ebp-84h]
int n88_3; // [esp+0h] [ebp-84h]
int n88_4; // [esp+18h] [ebp-6Ch] BYREF
int v45; // [esp+1Ch] [ebp-68h] BYREF
int v46; // [esp+20h] [ebp-64h] BYREF
_DWORD v47[4]; // [esp+24h] [ebp-60h] BYREF
_DWORD v48[4]; // [esp+34h] [ebp-50h] BYREF
_DWORD v49[4]; // [esp+44h] [ebp-40h] BYREF
_DWORD v50[3]; // [esp+54h] [ebp-30h] BYREF
__int16 n8616; // [esp+60h] [ebp-24h]
char v52; // [esp+62h] [ebp-22h]
char v53; // [esp+63h] [ebp-21h]
char v54[24]; // [esp+64h] [ebp-20h] BYREF
int v55; // [esp+7Ch] [ebp-8h]
v1 = *this;
v47[0] = -447900028;
v2 = 1;
v47[1] = 1139746613;
v47[2] = -231704157;
v47[3] = 280662773;
v48[0] = 2075298713;
v48[1] = 299196859;
v48[2] = -1879024230;
v48[3] = 1304510247;
v49[0] = -624774889;
v49[1] = 1231336955;
v49[2] = -871558493;
v49[3] = -1692727689;
v50[0] = -1476496239;
v50[1] = 1332882516;
v50[2] = 1232473784;
n8616 = 8616;
v52 = 1;
v53 = -109;
result = (char *)(*(int (__cdecl **)(int *, int, int, int *))(v1 + 52))(this, 4, 152, &n88_4);
if ( (int)result >= 0 )
{
v5 = (_DWORD *)(n88_4 + 8);
*(_DWORD *)(n88_4 + 8) = unk_FFE774CC;
*++v5 = unk_FFE774D0;
*++v5 = unk_FFE774D4;
v5[1] = unk_FFE774D8;
v6 = -15663104;
v7 = 0;
while ( 1 )
{
v41 = v4;
Width = ImageDecodeGetWidth((_BYTE *)v6, v47);
v4 = v41;
if ( !Width )
{
v9 = ImageDecodeGetWidth((_BYTE *)(v6 + 24), v48);
v4 = v41;
if ( !v9 )
break;
}
v6 += 8;
if ( v6 >= 0xFFBAF000 )
goto LABEL_8;
}
v7 = (*(_DWORD *)(v6 + 48) & 0xFFFFFF) - 4;
v6 += 52;
LABEL_8:
*(_BYTE *)(n88_4 + 24) = 0;
n88_9 = n88_4;
*(_DWORD *)(n88_4 + 32) = 0;
*(_DWORD *)(n88_9 + 36) = 0;
n88_10 = n88_4;
*(_DWORD *)(n88_4 + 48) = 0;
*(_DWORD *)(n88_10 + 52) = 0;
n88_11 = n88_4;
*(_DWORD *)(n88_4 + 56) = 0;
*(_DWORD *)(n88_11 + 60) = 0;
*(_DWORD *)(n88_4 + 64) = 0;
n88 = 88;
n68 = 68;
do
{
*(_WORD *)(n68 + n88_4) = 0;
n68 += 2;
n88_12 = n88_4;
*(_DWORD *)(n88 + n88_4) = 0;
n88 += 8;
*(_DWORD *)(n88 + n88_12 - 4) = 0;
}
while ( n68 < 0x54 );
if ( v7 )
{
n88_13 = n88_4;
*(_DWORD *)(n88_4 + 32) = v6;
*(_DWORD *)(n88_13 + 36) = 0;
}
BootMode = PeiServiceGetBootMode(n88, 768);
BootMode_1 = (char *)BootMode;
if ( BootMode )
{
*(_BYTE *)(n88_4 + 24) = 1;
n88_14 = n88_4;
*(_DWORD *)(n88_4 + 40) = -1879048192;
*(_DWORD *)(n88_14 + 44) = 0;
BootMode_2 = (char *)BootMode;
*(_DWORD *)(n88_4 + 64) = 3145728;
n88_15 = n88_4;
*(_DWORD *)(n88_4 + 48) = BootMode_1;
*(_DWORD *)(n88_15 + 52) = 0;
CopyMem(BootMode_2, (char *)0x90000000, 0x300000u);
dst = (char *)PeiServiceGetBootMode(n88_1, 768);
if ( dst )
{
n88_16 = n88_4;
*(_DWORD *)(n88_4 + 56) = dst;
*(_DWORD *)(n88_16 + 60) = 0;
CopyMem(dst, BootMode_1, 0x300000u);
}
}
PeiServices = PeiGetPeiServices();
if ( (*(int (__cdecl **)(int, _DWORD, int *))(*(_DWORD *)PeiServices + 56))(PeiServices, 0, &v45) >= 0 )
{
do
{
v26 = v45;
v27 = PeiGetPeiServices();
if ( (*(int (__cdecl **)(_DWORD *, int, int *))(*(_DWORD *)v27 + 104))(v49, v26, &v46) >= 0 )
{
v28 = v46;
v29 = PeiGetPeiServices();
if ( (*(int (__cdecl **)(int, char *))(*(_DWORD *)v29 + 108))(v28, v54) >= 0 )
{
v30 = v55 + 4;
v31 = (*(_DWORD *)v55 & 0xFFFFFF) - 4;
v32 = ImageDecodeGetWidth((_BYTE *)(v55 + 4), v50);
n88_2 = n88_3;
if ( v32 )
{
v31 = 0;
}
else
{
*(_WORD *)(n88_4 + 68) = 19;
n88_2 = n88_4;
*(_DWORD *)(n88_4 + 88) = v30 + 16;
*(_DWORD *)(n88_2 + 92) = 0;
}
if ( v31 )
break;
}
}
v33 = v2;
v34 = PeiGetPeiServices();
++v2;
}
while ( (*(int (__cdecl **)(int, int, int *))(*(_DWORD *)v34 + 56))(v34, v33, &v45) >= 0 );
}
result = (char *)PeiServiceGetBootMode(n88_2, 4);
v35 = result;
if ( result )
{
n88_5 = n88_4;
*(_DWORD *)(n88_4 + 96) = result;
*(_DWORD *)(n88_5 + 100) = 0;
*(_WORD *)(n88_4 + 70) = 19;
CopyMem(
*(char **)(n88_4 + 96),
asc_FFE7A69C, // " "
0x900u);
n88_6 = n88_4;
*(_DWORD *)(n88_4 + 144) = v35 + 2304;
*(_DWORD *)(n88_6 + 148) = 0;
*(_WORD *)(n88_4 + 82) = 31;
CopyMem(
*(char **)(n88_4 + 144),
asc_FFE79204, // " "
0x1495u);
n88_7 = n88_4;
v39 = v35 + 7573;
*(_DWORD *)(n88_4 + 120) = v39;
*(_DWORD *)(n88_7 + 124) = 0;
*(_WORD *)(n88_4 + 76) = 23;
CopyMem(
*(char **)(n88_4 + 120),
asc_FFE7849C, // " "
0xD61u);
n88_8 = n88_4;
*(_DWORD *)(n88_4 + 112) = v39 + 3425;
*(_DWORD *)(n88_8 + 116) = 0;
*(_WORD *)(n88_4 + 74) = 21;
return CopyMem(
*(char **)(n88_4 + 112),
asc_FFE77844, // " "
0xC51u);
}
}
return result;
}