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