Newer
Older
AMI-Aptio-BIOS-Reversed / EarlyVideoPei / ImageRenderColorConvert.c
@Ajax Dong Ajax Dong 2 days ago 3 KB Init
char *__fastcall ImageRenderColorConvert(int n2, int a2)
{
  int v3; // esi
  char *buf; // eax
  int buf_2; // edi
  int v6; // ebx
  int buf_4; // eax
  int n7; // edx
  _BYTE *v9; // ecx
  _BYTE *v10; // eax
  int n8; // ecx
  _BYTE *v12; // eax
  int n7_1; // ecx
  int v14; // ecx
  _BYTE *v15; // edx
  int v16; // edi
  char v17; // al
  unsigned int v18; // ecx
  int v19; // edx
  int n6_1; // ebx
  _BYTE *v21; // edi
  unsigned int v22; // edx
  int n3; // ebp
  char v24; // al
  int n6; // ebp
  char *v26; // ebx
  int i; // edx
  char v28; // al
  unsigned int v29; // [esp+10h] [ebp-10h]
  char *buf_3; // [esp+14h] [ebp-Ch]
  int v32; // [esp+18h] [ebp-8h]
  _BYTE *buf_1; // [esp+1Ch] [ebp-4h]

  v3 = *(_DWORD *)(28 * n2 + a2 + 804);
  buf = (char *)PeiAllocatePool((void *)(v3 * v3));
  buf_2 = (int)buf;
  buf_3 = buf;
  if ( buf )
  {
    if ( v3 * v3 )
      SetMem(buf, v3 * v3, 0);
    ImageRenderGetPixel(buf_2, v3, 0, 0);
    ImageRenderGetPixel(buf_2, v3, v3 - 7, 0);
    ImageRenderGetPixel(buf_2, v3, 0, v3 - 7);
    v6 = v3 * (v3 - 7);
    buf_4 = buf_2;
    n7 = 7;
    v9 = (_BYTE *)(buf_2 + v6 + 7);
    do
    {
      *(_BYTE *)(buf_4 + 7) = -64;
      buf_4 += v3;
      *(_BYTE *)(buf_4 - 8) = -64;
      *v9 = -64;
      v9 += v3;
      --n7;
    }
    while ( n7 );
    SetMem((void *)(buf_2 + 7 * v3), 8u, 192);
    SetMem((void *)(buf_2 + 8 * (v3 - 1)), 8u, 192);
    buf_1 = (_BYTE *)(buf_2 + v3 * (v3 - 8));
    SetMem(buf_1, 8u, 192);
    SetMem((void *)(buf_2 + 8 * v3), 9u, 132);
    SetMem((void *)(buf_2 + 9 * v3 - 8), 8u, 132);
    v10 = (_BYTE *)(buf_2 + 8);
    n8 = 8;
    do
    {
      *v10 = -124;
      v10 += v3;
      --n8;
    }
    while ( n8 );
    v12 = (_BYTE *)(buf_2 + v6 + 8);
    n7_1 = 7;
    do
    {
      *v12 = -124;
      v12 += v3;
      --n7_1;
    }
    while ( n7_1 );
    v14 = 1;
    v15 = (_BYTE *)(buf_2 + 8 * v3 + 6);
    if ( v3 - 15 > 1 )
    {
      v16 = buf_2 + 6 * v3 + 7;
      do
      {
        v17 = v14 & 1 | 0x90;
        *(_BYTE *)(v16 + v14) = v17;
        *v15 = v17;
        v15 += v3;
        ++v14;
      }
      while ( v14 < v3 - 15 );
      buf_2 = (int)buf_3;
    }
    ImageRenderDither(n2, buf_2, v3, a2);
    if ( n2 >= 7 )
    {
      if ( n2 > 40 )
        v18 = 0;
      else
        v18 = *(_DWORD *)(a2 + 4 * n2 + 312);
      v29 = v18;
      v19 = buf_2 + v3 * (v3 - 11);
      n6_1 = 0;
      v32 = v19;
      do
      {
        v21 = (_BYTE *)(n6_1 + v19);
        v22 = v29;
        n3 = 3;
        do
        {
          v24 = v22;
          v22 >>= 1;
          *v21 = v24 & 1 | 0x88;
          v21 += v3;
          --n3;
        }
        while ( n3 );
        ++n6_1;
        v29 = v22;
        v19 = v32;
        n6 = 6;
      }
      while ( n6_1 < 6 );
      buf_2 = (int)buf_3;
      v26 = &buf_3[v3 - 11];
      do
      {
        for ( i = 0; i < 3; ++i )
        {
          v28 = v18;
          v18 >>= 1;
          v26[i] = v28 & 1 | 0x88;
        }
        v26 += v3;
        --n6;
      }
      while ( n6 );
    }
    buf_1[8] = -127;
    return (char *)buf_2;
  }
  return buf;
}