Newer
Older
AMI-Aptio-BIOS-Reversed / PurleyPlatPkg / Platform / Pei / EarlyVideoPei / VgaCrtcProgramHoriz.c
@Ajax Dong Ajax Dong 2 days ago 3 KB Full restructure
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);
}