显卡的vbe标准

来源:互联网 发布:centos 6.5网络配置 编辑:程序博客网 时间:2024/06/09 23:26
现在的显卡几乎全部支持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位(以后简称为D0~D8)是模式号(关于模式号见附表);D9~D10保留置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; /*切换失败*/
 
你可能会问,说了这么多,那VBE到底支持哪些显示模式哪?不急,我来给出两张表:
附表A

图形模式
15位模式号
7位模式号
分辨率
颜色数目
100h
――
640x400
256
101h
――
640x480
256
102h
6Ah
800x600
16
103h
――
800x600
256
104h
――
1024x768
16
105h
――
1024x768
256
106h
――
1280x1024
16
107h
――
1280x1024
256
10Dh
――
320x200
32K (1:5:5:5)
10Eh
――
320x200
64K (5:6:5)
10Fh
――
320x200
16.8M (8:8:8)
110h
――
640x480
32K (1:5:5:5)
111h
――
640x480
64K (5:6:5)
112h
――
640x480
16.8M (8:8:8)
113h
――
800x600
32K (1:5:5:5)
114h
――
800x600
64K (5:6:5)
115h
――
800x600
16.8M (8:8:8)
116h
――
1024x768
32K (1:5:5:5)
117h
――
1024x768
64K (5:6:5)
118h
――
1024x768
16.8M (8:8:8)
119h
――
1280x1024
32K (1:5:5:5)
11Ah
――
1280x1024
64K (5:6:5)
11Bh
――
1280x1024
16.8M (8:8:8)
81FFh
特殊模式(具体参阅VBE标准文档细节)

 
附表B

文本模式
15位模式号
7位模式号
108h
――
80
60
109h
――
132
25
10Ah
――
132
43
10Bh
――
132
50
10Ch
――
132
60

 
注:
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显示模式下工作
原创粉丝点击