Newer
Older
AMI-Aptio-BIOS-Reversed / EarlyVideoPei / LogoRenderFull.c
@Ajax Dong Ajax Dong 2 days ago 2 KB Init
int *__cdecl LogoRenderFull(int a1)
{
  int *p_n26; // ecx
  int *v2; // esi
  int *p_n2; // eax
  int *p_n2_1; // ebx
  int *Pool; // edi
  char *v7; // edx
  char v8; // al
  int v9; // ebx
  char *v10; // eax
  _BYTE *v11; // edi
  int *v12; // eax
  unsigned __int8 v13; // [esp+Eh] [ebp-1Ah]
  char v14; // [esp+Fh] [ebp-19h]
  int v15; // [esp+10h] [ebp-18h]
  int v16; // [esp+14h] [ebp-14h]
  int v17; // [esp+14h] [ebp-14h]
  char *Scanline; // [esp+18h] [ebp-10h]
  int v19; // [esp+1Ch] [ebp-Ch]
  int n2; // [esp+20h] [ebp-8h]
  int *p_n26_1; // [esp+24h] [ebp-4h]

  p_n26_1 = p_n26;
  v2 = 0;
  p_n2 = (int *)ImageRenderOutput(p_n26, a1);
  p_n2_1 = p_n2;
  if ( !p_n2 )
    return 0;
  n2 = *p_n2;
  v19 = *(_DWORD *)(28 * *p_n2 + a1 + 804);
  Scanline = ImageRenderGetScanline(*p_n2, a1);
  if ( !Scanline )
    return 0;
  Pool = (int *)PeiAllocatePool((void *)0x1C);
  if ( !Pool )
    return 0;
  Pool[4] = -1;
  Pool[5] = -1;
  *Pool = v19;
  Pool[1] = (int)Scanline;
  Pool[2] = v19 - 1;
  Pool[3] = v19 - 1;
  Pool[6] = 0;
  v16 = 0;
  if ( p_n2_1[2] + p_n2_1[1] <= 0 )
  {
LABEL_10:
    v9 = 0;
    v17 = *(_DWORD *)(28 * (n2 + 29) + a1);
    if ( v17 <= 0 )
    {
LABEL_13:
      v11 = LogoRenderScanline(v19, (int)Scanline, p_n26_1[1], a1);
      if ( v11 )
      {
        v12 = (int *)PeiAllocatePool((void *)0xC);
        if ( v12 )
        {
          v2 = v12;
          *v12 = n2;
          v12[1] = v19;
          v12[2] = (int)v11;
        }
      }
    }
    else
    {
      while ( 1 )
      {
        v10 = ImageRenderWritePalette(Pool);
        if ( !v10 )
          break;
        ++v9;
        *v10 = 2;
        if ( v9 >= v17 )
          goto LABEL_13;
      }
    }
  }
  else
  {
LABEL_6:
    v14 = ImageRenderWriteScanline(p_n2_1);
    v13 = 0x80;
    v15 = 0;
    while ( 1 )
    {
      v7 = ImageRenderWritePalette(Pool);
      if ( !v7 )
        break;
      v8 = ((v13 & (unsigned __int8)v14) != 0) + 2;
      v13 >>= 1;
      *v7 = v8;
      if ( ++v15 >= 8 )
      {
        if ( ++v16 < p_n2_1[2] + p_n2_1[1] )
          goto LABEL_6;
        goto LABEL_10;
      }
    }
  }
  return v2;
}