int __thiscall VgaCrtcProgramVert(int *this)
{
int v1; // esi
int v2; // edx
int v3; // ecx
int v4; // ecx
unsigned int i; // eax
_DWORD *v6; // eax
int n32; // ecx
int v8; // ebx
_BYTE *v9; // ebp
unsigned int n2; // edi
unsigned int j; // esi
int v12; // ecx
int v13; // ecx
unsigned int v14; // eax
unsigned int v15; // eax
unsigned int *v16; // ebx
unsigned int n0x14_2; // esi
unsigned int n8; // ebp
unsigned int n2_3; // ecx
unsigned int n0x14_1; // eax
unsigned int n2_1; // edi
unsigned int n0x4C_1; // edx
unsigned int n0x4C; // ebx
unsigned int v24; // esi
unsigned int n8_2; // eax
unsigned int n8_1; // edi
unsigned int n2_2; // [esp+14h] [ebp-2C4h]
unsigned int n0x14; // [esp+18h] [ebp-2C0h]
unsigned int n0x14_3; // [esp+1Ch] [ebp-2BCh]
int *v32; // [esp+20h] [ebp-2B8h]
unsigned int v33; // [esp+24h] [ebp-2B4h]
_BYTE *v34; // [esp+28h] [ebp-2B0h]
int v35; // [esp+2Ch] [ebp-2ACh]
int v36; // [esp+30h] [ebp-2A8h]
unsigned int *v37; // [esp+30h] [ebp-2A8h]
unsigned int v38; // [esp+34h] [ebp-2A4h]
int v39; // [esp+38h] [ebp-2A0h]
int v40; // [esp+3Ch] [ebp-29Ch]
_BYTE v41[156]; // [esp+40h] [ebp-298h] BYREF
_DWORD v42[127]; // [esp+DCh] [ebp-1FCh] BYREF
v1 = *this;
v35 = *this;
v40 = (unsigned __int16)PciRegRead(*this, 510525464);
PciRegWrite(v3, v2, v40);
v36 = (unsigned __int16)PciRegRead(v4, 510525544);
for ( i = 0; i < 0x4C; ++i )
{
v41[i] = 0;
v41[i + 76] = 0;
}
v6 = v42;
n32 = 32;
do
{
*(v6 - 1) = 255;
*v6 = 0;
v6 += 4;
*(v6 - 3) = 255;
*(v6 - 2) = 0;
--n32;
}
while ( n32 );
v8 = 0;
while ( 1 )
{
v39 = 0;
v9 = v41;
v38 = 0;
n2 = 0;
while ( 1 )
{
PciRegWrite(v1, 510525464, v40 | ((v8 | (n2 << 7)) << 16));
MicroSecondDelay(10);
for ( j = 0; j < 0x4C; ++j )
{
PciRegWrite(v35, 510525544, v36 | ((j | (j << 8)) << 16));
PciRegWrite(v12, 510525552, 0);
PciRegWrite(v13, 510525556, 1023);
if ( PciRegVerifyWrite(this) )
{
if ( !j )
break;
++*(&v38 + n2);
v14 = n2 + 2 * v8;
v9[j] = 80;
if ( j < *(_DWORD *)&v41[8 * v14 + 152] )
*(_DWORD *)&v41[8 * v14 + 152] = j;
if ( j > v42[2 * v14] )
v42[2 * v14] = j;
}
else
{
if ( *(&v38 + n2) >= 5 )
break;
v15 = n2 + 2 * v8;
v42[2 * v15] = 0;
*(_DWORD *)&v41[8 * v15 + 152] = 255;
}
}
++n2;
v9 += 76;
if ( n2 >= 2 )
break;
v1 = v35;
}
if ( !v38 && !v39 )
++v8;
if ( (unsigned int)++v8 >= 0x20 )
break;
v1 = v35;
}
v33 = 0;
v16 = v42;
n0x14_2 = 0;
v32 = 0;
n8 = 0;
n0x14_3 = 0;
n2_3 = 0;
n0x14_1 = 0;
n0x14 = 0;
do
{
n2_2 = 0;
n2_1 = 0;
v34 = v41;
v37 = v16;
do
{
n0x4C_1 = *(v16 - 1);
n0x4C = *v16;
if ( n0x4C_1 > n0x4C )
goto LABEL_52;
v24 = n0x4C - n0x4C_1;
v38 = n0x4C - n0x4C_1;
if ( n0x4C - n0x4C_1 + 2 >= v33 )
{
n8_2 = 0;
n8_1 = 0;
if ( n0x4C_1 )
{
do
{
if ( !v34[n0x4C_1] )
break;
++n8_1;
--n0x4C_1;
}
while ( n0x4C_1 );
v24 = v38;
}
for ( ; n0x4C < 0x4C; ++n0x4C )
{
if ( !v34[n0x4C] )
break;
++n8_2;
}
if ( n8_1 > n8_2 )
n8_1 = n8_2;
if ( v24 > (unsigned int)v32 && n8_1 >= n8 )
{
n0x14_1 = n0x14;
if ( n0x14 <= 0x14 )
goto LABEL_43;
}
if ( v24 <= (unsigned int)v32 + 1 )
{
if ( n8_1 > n8 && n8 < 8 )
{
if ( v24 > v33 )
v33 = v24;
n0x14_1 = n0x14;
goto LABEL_44;
}
}
else if ( n8_1 >= n8 )
{
n0x14_1 = n0x14;
LABEL_43:
v33 = v24;
LABEL_44:
n2_3 = n2_2;
n8 = n8_1;
v32 = (int *)v24;
n2_1 = n2_2;
n0x14_2 = n0x14_1;
n0x14_3 = n0x14_1;
goto LABEL_52;
}
n2_1 = n2_2;
}
n0x14_1 = n0x14;
n0x14_2 = n0x14_3;
LABEL_52:
++n2_1;
v34 += 76;
v16 = v37 + 2;
n2_2 = n2_1;
v37 += 2;
}
while ( n2_1 < 2 );
n0x14 = ++n0x14_1;
}
while ( n0x14_1 < 0x20 );
PciRegWrite(v35, 510525464, v40 | ((n0x14_2 | (n2_3 << 7)) << 16));
MicroSecondDelay(10);
return PciRegWrite(v35, 510525452, 23553);
}