Newer
Older
AMI-Aptio-BIOS-Reversed / EarlyVideoPei / PciCfgReadBuf.c
@Ajax Dong Ajax Dong 2 days ago 1 KB Init
int __thiscall PciCfgReadBuf(int this)
{
  int v2; // ecx
  int v3; // eax
  int v4; // edi
  unsigned __int8 v5; // bl
  char v6; // bh
  char v7; // bp
  int v8; // ecx
  int v9; // eax
  char v10; // bl
  unsigned __int8 v11; // bh
  int v12; // ecx
  char v14; // [esp+12h] [ebp-Eh] BYREF
  unsigned __int8 v15; // [esp+13h] [ebp-Dh]
  int v16; // [esp+14h] [ebp-Ch]
  int v17; // [esp+18h] [ebp-8h]
  unsigned __int32 v18; // [esp+1Ch] [ebp-4h] BYREF

  v15 = 0;
  if ( *(unsigned __int8 *)(this + 8) - 1 <= 0 )
  {
LABEL_5:
    v8 = 3 * *(unsigned __int8 *)(this + 8);
    v9 = *(_DWORD *)(this + 4);
    v10 = *(_BYTE *)(v8 + v9 - 2);
    v11 = *(_BYTE *)(v8 + v9 - 3);
    LOBYTE(v16) = *(_BYTE *)(v8 + v9 - 1);
    PciCfgReadModifyWrite(v11, v10, v16, 0, &v18);
    PciCfgRead32(v11, v10, v16, v12, &v14);
    if ( (v14 & 0x7F) == 0 )
    {
      *(_BYTE *)(this + 9) = v11;
      return 0;
    }
  }
  else
  {
    v2 = 0;
    while ( 1 )
    {
      v3 = *(_DWORD *)(this + 4);
      v4 = 3 * v2;
      v5 = *(_BYTE *)(v3 + 3 * v2);
      v6 = *(_BYTE *)(v3 + 3 * v2 + 1);
      LOBYTE(v16) = *(_BYTE *)(v3 + 3 * v2 + 2);
      v7 = v16;
      LOBYTE(v17) = v5;
      PciCfgRead32(v5, v6, v16, v2, &v14);
      if ( (v14 & 0x7F) != 1 )
        break;
      VgaCrtcRegReadModifyWrite(v5, v6, v7, 24, v17);
      VgaCrtcRegReadModifyWrite(v5, v6, v7, 25, *(_BYTE *)(*(_DWORD *)(this + 4) + v4 + 3));
      VgaCrtcRegReadModifyWrite(
        v5,
        v6,
        v7,
        26,
        *(_BYTE *)(3 * *(unsigned __int8 *)(this + 8) + *(_DWORD *)(this + 4) - 3));
      PciCfgReadModifyWrite(v5, v6, v7, 0, &v18);
      v2 = ++v15;
      if ( v15 >= *(unsigned __int8 *)(this + 8) - 1 )
        goto LABEL_5;
    }
  }
  return -2147483641;
}