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

讲一下DOS下SVGA视频模式的设置问题,第1张

讲一下DOS下SVGA视频模式的设置问题,第2张

我们平时用的PC显示器,不管是CRT还是LCD,基本都采用VGA接口。在VGA接口中,有五条最重要的信号线,用来传输数据和同步信号。它们是三条模拟RGB信号线和两条行场同步信号线。

不同的显示器对行和场同步信号有不同的要求。如果主机提供的同步信号不能满足显示器的要求,显示器上可能会出现“超出显示范围”或“不支持的显示模式”等提示信息。

一般场同步(VSYNC)设置为60Hz,而行同步是根据点时钟(PCLK)和行内总像素数来计算的,行场中常用的有效像素数就是大家熟悉的显示分辨率。

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

但是,在PC的应用中,事情会变得更加复杂。不用说,Windows下是不会有这种需求的。就算有,人家微软也已经帮我们做好了,我们只需要简单调用就可以了。在DOS下,您可能会遇到SVGA视频模式设置不正确的问题。这种情况,其实在主机端,视频模式已经设置正确,视频信号已经输出,但是显示器不支持视频信号,导致出现问题。

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

回到前面的讨论,如何解决显示器无法正常工作的问题。没有办法,显示器不支持,只有主机端改变信号输出,也就是改变一种显示方式。其实这种显示是不正常的,多数情况下是因为行场同步信号不正确造成的。在某些VBE实现中,VSYNC可能设置得过高。当分辨率也很高时,指针时钟(PCLK)太高。许多监视器对PCLK频率有限制,过度采样会导致问题。所以要想正确支持高分辨率视频模式,降低VSYNC也就是降低刷新率是可以接受的,也就是通常所说的50左右,人眼不会感觉到闪烁。在VBE2.0中已经定义了视频模式刷新率的设置,所以完全可以在DOS下实现。这就可以解释为什么Windows下可以支持的视频模式在DOS程序中设置不了。关键是降低垂直同步。可以用示波器测量Windows下高分辨率视频模式下的VSYNC输出和DOS下VBE设置的高分辨率视频模式下的VSYNC输出。通过比较差异,一切就都清楚了。

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

因此,在VESA系统中,我们不能直接对SVGA显示控制器进行编程来修改输出的视频同步信号。我们能做的就是依靠VBE来实现我们想要的。在这一点上,任何PC的软件都是按照VBE实现的,即使是MS Windows也不例外。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 讲一下DOS下SVGA视频模式的设置问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情