Регистры MTRR можно не мучить, достаточно настройки MSR PAT
Код:
#define MSR_IA32_CR_PAT 0x277
#define asm_rdmsr(ecx, eax, edx) asm volatile("rdmsr" : "=a" (eax), "=d" (edx) : "c" (ecx))
#define asm_wrmsr(ecx, eax, edx) asm volatile("wrmsr" : : "c" (ecx), "a" (eax), "d" (edx))
//Установить тип кэширования "write-combining" для ускорения видеопамяти.
//Для этого устанавливаем регистр MSR PAT, элемент 1 (биты 8,9,10) значение 1
//При использовании видеопамяти, виртуальная страница должна иметь атрибуты PAT=0, PCD=0, PWT=1.
unsigned int eax, ecx, edx;
if(CPUFeatures & 0x10000) //Проверка поддержки PAT в процессоре
{
ecx = MSR_IA32_CR_PAT;
asm_rdmsr(ecx, eax, edx);
((UCHAR*)&eax)[1] = 1; //"write-combining"
asm_wrmsr(ecx, eax, edx);
}
Если в Си не спец, то ((UCHAR*)&eax)[1] буквально означает регистр AH.