Newer
Older
AMI-Aptio-BIOS-Reversed / PurleyPlatPkg / Platform / Pei / EarlyVideoPei / VgaModeProgramAllExt.c
@Ajax Dong Ajax Dong 2 days ago 4 KB Full restructure
unsigned __int8 __fastcall VgaModeProgramAllExt(int a1, int a2)
{
  int v2; // esi
  int v3; // edi
  int v4; // ebp
  unsigned __int8 v5; // al
  int v6; // eax
  char v7; // bl
  int v8; // eax
  unsigned int v9; // eax
  unsigned int v10; // eax
  unsigned int v11; // ecx
  char v12; // bl
  int v13; // ecx
  char v14; // al
  int v15; // ecx
  unsigned int v16; // ecx
  char v17; // bl
  unsigned __int8 v18; // al
  unsigned __int8 result; // al
  char v20; // [esp+10h] [ebp-10h]
  unsigned int v21; // [esp+14h] [ebp-Ch]
  unsigned int v22; // [esp+14h] [ebp-Ch]
  unsigned __int16 n981; // [esp+18h] [ebp-8h]
  char v24; // [esp+18h] [ebp-8h]
  char v25; // [esp+18h] [ebp-8h]
  unsigned __int16 n981_1; // [esp+18h] [ebp-8h]
  char v27; // [esp+1Ch] [ebp-4h]

  v2 = *(_DWORD *)(a2 + 20);
  v3 = (*(_DWORD *)(v2 + 36) >> 2) & 8;
  v4 = (*(_DWORD *)(v2 + 36) >> 1) & 8;
  __outbyte(0x3D4u, 0x11u);
  n981 = 981;
  v5 = __inbyte(0x3D5u);
  __outbyte(n981, v5 & 0x7F);
  v6 = (*(_DWORD *)v2 >> 3) - 5;
  v7 = BYTE1(v6) & 1;
  VgaSeqRegReadModifyWrite(0x3D4u, 0, 0, v6);
  v8 = (*(_DWORD *)(v2 + 4) >> 3) - 1;
  v24 = v7;
  if ( (v8 & 0x100) != 0 )
  {
    v7 |= 4u;
    v24 = v7;
  }
  VgaSeqRegReadModifyWrite(0x3D4u, 1u, 0, v8);
  v9 = ((unsigned int)(v3 + *(_DWORD *)(v2 + 4)) >> 3) - 1;
  if ( (v9 & 0x100) != 0 )
  {
    v7 |= 0x10u;
    v24 = v7;
  }
  VgaSeqRegReadModifyWrite(0x3D4u, 2u, 0, v9);
  v20 = 4 * ((((unsigned int)(*(_DWORD *)v2 - v3) >> 3) - 1) & 0x60);
  v21 = ((unsigned __int8)((((unsigned int)(*(_DWORD *)v2 - v3) >> 3) - 1) & 0x7F) >> 6) & 0xFFFFFF01;
  VgaSeqRegReadModifyWrite(0x3D4u, 3u, 224, (((unsigned int)(*(_DWORD *)v2 - v3) >> 3) - 1) & 0x1F);
  v10 = (unsigned int)(v3 + *(_DWORD *)(v2 + 4) + *(_DWORD *)(v2 + 8) - 1) >> 3;
  if ( (v10 & 0x100) != 0 )
    v24 = v7 | 0x40;
  VgaSeqRegReadModifyWrite(0x3D4u, 4u, 0, v10);
  if ( (((unsigned int)(v3 + *(_DWORD *)(v2 + 4) + *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 12) - 1) >> 3) & 0x20) != 0 )
    LOBYTE(v21) = v21 | 4;
  VgaSeqRegReadModifyWrite(
    0x3D4u,
    5u,
    96,
    v20 | ((unsigned int)(v3 + *(_DWORD *)(v2 + 4) + *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 12) - 1) >> 3) & 0x1F);
  VgaSeqRegReadModifyWrite(0x3D4u, 0xACu, 0, v24);
  VgaSeqRegReadModifyWrite(0x3D4u, 0xADu, 0, v21);
  v11 = *(_DWORD *)(v2 + 16) - 2;
  v12 = ((unsigned __int16)(*(_WORD *)(v2 + 16) - 2) >> 8) & 1;
  v25 = v12;
  if ( (v11 & 0x200) != 0 )
  {
    v12 |= 0x20u;
    v25 = v12;
  }
  v22 = (v11 >> 10) & 0xFFFFFF01;
  VgaSeqRegReadModifyWrite(0x3D4u, 6u, 0, v11);
  v13 = *(_DWORD *)(v2 + 24) - 1 + v4 + *(_DWORD *)(v2 + 20);
  if ( (v13 & 0x100) != 0 )
  {
    v12 |= 4u;
    v25 = v12;
  }
  if ( (v13 & 0x200) != 0 )
  {
    v12 |= 0x80u;
    v25 = v12;
  }
  if ( (v13 & 0x400) != 0 )
    LOBYTE(v22) = v22 | 8;
  VgaSeqRegReadModifyWrite(0x3D4u, 0x10u, 0, v13);
  v14 = v22;
  if ( (((unsigned __int8)*(_DWORD *)(v2 + 24) - 1 + (_BYTE)v4 + *(_BYTE *)(v2 + 20) + *(_BYTE *)(v2 + 28)) & 0x10) != 0 )
  {
    v14 = v22 | 0x20;
    LOBYTE(v22) = v22 | 0x20;
  }
  if ( (((unsigned __int8)*(_DWORD *)(v2 + 24) - 1 + (_BYTE)v4 + *(_BYTE *)(v2 + 20) + *(_BYTE *)(v2 + 28)) & 0x20) != 0 )
    LOBYTE(v22) = v14 | 0x40;
  VgaSeqRegReadModifyWrite(
    0x3D4u,
    0x11u,
    112,
    (*(_DWORD *)(v2 + 24) - 1 + v4 + *(_BYTE *)(v2 + 20) + *(_BYTE *)(v2 + 28)) & 0xF);
  v15 = *(_DWORD *)(v2 + 20) - 1;
  if ( (v15 & 0x100) != 0 )
  {
    v12 |= 2u;
    v25 = v12;
  }
  if ( (v15 & 0x200) != 0 )
  {
    v12 |= 0x40u;
    v25 = v12;
  }
  if ( (v15 & 0x400) != 0 )
    LOBYTE(v22) = v22 | 2;
  VgaSeqRegReadModifyWrite(0x3D4u, 0x12u, 0, v15);
  v16 = v4 + *(_DWORD *)(v2 + 20) - 1;
  if ( (v16 & 0x100) != 0 )
    v25 = v12 | 8;
  v17 = v22;
  v27 = (v16 >> 4) & 0x20;
  if ( (v16 & 0x400) != 0 )
    v17 = v22 | 4;
  VgaSeqRegReadModifyWrite(0x3D4u, 0x15u, 0, v16);
  if ( ((*(_DWORD *)(v2 + 16) - v4 - 1) & 0x100) != 0 )
    v17 |= 0x10u;
  VgaSeqRegReadModifyWrite(0x3D4u, 0x16u, 0, *(_BYTE *)(v2 + 16) - v4 - 1);
  VgaSeqRegReadModifyWrite(0x3D4u, 7u, 0, v25);
  VgaSeqRegReadModifyWrite(0x3D4u, 9u, 223, v27);
  VgaSeqRegReadModifyWrite(0x3D4u, 0xAEu, 0, v17 | 0x80);
  __outbyte(0x3D4u, 0x11u);
  n981_1 = 981;
  v18 = __inbyte(0x3D5u);
  result = v18 | 0x80;
  __outbyte(n981_1, result);
  return result;
}