|
149 の作りかけ版に置き換えておきました。そちらを参照してください。
これで、段階的に電圧が変更できるようになります。
以下参考コード(インデントがあってません)
{
if( data == 15 || data == 31 ){
break;
}
DWORD count = 32;
while( count-- ){
DWORD CurrentVID = 0;
DWORD NextVID = 0;
ReadMSR(0xC0010042,&EAX,&EDX);
CurrentVID = EDX & 0x1F;
if(data > CurrentVID){
NextVID = CurrentVID + 1;
if( NextVID == 15 ){
NextVID++;
}
}else if(data < CurrentVID){
NextVID = CurrentVID - 1;
if( NextVID == 15 ){
NextVID--;
}
}else{
break;
}
if( NextVID == 31 || NextVID < 0 || NextVID > 31 ){
break;
}
ReadMSR(0xC0010041,&EAX,&EDX);
EAX &= 0xFFFFE0FF;
EAX |= 0x00020000; // Set bit 17 (VID)
EAX &= 0xFFFEFFFF; // Clear bit 16 (FID)
EDX = 0x64; // Allow minimum 100 ms settling time
EAX |= ( NextVID << 8 );
WriteMSR(0xC0010041,&EAX,&EDX);
do{
ReadMSR(0xC0010042,&EAX,&EDX);
}while( (EAX >> 31) & 0x1 );
}
|
|