HalpReadCmosTime

INT64 __fastcall HalpReadCmosTime(_WORD *a1, INT64 a2, INT64 a3){
  unsigned __int8 v4; 
  unsigned __int8 v5; 
  unsigned __int8 v6; 
  unsigned __int8 v7; 
  unsigned __int8 v8; 
  unsigned __int8 v9; 
  unsigned __int8 v10; 
  unsigned __int8 v11; 
  unsigned __int8 v12; 
  __int16 v13; 
  __int16 v14; 
  INT64 result; 
  unsigned __int8 v16; 
  unsigned __int8 v17; 
  unsigned __int8 v18; 
  HalpAcquireCmosSpinLockAndWait((INT64)a1, a2, a3);
  a1[6] = 500;
  __outbyte(0x70u, 0);
  v4 = __inbyte(0x71u);
  a1[5] = (unsigned __int8)((v4 & 0xF) + 10 * (v4 >> 4));
  __outbyte(0x70u, 2u);
  v5 = __inbyte(0x71u);
  a1[4] = (unsigned __int8)((v5 & 0xF) + 10 * (v5 >> 4));
  __outbyte(0x70u, 4u);
  v6 = __inbyte(0x71u);
  a1[3] = (unsigned __int8)((v6 & 0xF) + 10 * (v6 >> 4));
  __outbyte(0x70u, 6u);
  v7 = __inbyte(0x71u);
  a1[7] = (unsigned __int8)((v7 & 0xF) + 10 * (v7 >> 4));
  __outbyte(0x70u, 7u);
  v8 = __inbyte(0x71u);
  a1[2] = (unsigned __int8)((v8 & 0xF) + 10 * (v8 >> 4));
  __outbyte(0x70u, 8u);
  v9 = __inbyte(0x71u);
  a1[1] = (unsigned __int8)((v9 & 0xF) + 10 * (v9 >> 4));
  if( (HalpCmosCenturyOffset & 0x100) != 0 )
  {
    __outbyte(0x70u, 0xAu);
    v16 = __inbyte(0x71u);
    v17 = v16;
    __outbyte(0x70u, 0xAu);
    __outbyte(0x71u, v16 | 0x10);
    __outbyte(0x70u, HalpCmosCenturyOffset);
    v18 = __inbyte(0x71u);
    v11 = v18;
    __outbyte(0x70u, 0xAu);
    __outbyte(0x71u, v17);
  }
  else
  {
    __outbyte(0x70u, HalpCmosCenturyOffset);
    v10 = __inbyte(0x71u);
    v11 = v10;
  }
  __outbyte(0x70u, 9u);
  v12 = __inbyte(0x71u);
  v13 = (unsigned __int8)((v12 & 0xF) + 10 * (v12 >> 4)) + 100 * (unsigned __int8)((v11 & 0xF) + 10 * (v11 >> 4));
  v14 = v13 + 100;
  if( (unsigned __int16)(v13 - 1900) > 0x13u )
    v14 = (unsigned __int8)((v12 & 0xF) + 10 * (v12 >> 4)) + 100 * (unsigned __int8)((v11 & 0xF) + 10 * (v11 >> 4));
  *a1 = v14;
  result = (unsigned int)_InterlockedExchange(&HalpSystemHardwareLock, -1);
  if( (_BYTE)HalpSystemHardwareLockInterruptsEnabled )
    _enable();
  return result;
}

Referenced by:

HalQueryRealTimeClock