显卡的vbe标准

原作者地址

显卡的vbe标准

现在的显卡几乎全部支持VESA(电子视频标准协会)制定的标准,该标准的英文全称为VESA BIOS EXTENSION,简写VBE。这个标准经过1.0、1.1、1.2、2.0、2.0 Pro、3.0的升级,目前的最高版本是3.0。
制订这个标准的成员来自Intel、Matrox、Microsoft、Nvidia、Phillips、SciTech、Trident、ULSI等诸多公司或组织,也就是说它是被全面支持的,比如市面上几乎所有的PC机显卡都遵从这一标准;还有在当你安装LINUX或WINDOWS时或别的什么具备图形界面的操作系统时,如果系统无法识别你的显卡或找不到相应的驱动时,它们都会使用基于VBE标准的驱动以实现最基本的显示能力及硬件特性。所以不论你是底层编程的爱好者还是自动控制程序界面的实现者,甚至想在自己写的操作系统中加入对图形的支持,你都应该对VBE有所认识,并尽量地去掌握它,而关于VBE的文档都是英文的,虽然有人想汉化,但我目前还未找到一份完整的汉化版,因此在这个系列的文章中,我会用相当的篇幅来介绍VBE,并会结合NEO SDK的源代码以让你有更深的认识。
先让我们来预览一下VBE的特性:
l SVGA图形控制设备的标准应用程序接口
l 可选的操作系统保护模式图形接口(譬如可被用Windows,OS/2和UNIX等)
l 用以设置所支持显示模式刷新率的标准方案
l 支持液晶眼镜显示设备
l 识别视频产品和厂商的标准方法
l OEM厂商可通过第14H号子功能追加扩展功能
l 通过补充说明可扩展现有接口

好了,上面的特性能让你对VBE有一个大概的了解,现在切入正题,我们从设置显卡的显示模式开始。
在VBE标准中,设置显示模式是通过第02H号子功能实现的,为实现设置过程,我们要做如下步骤:

  1. 将寄存器AH设置为0x4F(VBE的功能入口),AL设置为0x02(子功能号),当然你也可以直接将0x4F02赋值给AX
  2. 然后将你要设置的显示模式的信息赋给寄存器BX。其中BX的第0位到第8位(以后简称为D0D8)是模式号(关于模式号见附表);D9D10保留置0;D11是刷新率标志位,为0时表示使用当前的默认刷新率,为1表示使用用户自定义的刷新率;D12-13也保留,置0即可;D14是显存寻址模式标志,为0表示使用窗口模式(也有译作换页模式但会与NEO中的概念冲突),否则使用线性模式,线性模式需要保护模式的支持(譬如通过DMPI支持);D15是清空显存标志,为0表示显示模式切换时清空显存原有内容,为1则保留;以上介绍的各个字节位初级应用只需要使用到D0~D8即模式号,其它的可以暂放一边
  3. 如果需要自定义显示的刷新率,就将指向CRTC结构的指针赋给ES:DI,否则跳过这一步(有关于CRTC结构的介绍由于篇幅问题请直接参阅VBE标准文档)
  4. 调用第10H号中断,你可以用库函数譬如int86(),也可以用内嵌汇编
    如果不出意外,你会发现显示模式已经被你设置了为你想要的了,当然也许会出错,错误的返回值你可以从寄存器AX中获得,AX中的值在VBE中被称为返回状态,除了32位保护模式接口的专有子功能,每个子功能在调用后都会往AX中返回一个状态值,它有以下的可能:
    AL == 4Fh:子功能被支持
    AL != 4Fh:子功能不被支持
    AH ==00h:功能调用成功
    AH ==01h:功能调用失败
    AH ==02h:子功能在当前的硬件设置中不被支持

下面给出一段NEO SDK中的代码用作示例:
/切换到指定图形模式/
r.x.ax = 0x4f02;
r.x.bx = mode;
int86(0x10, &r, &r);
if (r.x.ax != 0x4F) return FALSE; /切换失败/

模式

在这里插入图片描述
在这里插入图片描述
注:
A. 颜色数目一栏中的32K指32768;64K指65536;16.8M指16777216
B. 约定:在本系列之后的文档中,32K和64K被称为高彩色,16.8M被称为真彩色
C. 15位模式号为VBE标准模式号;7位模式号是OEM自定义的模式号,VBE只定义了一个模式的7位模式号,即102h模式,其对应的7位模式号为6Ah
如果显卡支持vbe,我们就应该切换到vga13显示模式下工作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值