XFree86 Video Timings HOWTO 中文版 作者: Eric S. Raymond 译者: 彭迅 4.4版,2000年3月13日翻译完成日期: 2000年4月1日 _________________________________________________________________ 本文描述了如何为特定显示卡/显示器的组合编写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模式. 更多的帮助正在著手进行.在刚刚发行的XFree86 4.0中许多驱动程序模块支 持DDC,即VESA的Display Data Channel(显示数据通道)功能.当DDC激活後,显示器 告诉XFree86它能支持什麽模式行.因而你使用4.0和任何最近生产的显示器的话很 可能完全不必进行任何设置. 3. 自动计算工具 如果你有一台支持即插即用规范的比较新的显示器(1996年或以後的),就有机会使 用read-edid程序来获取显示器的统计数据表并为你算出模式行.请浏览 [6]http://altern.org/vii/programs/linux/read-edid/. 从XFree86 3.2开始,XFree86提供一个XF86Setup(1)程序,能很简单地交互式生成 一种可以工作的显示器模式,用不著直接对付麻烦的显示时序值.因而在大多数情 况下你不需要算出一种基本的显示器模式.不幸的是,XF86Setup(1)有一些限制;它 只能识别最高1280x1024的标准显示模式.如果你有一台性能非常高的显示器,可以 支持1600x1200或更高分辨率,仍需自行计算基本显示器模式. 有一个KDE的工具叫 [7]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服务器用於对显示器进行最底层控制. 显示器用可以认为是一连串的光栅点来生成一幅图象.这些点从左到右排列形成 行.这些行从上到下排列形成图象.当显示器内部三原色各发一束电子打在这些点 上,就发出了光.为了使电子束以相等的时间间隔打在每个点上,电子束以一种恒定 图案在屏幕上从左到右扫描,称为光栅. 我们说"可以认为是一连串的光栅点"因为这些光栅点并不实际对应物理荧光点.物 理荧光点比光栅点更小 --- 它们必须这样,否则显示器会有严重的水纹图样效 果.光栅点其实是模拟驱动信号的采样,显示为按格栅排列的点只是因为信号中的 峰值和谷值是规则而精细地间隔的. 扫描图案起始於屏幕的左上角,在屏幕上沿直线向右,移动时一直略微"下倾"(下倾 坡度太小以至不可觉察).然後电子束返回屏幕的左边,开始於新的一行.新的一行 象第一行一样从左到右扫描.这图案不断地重复直到显示器最底一行扫描完.然後 电子束从显示器的左下角(往返扫描若干次)移到右上角,该图案又再次开始. 这种模式有一个变种叫隔行扫描:在第一个半帧仅仅每两行中的一行被扫描,其余 的行在第二个半帧才被扫描. 电子束在显示器左上角开始扫描是一帧的开始.当电子束从显示器右下角再次到达 左上角时这一帧就结束了.一个帧是由电子束在显示器上从上到下扫描过的所有的 行构成的. 如果在扫描帧时电子束总是发出的,显示器上所有的点都会被照亮.沿著屏幕的边 缘就不会有黑边.在屏幕的边缘图象就会变形,因为电子束很难控制那里.为了减少 变形,沿著屏幕边缘的点不会被电子束照亮(因为电子束被关闭了),而且即使有电 子束发出并指向它们仍不会照亮.这样,显示器的可视区域就减少了. 另一件要理解的重要事情是,当可视区域中没有点被扫描时电子束会怎麽样.电子 束照在显示器的左右边缘的时间用於把电子束从右边缘移回左边缘.电子束照在显 示器的上下边缘的时间用於把电子束从显示器的右下角移回左上角. 显示卡产生信号,使显示器(依照想得到的颜色)发出电子束打在每个点上产生图 象.通过产生一个叫行同步脉冲的信号,显示卡也控制何时显示器把电子束从右边 移回左边.在每一行结束时产生一个行同步脉冲.在每行结束时出现一个行同步脉 冲.显示卡还产生一个场同步脉冲通知显示器把电子束移到屏幕左上角.在接近每 一帧结束时产生一个场同步脉冲. 在行同步和场同步脉冲之前与之後,显示器都需要有一段短的时间以让电子束的位 置能稳定.如果电子束不能稳定,图象也将不稳定. 要了解更多信息,请浏览 [8]电视与显示器偏转系统. 在下一章,我们将回来用定义,公式和范例来讨论这些基本原理以帮助你使用它 们. 5. 了解关於显示器和显示卡的基本情况 在修改一项Xconfig条目前,有一些基本情况你需要了解.它们是: * 显示器的行频和场频选项 * 显示器的频宽 * 显示卡的驱动时钟频率,或"点时钟" 5.1 显示器同步频率 行频就是每秒显示器能水平扫描的行数;它是关於显示器的一个最重要的统计数 值.场频是每秒显示器电子束能在垂直方向来回移动的次数. 同步频率通常列在显示器手册的技术规格页中.场频值典型地以Hz(每秒周期数)标 定,行频以KHz(每秒千周数)标定. 通常场频的范围在50到150Hz之间,行频在31 到135KHz之间. 如果你有一台多频同步显示器,其频率会给出一个范围.某些显示器,尤其是低档型 号,有多个固定的频率.它们也能进行配置,但你的可选项会严格受限於显示器本身 的技术特性.为最佳分辨率配对选择最高的频率.并且要小心 --- 试图对一台固定 频率显示器设置高於其设计规格的频率会很容易地损坏它. 本指南的早期版本在过度驱动多频同步显示器方面相当积极,驱使它们超过其名义 上的最高场频以获得更好的性能.那以後其他人向我们指出了更多理由告诫这种做 法;我们将在下面章节 [9]过度驱动你的显示器中论及. 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 --- 芯片集 --- 这是确切的芯片型号;一种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更高的分 辨率. 允许区域的上下边界是代表场频限值的水平线.频宽是点时钟的上限,因此由一条 在右边限制了特性区域的垂直线代表. 在 [10]绘制显示器特性你能找到一个程序帮你为自己的显示器描绘与此类似的 图(但有X图形界面,更好看).那一章还讨论了有趣的部分;由行频的限制而造成的 边界的引出. 7. 配置系统时的权衡 用另外的方式看看我们在上文得出的公式 DCF = RR * HFL * VFL 换言之,你的点时钟是固定的.你能根据这个点时钟更改刷新率,水平分辨率或垂直 分辨率.如果三项中的一项增大了,其它的一项或两项必须减少. 注意,刷新率不能大於显示器的最大场频.因而,对於任何在一个特定点时钟的特定 显示器,有一个不能强制低於的最小的帧长乘积. 在选择你的设置时,记住:如果你把刷新率(RR)设置得太低,你的屏幕就会闪烁.让 它保持在60Hz以上.72Hz是VESA人机工程学标准.120Hz是荧光的闪烁频率;如果你 对此比较敏感,就要保持其高於此值. 闪烁会使眼睛很疲劳,即使人类眼睛有适应性而且各人对它的忍耐力有很大的差 异.如果以90度视角面对著显示器,使用黑色的背景和颜色对比鲜明的前景,低到中 等亮度,至少45Hz你*才*会觉得舒适. 进行下面的严格测试:用xterm -bg white -fg black打开一个纯白背景和黑色前 景的xterm,使它扩大到覆盖整个可视区域.现在把显示器的亮度调到最大值 的3/4,脸从显示器转开.试著从旁窥视显示器(发挥敏感度更高的外围视网膜细胞 作用).如果你没有感到任何闪烁或闪烁程度是可容忍的,那麽这个刷新率对你是适 宜的.否则你最好设置一个更高的刷新率,因为这种半可视的闪烁会迅速使你眼睛 疲劳并让你觉得头疼,即使屏幕在常规视角看上去是正常的. 对隔行模式而言,闪烁的情况依赖於更多的因素,例如当前的垂直分辨率和实际屏 幕内容.所以直接试验一下吧.可是你不会希望低於约85Hz半帧率的. 所以让我们认为你已经选了一个可接受的最低刷新率.在选择水平帧长(HFL)和垂 直帧长(VFL)时,你将有一些机动的空间. 8. 存储器需求 可用的帧缓冲内存会限制在彩色或灰度级显示器上能达到的分辨率.在只有黑白两 色而其间没有灰度深浅变化的显示器上它大概没有什麽影响. 对256色显示而言,每个可视点需要1字节显示内存.这个字节包含了决定该点怎样 由红绿蓝组合生成的信息.要知道需要的显存数量,用每行可视点数乘以可视行 数.对显示分辨率1024x768而言, 1024 * 768 = 786432,就是显示器的可视点数. 在每点1字节的情况下,这也是显示卡需要的显示内存字节数. 因此,显示内存需求一般就是 (HR * VR) / 1024 K字节并向上舍入(此例中精确值 是768K).如果你的显存多於实际需求,就有额外的显存用於虚拟屏幕滚动. 然而,如果显示卡上只有512K显存,那麽就不能使用该分辨率.即使你有好的显示 器,没有足够的显示内存,还是不能发挥显示器的潜力.另一方面,如果你的SVGA显 示卡有1兆显存,但你的显示器至多能显示800x600,那麽无论如何你也达不到高分 辨率(查阅 [11]使用隔行模式找一个可能的补救方法). 如果你的显存多於需求请不要担心;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).(查阅 [12]过度驱动你的显示器获得这个问题更全面的讨论.) 迄今为止,上述内容大部分是简单的算术和关於光栅显示器的基本事实.几乎完全 没有任何巫术! 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. 过度驱动你的显示器 如果显示器是固定频率的,你绝对不应试图超越其扫描频率.那样做的话你会损害 你的硬件.你也应知道过度驱动一台多频同步显示器可能会有潜在的不易觉察的问 题. 相反地,象素时钟高於显示器的最大频宽一般是无害的.超过了额定最大同步频率 时会有问题.某些新型显示器也许有保护电路,发出危险的扫描频率时关闭显示 器,但不要依赖它.尤其是一些旧的多频同步显示器(象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行频. Modeline "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.13 $ EOF exit;; esac shift done gnuplot $GNUOPTS <. Eric S. Raymond 在努力理解它的基础上重新加工,重 新组织和整体改写了Chin Fang的原作.在这个过程中,他并入了由Bob Crosson 写的另一篇HOWTO的大部分内容. 隔行模式资料主要作者是David Kastrup . Nicholas Bodley 对显示器如何工作的章节进 行了更正和阐明. Payne Freret 更正了关於显示器设计的一些技术上的小错 误. Martin Lottermoser 贡献了用gnuplot绘制 模式图的想法,进行了modeplot背後的数学分析.发布的modeplot是由ESR根 据Martin的原始gbuplot代码为本文的情况重新设计和归纳出来的. References 1. file://localhost/tmp/zh-sgmltools.18590/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.18590/XFree86-Video-Timings-HOWTO.txt.html#fixes 6. http://altern.org/vii/programs/linux/read-edid/ 7. http://without.netpedia.net/kvideogen/ 8. http://fribble.cie.rpi.edu/~repairfaq/REPAIR/F_deflfaq.html 9. file://localhost/tmp/zh-sgmltools.18590/XFree86-Video-Timings-HOWTO.txt.html#overd 10. file://localhost/tmp/zh-sgmltools.18590/XFree86-Video-Timings-HOWTO.txt.html#cplot 11. file://localhost/tmp/zh-sgmltools.18590/XFree86-Video-Timings-HOWTO.txt.html#inter 12. file://localhost/tmp/zh-sgmltools.18590/XFree86-Video-Timings-HOWTO.txt.html#overd 13. file://localhost/tmp/zh-sgmltools.18590/XFree86-Video-Timings-HOWTO.txt.html#frame 14. file://localhost/tmp/zh-sgmltools.18590/XFree86-Video-Timings-HOWTO.txt.html#synth