Newer
Older
AMI-Aptio-BIOS-Reversed / EarlyVideoPei / VgaModeInit.c
@Ajax Dong Ajax Dong 2 days ago 2 KB Init
/*
 * 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);
}