PCI BIOS在PCI编程中起着一定的作用,PCI BIOS的资料也不是很好找,把找到的集中到这里,供参考。 1、确定系统是否实现32位BIOS 在调用32位BIOS之前,32位操作系统必须要确定系统中是否存在32位BIOS,以及入口点是什么?并不是所有的BIOS都支持32位调用。BIOS 32服务目录的实现必须嵌入一个特定的、相邻的16个字节的数据结构,其物理地址范围为0E0000H----0FFFFFH,数据结构中各字段的描述如 下,此数据结构必须排列在16字节地址边界。 偏移量 大小 含义 2、确定32位BIOS支持的服务 EAX=服务识别器。为确定32位BIOS是否支持指定的服务,服务目录程序根据EAX寄存器中的调用者提供的4字节的服务识别器执行查找。 BL=服务目录功能识别器。填00H。EBX的高三个字节为保留,必须清0。 在调用服务目录程序返回后,寄存器组中包含以下值: 3、确定32位BIOS是否支持PCI BIOS服务 PCI BIOS服务的服务识别器包含ASCII串“$PCI”,在EAX中被指定为49435024H。假定服务目录程序调用后指出PCI BIOS存在,则可通过向EDX寄存器中返回的入口来执行远程调用。在调用PCI BIOS以前,操作系统必须将BIOS的代码和数据段定义为具有EBX和ECX中返回的物理地址范围。代码和数据段必须具有相同的起始地址。操作系统必须 启动BIOS的优先级,以允许I/O操作,且必须为BIOS定义一个容量至少为1KB的堆栈区域。BIOS设计者必须假定操作系统将代码段定义为只执行, 将数据段定义为只读。 (hengch) |