我正在尝试在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));
我正在从真实模式(DOS)测试这个,所以应该允许这样做。像这样的例子在915resolutions中显示:
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;
}
但是对于我的处理器/芯片组(第二代Intel®Core™处理器系列移动和Intel®Celeron®处理器系列移动):
B / D / F /类型:地址偏移:重置值:访问: 大小:BIOS最佳默认值 0/0/0 / PCI 81h 00h RW 8位0h
所以我使用81h作为偏移量。
请指教, I.