中国DOS联盟论坛

中国DOS联盟

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

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

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





积分 134
发帖 37
注册 2006-9-28
状态 离线
『楼 主』:  [原创]调用PCI BIOS

文章是从我的网志中贴过来的,其中的图片可能过不来,看完整内容,请访问我的网志: 点击进入《DOS编程技术》 通过执行INT 1AH指令可以调用16位的PCI BIOS,也可以直接在物理寄存器位置000FFE6EH调用PCI BIOS。32位BIOS的调用要通过一个远程调用来实现。在这两种情况下,调用这都必须首先将需要的请求参数装入处理器的寄存器组。在入口AH寄存器必须包含PCI的功能ID:B1H,AL寄存器必须包含PCI下级功能识别器。 1、PCI BIOS的存在性 入口参数: AH=B1H AL=01H 出口参数: EDX:返回值为“PCI”。字符“P”存放在DL;字符“C”存放在DH;字符“I”存放在EL;EH中方一个空格符 AH:存在状态。如果EDX设置适当,则00H表示存在PCI BIOS。 AL:硬件机制 BL:接口版本 CL:系统中最后一个PCI局部中线的号码 CF:状态标志。为1表示没有PCI BIOS,为0表示存在PCI BIOS。 如果CF被清除且AH的内容为00H时,为了确定PCI功能设置的有效性,对EDX内容的检查仍然是必须的。BX进一步指出版本号,版本号以BCD码形式存在。如v2.10,BH将返回02H,BL将返回10H。 AL的返回值标识与访问配置空间和产生PCI特殊周期相关的支持平台的特定硬件字符。PCI规范为访问配置空间定义了两种硬件机制,AL返回值的位0与位1表示当前平台支持那种机制。位0等于1时支持1#机制,位1等于1时表示支持2#机制,位2、3、6、7是保留位,返回值必须是0。 PCI规范中也为特殊周期的产生定义了硬件机制,AL的返回值的位4、5两位指出机制类型。位4为1表示支持基于1#配置机制的特殊周期产生;位5为1表示支持基于2#配置机制的特殊周期产生。 CL的返回值表示系统中最后一个PCI局部总线的号码,PCI局部中线的号码从0开始,到CL中的返回值为止。 2、PCI设备检测 入口参数: AH=B1H AL=02H CX=设备识别号,从0~~65535 DX=供应商识别代码,从0~~65534 SI=索引号,0~~N 出口参数: BH=总线号 BL=高5位为设备号,低3位为功能号 AH=返回3种不同的代码。00H表示检测成功,86H表示未发现要检测的设备,83H表示入口参数中的供应商代码无效 CF=状态标志。为1表示检测错误,为0表示检测成功。 如果在该功能调用中,使索引号从0开始以1为增量递增,直到AH中的返回码为86H为止,便可检测出供应商识别码与设备识别码相同的所有设备。 3、PCI分类代码检测 入口参数: AH=B1H AL=03H ECX=低三个字节为分类代码 SI=索引号,0~~N 出口参数: BH=总线号,0~~255 BL=高5位为设备号,低3位为功能号 AH=00H表示检测成功,86H表示未发现要检测的设备 CF=1表示检测错误,0表示检测成功 如果在该功能调用中,使索引号从1开始以1位增量递增,直到AH中的返回码为86H为止,便可检测出具有相同分类代码的所有设备。 4、特殊周期的产生 入口参数: AH=B1H AL=06H BH=总线号,0~~255 EDX=特殊周期数据 出口参数: AH=00H表示特殊周期产生成功,81H表示不支持该功能 CF=1表示错误,0表示成功 5、读配置字节 入口参数: AX=B108H BH=总线号,0~~255 BL=高5位为设备号,低3位为功能号 DI=寄存器号,0~~255 出口参数 CL:读出的配置字节 AH=00H表示成功 CF=1表示错误,0表示成功 6、读配置字 入口参数: AX=B109H BH=总线号,0~~255 BL=高5位为设备号,低3位为功能号 DI=寄存器号,取值为0、2、4、6、8 出口参数 CX=读出的配置字 AH=00H表示成功,87H表示寄存器无效 CF=1表示错误,0表示成功 7、读配置双字 入口参数: AX=B10AH BH=总线号,0~~255 BL=高5位为设备号,低3位为功能号 DI=寄存器号,0、4、8、12 出口参数 ECX=读出的配置双字 AH=00H表示成功,87H表示寄存器无效 CF=1表示错误,0表示成功 8、写配置字节 入口参数: AX=B10BH BH=总线号,0~~255 BL=高5位为设备号,低3位为功能号 DI=寄存器号,0~~255 CL=写入的字节值 出口参数 AH=00H表示成功 CF=1表示错误,0表示成功 9、写配置字 入口参数: AX=B10CH BH=总线号,0~~255 BL=高5位为设备号,低3位为功能号 DI=寄存器号,0、2、4、6 CX=写入字的值 出口参数 AH=00H表示成功,87H表示寄存器无效 CF=1表示错误,0表示成功 10、写配置双字 入口参数: AX=B10DH BH=总线号,0~~255 BL=高5位为设备号,低3位为功能号 DI=寄存器号,0、4、8、12 ECX=写入双字的值 出口参数 AH=00H表示成功,87H表示寄存器无效 CF=1表示错误,0表示成功 更多关于DOS编程的文章看我的网志 点击进入《DOS编程技术》 [ Last edited by whowin on 2008-5-9 at 11:49 AM ]


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

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


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



论坛跳转: