HalpWriteCmosTime

INT64 __fastcall HalpWriteCmosTime(UINT8 *a1, INT64 a2, INT64 a3){
  unsigned int v4; 
  unsigned int v5; 
  unsigned int v6; 
  unsigned int v7; 
  unsigned int v8; 
  unsigned int v9; 
  unsigned int v10; 
  unsigned __int8 v11; 
  INT64 result; 
  HalpAcquireCmosSpinLockAndWait((INT64)a1, a2, a3);
  v4 = a1[10];
  __outbyte(0x70u, 0);
  __outbyte(0x71u, v4 % 0xA + 16 * (v4 / 0xA));
  v5 = a1[8];
  __outbyte(0x70u, 2u);
  __outbyte(0x71u, v5 % 0xA + 16 * (v5 / 0xA));
  v6 = a1[6];
  __outbyte(0x70u, 4u);
  __outbyte(0x71u, v6 % 0xA + 16 * (v6 / 0xA));
  v7 = a1[14];
  __outbyte(0x70u, 6u);
  __outbyte(0x71u, v7 % 0xA + 16 * (v7 / 0xA));
  v8 = a1[4];
  __outbyte(0x70u, 7u);
  __outbyte(0x71u, v8 % 0xA + 16 * (v8 / 0xA));
  v9 = a1[2];
  __outbyte(0x70u, 8u);
  __outbyte(0x71u, v9 % 0xA + 16 * (v9 / 0xA));
  v10 = *(__int16 *)a1;
  if( v10 > 0x270F )
    v10 = 9999;
  if( (HalpCmosCenturyOffset & 0x100) != 0 )
  {
    __outbyte(0x70u, 0xAu);
    v11 = __inbyte(0x71u);
    __outbyte(0x70u, 0xAu);
    __outbyte(0x71u, v11 | 0x10);
    __outbyte(0x70u, HalpCmosCenturyOffset);
    __outbyte(0x71u, (unsigned __int8)(v10 / 0x64) % 0xAu + 16 * ((unsigned __int8)(v10 / 0x64) / 0xAu));
    __outbyte(0x70u, 0xAu);
  }
  else
  {
    __outbyte(0x70u, HalpCmosCenturyOffset);
    v11 = (unsigned __int8)(v10 / 0x64) % 0xAu + 16 * ((unsigned __int8)(v10 / 0x64) / 0xAu);
  }
  __outbyte(0x71u, v11);
  __outbyte(0x70u, 9u);
  __outbyte(0x71u, v10 % 0x64 % 0xA + 16 * (v10 % 0x64 / 0xA));
  result = (unsigned int)_InterlockedExchange(&HalpSystemHardwareLock, -1);
  if( (_BYTE)HalpSystemHardwareLockInterruptsEnabled )
    _enable();
  return result;
}

Referenced by:

HalSetRealTimeClock