微机彩色图形适配器原理 罗放 1995-01-06 了解显示卡的基本工作原理,将有助于我们改善应用程序的显示效果和用户界面。因为显示卡技术的发展有着显著的继承性,因此本文选取了PC机发展历程中的几种主流图形显示卡(CGA、EGA、VGA)为例介绍它们的工作原理(逻辑功能)。 一、CGA显示适配器的工作原理 CGA卡(Color Graphics Adapter,彩色图形适配器)是PC机最使用的彩色图形适配器,也是IBM-PC/AT机的标准显示配置。早期的许多图形软件和游戏软件都是在CGA图形模式下运行,第一代汉字操作系统CCDOS也是在CGA图形模式下开发的。随着硬件技术的飞速发展,各种功能越来越强大的新型显示卡不断出现,CGA卡已被淘汰,许多新出的图形软件和汉字系统也不再支持CGA显示方式。但不论这些显示卡如何先进,它们都兼容了CGA卡的各种显示模式,尤其是它们字符模式的工作原理(不是硬件电路)和标准参数大都与CGA卡基本相同,区别仅在于字符的点阵数多些,字形美观清晰些。有的模式可在一屏幕上显示更多(如132×60)的字符数,因此在本文中,对其它显示卡的介绍将只以图形模式为主。 CGA卡共支持七种显示模式,包括四种字符模式和三种图形模式,各模式主要参数如下所示。 模式号 分辨率 显示方式 色彩 0 40×25 字符 黑白 1 40×25 字符 16/8色 2 80×25 字符 黑白 3 80×25 字符 16/8色 4 320×200 图形 4色 5 320×200 图形 黑白 6 640×200 图形 黑白 上述字符模式和图形模式中的前两种称为中分辨率模式,其它为高分辨率模式。 图1是CGA卡在彩色字符显示模式3的原理示意图。主控器件是CRT控制器MC6845,它产生水平/垂直扫描同步信号,产生象点控制信号使图象成为更清晰的点阵,还对显示缓存区RAM进行连续不断的扫描以产生视频信号序列,并在屏幕指定们置插入指定形状的闪烁光标。显示RAM中存放着要显示的字符信息,每个字符占一个了(16bit),其中低字节存放该字符的ASCII代码,高字节存放属性代码,改性字节中各位的含义如下: 位 号 含 义 0 前景色中蓝色分量 1 前景色中绿色分量 2 前景色中红色分量 3 加亮标志 4 背景色中蓝色分量 5 背景色中绿色分量 6 背景色中红色分量 7 闪烁标志 三种分量混合后可得到以下的8种颜色:黑、深蓝、绿、青、红、品红、棕、白,加亮后还可得到另外8种颜色(仅前景色所有):深灰、淡绿、淡红、淡紫、黄和亮白色。这样CGA卡就能以16种前景色和8种背景色的任意一种组合显示一个字符。在模式3下全屏幕显示字符2000个,共需RAM容量约4K(称为一个显示页)。CGA卡RAM总容量16K,被分为4个(模式0、1下为8个)显示页,可指定其中任一页(初始化时为0页)为当前显示页并可随时切换,对当丧页的操作不会影响其它矾的内容。 CGA卡的字形数据存放在称为字形发生器的8KROM(型号为MK3600)中,每个字形占8字节,字节每一位对应字形的一个象素点(1表示亮点,0表示暗点),共组成8×8的组点阵(称为字符盒)。CGA的字符发生器中有两种字形,分别占据字符盒中7×7和5×7的区域,7×7点阵字母A的字符盒如图2所示,字形可用跳线选择。 在字符模式下,CGA卡显示RAM存储单元(以字为单位)的顺序与字符在屏幕上的位置一一对应。CPU将要显示的字符送到RAM的相应单元内,当CRT控制器扫描到RAM中的某一字符时,其ASCII代码字节的内容被送到代码寄存器作为字符发生器的0根高位地址线,水平扫描计数器的低3位线作为其3根低位地址线,在连续8行扫描中该字符字形的8个字节依次选中输出,由移位寄存器转换为串行数据作为颜色编码器的控制信号,属性代码字节内容则被送到属性寄存器作为颜色编码的输入,颜色编码器根据字形信号的1、0和闪烁标志分别选通前影色和背景色的色彩代码及亮度代码,在象点输出控制信号控制下将R、G、B、I信号(以及行场同步信号)输出到CGA数字式彩色显示器。 图形模式的工作原理稍有不同。在彩色图形显示模式4下,显示RAM的每个字节共代表屏幕上的4个象素点,每2位代表一点,一个象素包括黑色共可显示4种不同颜色,全屏幕共需16K容量的RAM,因此CGA的图形模式只有一个显示页。出于硬件需要,屏幕象点位置与RAM存储单元的顺序不是一一对应,而是按偶数和奇数行分成两个存储块。为了丰富图形的彩色效果,CGA卡设置了2组调色板结构(在计算机语汇中,调色板是指能在显示器上同时显示的集合),0号调色板下2位信息分别代表绿色和红色,组合得到的4种颜色是黑、绿、红、棕,1号调色板则注入了蓝色成分,使4种颜色变成了黑、青、品红和白,通过选择调色板,可使画面的色彩更接近真实。 CGA卡显示RAM的起始段地址为B800H,硬件占用了PC机I/O端口从3D0~3DFH的地址区域(其中部分保留),CPU通过这些端口读写MC6645的各个功能寄存器,从而完成扫描速率设置、显示模式控制、调色板选择、光标形状设置和状态读取等工作,但因BIOS中已经固化了上述工作的程序段并可以中断方式实现调用,使这些工作对大部分用户成为“透明”的而勿须了解其细节。 早期的CGA卡由61只集成电路组成,体积和耗电都十分可观,且由于设计的问题,当CPU访问显示RAM时可能干扰屏幕的显示效果(即著名的“雪花”现象)。后来开发的HGA卡(Hercules Graphics Adapter,即双频单色显示适配器,又称“大力神”卡)集成了包括64K显示RAM和字符发生器在内的CGA卡的全部功能和MDA卡(单色显示适配器)的全部功能,而整块板只用了6只集成电路,并且消除了原CGA卡的“雪花”干扰问题。 二、EGA显示适配器工作原理 EGA卡(Enhanced Graphics Adapter,增强型图形适配器)的工作原理与CGA卡有较大差别。它有64个6位的颜色寄存器,颜色寄存器从位5至位0各代表向显示器输出的r'、g'、b'和R、G、B颜色分量,其中r'、g'、b'可分别看成R、G、B三种颜色的加亮标志,三者叠加即相当于CGA的加亮信号。由于各种颜色可单独加亮,因此EGA的彩色效果比CGA有很大改观。EGA的颜色寄存器内容是因化的,数值由0~63,不同数值代表不同的颜色,共可产生64种颜色。它还有16个6位的颜色索引寄存器,索引寄存器中的数值用作颜色索引寄存器,索引寄存器中的数值用作颜色寄存器的指针,而索引寄存器的内容是可以改变的,同一个索引寄存器可以指向不同的颜色寄存器,不同的索引寄存器也可以指向相同的颜色寄存器,16个颜色索引寄存器的数值组合起来,形成屏幕能同时显示的16种颜色(也即调色板),但这些颜色可从64种颜色中任意选取。在初始化时,0~7号颜色索引寄存器中的数值为0~7,而8~15号索引寄存器中的数值则为56~63,以保持与CGA卡的16种颜色兼容。EGA卡屏幕图象的分辨率提高到640×350。 EGA卡支持17种显示模式,典型的图形模式是10H,其工作原理示意图如图3。它不是以显示RAM一字节中的4位为一个象点的16种颜色代码。而是采用所谓“位面”结构,将显示RAM分成大小相同的4个页面即位面(依分辨率不同位面大小也不同位面大小也不同),4个位面在地址上是重叠的。CPU访问显示RAM的某一个单元时,通对卡上图形控制器设置可实现同时读写其中一个或几个位面。4个位面各代表图象的一种彩色信息(包括亮度),每个位面中的一位数字代表屏幕上的一个象点,一个字节包含8个象点,4个位面同一地址字节中相同位置的1位数字组合起来,便可代表该象点的一部彩色信息。4位数字形成一个0~15之间的数值,作为指针指向16个颜色索引寄存器之一,再由该索引寄存器指向的颜色寄存器产生象点的真正色彩。 10H模式的显示RAM地址顺序与屏幕象点位置成对应关系,它有2个显示矾,可以根据需要切换显示画面,利用这点可以实现动画效果。另外因一屏图象实际所需字节为28000,小于位面容量,EGA卡还提供了一种“设置视频起始地址”的功能,可从位面任意地址起开辟一个28000字节的窗口作为屏幕图象的内存映象区,这一功能很有实用。当我们将一幅尺寸大于640×350的图形存入显示RAM时,屏幕上只能显示出其局部,假如此时利用上述功能改变窗口起点,所显示的图形局部也随之改变,就可以方便地实现“屏幕漫游”。 EGA卡显示RAM总容量为256K,采用分页技术映身到A0000~AFFFFH的地址区间。EGA卡的硬件比EGA卡复杂,功能寄存器占用的I/O端口也多些,其区域为3C0~3DFH。 与CGA显示器相以,EGA显示器也是采用数字式彩色信号,虽然图象的分辨率和色彩较前有较大的提高,但仍受到限制。该卡推出不长时间后,VGA卡就开发成功,因此EGA卡的用户面不大。 三、VGA显示适配器的工作原理 VGA卡(Video Graphics Array,视频图形阵列)原是IBM为PS/2机设计的标准显示设备,但因其性能优越被移值到PC系列机上,很快成为PC机应用最广泛的显示卡。 VGA卡兼容了EGA卡的全部功能,它与EGA卡的最大不同在于其颜色寄存器采用了RAM,其内容可以根据需要改变从而得到较前多得多的彩色。VGA卡共有256个18位的颜色寄存器(其中RBG各占6位),每个寄存器中RGB的分量都可以分别从0至63改变,当寄存器中仅某一分量有效(即数值大于0)时,代表不同饱和度(取决于数值大小)的该种纯净色,当两种以上分量有效时代表相应的混合色,而当RGB分量的数值相等时代表的就是全由黑白成分组成的灰度,灰度的浓淡则取决于数值的大小,由于每种分的数值在0~63之间,因此总的灰度等级为64,常用的还有16级灰度。原则上,16级灰度应按等差级数产生,但由于显示器的非线性和人类视觉系统的非线性需要引入一组校正因子,因此实际设置的灰度等级间隔反而是不均匀的。颜色寄存器中的数值通过三个6位DAC(数模转换器)变成三路64级高低不同的电压分别送到显示器的RGB信号输入端,就能得到总数为2的18次方(即262114,或256K)种不同的颜色,显然为了显示这么多种颜色,VGA显示器不能采用数字式而必须为模拟式的彩色显示器。 VGA卡支持20种显示模式,其中除模式13H外的其它模式的工作原理与EGA都基本相同,但也有一些差异。VGA卡的调色板也有16个颜色索引寄存器,但其数值为8位,可以指向256个颜色寄存器之一,也就是说VGA卡可在屏幕上同时显示256种(而不是64种)颜色中的16种,分辨率也扩大到640×480。典型的VGA显示模式是12H,其工作原理示意图见图4,从图中可以明显看出它和EGA卡的差别。从VGA卡开始,PC机的汉字操作系统才真正实现了25行显示方式(不包含提示行),达到了与西文操作系统的兼容,这也是在12H模式下实现的。 13H模式是VGA卡一种特殊的图形显示方式,图5是其工作原理示意图。该模式下的显示RAM不再被划分为位面形式,也不再使用颜色索引寄存器的调色板结构(可将256个颜色寄存器直接认作调色板),RAM中每个字节对应屏幕上一个象素点,存储地址按显示行顺序线性排列,字节的内容直接作为颜色寄存器指针,表示该象素点的色号,而真正的颜色则由该颜色寄存器中RGB三种分量的数值决定。13H模式可以同时显示256K色中的256种不同颜色,图象的分辨率为320×200,初始化时256个颜色寄存器的内容按以下方法设置: (1)前16个颜色寄存器装入与CGA卡的16种彩色对应的数值; (2)第二组16个颜色寄存器装入间隔值为2的灰度等级; (3)其它寄存器提供了不同饱和度的各种常用颜色。 通过修改颜色寄存器的内容可以修改屏幕的色彩集合,达到特殊的显示效果,基于VGA卡的图形软件和游戏大都是在13H模式下开发的,也大都对颜色寄存器内容作了修改。13H模式也支持视频起始地址设置功能,可以实现多页切换和屏幕漫游功能,但这些操作都必须通过编制专门程序实现。 VGA卡的显示RAM映射地址是A0000~BFFFFH区间的128K,已经超出了一个段的范围,因此需要实行分段操作,且因RAM总容量在256K以上,必要时还得进行分页操作。VGA卡操作比较复杂,系统BIOS中不可能包括,因此卡上专门配备了视频BIOS ROM,机器启动时由硬件装置将控制权转换到卡ROM中,置换原系统BIOS的视频中断向量,由卡上ROM中的程序段完成相应的显示操作(由于ROM的读写速度较慢,在内存容量足够的机器中常设置Video Shadow,将程序转到DRAM中运行以提高显示速度)。即便如此,VGA卡的有些操作也还没包括在ROM中,需要用户自行编写驱动程序,另外直至今天VGA卡的某些技术细节也还没有完全公开。以致可以说,一个基于VGA卡的图形软件的成功程序,将大部分取决于其对VGA卡潜在功能的开发程度。 VGA卡可插在8位或16位扩展槽中运行,有些卡还能自动识别插槽类型。VGA卡的功能寄存器占用了I/O端口区域3B0~3DFH,在寄存器级兼容MDA、CGA、EGA等各种模式,但不一定100%兼容,有些早期软件或专为Here卡设计的软件在VGA显示系统下就不能正常显示图形。四、新型显示适配器简介 在VGA卡之后又有越来越多的新型显示适配器问世,其图象显示技术的发展主要体现在三个方面:分辨率更高,色彩更丰富,显示速度和刷新速度更快。作为补充,本文选择其中几种产品对其性能简介如下: (一)Supper VGA(简称SVGA)显示适配器:是VGA卡的改进产品,也是当前市场的主流产品。其主要原理结构与VGA卡基本相同,但性能强得多,显示RAM容量更大(可达1MB以上),支持的显示模式更多(达数十至上百种),256色图形方式下的最高分辨率达1024×768。SVGA卡没有统一的标准,不同公司产品的程序接口不一定完全兼容,其中以Trident Microstsyems公司的产品(即TVGA卡)最为著名,典型型号是8900卡,而价格较廉的常见型号是9000系列卡。TVGA卡除卡上ROM固化的驱动程序外,还以随卡磁盘方式提供了对多种应用软件(如Windows、AutoCAD等)的支持程序,免除了用户开发之苦。该公司新近又推出了9200、9400等卡,可以在800×600的分辨率下显示64K色(或256级灰度)的图象,或以640×480的分辨率显示16M色(即所谓“真彩色”模式)的图象。还有ET-3000/4000等也是常见的SVGA卡,有些SVGA卡设计成EISA、VESA等32位总线接口,显示速度大大提高。 SVGA显示器有逐行扫描和隔行扫描两种方式,其中逐行扫描方式的图象无闪烁,显示效果更佳。在配接不同显示器时,SVGA卡应按说明书要求改变相应的跳线。 (二)QVision图殂显示适配器:是COMPAQ公司为其微机产品配备的高性能图形卡,可以与COMPAQ生产的各种彩色显示器或一般的VGA显示器连接。QVision卡型号有1024/E/I和1280/E/I,具备32位接口,可以插在16位ISA扩展槽或32位EISA/VESA扩展槽内,显示速度比VGA提高近10倍。1280卡的显示RAM容量2M,256色模式下图象分辨率达1280×1024,也可以在640×480分辨率下显示16M色图象,刷新速度率达72Hz。 (三)GW-GUI805图形显示适配器:是中国长城计算机集团公司为长城VESA系列微机开发的局部总线高速图形显示卡,采用32位VESA总线接口,硬件图形加速技术(即用硬件作图代替软件作图),速度比VGA/TVGA卡快3~6倍,可显示16M色图象,最高分辨率高达1280×1024。 (四)64位图形卡:这是在Pentium(奔腾)芯片诞生后推出的最新型显示卡,具有极高的显示性能,最早问世的64位图形卡是Matrox公司的MGA Impression。64位卡使用快速的双口VRAM代替价格较低但速度也较慢的DRAM作为显示缓存,RAM容量可达4M,支持1024×768分辨率16M色图象显示,效果可与真正的彩色摄影照片媲美。64位卡支持32位VL-Bus总线或PCI局部总线,在最高分辨率下刷新速率也达72Hz以上。 