int __thiscall VgaCrtcProgramHoriz(int *this)
{
unsigned int v2; // esi
unsigned int n0xA; // ebx
int v4; // edx
int v5; // ecx
unsigned int n0x4C; // edi
int v7; // ecx
int v8; // eax
int n65537; // edx
unsigned int i; // ecx
unsigned int v11; // edi
int n16; // ebx
unsigned int j; // eax
unsigned int v14; // ecx
unsigned int v15; // edx
unsigned int v16; // edi
unsigned int v17; // ebp
unsigned int n8_1; // edx
unsigned int n8; // ebx
unsigned int v20; // eax
unsigned int v21; // ecx
unsigned int n3; // eax
unsigned int n4; // eax
unsigned int v24; // eax
unsigned int v25; // ecx
unsigned int n3_2; // eax
int n3_1; // eax
unsigned int n4_1; // eax
int v30; // [esp+14h] [ebp-88h]
int v31; // [esp+18h] [ebp-84h]
_DWORD buf[16]; // [esp+1Ch] [ebp-80h] BYREF
_DWORD buf_1[16]; // [esp+5Ch] [ebp-40h] BYREF
v2 = 0;
v30 = *this;
do
{
memset(buf, 0, sizeof(buf));
memset32(buf_1, 255, 0x10u);
n0xA = 0;
v4 = (unsigned __int16)PciRegRead(v30, 510525544);
n0x4C = 0;
v31 = v4;
do
{
PciRegWrite(v5, 510525544, v4 | ((n0x4C | (n0x4C << 8)) << 16));
PciRegWrite(v7, 510525556, 4095);
v8 = VgaModeConfig(this);
if ( v8 )
{
n65537 = 65537;
for ( i = 0; i < 16; ++i )
{
if ( (n65537 & v8) != 0 )
{
if ( buf_1[i] > n0x4C )
buf_1[i] = n0x4C;
if ( buf[i] < n0x4C )
buf[i] = n0x4C;
}
n65537 *= 2;
}
++n0xA;
}
else if ( n0xA >= 0xA )
{
break;
}
v5 = v30;
++n0x4C;
v4 = v31;
}
while ( n0x4C < 0x4C );
v11 = 0;
n16 = 0;
for ( j = 0; j < 16; ++j )
{
v14 = buf[j];
v15 = buf_1[j];
if ( v14 > v15 && v14 - v15 >= 0xA )
{
v11 += v15;
++n16;
}
}
}
while ( n16 != 16 );
v16 = v11 >> 4;
v17 = 0;
n8_1 = 0;
n8 = 8;
do
{
v20 = buf[n8_1];
v21 = buf_1[n8_1];
v17 >>= 3;
if ( v20 > v21 && v20 - v21 >= 0xA )
{
if ( v16 < v21 )
{
n4 = (19 * (v21 - v16)) >> 5;
if ( n4 > 4 )
n4 = 4;
n3 = -n4 & 7;
}
else
{
n3 = (19 * (v16 - v21)) >> 5;
if ( n3 > 3 )
n3 = 3;
}
v17 |= n3 << 21;
}
++n8_1;
}
while ( n8_1 < 8 );
PciRegWrite(v30, 510525568, v17);
do
{
v24 = buf[n8];
v25 = buf_1[n8];
v2 >>= 3;
if ( v24 > v25 && v24 - v25 >= 0xA )
{
if ( v16 < v25 )
{
n4_1 = ((19 * (v25 - v16)) >> 5) + 1;
if ( n4_1 > 4 )
n4_1 = 4;
n3_2 = -n4_1;
}
else
{
n3_2 = (19 * (v16 - v25)) >> 5;
if ( n3_2 > 3 )
{
n3_1 = 3;
LABEL_42:
v2 |= n3_1 << 21;
goto LABEL_43;
}
LOBYTE(n3_2) = n3_2 - 1;
}
n3_1 = n3_2 & 7;
goto LABEL_42;
}
LABEL_43:
++n8;
}
while ( n8 < 16 );
return PciRegWrite(v30, 510525572, v2);
}