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