VESA 编程介绍(一)标准VGA BIOS及超级VGA模式号

VESA编程介绍   (1)标准VGA BIOS及超级VGA模式号

---------------------------------------------------------------------------------

相关章节:  

(1): 标准VGA BIOS及超级VGA模式号

(2):CPU显存控制      

(3):扩展的VGA BIOS

(4): 扩展的VGA BIOS(续)及应用举例

---------------------------------------------------------------------------------

目的:

为提供简单的软件应用可以操纵高级的VGA适配器的能力,而提出的超级视频适配器的标准化公用软件接口。

概述:

该标准提供一系列应用程序能够使用的函数集。

1、获取某一指定超级VGA设备的兼容性和其独有的特点。

2、用以控制诸如显示方式、初始化和显存访问等等硬件操作。

这些功能作为VGA BIOS视频设备的扩展而提供,由10h中断访问。

目录:

1、介绍

2、目标和目的

2-1、视频环境信息

2-2、编程支持

2-3、兼容性

2-4、标准的情况

3、标准VGA BIOS

4、超级VGA模式号

5、CPU显存控制

5-1、硬件设计的考虑

5-1-1、受限于CPU 64K/128K的地址空间

5-1-2、跨越CPU显存窗口界限

5-1-3、处理来自不同区域的数据

5-1-4、将来自不同窗口的数据结合

5-2、硬件窗口的不同类型

5-2-1、单窗口系统

5-2-2、双重窗口系统

6、扩展的VGA BIOS

6-1、状态信息

6-2、00h-返回超级VGA信息

6-3、01h-返回超级VGA模式信息

6-4、02h-设置超级VGA模式

6-5、03h-返回超级VGA模式

6-6、04h-保存/恢复超级VGA状态

6-7、05h-超级VGA视频存储器窗口控制

6-8、06h-设置/获取逻辑扫描线长度

6-9、07h-设置/获取显示起点

6-10、08h-设置/获取DAC调色板控制

7、应用举例

------------------------------------------------------------------------------------------

1、介绍

本文档包含扩展VGA视频模式和功能的标准化接口的说明书。该说明书由以下结构组成:为主要VESA委员会所认可的标准扩展视频模式和功能以及非标准的视频模式。从而使得一些独立的VGA提供者能通过忽略对独特的VGA硬件的复杂细节的认识,以一种统一的方式向应用程序中添加扩展VGA的使用。

该说明书的主题是对扩展VGA视频模式和功能对于应用软件了解视频模式的特性和操纵与视频模式相关的扩展存储器的必要性作一个定义。

本文档的阅读者应该已经对于在硬件层进行VGA编程和INTEL iAPX 实模式汇编语言有一定的了解。对于VGA编程不熟悉的读者请在尝试了解对于标准VGA扩展之前先选择阅读大量现有的VGA编程教程。

2、目标和目的

在PC图象世界中,IBM VGA已经成了事实上的标准。市场上现存的各种不同的VGA提供商都保证了与IBM VGA在BIOS和寄存器上的兼容。越来越多的VGA兼容产品形成了VGA的各种扩展。这些扩展有更高的分辨率、更多的色彩和一些图象处理能力。强烈的竞争提高了性价比,而受益的是最终用户。

然而,对于那些意图利用超级VGA环境的新优点的软件开发人员却面临着一些严重的问题。由于没有标准的硬件,他们不得不面对各不相同的超级VGA硬件结构。缺乏通用的软件接口,导致设计相关的软件高昂的成本,而且在技术上也十分困难。除了OEM提供的VGA之外,几乎没有什么VGA产品的强大功能能被软件所使用。

VESA VGA BIOS扩展的出台正是为了弥补这一缺陷。做为超级VGA图形产品的通用软件接口,其主要目的是使应用软件和系统软件适应和挖掘广大的VGA扩展中的丰富特性。

明确而言,VESA BIOS扩展要解决以下问题:

1、向应用程序返回视频环境信息。

2、帮助应用程序对硬件进行初始化和编程。

2-1、视频环境信息

如今,仍没有标准的软件机制能确定它在何种超级VGA硬件上运行。只有通过OEM的产品特性才能知道该显卡的存在。这通常通过读取和测试每个OEM厂商特有的I/O端口来完成。如果不知道所处的硬件,很少的(如果有的话)底层硬件特性能够被使用到。

VESA BIOS扩展提供了一些函数来返回视频环境的信息。这些函数返回诸如显示方式的详细资料等等的系统信息。函数00h返回普通系统级信息,包括一个OEM识别串。函数同时返回所支持的显示方式的指针。函数01h能用来获取每一种支持的显示方式的详细信息。函数03h返回当前的显示方式。

2-2、编程支持

由于不同的超级VGA产品有不同的硬件结构,软件很难去适应每一种环境。但是,既然它们都是基于VGA硬件结构的,区别则主要在于显示方式的初始化和内存映射。结构的其余部分通常是不被接触的,包括I/O映射寄存器、CPU地址空间的视频缓冲定位和DAC的位置及功能等。

VESA BIOS扩展提供了一些针对不同超级VGA硬件设备的接口函数。其中最重要的是函数02h,设置超级VGA显示方式。该函数将应用程序从单调复杂的显示方式设置中解脱出来。函数05h提供了针对下层内存映射硬件的接口。函数04h能使应用程序保存和恢复超级VGA状态而不必了解任何实现细节。

2-3、兼容性

VESA BIOS扩展的一个主要设计目的是确保对于标准VGA环境的最大程度的兼容。而不可 能是BIOS妥协性能来完成兼容。另一点是对现有的VGA BIOS做最小程度的修改。如同基于ROM的设备一样,基于RAM的扩展将是可能的。

2-4、标准的情况

VESA BIOS扩展的目的是提供对扩展VGA环境的支持。因而下层的硬件设备被假定为VGA。图形软件应该向其驱动标准VGA一样来驱动超级VGA:如,直接写VGA帧缓存、操作图形控制寄存器和直接设计调色板等等。硬件无须做重要的图形处理。由于这个原因,VESA BIOS扩展不提供任何图形输出函数,如位块传送、画线和画圈等。

对VESA BIOS扩展的函数约束是由于现存BIOS设备的ROM空间十分有限。

在VESA BIOS扩展之外,还有对不同显示器的操作和定时。这些东西在其它VESA论坛中涉及。VESA BIOS扩展的目的是提供对超级VGA图形模式的标准软件接口,并不依赖显示器和显示器的定时问题。

3、标准VGA BIOS

VESA BIOS扩展的设计目标是使之对标准VGA BIOS的影响最小。标准VGA BIOS的函数应尽可能少的被修改。这是因为可能存在ROM扩展。

但是,有两个标准VGA BIOS函数受到VESA扩展的影响。它们是函数00h(设置显示方式)和函数0Fh(读取当前视频状态)。使用VESA的程序不会通过VGA BIOS函数00h来设置显示方式,同样也不会使用函数0Fh。而是使用VESA函数02h(设置超级VGA模式)和03h(获得超级VGA模式)。

为了使程序工作,VESA推荐将VESA BIOS扩展的函数0Fh的返回值(由OEM决定)用VGA BIOS函数00h来重新初始化显示方式。这样,BIOS将有效地记录下最近的超级VGA模式。

推荐(但并非命令)在超级VGA模式中支持输出函数(如TTY-输出、卷屏、画点等等)。如果BIOS扩展不支持这些函数,模式属性域(由VESA BIOS函数01h返回)的D2位(输出函数支持)将被清除。

4、超级VGA模式号

标准VGA模式号有7位,目前范围从00h到13h。OEM可以在14h-7Fh范围内定义扩展显示模式。80h-FFh范围不能使用,因为VGA BIOS函数00h(设置显示方式)将第七位作为判断是否清除显存的标志。

由于模式号7位的限制,VESA显示模式号有15位宽。其数值通过BX寄存器传送到VESA BIOS函数02h(设置超级VGA模式)来初始化超级VGA模式。

VESA模式号的格式如下:

D0-D8 模式号

如果D8为0 不是VESA定义的模式

如果D8为1 这是VESA定义的模式

D9-D14 VESA为今后的扩展而保留(为0)

D15 保留(为0)

因此,VESA模式号从100h开始。这种编号方式实现地将标准VGA模式号和OEM模式号做为VESA模式号的一部分。这意味着普通的VGA显示模式也能被VESA BIOS函数02h定义,即将模式号置入BL,而将高位的BH清除。OEM定义模式也可同样地初始化。

例外,VESA定义了7位的模式号,6Ah,来表示800x600,16色,4平面的显示模式。相应的15位模式号为102h。

以下是已经定义了的VESA模式号:

图象 文本

15位模式号 7位模式号 分辨率 色彩 15位模式号 7位模式号 列数 行数

------------------------------------------------------------------------------------------

100h --- 640x400 256 108h --- 80 60

101h --- 640x480 256

109h --- 132 25

102h 6Ah 800x600 16 10Ah --- 132 43

103h --- 800x600 256 10Bh --- 132 50

10Ch --- 132 60

104h --- 1024x768 16

105h --- 1024x768 256

106h --- 1280x1024 16

107h --- 1280x1024 256

10Dh --- 320x200 32K 1:5:5:5

10Eh --- 320x200 64k 6:5:5

10Fh --- 320x200 16.8M 8:8:8

110h --- 640x480 32K 1:5:5:5

111h --- 640x480 64K 6:5:5

112h --- 640x480 16.5M 8:8:8

113h --- 800x600 32K 1:5:5:5

114h --- 800x600 64K 6:5:5

115h --- 800x600 16.5M 8:8:8

116h --- 1024x768 32K 1:5:5:5

117h --- 1024x768 64K 6:5:5

118h --- 1024x768 16.5M 8:8:8

119h --- 1280x1024 32K 1:5:5:5

11Ah --- 1280x1024 64K 6:5:5

11Bh --- 1280x1024 16.5M 8:8:8

11Ch --- 1600x1200 256

11Dh --- 1600x1200 32K 未检验

11Eh --- 1600x1200 64K 未检验

你可能感兴趣的:(VESA 编程介绍(一)标准VGA BIOS及超级VGA模式号)