编程论坛
注册
登录
编程论坛
→
C图形专区
我也冒个泡吧:显卡与显示器的编程接口
kk4868
发布于 2008-01-23 23:43, 2500 次点击
好久没上了,看倒JIG都发表连载了,心里痒痒
这个是个比较接近硬件的问题,供有编程经验的人员参考吧。
网络不稳,分开发
9 回复
#2
kk4868
2008-01-23 23:54
通常显卡的编程接口比较出名,就是VBE,里面记载了该显卡的详细技术参数。通过调用int 10h中断,可以读出这些基本信息,其中重要的有:
该显卡支持的显示模式。(这里简写为模式a,代表所有的合法模式)
还有OEM信息等,可以读出来显摆一把
设置的花样就很多了,常用的有两个;
1,设置屏幕为制定的分辨率,色深,例如1024*768,16位色
2,在1的基础上,进行更详细的设置
#3
kk4868
2008-01-23 23:59
这里说的更详细设置,意思有两个:
一个是打开线性内存模式,这个在32位操作系统里几乎是100%要干的,好处不多说了,总之太好了;
另外一个是控制显示器,例如开始扫描位置,结束扫描位置,点时钟,垂直刷新频率等。哈哈两眼放光了吧,刷新率唉,你是不是早就想知道啊。。。
#4
kk4868
2008-01-24 00:09
既然是控制显示器,那么必定要跟显示器的编程接口打交道了,显示器的编程接口是EDID
这个也可以有标准文档查的。
基本上,了解EDID只有一个目的,就是把显示器的详细参数读出来。这个可以通过int 10h中断,0x 4f15读出,标准序列是128字节。这128字节足够我们好好的喝一壶了。
在这里面记录了显示器支持的所有模式,包括分辨率,色深,对应刷新频率等(记做模式b)
#5
kk4868
2008-01-24 00:17
所以要想深入的控制显示系统,就要把模式a和模式b对比一下,找到最合适的显示模式。
例如要调整刷新频率,就要根据分辨率,色深,对应刷新频率来计算点时钟(piexl clock)。
这一套东西有GTF标准算法,不是随便写个数值就可以的。
用生成的数值构造CRTC,然后调用int 10h设置屏幕模式,根据返回值就可以知道是否初始化成功了。
这里要注意的是,设置刷新频率,打开线性内存等,需要VBE3。0的支持。
#6
kk4868
2008-01-24 00:22
通常2000年以后出产的显卡,都支持VBE3。0,但是很多厂商做的不规范,基本都直接支持DX去了,我的readon 9550就报告是VBE2。0
845g芯片组更气人,基本上改SVGA都黒屏,而且由于驱动程序的关系,其显存页一般是16kb的。。。。
所以在测试相关程序时,还是准备好dosbox吧
#7
一笔苍穹
2008-01-24 08:38
大家加油哈,到时我给整理成一本册子出来,呵呵。
#8
jig
2008-01-24 08:45
顶~~!严重的顶,终于发出来了?哥哥,给点代码吧。
#9
侯伟峰
2008-01-27 15:47
怎么没有了,期待继续。
#10
kk4868
2008-01-27 19:02
具体的讨论早就有了:
https://bbs.bc-cn.net/thread-150119-2-5.html
相互补充吧
1