您好,欢迎来到码863代码分享网! 请[登录] / [注册]

VBE标准

编辑

现在的显卡几乎全部支持VESA(电子视频标准协会)制定的标准,该标准的英文全称为VESA BIOS EXTENSION,简写VBE

 

VBE的功能大致有两种:a)制定了各种标准显示模式及分辨率的规范。我们知道,一般SVGA BIOS的模式编号用1个字节来表示即可,象0x13、0x03等,在VBE中为了区别开来,采用了2个字节的表达方式,高字节的第8位固定为1,例如0x0100、0x0101等,详见稍后的初始化例程附表,当然,这些模式不一定所有的SVGA卡都具备,只是在能力范围内尽量提供符合以上标准的显示模式;b)提供了一些特殊功能。这是通过调用中断10,ah=0x4f来实现的:
 ax  说 明
  0x4f00  读SVGA卡信息
  0x4f01  读显示模式信息
  0x4f02  设置显示模式
  0x4f03  读当前显示模式
  0x4f04  存储或恢复SVGA的视频状态
  0x4f05  控制内存页区域切换
  0x4f06  设置或读取逻辑扫描线宽度
  0x4f07  设置或读取视频内存与屏幕的初始对应位置
  0x4f08  设置或读取DAC各原色有效位数
  下面,我们来看看如何通过VBE设置SVGA的显示模式。首先我们再次分析一下VBE的模式编号:位0~8是模式号,如果位8为1表示VBE模式,如0x0100,如果位8为0表示非VBE模式;位9~14是保留位0;位15是清除位,为0表示设置新模式时要清除视频内存的内容,为1则不清除。由此可以看出,VBE的编号系统已将非VBE的模式也包括进去了,所以,我们也可以用VBE的功能来设置非VBE的显示模式。
 // 设置SVGA显示模式 int 10, ax=0x4f02
  void set_svgamode()
  {
   union REGS in,out;
   in.x.ax=0x4f02;
   out.x.bx=mode; // mode为相应模式编号
   int86 (0x10,&in,&out);
   return;
   }
  附:标准VBE常见模式
  种类 编号  说明
  图形 100h 640*400*256
  图形 101h 640*480*256
  图形 102h 800*600*16
  图形 103h 800*600*256
  图形 104h 1024*768*16
  图形 105h 1024*768*256
  图形 106h 1280*1024*16
  图形 107h 1280*1024*256
  文本 108h 80*60*16
  文本 109h 132*25*16
  文本 10Ah 132*43*16
  文本 10Bh 132*50*16
  文本 10Ch 132*60*16
  图形 10Dh 320*200*32K
  图形 10Eh 320*200*64K
  图形 10Fh 320*200*16M
  图形 110h 640*480*32K
  图形 111h 640*488*64K
  图形 112h 640*480*16M
  图形 113h 800*600*32K
  图形 114h 800*600*64K
  图形 115h 800*600*16M
  图形 116h 1024*768*32K
  图形 117h 1024*768*64K
  图形 118h 1024*768*16M
  图形 119h 1280*1024*32K
  图形 11Ah 1280*1024*64K
  图形 10Bh 1280*1024*16M
  

 

 

 

 

现在的显卡几乎全部支持VESA(电子视频标准协会)制定的标准,该标准的英文全称为VESA BIOS EXTENSION,简写VBE这个标准经过1.01.11.22.02.0 Pro3.0的升级,目前的最高版本是3.0

制订这个标准的成员来自IntelMatroxMicrosoftNvidiaPhillipsSciTechTridentULSI等诸多公司或组织,也就是说它是被全面支持的,比如市面上几乎所有的PC机显卡都遵从这一标准;还有在当你安装LINUXWINDOWS时或别的什么具备图形界面的操作系统时,如果系统无法识别你的显卡或找不到相应的驱动时,它们都会使用基于VBE标准的驱动以实现最基本的显示能力及硬件特性。所以不论你是底层编程的爱好者还是自动控制程序界面的实现者,甚至想在自己写的操作系统中加入对图形的支持,你都应该对VBE有所认识,并尽量地去掌握它,而关于VBE的文档都是英文的,虽然有人想汉化,但我目前还未找到一份完整的汉化版,因此在这个系列的文章中,我会用相当的篇幅来介绍VBE,并会结合NEO SDK的源代码以让你有更深的认识。

先让我们来预览一下VBE的特性:

l         SVGA图形控制设备的标准应用程序接口

l         可选的操作系统保护模式图形接口(譬如可被用WindowsOS/2UNIX等)

l         用以设置所支持显示模式刷新率的标准方案

l         支持液晶眼镜显示设备

l         识别视频产品和厂商的标准方法

l         OEM厂商可通过第14H号子功能追加扩展功能

l         通过补充说明可扩展现有接口

 

好了,上面的特性能让你对VBE有一个大概的了解,现在切入正题,我们从设置显卡的显示模式开始。

VBE标准中,设置显示模式是通过第02H号子功能实现的,为实现设置过程,我们要做如下步骤:

1.         将寄存器AH设置为0x4FVBE的功能入口),AL设置为0x02(子功能号),当然你也可以直接将0x4F02赋值给AX

2.         然后将你要设置的显示模式的信息赋给寄存器BX。其中BX的第0位到第8位(以后简称为D0~D8)是模式号(关于模式号见附表);D9~D10保留置0D11是刷新率标志位,为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.        颜色数目一栏中的32K3276864K6553616.8M16777216

B.        约定:在本系列之后的文档中,32K64K被称为高彩色,16.8M被称为真彩色

C.        15位模式号为VBE标准模式号;7位模式号是OEM自定义的模式号,VBE只定义了一个模式的7位模式号,即102h模式,其对应的7位模式号为6Ah

如果显卡支持vbe,我们就应该切换到vga13显示模式下工作

 

CopyRight 2002~2023 精通2100网 联系邮箱:qqtxt@163.com
版权所有:精通2100网 湘ICP备2023018646号-1
MYSQl共执行 3 个查询,用时 0.0017836093902588 秒,PHP脚本用时 0.004938 秒,占用内存 0.919 MB,Gzip 已启用