XFree86 Video Timings HOWTO 中文版 作者: Eric S. Raymond 译者: 彭迅 v3.6, 13 June 1999 翻译完成日期: 1999年11月8日 _________________________________________________________________ 本文描述了怎样为你的显示卡/显示器组合编写XFree86下的模式行.XFree86的发 行版本现在包含了很好的工具,可以正确配置大多数标准的组合;本文主要用于为 你的高性能显示器或非常特殊的硬件手工调整模式行.它也可以帮助你 用kvideogen来生成模式行,或用xvidtune来修改不太适合你的显示器的某种标准 模式. _________________________________________________________________ 1. 否认声明 2. 简介 3. 自动计算工具 4. 显示器怎样工作 5. 关于你的显示器和显示卡需要了解的基本情况 * 5.1 显示器同步频率 * 5.2 显示器的频宽 * 5.3 显示卡的象素时钟 * 5.4 这些基本的统计数据控制什么 6. 对基本技术规格的解释 * 6.1 关于频宽 * 6.2 同步频率和刷新率: 7. 配置系统时的权衡 8. 存储器需求 9. 计算帧的大小 10. 巫术和同步脉冲 * 10.1 行同步 * 10.2 场同步 11. 汇总以上讨论 12. 过度驱动你的显示器 13. 使用隔行模式 14. 问与答 15. 解决画面问题. * 15.1 画面向左或向右移位 * 15.2 画面向上或向下移位 * 15.3 画面在水平和垂直方向都太大 * 15.4 画面在水平方向太宽(太窄) * 15.5 画面在垂直方向太深(太浅) 16. 绘制显示器特性 17. 致谢 _________________________________________________________________ 1. 否认声明 你使用在这里的材料,必须自行承担风险.当设置显示器超出厂商技术规格时,可能 会同时伤害你的显示器和你自己.阅读 [1]过度驱动你的显示器获取详细警告信 息.由于过度驱动显示器造成对你或你的显示器的损害是你的问题. 本文的最新版本可以在 [2]Linux文档计划网页找到. 请直接把评论,批评和改进建议发往 [3]esr@snark.thyrsus.com.请不要发来电子 邮件恳求获得一个神奇的能解决你的特殊显示器问题的方案,这样做只会耗尽我的 时间并令你失望 --- 关于这个主题我所知道的全都已经在这里了. 译注:若发现任何译文上的错误,请通知译者 [4]pxun@163.net.但译者对于因译文 或原文内容所造成的任何损失一概不负任何责任. 2. 简介 XFree86服务器允许用户配置他们的显示子系统,因而鼓励最优化地使用已有的硬 件.本指南意图帮助你学会怎样生成你自己的时序值以最优化地使用你的显示卡和 显示器. 我们将提出一种使系统运转的方法,然后向你展示怎样由基本设置开始逐步试验, 直到调出符合你口味的设置. 如果你已经有了一种基本可以工作的模式(特别地,如果某种预定义的VESA模式能 稳定地显示,但另一种模式画面向右或向左移位,或者画面太小或太大)你可以直接 阅读这一章 [5]解决画面问题.这会帮助你修改时序值以达到特殊的效果. 如果安装完后第一次进入X时显示混乱,不要假定你需要对所有的模式设置进行调 整;也许大部分模式行初始设置是正确的,只是碰巧默认值的某一项不适合你的硬 件.你应该按'CTRL'-'ALT'-'小键盘+'在所有已经安装的模式间循环切换.如果其 中一些模式看起来正常,尝试除640x480的一行外注释掉其他所有模式行,检查这种 模式是否工作.如果可以,那么去掉其他几种模式行的注释符,例如一行800x600和 一行1024x768,设定为一个你的显示器应该能处理的频率. 3. 自动计算工具 从XFree86 3.2开始,XFree86提供一个XF86Setup(1)程序,能很简单地交互式生成 一种可以工作的显示器模式,用不著直接对付麻烦的显示时序值.因而在大多数情 况下你不需要算出一种基本的显示器模式.不幸的是,XF86Setup(1)有一些限制;它 只能识别最高到1280x1024的标准显示模式.如果你有一台非常高性能的显示器,可 以支持1600x1200或更高,你仍不得不自行计算你的基本显示器模式. 有一个KDE的工具叫 [6]KVideoGen,能从基本的显示器和显示卡的统计数据表中计 算出模式行.我试验过用它生成模式行,但没有试验出有作用.注意它 的Horizontal Refresh Rate(水平刷新率)和Vertical Refresh Rate(垂直刷新 率)参数与我们下面描述的HSF(行频)和VSF(场频)含义是相同的.Horizontal Sync Pulse(行同步脉冲)值看来指以毫秒计算的一个同步脉冲的宽度,该工具假定 上升沿HGT1和下降沿HGT2的值固定.如果你不知道行同步脉冲的值,使用缺省值比 较安全. 最近版本的XFree86提供了一个工具叫xvidtune(1).你很可能发现在测试和调整显 示器模式时它相当有用.开始它会出现一段令人生畏的关于不正确使用可能导致结 果的警告.如果你仔细地研究本文并学习到藏在xvidtune对话框漂亮的数字后面的 东西,你将能有效地充满信心地使用xvidtune. 如果你有xvidtune(1),你就能快速地测试新的模式,不用修改你的X配置文件,甚至 不用重启动你的X服务器.另外,XFree86允许你在Xconfig定义的不同模式之间用热 键切换(查阅XFree.man获得详细资料).使用这种能力可以节省你的大量工作!当你 要测试一种新模式时,给它一个唯一的模式标记并把它增加到你的热键清单的结 尾.留下一种已知正常的模式作为默认值,当测试的模式不工作时可以退回去. 在接近本文结尾的地方,我们包含了一个'modeplot'脚本(script),你可以用来产 生各种可选模式的模拟曲线图.它不直接帮助你生成模式行,但它可以帮你更好地 理解你所定义内容之间的关系. 4. 显示器怎样工作 了解显示器怎样工作对于理解在Xconfig文件不同的域应填入什么值是不可缺少 的.那些值被XFree86服务器用于对显示器进行最底层控制. 显示器用一连串的象素点产生一幅画面.这些象素从左到右排列形成行.这些行从 上到下排列形成画面.当显示器内部发射的电子束打在这些象素点上就发出了光. 为了使电子束以相等的时间间隔打在每个点上,电子束以一种恒定的模式在屏幕上 从左到右扫描. 电子束扫描的起点在屏幕的左上角,在屏幕上沿直线向右,并临时停在屏幕的右 边.然后电子束返回屏幕的左边,但下移一行.新的一行象第一行一样从左到右扫 描.这种模式不断地重复直到显示器最下一行扫描完.这时电子束从显示器的左下 角移到右上角,该过程又再次开始. 这种模式有一个变种叫隔行扫描:在第一个半帧仅仅每两行中的一行被扫描,其余 的行在第二个半帧才被扫描. 电子束在显示器的左上角开始扫描是一帧的开始.当电子束从显示器的右下角再次 到达左上角时这一帧就结束了.一个帧是由电子束在显示器上从上到下扫描过的所 有的行构成的. 如果在扫描帧时电子束总是开启的,显示器上所有的象素都会被照亮.沿著屏幕的 边缘就不会有黑色边框.在屏幕的边缘画面就会变形,因为电子束很难控制那里.为 了减少变形,即使电子束指向沿著屏幕边缘的象素,它们也不会被电子束照亮.这 样,显示器的可视区域就减少了. 另一件要理解的重要事情是,当可视区域中没有象素被扫描时电子束发生了什么. 电子束照在显示器的左右边缘的时间用于把电子束从右边缘移回左边缘并移到下 一行.电子束照在显示器的上下边缘的时间用于把电子束从显示器的右下角移回左 上角. 显示卡产生信号,使显示器发出电子束打在每个象素上产生画面.通过产生一个信 号叫行同步脉冲,显示卡也控制什么时候显示器把电子束从右边移回左边并下移一 行.在每一行结束时出现一个行同步脉冲.显示卡还产生一个场同步脉冲通知显示 器把电子束移到屏幕左上角.在接近每一帧结束时产生一个场同步脉冲. 在行同步和场同步脉冲之前与之后,显示器都需要有一段短的时间以让电子束的位 置能稳定.如果电子束不能稳定,画面也将不稳定. 在下一章,我们将回来用定义,公式和范例讨论这些基本原理以帮助你使用它们. 5. 关于你的显示器和显示卡需要了解的基本情况 在修改一项Xconfig条目前,有一些基本情况你需要了解.它们是: * 显示器的行频和场频选项 * 显示器的频宽 * 显示卡的驱动时钟频率,或"象素时钟" 5.1 显示器同步频率 行频就是每秒显示器能水平扫描的行数;它是关于你的显示器的一个最重要的统计 数值.场频是每秒显示器能垂直扫描的帧数. 同步频率通常列在显示器手册的技术规格页中.场频值典型地以Hz(每秒周期数)标 定,行频以KHz(每秒千周数)标定. 通常场频的范围在50到150Hz之间,行频在31 到135KHz之间. 如果你有一台多频同步显示器,会给出一个频率范围.某些显示器,尤其是低档的, 有多个固定的频率.它们也能进行配置,但你的可选项会被显示器固定的技术规格 严格限制.为最佳的分辨率配对选择最高的频率.并且要小心 --- 试图对一台固定 频率显示器设置高于其设计技术规格的频率会很容易地损坏它. 本指南的早期版本在过度驱动多频同步显示器方面相当积极,驱使它们超过其名义 上的最高场频以获得更好的性能.从那以后我们指出了更多理由对这种做法进行告 诫;我们将在下面章节 [7]过度驱动你的显示器中论及. 5.2 显示器的频宽 显示器的频宽应该包括在手册的技术规格页中.如果没有,看看显示器的最高额定 分辨率.作为一个经验法则,这里指出怎样把它们转化为频宽的估计值(从而转化为 你可以使用的象素时钟的大致上限): 640x480 25 800x600 36 1024x768 65 1024x768隔行 45 1280x1024 110 1600x1200 185 顺便说一句,这张表格并不神秘;这些值只是在标准XFree86模式数据库中每种分辨 率的最低象素时钟而已(最后的一个例外,是我用插值法补上的).实际上你的显示 器频宽很可能高于它在最高分辨率下要求的最小值,所以不要担心去尝试一个高若 干MHz的象素时钟. 也请注意对约65MHz以下的象素时钟来说,频宽很少是一项有影响的因素.对于一 张SVGA显示卡和大多数高分辨率显示器而言,你怎么也不会达到你的显示器频宽的 限值.下列各项是例子: 型号 频宽 ---------- --------------- NEC 4D 75MHz Nano 907a 50MHz Nano 9080i 60MHz Mitsubishi HL6615 110MHz Mitsubishi Diamond Scan 100MHz IDEK MF-5117 65MHz IOCOMM Thinksync-17 CM-7126 136MHz HP D1188A 100MHz Philips SC-17AS 110MHz Swan SW617 85MHz Viewsonic 21PS 185MHz PanaSync/Pro P21 220MHz 甚至低档显示器通常在其额定分辨率也不会太受限于频宽.NEC Multisync II是一 个很好的例子 --- 按照它的技术规格它甚至不能显示800x600.它只能显 示800x560.对这样的低分辨率你不需要高的象素时钟或大的频宽;或许你可以作到 最好的是32MHz或36MHz,两者离该显示器的额定频宽30MHz仍不太远. 在这两个驱动频率下,你的屏幕画面也许没有它理应达到的那么清晰,但画面质量 显然可以接受.如果NEC Multisync II频宽能高于36MHz当然更好.但对普通任务象 文本编辑而言这不是很关键的,只要差别不要显著到造成严重画面变形即可(如果 这样你的眼睛会立刻告诉你的). 5.3 显示卡的象素时钟 你的显示卡手册的技术规格页通常会告诉你该卡的最大象素时钟(那是指每秒钟显 示卡能写到屏幕上的像素总个数). 如果你的手册没有这项信息,X服务器会为你查出.最近版本的X服务器全都支持 --probeonly 选项,可以显示出这项信息然后退出,用不著真正启动X或改变显示模 式. 如果你的X没有 --probeonly 选项也不要担心.即使X锁住了你的显示器,它仍会把 一行关于时钟和其它错误的信息显示在标准输出上.如果你把这条信息重定向到一 个文件,它会保存下来,即使你不得不重启动以回到控制台. 探查的结果或启动信息看上去应该类似以下例子之一: 如果你使用XFree86: (译注:以下为屏幕输出,----下为屏幕输出的翻译和说明) Xconfig: /usr/X11R6/lib/X11/Xconfig -------------------------- X配置文件所在路径 (**) stands for supplied, (--) stands for probed/default values -------- --------------------- (**)代表提供值 (--)代表检测值/缺省值 (**) Mouse: type: MouseMan, device: /dev/ttyS1, baudrate: 9600 -------- ---------- ---- 鼠标类型 鼠标设备文件名 与串口通讯速率 Warning: The directory "/usr/andrew/X11fonts" does not exist. Entry deleted from font path. (**) FontPath set to "/usr/lib/X11/fonts/misc/,/usr/lib/X11/fonts/75dpi/" -------------------------------------------------- 字体路径 (--) S3: card type: 386/486 localbus ---------------- 显示卡总线类型 (--) S3: chipset: 924 --- Chipset(芯片集) --- 这是确切的芯片型号;一种86C911之前的型号 (--) S3: chipset driver: s3_generic ---------- 芯片集驱动程序 (--) S3: videoram: 1024k ----- 显示卡上帧缓冲内存(俗称显存)的大小 (**) S3: clocks: 25.00 28.00 40.00 3.00 50.00 77.00 36.00 45.00 (**) S3: clocks: 0.00 0.00 79.00 31.00 94.00 65.00 75.00 71.00 ------------------------------------------------------ 以MHz计算的可用的驱动频率 (--) S3: Maximum allowed dot-clock: 110MHz ------ 频宽 (**) S3: Mode "1024x768": mode clock = 79.000, clock used = 79.000 ------ ------ 1024x768下模式时钟 (--) S3: Virtual resolution set to 1024x768 -------- 虚拟屏幕分辨率 (--) S3: Using a banksize of 64k, line width of 1024 (--) S3: Pixmap cache: (--) S3: Using 2 128-pixel 4 64-pixel and 8 32-pixel slots (--) S3: Using 8 pages of 768x255 for font caching 如果你使用SGCS或X/Inside X: WGA: 86C911 (mem: 1024k clocks: 25 28 40 3 50 77 36 45 0 0 79 31 94 65 75 71) --- ------ ----- -------------------------------------------- | | | 以MHz计算的可用驱动频率 | | +--显示卡上帧缓冲内存的大小 | +--芯片型号 +--X服务器类型 注意:在你的机器卸下负荷后(如果可能的话)才进行检测.因为X是一个应用程序, 它的时序循环会与磁盘活动冲突,造成上述的数值不准确.检测几次观察数值是否 稳定;如果不稳定,关掉一些进程直到数值稳定.你的鼠标守护进程,如果有的话,特 别可能让你失败(鼠标守护进程对Linux用户而言是gpm,对SVr4用户而言 是mousemgr). 为了避免时钟检测的不准确性,你应该写下时序值并把它们作为时钟属性值放到你 的Xconfig中 --- 这抑制了时钟循环,给予X一份可以尝试的时钟值的准确清单.使 用上面例子的数据: wga Clocks 25 28 40 3 50 77 36 45 0 0 79 31 94 65 75 71 在负荷高度变化的系统上,这也许可以帮你避免神秘的X启动失败.有可能X启动 时,由于系统负荷而获得错误的时序值,于是不能在其配置数据库中找到一项匹配 的象素时钟 --- 或找到错误的一项! 5.4 这些基本的统计数据控制什么 你的显示器的同步频率范围,与你的显示卡的象素时钟一起,决定了你能用的极限 分辨率.但由驱动程序决定对你的硬件的潜力利用到什么程度.一套出众的硬件组 合却没有同样能令人满意的设备驱动程序是对金钱的一种浪费.另一方面,有一个 万能的驱动程序但硬件能力相对较弱的话,你就能尽可能地挖掘硬件的潜力.这 是XFree86的设计主导思想. 你应该把你用的象素时钟与显示器的频宽相匹配.然而,这是有很大弹性的 --- 一 些显示器能超出频宽标称值30%运行.这里的风险在于超出显示器的额定场频;我们 会在下面详细讨论它们. 了解频宽使你能在各种可能的配置中作出更明智的选择.它会影响显示器的画面质 量(尤其是微小细节的清晰度). 6. 对基本技术规格的解释 这一章解释上述技术规格的含义,和其它一些你需要了解的东西.首先是一些定 义.跟著括弧中的是我们作计算时指代它的变量名. 行频(HSF) 每秒水平扫描次数(见上述). 场频(VSF) 每秒垂直扫描次数(见上述).重要性主要在于是你的刷新率的上限. 象素时钟(DCF) 更正式的表述,'驱动时钟频率';显示卡的晶振或压控振荡器的频率 --- 每秒它能发出的最大象素数. 频宽(VB) 你能馈入到显示器视频输入且显示内容仍可辨别时的最高频率.如果你的 显示卡产生交替亮灭的画面,它的最低频率是DCF的一半,所以理论上频宽 从 DCF/2 开始才有意义.然而,为了在显示器画面中微小细节有可以接受 的清晰的显示,你不能让它低于你最高的象素时钟太多,高于就更合适. 帧长(HFL,VFL) 水平帧长(HFL)是显示器电子枪扫描包括不可见的左右边界在内的水平一 行需要的象素数.垂直帧长(VFL)是包括不可见的上下边界在内的整个画面 的扫描行数. 屏幕刷新率(RR) 每秒你的屏幕重画的次数(这也叫"帧率").频率越高越好,因为可以减少闪 烁.60Hz就可以了,VESA标准的72Hz就更好. 这样算出它的值 RR = DCF / (HFL * VFL) 注意分母中的乘积与显示器的可视分辨率不一样,而是一般稍微大点.我们 将在下面接触到细节. 通常隔行模式指出的频率(象87Hz隔行)实际上是半帧率:对典型的显示器 整个屏幕看上去大概有那样的闪烁频率,但每一单行只有一半的次数刷新 过. 为了计算的方便我们把隔行扫描以它全帧率(刷新率)计算,也就 是43.5Hz.隔行模式的画面质量要好于相同全帧率的逐行模式,但明显差于 全帧率为其半帧率的逐行模式. 6.1 关于频宽 显示器制造商喜欢以高频宽作宣传因为频宽限制了屏幕的清晰度和可以改变的颜 色.高频宽意味著可以看到更小的细节. 显示器用电子信号在你眼前呈现出画面.这些信号一旦由数字形式转变为模拟形 式,总是以波形形式输入显示器.它们可以看成由很多简单波形组合而成,每一个简 单波形都有一个固定频率,很多是在MHz范围,例如,20MHz,40MHz,或甚至70MHz.显 示器的频宽实际上是指它能不失真地显示的频率最高的模拟信号. 为了我们的目的,频宽主要作为一个你能使用的最高象素时钟的近似截止点. 6.2 同步频率和刷新率: 显示器上的每一水平扫描行只是扫描一帧长度的可视部分.在任何时刻屏幕上实际 只有一个象素在亮,但在足够快的刷新率下你眼睛的影像余辉使你能"看"到整个画 面. 下面是一些帮助你理解的示意图: _______________________ | | 行频是每秒显 |->->->->->->->->->->-> | 示器的电子束 | )| 能如图描绘一 |<-----<-----<-----<--- | 遍的次数 | | | | | | | | |_______________________| _______________________ | ^ | 场频是每秒 | ^ | | 显示器的电 | | v | 子束能如图 | ^ | | 描绘一遍的 | | | | 次数 | ^ | | | | v | | ^ | | |_______|_v_____________| 记住实际的光栅扫描是走靠得很紧的Z字形的;换言之,电子束从左到右同时从上到 下移动. 现在你可以知道象素时钟和帧大小与刷新率的关系了.根据定义,一赫兹(Hz)指每 秒一个周期.因此,如果你的水平帧长是HFL而垂直帧长是VFL,那么覆盖整个屏幕要 有 (HFL * VFL) 个象素.因为根据定义你的显示卡每秒发出DCF个象素,所以很显 然你的显示器的电子枪从左到右并从上到下往复扫过屏幕每秒 DCF /(HFL * VFL) 次.这就是你的屏幕刷新率,因为它就是指每秒你的屏幕能被更新(从而刷 新)的次数! 你必须理解这个概念,才能按适合你需要的某种方式更改分辨率设置防止闪烁. 对那些理解图象优于理解文字的人,这里有一幅图: RR VB | min HSF max HSF | | | R1 R2 | | max VSF -+----|------------/----------/---|------+----- max VSF | |:::::::::::/::::::::::/:::::\ | | \::::::::::/::::::::::/:::::::\ | | |::::::::/::::::::::/:::::::::| | | |:::::::/::::::::::/::::::::::\ | | \::::::/::::::::::/::::::::::::\ | | \::::/::::::::::/::::::::::::::| | | |::/::::::::::/:::::::::::::::| | | \/::::::::::/:::::::::::::::::\| | /\:::::::::/:::::::::::::::::::| | / \:::::::/::::::::::::::::::::|\ | / |:::::/:::::::::::::::::::::| | | / \::::/::::::::::::::::::::::| \ min VSF -+----/-------\--/-----------------------|--\--- min VSF | / \/ | \ +--/----------/\------------------------+----\- DCF R1 R2 \ | \ min HSF | max HSF VB 这是一幅普通的显示器模式图.图上x轴显示象素时钟(DCF),y轴代表刷新率(RR). 图上的填充区域描绘出了显示器的特性:区域内的每一点都是一种可能的显示模 式. 标记为'R1'和'R2'的直线代表一个固定的分辨率(例如640x480);它们画出了怎样 通过象素时钟和刷新率的很多不同组合来实现一个分辨率.R2线比R1代表了更高的 分辨率. 允许区域的上下边界是代表场频限值的水平线.频宽是象素时钟的上限,因此由一 条在右边限制了特性区域的垂直线代表. 在 [8]绘制显示器特性)你能找到一个程序帮你为自己的显示器描绘与此类似的 图(但有X图形界面,更好看).那一章还讨论了有趣的部分;由行频的限制而造成的 边界的引出. 7. 配置系统时的权衡 用另外的方式看看我们在上文得出的公式 DCF = RR * HFL * VFL 换言之,你的象素时钟是固定的.你能根据这个象素时钟更改刷新率,水平分辨率或 垂直分辨率.如果三项中的一项增大了,其它的一项或两项必须减少. 注意,你的刷新率不能大于显示器的最大场频.因而,对于任何在一个特定象素时钟 的特定显示器,有一个你不能强制低于的最小的帧长乘积. 在选择你的设置时,记住:如果你把RR设置得太低,你的屏幕就会闪烁. 大概你不会把刷新率设为低于60Hz.这是荧光的闪烁频率;如果你对此比较敏感,就 要调高到VESA人机工程学标准规定的72Hz. 闪烁会使眼睛很疲劳,即使人类眼睛有适应性而且各人对它的忍耐力有很大的差 异.如果你以90%视角面对著显示器,使用黑色背景和很好对比度颜色的前景,低等 到中等亮度,至少在45Hz你*才*会觉得舒适. 进行下面的严格测试:用xterm -bg white -fg black打开一个纯白背景和黑色前 景的xterm,使它扩大到覆盖整个可视区域.现在把显示器的亮度调到最大值 的3/4,脸从显示器转开.试著从一旁窥视显示器(使对外围画面单元更敏感).如果 你没有感到任何闪烁或闪烁程度是可容忍的,那么这个刷新率对你是适宜的.否则 你最好设置一个更高的刷新率,因为这种半可视的闪烁会迅速使你眼睛疲劳并让你 觉得头疼,即使屏幕在常规视角看上去是正常的. 对隔行模式而言,闪烁的情况依赖于更多的因素,例如当前的垂直分辨率和实际屏 幕内容.所以直接试验一下吧.可是你不会希望低于约85Hz半帧率的. 所以让我们认为你已经选了一个可接受的最低刷新率.在选择HFL和VFL时,你将有 一些机动的空间. 8. 存储器需求 可用的帧缓冲内存会限制你在彩色或灰度级显示器上能达到的分辨率.在只有黑白 两色而其间没有灰度深浅变化的显示器上它大概没有什么影响. 对256色显示而言,每个可视的象素需要一字节显示内存.这个字节包含了决定象素 怎样由红绿蓝组合生成的信息.要知道需要的显存数量,用每行可视象素数乘以可 视行数.对显示分辨率1024x768而言, 1024 * 768 = 786,432就是显示器的可视象 素数.在每象素一字节的情况下,这也是你的显示卡需要的显示内存字节数. 因此,你的显示内存需求一般就是 (HR * VR) / 1024 K字节并向上舍入(在这个例 子中精确值是768K).如果你的显存多于实际需求,就有额外的显存用于虚拟屏幕滚 动. 然而,如果你的显示卡上只有512K,那么就不能使用该分辨率.即使你有好的显示 器,没有足够的显示内存,还是不能发挥显示器的潜力.另一方面,如果你的SVGA显 示卡有1兆显存,但你的显示器至多能显示800x600,那么无论如何你也达不到高分 辨率(查阅 [9]使用隔行模式找一个可能的补救方法). 如果你的显存多于需求请不要担心;XFree86会通过允许你滚动屏幕可见区来利用 这些显存(查阅Xconfig文档关于虚拟屏幕大小的参数部分).也请记住一块512K显 存的显示卡实际安装的显存不是512,000字节,而是 512 * 1024 = 524,288 字 节. 如果你正在用一块S3显示卡运行X/Inside,并且乐意忍受16色(每象素4位),可以 在Xconfig中设置色彩深度为4,有效地把显示卡能处理的分辨率加倍.例如,正常能 运行1024x768x256的S3显示卡,你能使其运行在4位颜色深度的1280x1024x16下. 9. 计算帧的大小 警告:这种方法是为多频同步显示器研究出来的.它或许也能在固定频率显示器工 作,但没有保证. 开始时通过DCF除以你的可用最高的HSF来得到一个水平帧长. 例如;假设你有一块Sigma Legend SVGA卡,象素时钟是65MHz,你的显示器行频 是55KHz.那么(DCF / HSF)得到的数字是1181(65MHz = 65000KHz ; 65000 / 55 = 1181). 现在是我们巫术的第一步.你要把这个数字舍入为最接近的8的倍数.对于SVGA 和S3显示卡使用的VGA硬件控制器这步必须进行;它使用一个8位寄存器,再左移3 位,因此实际是一个11位数字.其它类型显示卡例如ATI 8514/A也许没有这个要 求,但我们不知道,而且这个修正不会有危害.所以把合用的水平帧长值向下舍入 为1176. 这个数字(DCF / HSF 舍入为8的倍数)是你可用的最小HFL.通过设置同步脉冲产生 更低的HSF你能获得更长的HFL(从而,屏幕上可有更多的水平象素).但代价是更低 的刷新率和更易觉察的闪烁. 作为一个经验法则,水平帧长的80%可用于水平扫描线的可视部分 --- 水平分辨 率(概略而言这允许了边缘和后掠时间 --- 这是电子束从屏幕的右边缘移到下条 光栅线的左边缘需要的时间).在这个例子里水平分辨率是944. 现在,要获得4:3的正常屏幕高宽比,把你的垂直分辨率设为你刚才算出的水平分辨 率的3/4.对这个例子而言是708.要算出你实际的VFL,把它乘以1.05得到743. 4:3不是技术上的规定;如果一个不同的比率能最好地利用你的屏幕实际尺寸的 话,你完全可以使用.但4:3真的使从对角线长度算出帧高和帧宽变得很方便,你只 要用对角线乘以0.8得到宽,乘以0.6得到高. 所以, HFL = 1176 而 VFL = 743 .用65MHz除以两者的乘积给了我们一个不错 的,健康的74.4Hz刷新率.好极了!优于VESA标准!启动X时你得到944x708,多于预期 的800x600.完全不赖! 你甚至能更进一步地改进刷新率,几乎达到76Hz,因为显示器常常以高于额定大 约2KHz的频率进行行同步而且稍微降低VFL(换言之,在上例中垂直分辨率小于944 的75%).但在尝试这种"过度驱动"的机动之前,如果你真的要进行,确认显示器电子 枪场频能达到76Hz.(例如,流行的NEC 4D不行.它的VSF只能达到75Hz).(查阅 [10]过度驱动你的显示器获得这个问题更全面的讨论.) 迄今为止,上述内容大部分是简单的算术和关于光栅显示器的基本事实.几乎完全 没有任何巫术! 10. 巫术和同步脉冲 好,现在你已为你选的象素时钟算出了 HFL / VFL ,找出了可接受的刷新率,检查 了你有足够的显示内存.现在是真正的巫术 --- 你要知道什么时候在哪里放置同 步脉冲. 同步脉冲实际上控制了显示器的行频和场频.你从技术规格表里查出的HSF和VSF是 名义上的,近似的同步频率最大值.来自显示卡的同步脉冲信号告诉显示器实际以 多快频率运行. 回忆起上面的两幅图吗?光栅扫描一帧需要的时间只有部分用于显示可视画面(即 你的分辨率). 10.1 行同步 通过之前的定义,水平扫描一行有HFL个象素.让我们把可视象素数目(屏幕水平分 辨率)称为HR.因此根据定义显然 HR < HFL .具体地,让我们假设两者同时开始,如 下所示: |___ __ __ __ __ __ __ __ __ __ __ __ __ |_ _ _ _ _ _ _ _ _ _ _ _ | |_______________________|_______________|_____ 0 ^ ^ 单位:象素数 | ^ ^ | HR | | HFL | |<----->| | |<->| HSP |<->| HGT1 HGT2 现在,如上所示我们想要在长度HSP的位置放置一个同步脉冲,也就是在可视区域象 素点末端和整个帧象素点末端之间的位置.为什么这样?因为如果我们能完成这个 的话,那么你的屏幕画面就不会偏移向左或右.它将会在屏幕上应在的地方,方形地 覆盖显示器的可视区域. 此外,在同步脉冲的每一边我们都要约30个象素作为"防护时间".这由HGT1和HGT2 表示.在一个典型的配置中HGT1不等于HGT2,但如果你正在从零建立一个配置,就要 从两者相等开始你的试验(换言之,从同步脉冲居中开始试验). 同步脉冲放置错误的症状是图像在屏幕上偏移,一条边过分地宽,另一边图像在屏 幕边缘回绕过来,产生一条白色边线和一条"幽灵图像"带.一个位置不适当的场同 步脉冲由于会使画面象错误调整了场同步控制的电视机一样滚动(实际上,运转时 有相同的现象). 幸运的话,你的显示器同步脉冲宽度会在技术规格文档中.如果没有,真正的巫术开 始了... 在这一部分,你将不得不反复试验.但大多数时候,我们可以安全地假定一个同步脉 冲长度大约是3.5到4.0微秒. 具体起见,我们认为HSP是3.8微秒(顺便说一句,这是一个不错的试验起始值). 现在,用上述的65MHz时序值,我们知道HSP等于247个象素(= 65 * 10**6 * 3.8 * 10^-6) [记得 M=10^6, micro=10^-6] 一些人喜欢引用他们的水平帧参数而不是象素宽度作为时序.你也许会看见下列术 语: 活跃时间(HAT) 相当于HR,但以毫秒为单位. HAT * DCF = HR . 消隐时间(HBT) 相当于(HFL - HR),但以毫秒为单位. HBT * DCF = (HFL - HR) . 上升沿(HFP) 这就是HGT1. 同步时间 这就是HSP. 下降沿(HBP) 这就是HGT2. 10.2 场同步 回到上图,我们怎样能如图所示放置这247个象素呢? 用我们的例子,HR是944而HFL是1176.两者之差是 1176 - 944 = 232 < 247 !显然 我们不得不在这做些调整.我们怎么做呢? 首先把1176提高到1184,把944降低到936.现在差是 1184 - 936 = 248 .嗯,接近 些了. 下一步,我们不用3.8而用3.5计算HSP;那么,我们得出 65 * 3.5 = 227 .看起来更 好了.但248不比227高多少.通常在HR和SP的开始点之间要有约30个象素,SP的结束 点和HFL之间也一样.而且它们必须是8的倍数!我们被卡住了吗? 不.让我们这么做, 936 % 8 = 0 ,而 (936 + 32) % 8 = 0 .但 936 + 32 = 968 , 968 + 227 = 1195 , 1195 + 32 = 1227 .嗯..这看起来还不算太坏.但它不 是8的倍数,所以让我们把它向上舍入为1232. 但现在我们有潜在的麻烦了,同步脉冲不再位于h和H的正中.幸亏用计算器我们发 现 1232 - 32 = 1200 也是8的倍数,而且 (1232 - 32) - 968 = 232 ,相应于使 用3.57微秒长的同步脉冲,仍然合理. 另外, 936 / 1232 0.76或76%,仍然离80%不远,因此应该没问题. 此外,使用当前的水平帧长,我们要求显示器同步于52.7KHz(= 65MHz / 1232),在 其承受范围之内.没问题. 用前面提过的经验法则, 936 * 75% = 702 ,这是我们新的垂直分辨率. 702 * 1.05 = 737 ,我们新的垂直帧长. 屏幕刷新率= 65MHz / (737 * 1232) = 71.6Hz .依然很好. 类似地画出场同步脉冲布局: |___ __ __ __ __ __ __ __ __ __ __ __ __ |_ _ _ _ _ _ _ _ _ _ _ _ | |_______________________|_______________|_____ 0 VR VFL 单位:象素数 ^ ^ ^ | | | |<->|<----->| VGT VSP 我们在垂直可视区象素刚结束时开始同步脉冲.VGT是同步脉冲的垂直防护时间.大 部分显示器VGT为0(没有防护时间)时都没问题.我们在这个例子里就那样设定.少 数需要两或三个象素点的防护时间,加上这个通常没有害处. 回到本例:根据帧长的定义,一个垂直象素时钟是跟踪完整的一个水平帧的时间,因 此在我们的例子里,它是 1232 / 65MHz = 18.95us . 经验告诉我们一个场同步脉冲应该在50us和300us范围之间.让我们用150us做一个 例子,并换算成8个垂直象素时钟(150us / 18.95us 8). 一些人喜欢引用他们的垂直帧参数而不是象素宽度作为时序.你也许会看见下列术 语: 活跃时间(VAT) 相当于VR,但以微秒为单位. VAT * VSF = VR . 消隐时间(VBT) 相当于 (VFL - VR) ,但以微秒为单位. VBT * VSF = (VFL - VR) . 上升沿(VFP) 这就是VGT. 同步时间 这就是VSP. 下降沿(VBP) 这是在场同步脉冲后的又一个防护时间.它通常是零. 11. 汇总以上讨论 Xconfig文件的视频模式表包含多行数字,每一行都是与X服务器的某一种模式对应 的一份完整的技术规格.各个域归类为四段,名称段,时钟频率段,水平段和垂直 段. 名称段包含一个域,是该行其余内容要说明的显示模式的名称.该名称在Xconfig文 件图形驱动程序设置段的"Modes"行中被引用.如果前面一行的名称与当前行一 样,名称域可以忽略. 象素时钟段仅包含显示模式行的象素时钟(我们之前称作DCF)域.该域中的数字指 出用于产生随后的域中各数字的象素时钟值. 水平段由四个域组成,指出显示器上每一水平行如何生成.本段的第一个域包含每 行被照亮形成画面的象素数(我们前面叫作HR).本段的第二个域(SH1)指出行同步 脉冲在哪个象素开始.第三个域(SH2)指出行同步脉冲在哪个象素结束.第四个域指 出水平帧总长(HFL). 垂直段也包含四个域.第一个域包含在显示器上看到的可视行数(VR).第二个 域(SV1)指出场同步脉冲在哪行开始.第三个域(SV2)指出场同步脉冲在哪行结束. 第四个域包含垂直帧总长(VFL). 例子: #模式名称 时钟 水平时序 垂直时序 "752x564" 40 752 784 944 1088 564 567 569 611 44.5 752 792 976 1240 564 567 570 600 (注意:以前的X11R5不支持带小数的象素时钟值.) 对Xconfig而言,刚提及的所有数字 --- 行中发亮的象素数,把发亮象素与同步脉 冲的起始处分隔开的象素数,代表脉冲持续时间的象素数,和在同步脉冲结束处之 后的象素数 --- 加起来生成每行的象素数.水平象素数必须能被8整除. 水平值示例: 800 864 1024 1088 示例行中首先是发亮象素数(800),跟著是同步脉冲起始象素位置(864),跟著是同 步脉冲结束象素位置(1024),跟著是水平行最后一个象素位置(1088). 再次提醒注意,所有水平值(800,864,1024,和1088)要能被8整除!垂直值不需要这 样. 显示器从上到下的行数构成了帧.行是一帧的基本时序信号.许多行组成了画面.在 发亮的最后一行显示了之后和场同步脉冲产生之前,有若干行的延迟.然后同步脉 冲会持续若干行,最后本帧的末尾几行将被生成,以作为脉冲之后必须的延迟.特定 显示模式运行时要指定的数字值会以一种与下述例子类似的方式被输入. 垂直值示例: 600 603 609 630 该例子指出在显示器上有600可视行,场同步脉冲开始于第603行,结束于第609行, 以及总计有630行. 注意垂直数字值不需要能被8整除! 让我们回到原先讨论的例子.综上所述,从现在开始我们要做的就是把我们的结果 按下面格式写到Xconfig中: <名称> DCF HR SH1 SH2 HFL VR SV1 SV2 VFL 其中SH1是行同步脉冲的开始点而SH2是结束点;同样地,SV1是场同步脉冲的开始点 而SV2是结束点. 要输入这些值,回忆一下上面关于巫术和同步脉冲的讨论.SH1是行同步脉冲上升沿 的开始点;因此, SH1 = HR + HGT1 .SH2是下降沿的结束点;因此, SH2 = SH1 + HSP .同样地, SV1 = VR + VGT (只是VGT通常为0)而 SV2 = SV1 + VSP . # 名称 时钟 水平时序 垂直时序 标志 936x702 65 936 968 1200 1232 702 702 710 737 不需要特殊标志;因为这是一种逐行模式.现在我们真正地做完了. 12. 过度驱动你的显示器 如果显示器是固定频率的,你绝对不应试图超越其扫描频率.那样做的话你会损害 你的硬件.你也应知道过度驱动一台多频同步显示器可能会有潜在的不易觉察的问 题. 相反地,象素时钟高于显示器的最大频宽是一般无害的.(注意:当象素时钟达到两 倍于显示器的频宽时,也就达到了可辨别的理论极限.这是奈奎斯特定 律[Nyquist's Theorem]的一个直接应用:把象素看作驱动信号在空间分布的采样 序列你就会明白为什么.) 超过了额定最大同步频率时会有问题.某些新型显示器也许有保护电路,发出危险 的扫描频率时关闭显示器,但不要依赖它.尤其是一些旧的多频同步显示器( 象Multisync II),只使用一个水平变压器.这类显示器对过度驱动没有作太多的保 护.在你必须有高压调节电路(在固定频率显示器中可以没有)的同时,它不会覆盖 每个可能的频率范围,尤其是在便宜的型号中.这不仅意味著电路中有更多损耗,它 也会使屏幕荧光粉更快老化,和使显示器发射出高于额定值的辐射(包括X射线). 频宽另一个重要性在于显示器的输入阻抗只为该范围的频宽而指定,使用更高的频 率会造成影响,或许会引起对屏幕局部画面的干扰和对无线电通信的干扰. 然而,这里最成问题的是显示输出驱动器的转换速率(视频信号的陡峭度),它通常 独立于实际的象素频率,但与显示卡的最大象素频率相关(如果你的显示卡厂商关 心这个问题的话). 所以要小心... 13. 使用隔行模式 (这一章很大程度上归功于David Kastrup ) 如果显示器场同步电路能稳定地支持一个固定的象素时钟的话,一台隔行显示器的 闪烁要比一台逐行显示器较不显著.就是因为这样所以首先发明的是隔行模式. 隔行模式得到坏名声是因为在相同场频即VSF(在广告中经常给出的参数)下劣于对 应的逐行模式.但在相同行频下隔行模式明显较为优越,而行频通常是你的显示 器/显示卡决定性的限制所在. 在固定刷新率(或半帧率,或VSF)下,隔行显示器会更为闪烁:一台90Hz的隔行显示 器会次于一台90Hz的逐行显示器.然而,它只需要一半的频宽和一半的行频.如果你 在相同的象素时钟和相同扫描率下和逐行模式比较,它有显著的优越性:45Hz的逐 行模式是无法忍受的.在90Hz的隔行模式下,我的Multisync 3D显示器( 在1024x768)已经工作了几年,感觉非常满意.我猜想需要至少70Hz的逐行显示器才 能同样舒适. 尽管如此,你要注意少数要点:只在高分辨率下使用隔行模式,因而交替变亮的扫描 线是彼此靠紧的.你也许要与同步脉冲的宽度和位置打交道以获得最稳定的扫描线 位置.如果扫描线是交替明暗的,交错的画面会跳出来.我有一个应用程序选了这样 一个象素图案作为菜单背景(XCept,幸运的是据我所知没有其它应用程序是这 样).为了使用XCept,我切换到800x600,因为不这样的话它真的伤害我的眼睛. 为了相同原因,使用至少100dpi字体,或其它水平笔画至少为两条扫描线宽的字 体(对于高分辨率,别的字体都没有意义). 当然了,当你的硬件在相近的刷新率下支持逐行模式的话就不要使用隔行模式. 可是,如果你发现在某些分辨率下你把显示器或显示卡推到了它们的上限,仍得到 令人不满的闪烁或水冲蚀般(超出频宽)的画面,你也许想要尝试在相同分辨率下使 用隔行模式.当然如果你的显示器VSF已经接近其极限这也是没用的. 设置隔行模式很容易:象逐行模式一样进行.只需多考虑两个事项:垂直行总数(在 模式行的最后一个数)需要是一个奇数,以及当你指定"Interlace"标志时,显示器 的实际垂直帧率加倍.如果你指定的模式看来象45Hz模式但有"Interlace"标志,你 的显示器必须支持90Hz帧率. 举一个例子,这是1024x768隔行模式下我的模式行:我的Multisync 3D能支持高 至90Hz场频和38KHz行频. 模式行 "1024x768" 45 1024 1048 1208 1248 768 768 776 807 Interlace 在该模式下两个限制都恰当地基本用尽了.指定相同模式,只是没有"Interlace"标 志,仍然几乎达到显示器水平能力的极限(严格来说,稍微低于场频的下限),但画面 产生了无法忍受的闪烁. 基本设置规则:如果你设置一种模式,小于显示器垂直能力的一半,使垂直行总数为 奇数并加入"Interlace"标志.大多数情况下显示质量将会极大改进. 除非你使用逐行模式,否则用尽你的显示器的技术规格限制(技术规格中列出的场 频一般低于显示器最大值约30%或更多)并手动设置一种隔行模式(或许用稍微高些 的分辨率)会带来较好的效果,但我不能对此承诺. 14. 问与答 问:你举的例子不是标准的屏幕分辨率,我可以用它吗? 答:为什么不行呢?你没有理由一定使用640x480,800x600,或甚 至1024x768.XFree86服务器让你在配置硬件时有很大自由.它通常进行两到三次尝 试以找出正确的配置.要得到的最重要的东西是在合理大小的可视区域下的高刷新 率,而不是以闪烁得眼睛流泪为代价的高分辨率! 问:给定65MHz象素时钟和55KHz HSF时这是唯一的分辨率吗? 答:绝对不是!你被鼓励遵循常规的步骤并进行反复试验来找出真正符合你的喜好 的设置.这样试验会有许多乐趣.大多数设置也许只是给你讨厌的杂乱视频信号,但 实际上一台新式多频同步显示器通常是不容易损坏的.可是在长期使用一种模式前 请确认你的显示器能支持该模式的帧率. 小心固定频率显示器!这种试验可以相当快速地使它们损坏.确认你对它们进行的 每次试验都用了有效的刷新率. 问:你刚提及两种标准分辨率.在Xconfig中,有很多可用的标准分辨率,你能告诉我 在修改时序时是否有什么要点吗? 答:绝对有!以在当前的Xconfig中列出的"标准"模式640x480为例.它使用25MHz驱 动频率,帧长是800和525=>刷新率约为59.5Hz.不太坏.但对很多SVGA板卡来 说28MHz是一个通常可使用的驱动频率.如果我们以其驱动640x480,按照我们上面 讨论的步骤,你可得到帧长为812(向下舍入为808)和505.现在刷新率升到68Hz,是 一个对标准模式相当有意义的改进. 问:你能对迄今为止我们已讨论的内容作个总结吗? 答:简而言之: 1. 对于任何固定的驱动频率,提高最大分辨率会招致刷新率降低的代价从而带来 更明显的闪烁. 2. 如果想用高分辨率而你的显示器也支持,设法获得一块提供匹配的象素时钟值 或DCF的SVGA卡.越高越好! 15. 解决画面问题. 好,你已经获得了X配置的值.你把它们放人Xconfig并加上一个测试模式的标注.你 启动X,热键切换到新模式,...而画面看来不正常.你该怎么做?这里是一份清单,列 出常见的视频画面变形现象以及如何进行纠正. (纠正这些较小的变形是xvidtune(1)真正闪亮之处.) 你通过改变同步脉冲时序移动画面.你通过改变帧长按比例缩放画面(你必须移动 同步脉冲以保持画面在对应的相同位置,否则缩放也会移动画面).这里是一些更详 细的方法: 水平和垂直位置是独立的.换言之,水平移动画面不会影响垂直位置,反之亦然.可 是,对缩放而言就不太正确了.虽然改变水平尺寸不会改变垂直尺寸,反之亦然,但 两个方向总的改变是受限制的.特别是你的画面在两个方向都太大时,你大概不得 不调到一个更高的象素时钟来纠正.因为这样提升了可用的分辨率,它几乎不成为 一个问题了! 15.1 画面向左或向右移位 要纠正它,移动行同步脉冲.换言之,对定义了行同步脉冲上升沿和下降沿的水平时 序段中间两个数字进行增减(按8的倍数). 如果画面偏左(右边界太大,你想向右移动画面)减少数字.如果画面偏右(左边界太 大,你想向左移动画面)增大同步脉冲. 15.2 画面向上或向下移位 要纠正它,移动场同步脉冲.换言之,对定义了场同步脉冲上升沿和下降沿的垂直时 序段中间两个数字进行增减. 如果画面偏上(下边界太大,你想向下移动画面)减少数字.如果画面偏下(上边界太 大,你想向上移动画面)增大数字. 15.3 画面在水平和垂直方向都太大 切换到一个更高的显示时钟速度.如果在你的时钟设置文件中有多个模式,很可能 一个低速模式被错误地激活了. 15.4 画面在水平方向太宽(太窄) 要纠正它,增大(减少)水平帧长.换言之,改变第一个时序段的第四个数字.为了避 免移动画面,也把同步脉冲(第二和第三个数字)移动一半的点数,以保持画面在对 应的相同位置. 15.5 画面在垂直方向太深(太浅) 要纠正它,增大(减少)垂直帧长.换言之,改变第二个时序段的第四个数字.为了避 免移动画面,也把同步脉冲(第二和第三个数字)移动一半的点数,以保持画面在对 应的相同位置. 任何不能通过这些技巧的组合来解决的变形很可能是犯了一些更基本错误的迹 象,如计算错误或象素时钟高于显示器能处理的范围. 最后,记住增大任一个帧长会降低你的刷新率,反之亦然. 有时候你可以通过调整显示器的屏幕控制来纠正小的变形.缺点是如果你为了纠正 图形模式问题而调整得离中性(出厂)设定太远的话,也许在文本模式下画面会变得 古怪.改好你的模式行是更好的方法. 16. 绘制显示器特性 要绘制一份显示器模式图,你将需要gnuplot软件包(一个类UNIX操作系统下的绘图 语言自由软件)和modeplot工具.它是一个输入命令行选项来绘制显示器特性图 的shell/gnuplot脚本 这里是modeplot的一份拷贝: #!/bin/sh # # modeplot--生成显示器可使用的X模式图 # # 执行'modeplot -?'获知控制选项. # # 显示器描述.频宽以MHz为单位,行频以KHz为单位,而场频以Hz为单位. TITLE="Viewsonic 21PS" BANDWIDTH=185 MINHSF=31 MAXHSF=85 MINVSF=50 MAXVSF=160 ASPECT="4/3" vesa=72.5 # VESA建议的最小刷新率 while [ "$1" != "" ] do case $1 in -t) TITLE="$2"; shift;; -b) BANDWIDTH="$2"; shift;; -h) MINHSF="$2" MAXHSF="$3"; shift; shift;; -v) MINVSF="$2" MAXVSF="$3"; shift; shift;; -a) ASPECT="$2"; shift;; -g) GNUOPTS="$2"; shift;; -?) cat <" name of monitor defaults to "Viewsonic 21PS" -b bandwidth in MHz defaults to 185 -h min & max HSF (KHz) defaults to 31 85 -v min & max VSF (Hz) defaults to 50 160 -a aspect ratio defaults to 4/3 -g "" pass options to gnuplot The -b, -h and -v options are required, -a, -t, -g optional. You can use -g to pass a device type to gnuplot so that (for example) modeplot's output can be re directed to a printer. See gnuplot(1) for details. The modeplot tool was created by Eric S. Raymond based on ana lysis and scratch code by Martin Lottermoser This is modeplot $Revision: 1.9 $ EOF exit;; esac shift done gnuplot $GNUOPTS <. Eric S. Raymond 在努力理解它的基础上重新加工,重 新组织和整体改写了Chin Fang的原作.在这个过程中,他并入了由Bob Crosson 写的另一篇HOWTO的大部分内容. 隔行模式资料主要作者是David Kastrup . Martin Lottermoser 贡献了使用gnuplot绘 制模式图的想法,进行了modeplot背后的数学分析.发布的modeplot是由ESR根 据Martin的原始gbuplot代码为本文的情况重新设计和归纳出来的. References 1. file://localhost/tmp/zh-sgmltools.10692/XFree86-Video-Timings-HOWTO.txt.html#overd 2. http://metalab.unc.edu/LDP 3. mailto:esr@thyrsus.com 4. mailto:pxun@163.net 5. file://localhost/tmp/zh-sgmltools.10692/XFree86-Video-Timings-HOWTO.txt.html#fixes 6. http://without.netpedia.net/kvideogen/ 7. file://localhost/tmp/zh-sgmltools.10692/XFree86-Video-Timings-HOWTO.txt.html#overd 8. file://localhost/tmp/zh-sgmltools.10692/XFree86-Video-Timings-HOWTO.txt.html#cplot 9. file://localhost/tmp/zh-sgmltools.10692/XFree86-Video-Timings-HOWTO.txt.html#inter 10. file://localhost/tmp/zh-sgmltools.10692/XFree86-Video-Timings-HOWTO.txt.html#overd 11. file://localhost/tmp/zh-sgmltools.10692/XFree86-Video-Timings-HOWTO.txt.html#frame 12. file://localhost/tmp/zh-sgmltools.10692/XFree86-Video-Timings-HOWTO.txt.html#synth