PNP Calls In Protected Mode

来自osdev
Zhang3讨论 | 贡献2022年3月28日 (一) 06:52的版本 (创建页面,内容为“{{Stub}} 是的,就像PCI bios32调用一样,你可以在保护模式(pmode)下进行PNP调用。 一旦有了BIOS32服务目录(参见PCI示例例程),就可以使用PnP自动配置魔术调用它。再次注意寄存器接口的串联组件。 <source lang="C"> void bios32_scan_pnp_entry(void) { uint32_t cseg_size, offset, base_addr; →‎调用PCI地址的BIOS32 BSD BSD调用以RETF而非RET终止…”
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

This article is a stub! 此页面或段落为 草稿。 你可以通过更精确的编辑贡献 来帮助本wiki。

是的,就像PCI bios32调用一样,你可以在保护模式(pmode)下进行PNP调用。

一旦有了BIOS32服务目录(参见PCI示例例程),就可以使用PnP自动配置魔术调用它。再次注意寄存器接口的串联组件。

 void bios32_scan_pnp_entry(void)
 {
    uint32_t cseg_size, offset, base_addr;
 
    /* 调用PCI地址的BIOS32 BSD
       BSD调用以RETF而非RET终止*/
 
    /*eax加载了“$ACF”魔法*/
    asm("movl	$0x46434124, %%eax\n"
        "lcall _bios32_call\n"
        : "=c" (cseg_size),
          "=d" (offset),
          "=b" (base_addr)
        :
        : "eax", "ebx", "ecx", "edx", "ebp", "memory" );
 
    /* 设置pnp_code32,pnp_data32等的两个新选择器 */
 }

一旦确定pmode应用程序存在PNP BIOS调用,就可以调用PCI v2.0c+调用(参见中的INT 0x1A,功能0xB400到0xB407RalfBrown的INT列表)。

注意,似乎没有多少BIOS支持PnP Bios32调用,因此你可能不得不直接对PnP BIOS使用pmode16调用(需要286个TS)。