Newer
Older
AMI-Aptio-BIOS-Reversed / LnvDriverPei / RtcCenturySet.c
@Ajax Dong Ajax Dong 2 days ago 1 KB Init
int __cdecl RtcCenturySet(char a1)
{
  int v1; // ecx
  int v2; // esi
  unsigned __int8 v3; // bh
  unsigned __int8 v4; // ah
  char v5; // bh
  unsigned __int8 v6; // bl
  unsigned int v7; // edx
  char v8; // cl
  unsigned int v9; // edx
  int v10; // edx
  unsigned __int8 n0xC; // al

  v2 = v1;
  v3 = *(_BYTE *)(v1 + 4);
  v4 = v3 & 0x7F;
  v5 = v3 >> 7;
  *(_BYTE *)(v1 + 4) = v4;
  if ( (a1 & 4) == 0 )
  {
    v6 = *(_BYTE *)(v1 + 6);
    v7 = *(unsigned __int8 *)(v1 + 2);
    *(_WORD *)v1 = (unsigned __int8)(*(_BYTE *)v1 - 6 * (*(_BYTE *)v1 >> 4));
    v8 = -6 * (v7 >> 4);
    v9 = *(unsigned __int8 *)(v2 + 3);
    *(_BYTE *)(v2 + 2) += v8;
    *(_BYTE *)(v2 + 3) += -6 * (v9 >> 4);
    v10 = *(unsigned __int8 *)(v2 + 5) >> 4;
    *(_BYTE *)(v2 + 4) = v4 - 6 * (v4 >> 4);
    *(_BYTE *)(v2 + 5) += -6 * v10;
    *(_BYTE *)(v2 + 6) = v6 - 6 * (v6 >> 4);
  }
  if ( (a1 & 2) == 0 )
  {
    if ( v5 )
    {
      n0xC = *(_BYTE *)(v2 + 4);
      if ( n0xC < 0xCu )
        *(_BYTE *)(v2 + 4) = n0xC + 12;
    }
    else if ( *(_BYTE *)(v2 + 4) == 12 )
    {
      *(_BYTE *)(v2 + 4) = 0;
    }
  }
  *(_DWORD *)(v2 + 8) = 0;
  *(_WORD *)(v2 + 12) = 2047;
  *(_BYTE *)(v2 + 14) = 0;
  return 2047;
}