Newer
Older
AMI-Aptio-BIOS-Reversed / EarlyVideoPei / VgaDisplayModeSwitch.c
@Ajax Dong Ajax Dong 2 days ago 3 KB Init
int __cdecl VgaDisplayModeSwitch(__int16 a1, int a2, __int16 n273, _BYTE *a4)
{
  int result; // eax
  int n8_1; // ebp
  int v7; // ecx
  unsigned __int16 v8; // ax
  int v9; // ebx
  unsigned __int16 v10; // si
  int v11; // ebx
  unsigned int v12; // eax
  unsigned int v13; // edx
  int v14; // ecx
  unsigned __int16 v15; // ax
  int v16; // esi
  unsigned __int16 v17; // bx
  unsigned int v18; // eax
  unsigned int v19; // edx
  int v20; // ecx
  int v21; // [esp+10h] [ebp-20h]
  int v22; // [esp+14h] [ebp-1Ch]
  int v23; // [esp+18h] [ebp-18h]
  _BYTE *v24; // [esp+24h] [ebp-Ch]
  _BYTE *v25; // [esp+28h] [ebp-8h]
  _BYTE *v26; // [esp+2Ch] [ebp-4h]
  int n8; // [esp+38h] [ebp+8h]
  _BYTE *v28; // [esp+40h] [ebp+10h]

  result = (unsigned __int16)a1;
  n8_1 = 0;
  v23 = 0;
  v7 = *(_DWORD *)(a4 + 26);
  v28 = (_BYTE *)v7;
  if ( n273 == 290 )
  {
    v8 = (unsigned __int16)(a2 + 15) >> 4;
LABEL_3:
    v9 = v8;
    result = (unsigned __int16)a1;
    goto LABEL_7;
  }
  if ( n273 == 273 )
  {
    v8 = (unsigned __int16)(a2 + 7) >> 3;
    goto LABEL_3;
  }
  v9 = a2;
LABEL_7:
  v21 = v9;
  if ( (_WORD)v9 )
  {
    n8 = 8;
    do
    {
      v10 = 0;
      v22 = 0;
      if ( n273 == 290 )
      {
        if ( (unsigned __int16)(result + 15) >> 4 )
        {
          v11 = (unsigned __int16)(result + 15) >> 4;
          v24 = (_BYTE *)(v7 + 256);
          v25 = (_BYTE *)(v7 + 512);
          v26 = (_BYTE *)(v7 + 768);
          do
          {
            VgaDisplayProgram(v7, 290, (int)a4);
            VgaDisplaySetStartAddr(v10, n8_1, v28, (int)a4);
            VgaDisplaySetStartAddr(v10 + 8, n8_1, v24, (int)a4);
            VgaDisplaySetStartAddr(v22, n8, v25, (int)a4);
            VgaDisplaySetStartAddr(v10 + 8, n8, v26, (int)a4);
            v10 = v22 + 16;
            v12 = *((unsigned __int16 *)a4 + 40);
            v13 = v23 + 1;
            v22 += 16;
            ++v23;
            if ( (_WORD)v12 )
            {
              if ( !(v13 % v12) )
              {
                v14 = *(_DWORD *)a4;
                if ( **(_BYTE **)a4 == 0xFF && (*(_BYTE *)(v14 + 1) & 0xF8) == 0xD0 )
                {
                  *((_WORD *)a4 + 2) = 8;
                  *(_DWORD *)(a4 + 74) = 0;
                  *((_WORD *)a4 + 39) = 0;
                  *(_DWORD *)a4 = v14 + 2;
                }
              }
            }
            v7 = (int)v28;
            v11 += 0xFFFF;
          }
          while ( (_WORD)v11 );
          v9 = v21;
        }
        n8_1 += 16;
        n8 += 16;
      }
      else if ( n273 == 273 )
      {
        v15 = (unsigned __int16)(result + 7) >> 3;
        v16 = v15;
        if ( v15 )
        {
          v17 = 0;
          do
          {
            VgaDisplayProgram(v7, 273, (int)a4);
            VgaDisplaySetStartAddr(v17, n8_1, v28, (int)a4);
            v18 = *((unsigned __int16 *)a4 + 40);
            v17 += 8;
            v19 = ++v23;
            if ( (_WORD)v18 )
            {
              if ( !(v19 % v18) )
              {
                v20 = *(_DWORD *)a4;
                if ( **(_BYTE **)a4 == 0xFF && (*(_BYTE *)(v20 + 1) & 0xF8) == 0xD0 )
                {
                  *((_WORD *)a4 + 2) = 8;
                  *(_DWORD *)(a4 + 74) = 0;
                  *((_WORD *)a4 + 39) = 0;
                  *(_DWORD *)a4 = v20 + 2;
                }
              }
            }
            v7 = (int)v28;
            v16 += 0xFFFF;
          }
          while ( (_WORD)v16 );
          v9 = v21;
        }
        n8_1 += 8;
        n8 += 8;
      }
      result = (unsigned __int16)a1;
      v9 += 0xFFFF;
      v21 = v9;
    }
    while ( (_WORD)v9 );
  }
  return result;
}