登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

DOS编程技术

讨论在纯DOS下的编程技术

 
 
 

日志

 
 
关于我

1984年大学毕业,1985年底有机会开始接触PC机,1986年开始在PC机上做开发工作,曾接触过MS-DOS、CP/M、UNIX、VMS、LINUX、iRMX等众多的操作系统并在上面从事技术开发,擅长做底层与硬件相关的软件开发,目前主要在DOS和LINUX平台下工作,主要从事软件,在硬件开发上也有一定造诣,亦有在8051系列、6502系列(凌阳)、z80系列、ARM、X86等各类平台下开发软硬件的经历。更详细情况可以参考http://resume.whowin.net

32位 BIOS说明  

2008-03-18 13:15:48|  分类: dos资料 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

  评论这张
 
阅读(3875)| 评论(8)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018