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