中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [原创]32位 BIOS说明 上一主题 | 下一主题
whowin
初级用户





积分 134
发帖 37
注册 2006-9-28
状态 离线
『楼 主』:  [原创]32位 BIOS说明

文章是从我的网志中贴过来的,其中的图片可能过不来,看完整内容,请访问我的网志:
点击进入《DOS编程技术》

PCI BIOS在PCI编程中起着一定的作用,PCI BIOS的资料也不是很好找,把找到的集中到这里,供参考。

1、确定系统是否实现32位BIOS

    在调用32位BIOS之前,32位操作系统必须要确定系统中是否存在32位BIOS,以及入口点是什么?并不是所有的BIOS都支持32位调用。BIOS 32服务目录的实现必须嵌入一个特定的、相邻的16个字节的数据结构,其物理地址范围为0E0000H----0FFFFFH,数据结构中各字段的描述如下,此数据结构必须排列在16字节地址边界。

    偏移量    大小     含义
    00H        4字节    ASCII表示的特征字符串,“_32_”,最左边的下标存储在偏移0中
    04H        4字节    BIOS 32服务目录入口,是一个32位的物理地址
    08H        1字节    修订版本号,为00H
    09H        1字节    数据结构长度,以字节为单位
    0AH        1字节    整个数据结构的检查和,其值必须为0
    0BH        5字节    预留单元,必须为0

2、确定32位BIOS支持的服务

    EAX=服务识别器。为确定32位BIOS是否支持指定的服务,服务目录程序根据EAX寄存器中的调用者提供的4字节的服务识别器执行查找。

    BL=服务目录功能识别器。填00H。EBX的高三个字节为保留,必须清0。

    在调用服务目录程序返回后,寄存器组中包含以下值:
    (1)如果指定的服务存在,则AL包含00H;否则,包含80H;如果BL中包含的功能识别器未实现,则包含81H。
    (2)EBX包含指定的BIOS服务的物理起始地址
    (3)ECX包含指定的BIOS服务的长度
    (4)EDX包含指定的BIOS服务的入口。这是EBX中返回的起始地址的偏移。

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设计者必须假定操作系统将代码段定义为只执行,将数据段定义为只读。

更多关于DOS编程的文章看我的网志

点击进入《DOS编程技术》

[ Last edited by whowin on 2008-5-9 at 11:44 AM ]

2008-5-9 11:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: