Newer
Older
AMI-Aptio-BIOS-Reversed / PurleyPlatPkg / Platform / Pei / EarlyVideoPei / VgaDisplaySetCursor.c
@Ajax Dong Ajax Dong 2 days ago 1 KB Full restructure
unsigned __int8 __fastcall VgaDisplaySetCursor(unsigned __int8 n2, unsigned __int8 n4, int a3)
{
  unsigned __int8 n4_1; // al
  int n2_1; // ebx
  _DWORD *v5; // esi
  int v6; // ebp
  int i; // edx
  int j; // edx
  int v9; // esi
  int n4_2; // ebx
  _BYTE *v11; // edx
  int v12; // ecx

  n4_1 = n4;
  n2_1 = n2;
  v5 = *(_DWORD **)(a3 + 58);
  v6 = *(_DWORD *)(a3 + 62);
  if ( n2 )
  {
    do
    {
      if ( *(_BYTE *)*v5 )
      {
        if ( *(_BYTE *)*v5 == 1 )
        {
          for ( i = 0; i < 64; ++i )
            *(_BYTE *)(i + *(_DWORD *)(a3 + 70)) = *(_BYTE *)(*v5 + i + 1);
        }
      }
      else
      {
        for ( j = 0; j < 64; ++j )
          *(_BYTE *)(j + *(_DWORD *)(a3 + 66)) = *(_BYTE *)(*v5 + j + 1);
      }
      v5 += 2;
      --n2_1;
    }
    while ( n2_1 );
    n4_1 = n4;
  }
  v9 = 0;
  n4_2 = n4_1;
  if ( n4_1 )
  {
    while ( 1 )
    {
      v11 = *(_BYTE **)(v6 + 8 * v9);
      if ( !*v11 )
      {
        v12 = *(_DWORD *)(a3 + 10);
        goto LABEL_20;
      }
      if ( *v11 == 1 )
      {
        v12 = *(_DWORD *)(a3 + 18);
        goto LABEL_20;
      }
      if ( *v11 == 16 )
        break;
      n4_1 = *v11 - 17;
      if ( *v11 == 17 )
      {
        v12 = *(_DWORD *)(a3 + 22);
LABEL_20:
        n4_1 = VgaCrtcSetRegister(v12, (int)v11);
      }
      if ( ++v9 >= n4_2 )
        return n4_1;
    }
    v12 = *(_DWORD *)(a3 + 14);
    goto LABEL_20;
  }
  return n4_1;
}