A regisztereket alaplaponkent kell kalibralni. Csak epp egy-egy ilyen kalibracio eleg hosszadalmas, bonyolult es korulmenyes is lehet. Izelitoul itt az Asus Maximuse:
Procedure MBSPEC_ASUS_MAXIMUS_EXTREME(Var sir:SensorInfoRec);
// Asus ACPI Verified
Var
i,i_47,i_4b,i_5d,f1div,f2div,f3div : Integer;
Begin
With sir Do
Begin
MoboSupport:='Asus Maximus Extreme / Formula';
//-------------------------------------------------
// Chip1 is W83627DHG at ISA 290h
//-------------------------------------------------
Temp_Aux:=0;
Fan_CPU :=f2;
Fan_Chassis1:=f3;
Fan_Chassis2:=Fan_Aux;
Fan_Chassis :=0;
Fan_Power :=0;
Fan_System :=0;
Fan_Aux :=0;
Volt_P12V :=Volt_CPUCore1*3.5;
Volt_CPUIO :=ReadLM78Reg($23)*0.016;
Volt_P5V :=ReadLM78Reg($25)*0.016*1.5;
Volt_CPUCore1:=0;
Volt_M12V :=0;
Volt_M5V :=0;
Volt_VBAT :=0;
//-------------------------------------------------
// Chip2 is W83791D at SMBus 2Ch
//-------------------------------------------------
If SMBus_Port(0)<>0 Then
Begin
i:=SMBus_ReadByteData(0,$2C,$27);
If i<>$D0 Then
Begin
If i>127 Then i:=-256+i;
Temp_Undefined[3]:=i; // OPT3
End;
i:=SMBus_ReadByteData(0,$2C,$C0);
If i<>$D0 Then
Begin
If i>127 Then i:=-256+i;
Temp_Undefined[1]:=i; // OPT1
End;
i:=SMBus_ReadByteData(0,$2C,$C8);
If i<>$D0 Then
Begin
If i>127 Then i:=-256+i;
Temp_Undefined[2]:=i; // OPT2
End;
i_47:=SMBus_ReadByteData(0,$2C,$47);
i_4b:=SMBus_ReadByteData(0,$2C,$4B);
i_5d:=SMBus_ReadByteData(0,$2C,$5D);
f1div:=1 Shl ((i_47 Shr 4 And 3) Or (i_5d Shr 3 And 4));
f2div:=1 Shl ((i_47 Shr 6 And 3) Or (i_5d Shr 4 And 4));
f3div:=1 Shl ((i_4b Shr 6 And 3) Or (i_5d Shr 5 And 4));
i:=SMBus_ReadByteData(0,$2C,$28);
If (i<>0) And (i<>255) And (f1div<>0) Then Fan_3:=Round(1350000/(i*f1div));
i:=SMBus_ReadByteData(0,$2C,$29);
If (i<>0) And (i<>255) And (f2div<>0) Then Fan_1:=Round(1350000/(i*f2div));
i:=SMBus_ReadByteData(0,$2C,$2A);
If (i<>0) And (i<>255) And (f3div<>0) Then Fan_2:=Round(1350000/(i*f3div));
i:=SMBus_ReadByteData(0,$2C,$20);
If i<>255 Then Volt_SBCore:=i*0.016;
i:=SMBus_ReadByteData(0,$2C,$21);
If i<>255 Then Volt_SBPLL:=i*0.016;
i:=SMBus_ReadByteData(0,$2C,$22);
If i<>255 Then Volt_FSBVTT:=i*0.016;
i:=SMBus_ReadByteData(0,$2C,$24);
If i<>255 Then Volt_DIMMVTT:=i*0.016;
i:=SMBus_ReadByteData(0,$2C,$26);
If i<>255 Then Volt_NBCore:=i*0.016;
i:=SMBus_ReadByteData(0,$2C,$B2);
If i<>255 Then Volt_DIMM:=i*0.016;
//-------------------------------------------------
// Chip3 is ADT7475 at SMBus 2Eh
//-------------------------------------------------
smbus_lm85:=0;
smdev_lm85:=$2E;
i:=SMBus_ReadByteData(smbus_lm85,smdev_lm85,$25);
If i<>255 Then
Begin
i:=i-64;
If i<127 Then Temp_SB:=i;
End;
i:=SMBus_ReadByteData(smbus_lm85,smdev_lm85,$27);
If i<>255 Then
Begin
i:=i-64;
If i<127 Then Temp_NB:=i;
End;
Fan_Chassis3:=LM85_Fan(0);
//-------------------------------------------------
// Chip4 is ADP3228 at SMBus 20h
//-------------------------------------------------
i:=Integer(SMBus_ReadByteData(0,$20,$51))+
Integer(SMBus_ReadByteData(0,$20,$52))*256;
If (i>$F0) And (i<$FFFA) Then Fan_Power:=((90000*60) Div i);
SensorMethod:=Format('ISA %xh, SMB %.2xh/%.2xh/%.2xh',[base_lm78,$2C,$2E,$20]);
SensorType:=SENSOR_ASUS_MAXIMUS;
End;
End;
End;