搜档网
当前位置:搜档网 › SVGA编程VESA_VBE规范 - 副本

SVGA编程VESA_VBE规范 - 副本

SVGA编程VESA_VBE规范 - 副本
SVGA编程VESA_VBE规范 - 副本

声明:

此 VBE3.0 源文件来源于网络,其版权应属于 VESA 。

译者英文水平较低,故将其译成简体中文以便于学习。

其中,可能存在大量错误,所以企望同行们不吝赐教。

如果我的翻译工作伤害到了其所有权者,请与我联系。

基于此文档,没有任何一个被证实的许可证已被授权。

除必须得到尊重的条款以外,译者不对译文的准确性、

完整性、及可作商品性做出任何明显或暗指的保证。

由于译文可能存在翻译上的错误,故译者的翻译工作

是不负责任的。一切由本文档所激发的与硬件相关的

不可恢复性异常与译者无关。

由于原属版权和知识产权等因素,

就本文而言,一切带有商业色彩的转

载行为,将不被译者所认同; 为达到

技术交流的目的,引用本文时,将不

受任何限制,但,该中译文的完整性

必须得到尊重。声明正常结束,谢谢。

译者:杨森

Email:ys82338@https://www.sodocs.net/doc/2b17051576.html,

OICQ: 88413048

中华人民共和国五十七年五月

公立安徽交通技术学校专业组

(文档中经由译者原创的图片、代码可以在未经任何授权的情况下使用)

VESA

Video Electronics Standards Association

视频电子标准化协会

VESA BIOS EXTENSION (VBE)

Core Functions

Standard

Version: 3.0

Date: September 16, 1998

宗旨

目的在于为显示、音频设备建立一个通用的软件接口。VBE 接口致力于简化和鼓励应用程序在硬件无关性的情况下对高性能的图形、视频、音频设备进行内核操作。

概述

VBE 标准定义了一套VGA ROM BIOS 扩展服务。这些功能,在DOS下,可通过10h中断调用得以实现,其它的高性能32位 OS及应用程序亦可直接调用。

知识产权

Copyright (C) 1993-1998 - Video Electronics Standards Association.

All rights reserved

在准备发布此标准时,VESA对本文档中可能存在的错误进行了严密的审查。视频电子标准化协会及其撰稿人假定:不对标准中的错误和遗漏负有责任,不对此标准的功能性和适用性做任何明显或暗指的保证。

(文档中经由译者原创的图片、代码可以在未经任何授权的情况下使用)

商标

(文档中商标的所有权归其各自的所有者所有。)

介绍

本文描述了应用程序设置图形显示控制器以控制诸如非VGA标准规定的分辨率、色深、显存组织形式的技术细节,并为用户开发应用程序及系统软件提供参考。同时,它还介绍了一个用于设置显示器高刷新率的扩展接口。

系统软件开发人员可以参考本文档以便向应用程序提供VBE 服务,应用程序编制者亦可基于此文对 VBE 兼容设备编程,并获得良好的兼容性。

对于程序编制者而言,汇编语言及VGA 编程经验是完全理解 VBE规范的前提。尽管汇编语言是VGA编程的首选,然,某些具有软件中断调用机制的高级语言仍然可以使用规范中所描述的VBE服务对特定的VGA 寄存器进行置位/复位。

文档里出现的VBE、VBE3.0、VBE Core Functions version 3.0 在无特殊说明的情况下,三者同义。

VBE标准的应用范围

VESA VBE 的主要用意在于为众多的拥有各自执行标准的Super VGA(SVGA) 产品提供一个通用的行业标准(在最初的 VGA 标准基础之上),从而应用程序开发者可切实可行地对各种兼容设备进行编程。

显示设备的升级,对软件而言就会出现硬件兼容性问题。如此,在不丢失软件兼容性的情况下,VBE 规范提供了一个扩展的软件基础。随着时间的流逝,SVGA 执行标准即可得到规范,从而,新软件可在老的显示设备上正常运行,反之亦然。

针对诸如显示器分辨率、色深的调节,VBE服务提供了标准的显示控制器访问规则,在需要的时候,应用程序还可通过VBE服务获得硬件的各种配置的有效性和详细资料。

虽然之前的VBE标准将显卡默认为VGA卡,但 VBE3.0 可在不做任何假定的情况下工作于任何显存组织模型。

大多数VBE服务通过允许应用程序在运行时可直接配置硬件,使得硬件的安装和配置得以简化。为了更进一步地改进处于高分辨率状态下的显示设备的性能,VBE 3.0 提供了一种新的有别于传统显存框架(使用 "banking"机制) 的内存模型。

VBE 期望运行于所有80x86平台,无论是实地址模式还是保护虚地址模式。从VBE3.0 开始,所有 VBE/Core BIOS 函数/功能均支持"双重模式",并且允许它不受限制地以16位保护模式代码的形式被调用到一个新的保护模式接口入口。“双重模式”代码意味着,当它经由保护模式入口点调用并用以确保完全兼容于保护模式操作系统(诸如,Windows NT,OS/2,UNIX)时,BIOS 代码拥护确实的限制。

尽管“双重模式”代码必须以16位保护模式代码的形式被调用,但这不能防止它直接被纯32位的操作系统调用。系统中可能存在两个或两以上的显示控制器(译注:显卡和声卡类似,包括两个模块:数据"加工"-控制器、数模转换-DAC),一个用于兼容VGA(动宾结构),另一个用作扩展自基本VGA模式、分辨率、显存组织模式的显卡。INT 10h 软件接口不可能支持多个控制器,所以只有主控制器才能将其 BIOS 映射到C000h (译注:显卡BIOS基址,什么意思呢?一般来说,板子上的集成显卡和独立显卡只有一个起作用,另一个必须禁掉)。若系统中存在多个控制器,则另

一个可以经由 VBE/AF Accelerator Functions(加速功能)得以控制。

VBE/Core 规范不包括对硬件加速功能(原始2D/3D图形、视频加速)的描述,如果你有意使用这些特征,请查阅VBE/AF Accelerator Functions specification 。

请联系 VESA 以获得更多信息。

背景

IBM VGA 已经成为PC图形世界的事实标准。为数众多存在于交易市场中的各种显卡,其寄存器、BIOS 均兼容于IBM VGA。值得一提的是(译注:这是很久以前的事情啦),具备更高性能的兼容显卡象雨后春笋一样涌现出来,并充斥着市场。这些改进的性能包括:高分辨率、更多的颜色,有的甚至加入了图形处理功能(文中广泛提到的controller实际指的就是显示控制器)。激烈的市场竞争戏剧性地改善了显卡产品的性价比,结果最终用户获得了最大的利益。

然而,试图利用这些“Super VGA”新功能的软件开发人员必须直面一些新出现的令人感到棘手的问题:因为没有一个统一的硬件执行标准,开发人员面对的就是一些截然不同的Super VGA 硬件体系结构。由于缺少一个通用的软件接口,在这些 SVGA 环境下开发应用程序是昂贵的,技术上也遇到了困难。除了那些受到OEM 特定驱动程序支持的应用程序以外,很少有软件包能够利用Super VGA产品的新功能。

VBE 标准最初的设想就是帮助应用程序,使之能够利用那些高于 VGA标准的显示分辨率和色深。和软件对行业标准存在着渴望一样,那些怂恿用户使用和接受他们快速推进的产品系列的图形硬件开发商们也存在着与之类似的共识。

变的由为突出的是,由于存在着上百种板子,以至于大多数软件开发人员无法拥有足够的手段去开发和支持客户设备级软件。因此,除了相对狭小的 CAD 市场之外,这些丰富的新特性(SVGA)没有得到利用。

确实如此,此时对SVGA显示标准的需求,就象中国武林中的葵花宝典,如此VESA出面了,并成功地平息这场武林浩劫,最初的VBE标准便由此而横空出世。这个标准得到了几个带头大哥(活跃的显示控制器制造商)的支持,后来还被DOS 应用程序员收养了用以支持非扩展的 VGA 显示模式。

(翻译什么什规范真是一个苦差事,行文太正式了。所以我在这段加了一点水,呵呵)

时间在流淌,VBE 1.1 加入了更多的视频模式,增加了逻辑线长度/双缓冲区;

VBE 1.2 加入了 high color RAMDAC 。

在VBE 1.2 发布后的三年里,我们看到我们的这个标准得到了广泛的认可,并且许多做得很成功的程序也在信奉 VBE 。诚然,对已经存在的标准的健壮性和可扩展性的需求变得由为突出。早期的对VGA的扩展仍然使用原始的VGA I/O 端口以及与控制器硬件通讯的帧缓冲区。正如我们看到的,支持的分辨率和色深正在增加,具备BITBLT功能的智能控制器及直线绘制函数已经很普通,并且新的flat frame buffer memory models 已经出现。

VBE 2.0 和后继的扩展规范将支持非VGA架构(具备新的读写调色板功能有能力使用flat frame buffer memory models)的控制器。

译注:

BITBLT

[朗文英汉综合电脑词典]

= bit block transfer,位块传送,位图数据块的传送

VBE3.0的用意用在于提供先前规范中所或缺的健壮性、可扩展性,同时不丧失对长辈的兼容性。

VBE 概述

SVGA 设备图形控制器应用程序接口

保护模式接口

刷新率设置

液晶虑镜

识别产品及制造商标识

子功能 14h OEM 扩展

补充规范

支持 VBE 的设备

现行 PC平台的显卡,Hercules(大力神)、MDA、CGA、EGA,除外均适用于VBE 标准。

获得供应商信息

VGA 规范并没有提供一个用于检测显示设备类型的机制,对于软件而言,将无法利用那些新功能。VESA 扩展 BIOS 摧毁了这个缺陷,它提供了若干个子功能用于检测硬件并可返回当前显示环境的系统级信息以及图形模式的细节资料。

譬如:

00h返回包括 OEM 标识串等的一般系统级信息,还可返回一个指向显卡支持的VBE 、OEM modes 的远指针。

01h 可帮助应用程序获得一些关于被支持的视频模式的附加信息

03h 返回当前VBE模式

VBE/Core 编程

本节介绍VBE 3.0 提供的应用于应用程序和系统编程的高级功能。

访问线性帧缓冲区内存

(有时,翻译时用词不一致,这无关紧要;在可能出现误译时,译者将适时以原文拿出。)

一旦,成功初始化显示设备为(声调:阳平)某种支持线性帧缓冲区的模式后,那么你就有必要创建一个指针,该指针用于协助应用程序读写线性帧缓冲区内存。

现在你必须有一个明确的认识:这个所谓的线性帧缓冲区,它是个什么东西,它的位置在哪?

不过,“ ModeInfoBlock ”知道,你去问他好了。有人又问,他又是个什么东西。我的回答照旧,我也不知道,那你只好先把他记住吧,等用到他的时候,再去找他吧。

再罗嗦一句:就目前实现方式而言,VBE 主要用于传统 DOS 下的游戏和工控。

对于 Win32 平台你完全可以依靠 Direct X 或 Open GL,它们是 GDI 与USER的中间体,就是一个函数库吧。

(它们是如何实现的,我也无从得知,先把这个弄懂再说吧。)

好了,我们回到正文。

第一个要弄懂的就是,ModeInfoBlock 报告了当前模式所使用的物理内存,然,保护模式下的应用程序无法直接使用之。在你获得足够的操作权限之前,你必须通过调用操作系统服务将这段物理地址空间映射到你的应用程序的线性地址空间内。用户可以使用DPMI(DOS保护模式接口)0x800 子功能来完成映射工作。其它操作系统下,可由其它的类似功能完成。

译注(我又多嘴了):

VGA 彩色模式下

CRT控制器:名称端口

索引寄存器 3D4h

数据寄存器 3D5h

CRT控制器有26个寄存器,必须经索引后,才能通过 3D5端口读写。

你可以自行查找相关资料

使用 VBE/DDC 获取监视器的工作极限

VBE/DDC接口可被用于测试并获得监视器支持的最小/最大场频、行频等信息。

如果监视器和图形卡均支持 DDC功能,则这些信息即可获得并可用于限制刷新率计算例程以确保CRTC values 不会超过监视器的工作极限。

请查阅 VBE/DDC and EDID 规范以获得更多关于监视器工作极限的信息。

使用 VM/GTF 计算 CRTC values

VESA VM(监视器委员会)的 GTF ( Generalized Timing Formula ) 定义了一套计算公式,只需提供分辨率和场频、行频、 pixel clock(只要求提供三者其中一个),GTF 即可生成CRTC timings 。

欲知详情,请查阅 GTF 规范以获得该公式和样本代码(用于计算 GTF compliant CRTC values )。

计算 normalized pixel clock

一旦你成功生成了一组CRTC timings,注意,pixel clock 是不能随意改动的任意值。在获得了normalized pixel clock之后,你有必要调用function 4F0Bh ,目的在于得到硬件可编程的the closest pixel clock 的准确值。调用功能 0F0Bh时,你必须提交视频模式的值(与 pixel clock 匹配)。

注:GTF之技术细节,须经由付费才能获得,而且十分昂贵,三百多美金呢,太可惜,没意思!

请知情者将其发至:ys82338@https://www.sodocs.net/doc/2b17051576.html,或OICQ:88413048 ,谢谢!

Setting double scan modes

如果硬件支持双重扫描(垂直方向每行扫描两次),则可被支持的视频模式诸如:320x200,320x240 及400x300等。若硬件不支持双扫描,则不能执行此项工作。当应用程序试图设置刷新率时(在这些模式下),则必须事先设置double scan bit 。

当设置成双重扫描模式,则实际 CRTC parameters应该是实际水平扫描线数的两倍,因此,当实际处于200 线模式时,其垂直 CRTC 参数和pixel clock 应为400 线模式的值(在双重扫描模式下,200线实际要刷400次,所以刷屏所用的时间与400线模式相等),同时设置double scan bit 以切换到 200 line 可寻址方式模式。另外,若你使用的是双重扫描模式,则不能执行隔行操作。

重要译注:

为了在高分辨率VGA 监视器(400 扫描线)上显示CGA低分辨率模式下的图形(200 线),VGA 显示适配器使用了一种叫双重扫描的技术。200 个水平扫描线中的每一条被刷两次,以把垂直分辨率从200条扫描线在逻辑上增加到400条,这改善了显示的质量,并起到了补偿VGA 显示器的宽高比差异的作用。

译注:显示器包括:监视器和显示适配器(俗称显卡)

Setting Interlaced Modes(隔行扫描)

首先置位ModeInfoblock 的ModeAttributes field(模式属性字段)的 bit D9 ,完了再置位CRTCInfoBlock 的Flags field 的 bit D1,至此,即可进行隔行操作。隔行模式的CRTC timings 应于non-interlaced mode(逐行模式)保持一致。

由于一些新硬件不一定支持隔行扫描,所以在试图初始化隔行扫描模式之前,必须检测ModeInfoBlock attributes field 以确定隔行扫描是否被支持。一般来说,隔行扫描只适应于高分辨率(640×480或更高),大多数硬件在低分辨率下启动隔行扫描会遇到麻烦。

译注:

与隔行扫描(先刷奇数行扫描线,再刷偶数行扫描线,即在垂直方向分两次刷屏)相对应的是逐行扫描(垂直方向从上而下依次产生水平扫描线。理论上,逐行扫描的显示效果较隔行扫描要好)。

Developing for Maximum Compatibility

本节描述在不丢失性能、特性的情况下,促使应用程序获得最大的兼容性的技术细节。虽然VBE标准规定了规范如何工作,但仍有许多不同品味的硬件不在范围之内。所以对于你的软件来说,能够工作在不同的硬件之上显得非常之重要。

许多开发人员在尝试开发图形代码时往往会制造一个错误:总是不加思索地认为他的图形卡就是规范的标本。虽然VBE接口对不同的图形卡一视同仁,但是每个硬件所报告的性能和属性并不完全相同,所以本节有必要强调这个最为普遍的错误。

Be prepared for different Window Granularity?s

关键字:

bank(参考翻译:页面) banking(参考翻译:分页)

bank [朗文英汉综合电脑词典]

(数据)库,集;簇;排、列、组、堆、区;存储体;银行

Granularity(参考翻译:间隔尺寸/粒度)

[简明英汉词典]

n.间隔尺寸, 粒度

granularity [朗文英汉综合电脑词典]

(颗)粒性;【微软】间隔尺寸

许多控制器简单地提供了一个64KB 的间隔尺寸,即bank 0 从0起始,bank 1 从64KB 起始,bank 2 从128KB起始,等等。有些控制器也提供4KB 或 16KB 间隔尺寸。

window(参考翻译:窗口) windowing(窗口切换)

Be prepared for both single and dual read/write Windows

必须得到足够关注的是:

不同的控制器的,窗口的样式有所不同:

single read/write window (单一读/写窗口)

separate read and write window (分立的读、写窗口)

scenario

游戏的关,或是某一特定情节

scenario [朗文英汉综合电脑词典]

校本;方案;情况;概要;脚本

scenario [英汉广播大词典]

n.电影剧本,电影文学剧本

scenario [英汉计算机大词典]

n.剧情(情况)

对于single read/write window(单一读/写窗口)控制器(最普遍的方案), 设置了第一个窗口即意味着同时改变了读写操作的位置。而对于dual read/write window?s 则可分别改变这两个分立的读/写窗口在 framebuffer(帧缓冲区)中的读写操作位置。

为了获得高大的性能,你应该核对你当前所编程的图形模式的modeInfoBlock 属性。如果提供了separate read/write windows ,你必须确保通过两次调用bank switch function 以使两个windows 被定位于同一位置。

Be prepared to support both 15 and 16 bits per pixel high color modes

(增强15、16位色模式)

许多游戏和应用程序都支持15位和16位每像素的高彩模式。如果你打算支持这些模式,请不要制造这个错误:误以为所有设备都支持 16位色高彩模式,或者是15位色。有的仅支持15位色

模式,而有的则仅支持16位色模式(之前,我也没有听说过15位色,在接手这块爷爷辈的sis-6326 显卡时,才看到这个15位色模式)。因此,应用程序必须同时支持这两种色深才能获得最大的兼容性。

Be prepared to support both 24 and 32 bits per pixel true color modes

如果你想你的代码获得24位真彩表现能力的话,那你就必须在控制器中查找真彩模式(每个像素占三个字节或32位每像素)。通常32位彩色模式要比24位彩色模式要快,因为在该模式下,一个像素值可以双字的形式存取。但,32位彩色模式要求至少 2MB 的内存。

Some controllers can?t do double scanned modes

如果你正在开发一个游戏或应用程序,并打算让它支持320×200 或 320×240 模式(in any color depth),那你就要考虑到这些模式不被硬件支持的情形了。要想在现今的硬件上初始化这些模式,则必须获得双重扫描的支持,但有些控制器并不会就此给予你以方便。因为这些控制器从骨子里就不支持上述模式,因此你的应用程序和游戏就有必要学会处理这个遭遇。

为了代替上述不可用的模式,控制器也许会提供支持320×400 或 320×480 的模式(不要求双重扫描的支持)。

解决办法:先将你的画面(320×200 或 320×240)写到一个系统内存缓冲区,然后将你的画面在垂直方向上扩展至原来的2倍(就是用软件方法将每一条扫描线转录成两个)。结果,看起来就和320×200 或 320×240 模式一样了,同时你的软件仅丢失了一点点的性能(反而比直接绘制一个 320×400 或3 20×480 的屏幕还要快)。

Check if VGA Compatible Before Touching Any VGA Registers

许多开发人员发现:向性能的极限进攻是一个不可抗拒的想法,同时他们会不择手段达到目的。经由魔术般地使用某些标准的VGA寄存器可以完成一些不可思议、另人惊奇的壮举。这是可以办到的,而且可以完美地工作在VGA兼容图形卡之上,但并不是所有的显示卡都认同你的做法。

如果图形控制器不是基于标准图形硬件技术(特殊用途、一些最新的),加上在 SuperVGA图形模式下,这些VGA寄存器也许就不复存在了,此时,如果试图“同步”这些寄存器,则必将颠覆你的代码进入一个死循环。所以有必要在此预先警告,任何乱动标准VGA寄存器的操作(名词)就是自寻麻烦(譬如在某些使用非VGA控制器的图形卡编程SuperVGA图形模式)。

然而,VBE 2.0 有一个解决办法:它在 VBE ModeInfoBlock 安置不一个存取位,该位用来指示某个图形模式是否是NonVGA mode or VGA compatible mode 。如果该位指明当前被编程成目标图形模式的是一个NonVGA controller,那你就不要随意设定某个特定的标准VGA寄存器。在这些情况下,你最好撤退到generic code 的怀抱,让它们经由VBE2.0及其所属的服务来完成那些你所期望的与图形卡交互的工作。

generic

[简明英汉词典]

adj.[生物]属的, 类的, 一般的, 普通的, 非特殊的

generic [朗文英汉综合电脑词典]

【修】类属;一般

generic [英汉电信大词典]

n.类的,一般的

generic [英汉计算机大词典]

adj.普通的(同属的)

Check if VGA Compatible Before Directly Programming the DAC

还一个相关的问题--调色板(处于256色模式)。在NonVGA controllers 上,VGA调色板不存在了,此时对调色板编程将毫无收获。更糟糕是,试图synch to 垂直或水平回扫线的操作将会促使你的系统进入一个无限循环。

synch

[简明英汉词典]

n. 同时;同步

synch [朗文英汉综合电脑词典]

同步信号

因此,如果你需要在NonVGA controller 上使用调色板时,则有必要使用VBE2.0 提供的调色板编程例程,而不是直接手动对调色板编程。请确保按上述方法来核对NonVGA Attribute bit,同时,若有一个NonVGA mode 被检测到,则务必使用VBE2.0 及其服务来对调色板进行编程。

VBE Function Reference

本章详细描述VBE 的功能调用。在实模式下,VBE功能将以10h软件中断的形式被调用,参数放置在80X86 寄存器中。

INT 10h中断服务程序首先判断被调用的是否是一个VBE功能,是则处理之。否则将其丢给VGA BIOS 。从 VBE3.0 开始支持经由protected mode entry point的直接调用。当经由the protected mode entry point, VBE functions 将以16位保护模式代码的形式执行,它可直接被16位或 32位保护模式操作系统或应用程序调用。

为了区别于标准的VGA BIOS 功能调用,调用任何一个VBE功能之前,寄存器AH的内容要求被设置为04Fh,AL的内容代表功能号,必要时作为补充,BL 用于存放子功能号。

Functions 00h-0Fh 用作 Standard VBE function numbers

Functions 10h-FFh 留作VBE补充规范

VBE Return Status

AX寄存器用于返回VBE functions 的执行结果(32位版的不返回任何信息或返回码)。如果VBE 功能调用成功完成,则AH 的值为00h ,否则返回错误码。

VBE RETURN STATUS

AL = 4Fh: Function is supported

AL!= 4Fh: Function is not supported

AH = 00h: Function call successful

AH = 01h: Function call failed

AH = 02h: Function is not supported in the current hardware configuration

AH = 03h: Function call invalid in current video mode

VBE Mode Numbers

标准的VGA模式号是7位宽的,其必然的范围是:00h~13h 。OEMs 自定的扩充模式号:14h~7Fh 。80h~0FFh 不能使用,因为VGA BIOS function 00h 认为bit 7

(一个标志位)是用来清零或保存显示内存的意思。

由于7-bit模式号的限制,可选的VBE模式号则采用14 位宽。

VBE function 02h 用于初始化一个 VBE mode,模式号放在BX 寄存器中。

VBE 模式号格式如下:

D0-D8 = Mode number

If D8 == 0, this is not a VESA defined VBE mode

If D8 == 1, this is a VESA defined VBE mode

D9-D12 = Reserved by VESA for future expansion (= 0)

D11 = Refresh Rate Control Select

If D11 == 0, Use current BIOS default refresh rate

If D11 == 1, Use user specified CRTC values for refresh rate

D12-13 = Reserved for VBE/AF (must be 0)

D14 = Linear/Flat Frame Buffer Select

If D14 == 0, Use Banked/Windowed Frame Buffer

If D14 == 1, Use Linear/Flat Frame Buffer

D15 = Preserve Display Memory Select

If D15 == 0, Clear display memory

If D15 == 1, Preserve display memory

因此,VBE 模式号从100h 开始。该模式编码方案实现了标准的7-bit 模式号(for OEM-defined modes)(OEM自定的模式不能由标准的VGA BIOS设置)。将模式号放在BL中,BH 清零,如此,标准的VGA mode 也可以通过VBE Function 02h 初始化。

对OEM-defined 的显示模式的初始化,也使用同样的方法。

将被设置的VBE 模式必须是存在于VideoModeList中的某个模式,然而设置某个标准VGA模式和OEM自定的模式号则不需要考虑这些(因为它们“ 必然” 被显卡所支持)。

一个例外-VBE mode number 81FFh。

至此,VESA定义了一个特殊模式:6Ah-800×600、16色、4页面图形模式。

VESA先前定义的VBE mode numbers 如下所示:

GRAPHICS TEXT

15-bit 7-bit Resolution Colors 15-bit 7-bit Columns Rows

Mode No. Mode No.

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

104h 1024x768 16 0Ch 132 60

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 Special Mode (see below for details)

从VBE2.0开始,VESA不再定义新的VESA模式号,同时将不再强制地支持老的模式号。 OEM 若是打算追加其自定的 VBE模式号,那必须得到保证的是,其定义的模式必须在高于x100。VESA强烈建议:为了兼容性,BIOS应该继续支持这些模式号和新模式号(在VESA定义的模式号之后定义的)。

VBE Far Pointers(远指针)

贯穿整个规范,存在一个基准--… vbeFarPtr?,它是一个DWORD指针。

它有两种解释:

1、segment:offset(为实模式下,INT 10h 所采用)

2、selector:offset(为protected mode entry point 所采用:选择符指向保护模式 BIOS 映像,应用程序和BIOS 使用这个32位指针来访问数据。

当它的被解释为 selector 时,不能对该指针进行任何实模式方式下的指针运算。

从 VBE/Core 3.0 开始,VBE Functions 支持两种可选的切实可行的调用源:

16位和 32位保护模式操作系统或应用程序(通过 Protected Mode Entry Point)。保护模式入

口定义了一个特殊的位置,用以调用被映像成16位保护模式代码的VBE Functions 。应用程序或

OS不能直接在保护下调用BIOS code(译注:前文部分也曾注释过--保护模式操作系统往往使用的

是4个G 平坦虚拟内存地址空间,物理内存对外界来说,是不可见的,也就是说,物理内存被OS“保

护”起来了,除非你拥有足够的手段),但是你可以先复制一个BIOS 映像到你的“视野”(该词为译

者杜撰,原意-可写内存区)内,然后调用这个被重定位的代码。前文所说的“入口点”被安置在

“Protected Mode Information Block”,该信息块位于BIOS 映像的前32KB(如果该信息块没有被

找到,即说明BIOS 不支持这个新接口)。

译注:

请大家不要误解,文中所提到的 BIOS 特指显卡BIOS 而不是主板BIOS 。

有人会问会:我何时用过用过显卡BIOS 啊?

答:在你使用INT 10h 时,你就使用了这个BIOS,它完成了监视器场频/刷新率、行频、字符模式

与图形模式的切换、显存映射等工作。这些工作并不是由主板BIOS 完成的。

显卡BIOS 也被映射到1M内存内,开机的时候你可以在屏幕上可以观察到显卡BIOS 的行为。啊,

我太罗嗦啦!

我不打算在 Win2k 下使用 VBE,故而不再对保护模式入口的操作过程做进一步翻译。

(下面开始实质性的东西)

Function 00h - Return VBE Controller Information

Input: AX = 4F00h Return VBE Controller Information

ES:DI = Pointer to buffer in which to place

VbeInfoBlock structure

(VbeSignature should be set to 'VBE2' when function is called to indicate VBE 3.0 information is desired

and the information block is 512 bytes in size.)

Output: AX = VBE Return Status

Note: All other registers are preserved.

此功能返回显示控制器的性能、VBE的版本、供应商的信息,并填写一个信息块(放在用户指定

的内存缓冲区)。

VbeInfoBlock的大小:VBE 1.x -256 Byte ; VBE2.0+ - 512 Byte 。

The information block has the following structure:

VbeInfoBlock struc

VbeSignature db 'VESA' ; VBE 签名

VbeVersion dw 0300h ; VBE 版本

OemStringPtr dd ? ; 指向OEM String的远指针

Capabilities db 4 dup (?) ; 图形控制器性能

VideoModePtr dd ? ; 指向VideoModeList的远指针

TotalMemory dw ? ; 内存块的数目(VBE 2.0+)OemSoftwareRev dw ? ; VBE 执行程序版本

OemVendorNamePtr dd ? ; 指向供应商名称字符串的远指针OemProductNamePtr dd ? ; 指向产品名称字符串的远指针OemProductRevPtr dd ? ; 指向产品版本字符串的远指针

Reserved db 222 dup (?) ; VBE 执行程序乱涂区域

OemData db 256 dup (?) ; OEM String 数据区

VbeInfoBlock ends

Description of the VbeInfoBlock structure fields:

VbeSignature字段被填充为'VESA' - ASCII字符串。

VbeVersion 的值是一个BCD值用于指定当前VBE的级别,高字节表示主版本,低字节表示minor version number(副版本号)(1.X/2.X)

注:

VBE 3.0 的BCD值是0300h ,VEB 1.2 的值是0102h 。这些BCD码曾被某应用程序所误解,例如:BCD 0102h 被认为是1.02 ,这是一个错误的理解。

OemStringPtr是一个VBE远指针,它指向一个以零为结尾的 OEM-defined字符串。该字符串一般用于识别图形控制器芯片或OEM 产品系列产品的特定驱动程序,它的格式不受任何限制。依据不同的实现方式,这个指针可能指向ROM或RAM。如果 'VBE2'(译注:一个字符串)被预置在VbeSignature字段中,则VBE3.0 BIOS可能将这个字符串(指 Oem String )放置在OemData区域。

这个OEMString的长度没有被规定,但基于容量的考虑,我们建议字符串长度最好不要超过256个字节。

Capabilities field 指示图形环境对特殊特性的支持情况

The bits are defined as follows:

D0 = 0 DAC is fixed width, with 6 bits per primary color

= 1 DAC width is switchable to 8 bits per primary color

D1 = 0 Controller is VGA compatible

= 1 Controller is not VGA compatible

D2 = 0 Normal RAMDAC operation

= 1 When programming large blocks of information to the RAMDAC,

use the blank bit in Function 09h.

D3 = 0 No hardware stereoscopic signaling support

= 1 Hardware stereoscopic signaling supported by controller

D4 = 0 Stereo signaling supported via external VESA stereo connector

= 1 Stereo signaling supported via VESA EVC connector

D5-31 = Reserved

primary color

[[名词委审定]英汉计算机名词(第二版, 2002)]

原色

BIOS 执行程序注释:

在完成一个模式设置后,DAC往往会被恢复成 6 bits per primary,并将其作为缺省值。如果DAC 被切换到8 bits per primary,则模式设置必须将DAC恢复到 6 bits per primary,如此,应用程序开发人员就无需自行恢复之。

D2 = 1 "program the RAMDAC using the blank bit in Function 09h" ,

它针对于老式RAMDAC ,因为如果在显示时间内编程 RAM 的值会出现“雪花干扰”。而新设备则不受这个限制了,而且很容易地在任何时间操作 RAM ,但是老式的RAMDAC只限于在垂直回扫周期内被编程,以便于不产生“雪花干扰”。

若当前硬件支持新的VESA stereoscopic synchronization signal(经由 VESA EVC 连接器或VESA stereo 连接器)则Bit D3将被置 1 。此位主要起信息指示的作用,以便应用程序可自动地使用 hardware signaling,否则只能采用software signaling。

如果VESA EVC 连接器可被利用,并且其上的stereoscopic synchronization 信号

也可被利用,则Bit D4 将被置1。相反,如果VESA stereo 连接器包含同步信息,它将被置零。若bit D3 为 0,它也为 0,并被程序员所忽略。如果系统中存在VESA EVC,则它被强制用于stereoscopic synchronization signal。

注释结束

VideoModePtr 也是一个远指针,它指向一个模式号列表,每个模式号占两个字节,该列表以0FFFFh 结尾。所列出的模式号代表能够被显示控制器所支持的模式。

注:

应用程序对测试每个模式的有效性负有责任。由于某些因素,某些“必然”被支持的模式无法正常工作,譬如:显存不足、监视器性能欠佳等。

如果一个VideoModeList 没有入口(从0FFFFh开始,长度为零),即可假设:

Function 00h只支持诊断或即插即用。

VBE3.0 protected mode entry point可能不对扩充的字符模式和标准VGA图形模式提供支持,任何试图设置这些模式的操作,将导致一个未知的效果。

TotalMemory 字段指示最大有效帧缓冲区长度(以64KB为单位)。

例如:256K=4,512KB=8 ,并非所有的视频模式都能寻址整个内存,参见ModeInfoBlock以获得不同模式下的可寻址内存数的详细信息。

OemSoftwareRev 字段也是一个BCD值,它指定OEM VBE软件的修正级别,高字节指定了主版本号,低字节指定副版本号,它用于识别OEM's VBE 软件版本。只有当'VBE2'出现在 VbeSignature 字段时,才会被填充。

OemVendorNamePtr 指向供应商名称(提供显示控制器的厂商),它可能被包含在VebInfoBlock或者VBE implementation中。

Function 01h - Return VBE Mode Information

Input: AX = 4F01h Return VBE mode information

CX = Mode number

ES:DI = Pointer to ModeInfoBlock structure

Output: AX = VBE Return Status

Note: All other registers are preserved.

该函数返回一个特定的 VBE显示模式(VBE Function 00h 所返回的),它填写Mode information block , ModeInfoBlock 表明了目标模式的技术细节。ModeInfoBlock结构体由软件提供,它的固定大小为 256 字节。

由Function 00h 返回的VideoModeList中所有所列的模式的详细信息都是可以获得的。如果目标模式无法使用,ModeAttributes 字段中的一个 Bit 将被置位,用于指示此模式是不被支持的(在当前配置中)。

The mode information block has the following structure:

ModeInfoBlock struc

; Mandatory information for all VBE revisions

;所有VBE版本必须支持的信息

ModeAttributes dw ? ; mode attributes

WinAAttributes db ? ; window A attributes

WinBAttributes db ? ; window B attributes

WinGranularity dw ? ; window granularity

WinSize dw ? ; window size

WinASegment dw ? ; window A start segment

WinBSegment dw ? ; window B start segment

WinFuncPtr dd ? ; real mode pointer to window function BytesPerScanLine dw ? ; bytes per scan line

; Mandatory information for VBE 1.2 and above

XResolution dw ? ; horizontal resolution in pixels or characters YResolution dw ? ; vertical resolution in pixels or characters XCharSize db ? ; character cell width in pixels

YCharSize db ? ; character cell height in pixels

NumberOfPlanes db ? ; number of memory planes

BitsPerPixel db ? ; bits per pixel

NumberOfBanks db ? ; number of banks

3、Pixels in graphics modes, characters in text modes.

MemoryModel db ? ; memory model type

BankSize db ? ; bank size in KB

NumberOfImagePages db ? ; number of images

Reserved db 1 ; reserved for page function

; Direct Color fields (required for direct/6 and YUV/7 memory models)

RedMaskSize db ? ; size of direct color red mask in bits RedFieldPosition db ? ; bit position of lsb of red mask

GreenMaskSize db ? ; size of direct color green mask in bits GreenFieldPosition db ? ; bit position of lsb of green mask

BlueMaskSize db ? ; size of direct color blue mask in bits BlueFieldPosition db ? ; bit position of lsb of blue mask

RsvdMaskSize db ? ; size of direct color reserved mask in bits RsvdFieldPosition db ? ; bit position of lsb of reserved mask DirectColorModeInfo db ? ; direct color mode attributes

; Mandatory information for VBE 2.0 and above

PhysBasePtr dd ? ; physical address for flat memory frame buffer Reserved dd 0 ; Reserved - always set to 0

Reserved dw 0 ; Reserved - always set to 0

; Mandatory information for VBE 3.0 and above

LinBytesPerScanLine dw ? ; bytes per scan line for linear modes BnkNumberOfImagePages db ? ; number of images for banked modes LinNumberOfImagePages db ? ; number of images for linear modes

LinRedMaskSize db ? ; size of direct color red mask (linear modes) LinRedFieldPosition db ? ; bit position of lsb of red mask (linear modes) LinGreenMaskSize db ? ; size of direct color green mask (linear modes) LinGreenFieldPosition db ? ; bit position of lsb of green mask (linear modes) LinBlueMaskSize db ? ; size of direct color blue mask (linear modes) LinBlueFieldPosition db ? ; bit position of lsb of blue mask (linear modes) LinRsvdMaskSize db ? ; size of direct color reserved mask (linear modes) LinRsvdFieldPosition db ? ; bit position of lsb of reserved mask (linear modes) MaxPixelClock dd ? ; Max pixel clock (in Hz) for graphics mode

Reserved db 189 dup (?) ; remainder of ModeInfoBlock

ModeInfoBlock ends

ModeAttributes(模式属性)字段描述了某些重要的图形模式特征

The ModeAttributes field is defined as follows:

D0 = Mode supported by hardware configuration

0 = Mode not supported in hardware

1 = Mode supported in hardware

D1 = 1 (Reserved)

D2 = TTY Output functions supported by BIOS

0 = TTY Output functions not supported by BIOS

1 = TTY Output functions supported by BIOS

D3 = Monochrome/color mode (see note below)

0 = Monochrome mode

1 = Color mode

D4 = Mode type

0 = Text mode

1 = Graphics mode

D5 = VGA compatible mode

0 = Yes

1 = No

D6 = VGA compatible windowed memory mode is available

0 = Yes

1 = No

D7 = Linear frame buffer mode is available

0 = No

1 = Yes

D8 = Double scan mode is available

0 = No

1 = Yes

D9 = Interlaced mode is available

0 = No

1 = Yes

D10 = Hardware triple buffering support

0 = No

1 = Yes

D11 = Hardware stereoscopic display support

0 = No

1 = Yes

D12 = Dual display start address support

0 = No

1 = Yes

D13-D15 = Reserved

Bit D0被复位指明该图形模式不被支持,可能的原因有:监视器不合要求、物理内存不足。

Bit D1被VBE 1.0和1.1所采用,用于指示可选的信息(在BytePerScanline字段

之后)。D1 不再被使用,而且应该被置1。Direct Color fields,当且仅当,MemoryModel字段被设置成6(Direct Color)或7(YUV)时有效。

Bit D2指示视频 BIOS是否支持诸如:TTY 输出、卷屏等等。对TTY(面向所有的扩充的字符模式/文本模式和图形模式)的支持是被推荐的,而不是必须的。如果D2被置1,则INT 10h BIOS必须支持下列所有的标准的输出功能。

All of the following TTY functions must be supported when this bit is set:

01 Set Cursor Size(设置光标大小)

02 Set Cursor Position(设置光标位置)

06 Scroll TTY window up or Blank Window

07 Scroll TTY window down or Blank Window

09 Write character and attribute at cursor position

(在光标位置写字符,并指定字符属性)

0A Write character only at cursor position

(在光标位置写字符,不修改字符属性)

0E Write character and advance cursor

(在当前位置写字符,光标随字符前进)

Bit D3被置1,指示彩色模式,被清零指示单色模式。

Bit D4被置1,指示图形模式,被清零指示文本模式。

CRTC = Cathode Ray Tube Controller,阴极射线管控制器

注:前文也讲过了,CTR控制器的端口

单色模式--3B4h

彩色模式--3D4h

Bit D5用于指示,模式使用的寄存器、I/O端口是否和标准VGA兼容。如果该位被置1,则该模式属于 NOT VGA compatible; 如果清零,则标准VGA I/O 端口和帧缓冲区地址(定义在WinASegment and/or WinBSegment)即可被采用。

Bit D6 用于指示该模式是否提供Windowing or Banking(将帧缓冲区弄到由WinASegment和W inBSegmet指定的frame buffer memory 区域)。如果置位,则Windowing 是不可能发生的。如果清零,则当前设备有能力将Frame Buffer 映射到由WinASegmet and/or WinBSegment指定的段(segment)。该位与bit D7联用。

Bit D7用于指示 Linear Frame Buffer memory model(线性帧缓冲区内存模型)的存在。如果该位被置位,则经由Flat Memory Model Bit set,显示控制器即可进入Flat Memory Model。

如下表所示:

D7 D6

Windowed frame buffer only 0 0

n/a 0 1

Both Windowed and Linear 1 0

Linear frame buffer only 1 1

Use D14 of the Mode Number to select the Linear Buffer on a mode set

(Function 02h).

BytesPerScanLine字段指定使用banked modes 时每条逻辑扫描线的长度(以字节为单位)

WinAAttributes和WinBAttributes描述CPU windowing 方案。

D0 = Relocatable window(s) supported

0 = Single non-relocatable window only

1 = Relocatable window(s) are supported

D1 = Window readable

0 = Window is not readable

1 = Window is readable

D2 = Window writeable

0 = Window is not writeable

1 = Window is writeable

D3-D7= Reserved

relocatable [朗文英汉综合电脑词典]

【修】浮动,可再[重]定位[REL]

如果windowing不被支持(bit D0 = 0 ,Windows A and Windows B),则应用程序即可假定:显示缓冲区的位置由WinASegment及或WinBSegment指定。

MemoryModel field

specifies the general type of memory organization used in this mode.

The following models have been defined:

00h = Text mode

01h = CGA graphics

02h = Hercules graphics

03h = Planar

04h = Packed pixel

05h = Non-chain 4, 256 color

06h = Direct Color

07h = YUV

08h-0Fh = Reserved, to be defined by VESA

10h-FFh = To be defined by OEM

注: VBE 1.1和之前的版本定义 Direct Color graphics modes(直接给定颜色值彩色图形模式,简称-直彩模式)时,它的像素格式为 5:6:5, 8:8:8,8:8:8:8--Packed Pixel(复合像素),分别指示:16、24、32 bits per pixel。VBE 1.2 及之后,直彩模式使用MaskSize、来描述像素的格式。BitsPerPixel往往用来定义一个像素值的大小(以位作单位)。

译注:MaskSize 指示某种“原色”(红、绿、蓝三种中的某一种)占颜色值(一个字或三个字节或双字)的位数,FieldPosition 指示该种颜色分量在颜色值中的最低有效位。

如:5:6:5 表明颜色值为一个字,红色分量占 5 位,红色分量的最低有效位为Bit D11。

DirectColorModeInfo field

Bit D0指定the color ramp of the DAC 是否是固定的或是可编程的。若color ramp是的固定的,则它将不能被修改。如果它可被编程,则可假定:红、绿、蓝lookup tables(索引表)可经由 VBE Function 09h 加载(进一步假定:所有 color ramp 数据均是 8位/原色)。Bit D1指定Rsvd field的所有位是否是可被程序使用,或是因为被保留而不可用。

D0 = Color ramp is fixed/programmable

0 = Color ramp is fixed

1 = Color ramp is programmable

D1 = Bits in Rsvd field are usable/reserved

0 = Bits in Rsvd field are reserved

1 = Bits in Rsvd field are usable by the application

相关主题