/*
* VgaModeInit at 0xffe6d862.
* Main VGA mode probing/configuration helper for early display setup.
*/
int __thiscall VgaModeInit(int *this)
{
int v2; // ebp
int v3; // ecx
unsigned int n255_2; // esi
int v5; // ecx
int v6; // edx
int v7; // ecx
int v8; // ecx
unsigned __int16 v9; // bp
__int16 n5; // di
__int16 v11; // ax
__int16 n3_1; // ax
int v14; // [esp+14h] [ebp-24h]
__int16 n3; // [esp+18h] [ebp-20h]
unsigned int n0xA; // [esp+1Ch] [ebp-1Ch]
unsigned int n255_3; // [esp+20h] [ebp-18h]
unsigned int n255; // [esp+24h] [ebp-14h]
unsigned int n255_4; // [esp+28h] [ebp-10h]
unsigned int n255_1; // [esp+2Ch] [ebp-Ch]
int v21; // [esp+30h] [ebp-8h]
int v22; // [esp+34h] [ebp-4h]
v2 = *this;
v14 = *this;
VgaCrtcProgramVert(this);
VgaCrtcProgramHoriz(this);
do
{
n255 = 255;
n255_1 = 255;
n255_3 = 0;
n0xA = 0;
n255_4 = 0;
v3 = (unsigned __int16)PciRegRead(v2, 510525544);
n255_2 = 0;
v21 = v3;
do
{
PciRegWrite(v2, 510525544, v3 | ((n255_2 | (n255_2 << 8)) << 16));
PciRegRead(v5, 510525440);
PciRegWrite(v7, v6 + 116, 0xFFFF);
v8 = *this;
v22 = *this;
v9 = 0;
n3 = 3;
while ( 2 )
{
PciRegWrite(v8, 510525564, dword_FFE76FAC[v9]);
n5 = 0;
while ( 1 )
{
v11 = VgaModeRead(this);
if ( v11 )
break;
if ( (unsigned __int16)++n5 >= 5u )
{
n3_1 = n3;
goto LABEL_9;
}
}
n3_1 = v11 & n3;
n3 = n3_1;
if ( !n3_1 )
{
LABEL_12:
n3_1 = 0;
break;
}
LABEL_9:
if ( n5 == 5 )
goto LABEL_12;
v8 = v22;
if ( ++v9 < 8u )
continue;
break;
}
if ( n3_1 )
{
if ( (n3_1 & 1) != 0 )
{
if ( n255 > n255_2 )
n255 = n255_2;
if ( n255_3 < n255_2 )
n255_3 = n255_2;
}
if ( (n3_1 & 2) != 0 )
{
if ( n255_1 > n255_2 )
n255_1 = n255_2;
if ( n255_4 < n255_2 )
n255_4 = n255_2;
}
++n0xA;
}
else if ( n0xA >= 0xA )
{
break;
}
v2 = v14;
++n255_2;
v3 = v21;
}
while ( n255_2 < 0x4C );
v2 = v14;
}
while ( !n255_3 || n255_3 - n255 < 0xA || !n255_4 || n255_4 - n255_1 < 0xA );
PciRegWrite(
v14,
510525544,
v21 | ((((n255_4 + n255_1 + 1) << 23) & 0xFF000000) + (((n255_3 + 1 + n255) << 15) & 0xFFFF0000)));
return VgaModeDetect(this);
}