Newer
Older
AMI-Aptio-BIOS-Reversed / EarlyVideoPei / VgaModeSetSync.c
@Ajax Dong Ajax Dong 2 days ago 2 KB Init
int __thiscall VgaModeSetSync(int *this)
{
  int v1; // edi
  int v2; // ecx
  int v3; // ebx
  unsigned int n0xF_1; // ebp
  int v5; // ecx
  int v6; // ecx
  unsigned int v7; // ebx
  unsigned int i; // ebp
  int v9; // ecx
  int v10; // edx
  int v11; // ecx
  int v12; // edx
  int v13; // ecx
  unsigned int n0xF000; // ecx
  unsigned int n0xFA00; // eax
  unsigned int n0xFA00_2; // ebx
  int v17; // esi
  int v18; // ecx
  int v19; // ecx
  int v20; // edx
  int v21; // ebx
  int v22; // ecx
  int v23; // ecx
  unsigned int n0xFA00_1; // [esp+10h] [ebp-18h]
  int v26; // [esp+14h] [ebp-14h]
  unsigned int n0xF; // [esp+18h] [ebp-10h]
  int v28; // [esp+1Ch] [ebp-Ch]
  int v29; // [esp+20h] [ebp-8h]

  v1 = *this;
  v26 = 0;
  v29 = 0;
  PciRegWrite(*this, 510525492, 32);
  n0xFA00_1 = 0;
  v3 = PciRegRead(v2, 510525536) | 0x2000;
  n0xF_1 = 0;
  v28 = v3;
  n0xF = 0;
  do
  {
    PciRegWrite(v1, 510525464, 33072);
    PciRegWrite(v5, 510525536, (v3 | (n0xF_1 << 8)) ^ 0x1000);
    PciRegRead(v6, 510525440);
    VgaModeConfigPll(this, 1);
    v7 = 0;
    for ( i = 1; i < 5; ++i )
    {
      PciRegWrite(v1, 510525464, (i << 16) | 0x200130);
      PciRegRead(v9, 510525440);
      PciRegWrite(v11, v10 + 24, (i << 16) | 0x10200130);
      while ( PciRegRead(v1, 510525568) >= 0 )
        ;
      n0xF000 = PciRegRead(v13, v12 + 12);
      if ( (_WORD)n0xF000 == 0xFFFF )
        n0xF000 >>= 16;
      v7 += (unsigned __int16)n0xF000;
      if ( (unsigned __int16)n0xF000 < 0xF000u )
        break;
    }
    n0xFA00 = n0xFA00_1;
    n0xFA00_2 = v7 >> 2;
    if ( n0xFA00_2 <= n0xFA00_1 )
    {
      v17 = v26;
    }
    else
    {
      v29 = PciRegRead(v1, 510525544);
      v17 = n0xF ^ 0x10;
      n0xFA00 = n0xFA00_2;
      v26 = n0xF ^ 0x10;
      n0xFA00_1 = n0xFA00_2;
    }
    if ( n0xFA00 > 0xFA00 && n0xF >= 0xF )
      break;
    v3 = v28;
    n0xF_1 = n0xF + 1;
    n0xF = n0xF_1;
  }
  while ( n0xF_1 < 0x20 );
  PciRegWrite(v1, 510525536, v28 | (v17 << 8));
  PciRegWrite(v18, 510525544, v29);
  PciRegRead(v19, 510525440);
  v21 = v20 + 24;
  PciRegWrite(v22, v20 + 24, 33072);
  return PciRegWrite(v23, v21, 304);
}