A000h 64K 1
B000h 变化 变化
B800h 变化 变化
A000h 变化 变化
对于所有显示适配卡而言,文本方式的有效页数就是每个屏幕位置乘上两个字节去
除总内存数的结果。再结合每行80个文本字符,那么就是2*80*25,等于4000字节,或
大约4K。如果使用每行40个文本字符(2*40*25),那么每个屏幕就占据2000个字节,
或大约2K空间。利用这些计算,能够很容易地看清为什么CGA能从16K的缓冲区空间
中获取8个显示页。
EGA和VGA卡的缓冲区大小会变化,是因为它们能在64K到1M的内存中占据任
83页
何位置。该RAM是屏幕图象的一个视频缓冲区,并且也拥有1024显示字符那么大的模
式(字形)。前面介绍的计算方法能帮助用户确定可用的显示页数。
表5.1显示出EGA、MCGA和,VGA都有两个不同的图形显示缓冲区起始地址。这
些适配卡,可以模拟CGA(段地址为B800h)和它们自己的起始段地址A000h。
CRTC芯片,独立于计算机系统的操作之外,对显示内存区域进行描述并以存储在那
里的信息为基础来更新视频显示。实际的屏幕显示由电子束来产生,该电子束能在对屏幕
的每一行进行扫描时,打开或关闭小的屏幕点(称作象素)。电子束从左到右,从上到下地
扫过整个屏幕。
要提供稳定的图像,屏幕就要以每秒60次的速度更新(即电子束对整个屏幕进行一
个完整的扫描)。在每行的结尾,电子束必须从屏幕的右端移到左端,这段时间称作水平回
扫间隔(HRI)。类似地,电子束完成一个周期后,它要从右下部移到左上部开始一个新的
周期。这段时间称作垂直回扫间隔。在HRI和VRI期间,电子束都被关闭,屏幕上看不到
任何东西。
直接将程序书写到显示内存中去的程序员应该警惕一些类型的显示适配卡的HRI
或VRI,因为适配卡利用显示内存的方式各不相同。在某些显示适配卡中使用的内存是特
殊的双重端口内存,计算机能在该内存中书写数值,同时CRTC可以阅读它们。因为这类
内存比“普通的”RAM要昂贵,所以其它的显示适配卡则可能忽略了这个细节。如果你的
计算机碰巧要安装视频内存地址到一个非双重端口适配卡中,且此时CRTC正在此位点
阅读该数值,那么你会看到一个称作“雪花”的显示屏幕扭曲出现。
当用户与优秀的IBM CGA或CGA电路的任何复制口一起工作时,这个问题特别重
要。这些类型的系统中“雪花”是如此糟糕,以至于用户用这样一个特殊的词来描述它:色
彩变味”(Chromablizzard)。要在这类系统中防止这个问题出现,应该只在HRI或VRI期
间存取屏幕内存。
在I/O端口3DAh查询CRTC状态寄存器可以知道HRI或CRI状态是否存在。0位
指示HRI是否存在;3位则反应有关VRI的同样的信息。当回扫间隔开始时,相应的位就
打开了,问隔时间要完成时,位也随之关闭。因为编程时,HRI出现得更多并且更容易探
测到,所以大多数直接的屏幕内存途径测试只用于HRI条件。当位一直打开时,用户有时
间将一个字符放进显示内存(假定标准的4.77MHz的系统速度)而没有产生屏幕中断。
要多次获得这种结果,则必须在查询时使所有的中断失效;否则,其他的活动就会偷走用
户正等待的间隔时间。
以上有关屏幕中断的指导在向屏幕内存书写内容和从屏幕内存阅读内容时都是有用
的(尽管为什么应该中断阅读并非那么显而易见,但经验却显示它确实是在许多CGA卡
上这么进行的)。
5.2.2视频显示格式
显示适配卡对视频数据的解释决定于显示方式,该方式控制了数据在屏幕上出现的
途径。表5.2给出了在各个不同的显示卡上所能使用的显示方式。
84页
表5.2视频方式
显示卡