Newer
Older
AMI-Aptio-BIOS-Reversed / EarlyVideoPei / VgaGcProgramMode.c
@Ajax Dong Ajax Dong 2 days ago 1 KB Init
int __fastcall VgaGcProgramMode(_BYTE *a1, _DWORD *a2)
{
  char *i; // esi
  char v4; // bl
  _BYTE *v5; // eax
  char *i_1; // edi
  char v7; // cl
  _BYTE *v8; // eax
  char *i_2; // ecx
  int v10; // eax
  int v11; // eax
  int v12; // eax
  int v13; // eax
  int n8; // eax

  // "mode3+"
  for ( i = aMode3_0; ; i += 18 )
  {
    v4 = *i;
    v5 = &unk_FFE77004;
    i_1 = i;
    if ( *i )
    {
      v7 = *i;
      do
      {
        if ( v7 != *v5 )
          break;
        ++i_1;
        ++v5;
        v7 = *i_1;
      }
      while ( *i_1 );
    }
    if ( *i_1 == *v5 )
      return 0;
    v8 = a1;
    i_2 = i;
    while ( v4 && v4 == *v8 )
    {
      ++i_2;
      ++v8;
      v4 = *i_2;
    }
    if ( *i_2 == *v8 )
      break;
  }
  *a2 = *((unsigned __int16 *)i + 6);
  a2[1] = *((unsigned __int16 *)i + 7);
  v10 = *((unsigned __int16 *)i + 8);
  a2[2] = v10;
  v11 = v10 - 1;
  if ( v11 )
  {
    v12 = v11 - 7;
    if ( v12 )
    {
      v13 = v12 - 8;
      if ( v13 )
      {
        n8 = v13 - 8;
        if ( n8 && n8 != 8 )
          return 0;
        a2[4] = &unk_FFE7B088;
      }
      else
      {
        a2[4] = &unk_FFE7B04D;
      }
    }
    else
    {
      a2[4] = &unk_FFE7B012;
    }
  }
  else
  {
    a2[4] = &unk_FFE7AF9C;
  }
  switch ( *a2 )
  {
    case 0x280:
    case 0x2D0:
      a2[5] = &unk_FFE7B194;
      return 1;
    case 0x320:
      a2[5] = &unk_FFE7B924;
      return 1;
    case 0x400:
      a2[5] = &unk_FFE7B81C;
      return 1;
    case 0x500:
      a2[5] = &unk_FFE7B0C4;
      return 1;
    case 0x640:
      a2[5] = &unk_FFE7BA2C;
      return 1;
  }
  return 0;
}