我试图在intel i5(HM55芯片组)上解锁PAM(可编程属性映射),所以我可以稍微改变视频BIOS,但我无法这样做.程序员手册说:
该寄存器控制BIOS范围从C_0000h到C_7FFFh的读,写和阴影属性.Uncore允许在768 KB到1 MB地址范围内的13种不同大小的传统内存段上实现可编程内存属性.七个可编程属性映射(PAM)寄存器用于支持这些功能.使用内核中的MTRR寄存器来控制这些区域的可缓存性.
两位用于指定每个存储器段的存储器属性.这些位适用于PAM区域的主机访问.这些属性包括:•RE - 读取启用.当RE = 1时,Uncore声明主机对相应存储器段的读访问并指向主存储器.相反,当RE = 0时,主机读访问被定向到DMI.•WE - 写入启用.当WE = 1时,Uncore声明主机对相应存储器段的写访问并指向主存储器.相反,当WE = 0时,主机读访问被定向到DMI.
outl(0xcf8, 0x80000080);
printf("Old pam1: %x pam2: %x\n",inb(0xcfd),inb(0xcfe));
outl(0xcf8, 0x80000080);
outb(0xcfd, 0x33);
outb(0xcfe, 0x33);
printf("New pam1: %x pam2: %x\n",inb(0xcfd),inb(0xcfe));
Run Code Online (Sandbox Code Playgroud)
我正在从实模式(DOS)测试这个,所以应该允许这样做.像这样的例子显示在915分辨率中:
int unlock_bios_845g_865g() {
// set permissions to read and write so I can write into shadowed VideoBIOS
OUTL(0x80000090, 0xcf8);
oldpam1 = inb(0xcfd);
oldpam2 = inb(0xcfe);
OUTL(0x80000090, 0xcf8);
OUTB(0x33, 0xcfd);
OUTB(0x33, 0xcfe);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
但对于我的处理器/芯片组(第二代英特尔®酷睿™处理器家族移动和英特尔®赛扬®处理器系列移动):
B/D/F /类型:地址偏移:复位值:访问类型:大小:BIOS最优默认值0/0/0/PCI 81h 00h RW 8位0h
所以我使用81h作为偏移量.
请指教,我.