int __thiscall sub_FFD87B03(int this)
{
  int v2; // edi
  int v3; // ebx
  int v5; // ebp
  unsigned int n0x3E8; // esi
  unsigned int i; // ebp
  int n2; // esi
  int n35; // edi
  unsigned int v10; // [esp+10h] [ebp-4h] BYREF

  v2 = *(_DWORD *)(this + 3510); /*0xffd87b11*/
  v3 = sub_FFD8CBBA(0, 20, 1); /*0xffd87b1d*/
  if ( (unsigned __int16)sub_FFD8CCA5((unsigned __int16 *)v3) == 0xFFFF )
  {
    DebugPrint(64, (int)"xDCI: Pci device NOT found\n");
    return -2147483634; /*0xffd87b3e*/
  }
  else
  {
    v5 = sub_FFD8CBBA(0, 20, 0); /*0xffd87b63*/
    sub_FFD8C578(-1, 63); /*0xffd87b65*/
    sub_FFD8C5B5(); /*0xffd87b6a*/
    if ( (*(_BYTE *)(this + 2683) & 1) != 0 )
    {
      *(_DWORD *)(v5 + 16) = v2; /*0xffd87cfb*/
      sub_FFD8CC4F(v5 + 4, 2); /*0xffd87cfe*/
      *(_DWORD *)(v2 + 32984) &= 0xFFCFFFFF; /*0xffd87d11*/
      sub_FFD8CC6A(v5 + 4, 65533); /*0xffd87d1e*/
      *(_DWORD *)(v5 + 16) = 0; /*0xffd87d2b*/
      sub_FFD8CC85(4); /*0xffd87d34*/
    }
    else
    {
      DebugPrint(64, (int)"xDCI: Device disabled\n");
      *(_DWORD *)(v5 + 16) = v2; /*0xffd87b91*/
      sub_FFD8CC4F(v5 + 4, 2); /*0xffd87b95*/
      *(_DWORD *)(v2 + 32984) |= 0x200000u; /*0xffd87ba5*/
      n0x3E8 = 0; /*0xffd87bb6*/
      *(_DWORD *)(v2 + 32984) &= ~0x100000u; /*0xffd87bb8*/
      while ( (*(_DWORD *)(v2 + 32988) & 0x20000000) == 0 && n0x3E8 < 0x3E8 ) /*0xffd87bc6*/
      {
        sub_FFD7FA46(0x64u); /*0xffd87bcb*/
        ++n0x3E8; /*0xffd87bd0*/
      }
      *(_DWORD *)(v2 + 32984) = *(_DWORD *)(v2 + 32984) & 0xFFFFFFFC | 1; /*0xffd87bf4*/
      sub_FFD8CC6A(v5 + 4, 65533); /*0xffd87bfa*/
      *(_DWORD *)(v5 + 16) = 0; /*0xffd87c01*/
      *(_DWORD *)(v3 + 16) = v2; /*0xffd87c0c*/
      sub_FFD8CC4F(v3 + 4, 2); /*0xffd87c0f*/
      *(_DWORD *)(v2 + 49424) |= 2u; /*0xffd87c23*/
      *(_DWORD *)(v2 + 49664) |= 0x40u; /*0xffd87c32*/
      *(_DWORD *)(v2 + 49856) |= 0x8000000u; /*0xffd87c46*/
      sub_FFD8CC4F(v2 + 1112088, 3); /*0xffd87c4c*/
      for ( i = 0; (sub_FFD8CCA5((unsigned __int16 *)(v2 + 1112080)) & 0xF00) == 0 && i < 0x3E8; ++i ) /*0xffd87c51*/
        sub_FFD7FA46(0x64u); /*0xffd87c60*/
      sub_FFD8CC6A(v3 + 4, 65533); /*0xffd87c80*/
      *(_DWORD *)(v3 + 16) = 0; /*0xffd87c85*/
      *(_DWORD *)(v3 + 132) |= 3u; /*0xffd87c95*/
      n2 = sub_FFD8BE68(); /*0xffd87ca0*/
      n35 = sub_FFD8BB3A(); /*0xffd87ca7*/
      sub_FFD8C578(-1, 256); /*0xffd87cc4*/
      sub_FFD8C909(&v10); /*0xffd87ccf*/
      if ( n2 == 2 && n35 >= 35 ) /*0xffd87cdc*/
        *(_DWORD *)(v10 + 1576) |= 0x1000000u; /*0xffd87ced*/
    }
    return 0; /*0xffd87d3a*/
  }
}
