在intel i5上解锁PAM

use*_*173 7 x86 assembly

我试图在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作为偏移量.

请指教,我.