讲一下DOS下SVGA视频模式的设置问题

来源:互联网 发布:股票板块分类软件 编辑:程序博客网 时间:2024/06/11 03:40

原帖及讨论:http://bbs.bc-cn.net/dispbbs.asp?boardid=225&id=150119

最近都在做视频相关的驱动,因此对某些问题的认识又更加深刻了一些。

通常我们使用的PC机显示器,不管是 CRT 还是液晶,基本上都是采用的 VGA 接口。VGA 接口中,有5根最重要的信号线,用于数据和同步信号的传送,他们分别是:3根模拟RGB信号线,和2根行场同步信号线。

不同的显示器,对行场同步信号的要求是不同的,如果主机所提供的同步信号达不到显示器的要求,就有可能在显示器上出现“超出显示范围”或者是“无法支持的显示模式”等提示信息。

一般情况下:场同步(VSYNC)都是设置为60Hz,行同步则是根据点时钟(PCLK)和行总像素点数来进行计算,而通常所说的行场有效像素点数就是我们所熟悉的显示分辨率了。

在嵌入式数码产品中,行场同步信号都可以由CPU内部的显示控制器产生,因此只需要修改相关的代码,设置好显示控制器内部的寄存器,就能够输出正常的行场同步信号。我正在调试的 MP2530 平台上的 VGA 视频信号输出就是已经OK了。

但是在PC机的应用中,事情会变得比较复杂一点,Windows下不用说了,不会有这样的需求,就算是有,人家微软都已经给我们做好了,我们只需要简单的进行调用。在DOS下,可能会遇到设置SVGA视频模式出错的问题。这样的情况下,其实在主机这边,其实已经正确的设置好了视频模式,并且输出了视频信号,但是由于显示器不支持该视频信号,所以导致出现问题。

DOS平台下,虽然说已经很开放,可以操作硬件设备,但是许多基本的操作,还是被封装了,这种封装就是 PC 机的 BIOS。BIOS 的采用有历史原因,一方面是为了提供基本的硬件访问功能,一方面是为了保证兼容性。BIOS在本质上也是一段程序,它封装了对硬件的操作,向上提供一个一致的调用接口,因此上层的程序员,就无需关心下面的硬件细节。简单的讲NVIDA的显卡和ATI的显卡,在硬件上是绝对不一样的,其内部的寄存器也是不一样的,但是通过 BIOS 这一层之后,在其上层的程序员眼中,他们似乎没有什么区别,因为所有的操作都是通过 VBE 进行了。

再回到前面讨论的问题,,如何解决显示器无法正常工作的问题。没有办法,显示器不支持,就只有主机这边改变信号的输出,也就是改变一个显示模式。其实这种显示不正常,多数情况下都是由于行场同步信号不正确所造成。有些 VBE 的实现中,可能将 VSYNC 设置的过高,当分辨率也很高时,导致点时钟(PCLK)过高,许多显示器对PCLK的频率是有限制的,过样就会导致问题。因此如果要正确支持高分辨的视频模式,最好是将 VSYNC 降低,也就是将人们通常所说的刷新率降低,一般降到50左右,都是可以接受的,人眼也不会感觉闪烁。而视频模式的刷新率的设置,在 VBE2.0 中就已经有定义,因此在 DOS 中完全可以实现。这样可以解释为什么 Windows 下可以支持的视频模式,DOS程序中却不能设置,关键是要把 VSYNC 降下来。大家可以用示波器测一下 Windows 下高分辨率视频模式输出的 VSYNC 和我们在 DOS 中使用 VBE 设置的高分辨率视频模式输出的 VSYNC,比较一下其区别,就一切都清楚了。

在早期的DOS时代,VGA的控制器也是可以编程的,所以会出现 Mode-X 等等类型的非标准 VGA 视频模式。目前的PC机BIOS都兼容VGA标准,因此也可以直接操作VGA的控制器。但是VGA的致命弱点在于它所能支持的显存太小,这也限制了其显示分辨率的进一步提升。VESA继承并发展了VGA,但是VESA的显示控制器,即 SVGA Display Controller,在硬件上没有一个标准,因此我们无法直接操作这些 SVGA 的控制器,就算是能操作,也无法保证其兼容性。VBE标准的提出的一个最近基本的目的也是为了解决兼容性和标准化的问题。

因此说,在VESA系统中,我们不可能采用直接对 SVGA Display Controller 进行编程来实现对输出的视频同步信号进行修改。唯一能做的,就是依靠VBE来实现我们想要实现的东西,在这一点上,任何PC的软件都是遵循VBE来实现的,即便是 MS Windows 也不例外。

以上是我的分析,供大家参考,也希望大家参与讨论。


                 RockCarry
                 2007-6-25

 

 

 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 注册支付宝的手机号成空号了怎么办 银行保本理财回执单丢了怎么办 电脑连不上网ip地址错误怎么办 邮箱填错了没收到面试通知怎么办 电信烽火网络机顶盒零配置中怎么办 专技天下学错科目了怎么办 注册公司行业大类选错了怎么办 私营企业开的车比领导好怎么办 有公司有商标无生产资质怎么办 天猫店铺使用商标被注销怎么办 入仓件快递员搞错入仓号怎么办 商标注册证盖了自己公司的章怎么办 普通机打发票作废票丢了怎么办 淘宝店铺被买家投诉工商介入怎么办 淘宝退货运单号填错了怎么办 微信没有绑手机号密码忘了怎么办 淘宝联盟账号和密码忘记了怎么办 社保用户名和密码都忘记了怎么办 江西银行网银用户名忘了怎么办 邮政银行网银登录密码忘了怎么办 建行网银支付密码忘了怎么办 建行手机网银登录密码忘了怎么办 特岗教师忘记用户名和密码怎么办 特岗教师用户名和密码忘了怎么办 电信登录用户名和密码忘记了怎么办 电脑登录用户名和密码忘了怎么办 电脑网络用户名忘了连不上网怎么办 微博忘记登录名怎么办只记得昵称 买房子付了首付现在要退房怎么办 玩lol延迟高怎么办但网速没问题 中维世纪监控密码忘记了怎么办 原店主营业执照不注销怎么办新的 苹果手机铃声调到最大还小怎么办 投标时措施费忘记套价了怎么办 美团商家更改手机号和银行卡怎么办 淘宝买的衣服颜色发错了怎么办 在淘宝买的衣服颜色不一样怎么办 新买的木柜气味好重怎么办 淘宝店铺动态评分一直很低怎么办? 刚生下来的宝宝睡觉不吃奶怎么办 宝宝吐奶咳嗽了可能被呛到怎么办