モニタモードダイアグラムをプロットするには、gnuplot パッケージ (UNIX
のようなオペレーティングシステム用のフリーウェアのプロット言語) と
コマンドラインから入力したモニタの特性から gnuplot で ダイアグラムを
プロットする shell スクリプトである modeplot
ツールが必要です。
ここからは modeplot のリストです。:
#!/bin/sh # # modeplot -- generate X mode plot of available monitor modes # modeplot -- 使用可能なモニタのモードから X モードプロットを生成します。 # # Do `modeplot -?' to see the control options. # `modeplot -?' と入力すると制御オプションを見ることができます。 # # ($Id: VidModes.sgml,v 1.2 2000/01/10 17:13:52 cvsxjman Exp $) # Monitor description. Bandwidth in MHz, horizontal frequencies in kHz # and vertical frequencies in Hz. # モニタの説明。帯域幅を MHz で、水平周波数を kHz で、それと垂直周波数を # Hz で指定しましょう。 TITLE="Viewsonic 21PS" BANDWIDTH=185 MINHSF=31 MAXHSF=85 MINVSF=50 MAXVSF=160 ASPECT="4/3" vesa=72.5 # VESA-recommended minimum refresh rate # 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 <<EOF modeplot control switches: -t "<description>" name of monitor defaults to "Viewsonic 21PS" -b <nn> bandwidth in MHz defaults to 185 -h <min> <max> min & max HSF (kHz) defaults to 31 85 -v <min> <max> min & max VSF (Hz) defaults to 50 160 -a <aspect ratio> aspect ratio defaults to 4/3 -g "<options>" pass options to gnuplot modeplot 制御スイッチ: -t "<種類>" モニタ名称 標準値は "Viewsonic 21PS" -b <nn> 帯域幅を MHz で 標準値は 185 -h <最小> <最大> 最小と最大の HSF を kHz で 標準値は 31 85 -v <最小> <最大> 最小と最大の VSF を Hz で 標準値は 50 160 -a <アスペクト比> アスペクト比 標準値は 4/3 -g "<オプション>" 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 redirected to a printer. See gnuplot(1) for details. The modeplot tool was created by Eric S. Raymond <esr@thyrsus.com> based on analysis and scratch code by Martin Lottermoser <Martin.Lottermoser@mch.sni.de> -b, -h と -v オプションは必須で、-a, -t, -g はオプションです。 -g でデバイスタイプを gnuplot に渡します。従って例えば modeplot の 出力はプリンタにリダイレクトされます。詳細は gnuplot(1) のマニュアルを 御覧下さい。 modeplot ツールは Eric S. Raymond <esr@thyrsus.com> が Martin Lottermoser <Martin.Lottermoser@mch.sni.de> による 分析と一から書いたコードを元に作成しました。 This is modeplot $Revision: 1.2 $ EOF exit;; esac shift done gnuplot $GNUOPTS <<EOF set title "$TITLE Mode Plot" # Magic numbers. Unfortunately, the plot is quite sensitive to changes in # these, and they may fail to represent reality on some monitors. We need # to fix values to get even an approximation of the mode diagram. These come # from looking at lots of values in the ModeDB database. F1 = 1.30 # multiplier to convert horizontal resolution to frame width F2 = 1.05 # multiplier to convert vertical resolution to frame height # 魔法の数値です。残念ながら、プロットはこれらの数値を変更することに対して # 非常に敏感です。またこれらの数値で幾つかの代表的なモニタで実際にうまく # 行かない場合があります。我々はモードダイアグラムの概算をむら無く取得できる # 数値になるように修正していきます。これらの数値は ModeDB データベースの # 多量の数字から導き出しました。 F1 = 1.30 # 水平解像度をフレーム幅に変換する乗数 F2 = 1.05 # 垂直解像度をフレーム幅に変換する乗数 # Function definitions (multiplication by 1.0 forces real-number arithmetic) # 関数定義 (1.0 を掛けると実際の数の計算となる) ac = (1.0*$ASPECT)*F1/F2 refresh(hsync, dcf) = ac * (hsync**2)/(1.0*dcf) dotclock(hsync, rr) = ac * (hsync**2)/(1.0*rr) resolution(hv, dcf) = dcf * (10**6)/(hv * F1 * F2) # Put labels on the axes # 軸のラベルを定義する set xlabel 'DCF (MHz)' set ylabel 'RR (Hz)' 6 # Put it right over the Y axis # Y 軸の右上におく # Generate diagram # ダイアグラムを生成する set grid set label "VB" at $BANDWIDTH+1, ($MAXVSF + $MINVSF) / 2 left set arrow from $BANDWIDTH, $MINVSF to $BANDWIDTH, $MAXVSF nohead set label "max VSF" at 1, $MAXVSF-1.5 set arrow from 0, $MAXVSF to $BANDWIDTH, $MAXVSF nohead set label "min VSF" at 1, $MINVSF-1.5 set arrow from 0, $MINVSF to $BANDWIDTH, $MINVSF nohead set label "min HSF" at dotclock($MINHSF, $MAXVSF+17), $MAXVSF + 17 right set label "max HSF" at dotclock($MAXHSF, $MAXVSF+17), $MAXVSF + 17 right set label "VESA $vesa" at 1, $vesa-1.5 set arrow from 0, $vesa to $BANDWIDTH, $vesa nohead # style -1 plot [dcf=0:1.1*$BANDWIDTH] [$MINVSF-10:$MAXVSF+20] \ refresh($MINHSF, dcf) notitle with lines 1, \ refresh($MAXHSF, dcf) notitle with lines 1, \ resolution(640*480, dcf) title "640x480 " with points 2, \ resolution(800*600, dcf) title "800x600 " with points 3, \ resolution(1024*768, dcf) title "1024x768 " with points 4, \ resolution(1280*1024, dcf) title "1280x1024" with points 5, \ resolution(1600*1280, dcf) title "1600x1200" with points 6 pause 9999 EOF
modeplot
を持っていることと gnuplot パッケージがある場所を
確認したら、次に述べるモニタの特性値が必要です。:
プロットプログラムは必ずしも正確でない幾つかの仮説を容易にします。その 理由は得られたダイアグラムがざっくりした記述であるからです。 これらの仮定は:
modeplot
プログラムは標準で 4/3 を仮定していますが、上書き可能です。
HFL = F1 * HR
VFL = F2 * VR
ざっくりとした規準として、F1 = 1.30 と F2 = 1.05 として下さい。 ( フレームサイズの計算を参照してください。) さて特にこの同期周波数である HSF を取り上げてみます。現在の所の仮定は ドットクロック DCF のためのすべての数値は既に決定された再描画速度 RR、 例えば HSF は関数 RR(DCF) で与えられます。これば次の割り算で得られます。
再描画速度はフレームサイズの積でドットクロックを割ったものです。:
RR = DCF / (HFL * VFL) (*)
他には、水平フレーム長はドットクロックを水平同期周波数で割ったものです。:
HFL = DCF / HSF (**)
VFL は HFL を 2 つの改定値で切り詰めたものです。:
VFL = F2 * VR
= F2 * (HR / AR)
= (F2/F1) * HFL / AR (***)
(**) と (***) を (*) に代入すると:
RR = DCF / ((F2/F1) * HFL**2 / AR)
= (F1/F2) * AR * DCF * (HSF/DCF)**2
= (F1/F2) * AR * HSF**2 / DCF
HSF, F1, F2 と AR を固定すると、ダイアグラムは双曲線になります。この曲線 の中の最小と最大の水平同期周波数で許容領域の残りの境界線が得られます。
特性領域と直線の交線が特定の解像度を表します。これは (*) 式を元にして 2 番目の仮定になります。:
RR = DCF / (HFL * VFL) = DCF / (F1 * HR * F2 * VR)
すべての解像度でこのような線を描く事によって興味深いのは、解像度、 クロック周波数とモニタの再描画速度の関係に密接な関係があるという事 です。これらの線はモニタの特性には依存していませんが、2 つ目の仮定には 依存しています。
modeplot
ツールはこの作業を簡単にします。modeplot -?
と入力して制御オプションを見てください。典型的な実行形式は次のようです。:
modeplot -t "Swan SW617" -b 85 -v 50 90 -h 31 58
-b オプションはビデオの帯域幅を指定します。-v と -h は水平と垂直同期 周波数の範囲を指定します。
modeplot
の出力を読むときは、近似表現のみであることを常に
覚えておいて下さい。例えば、最小同期信号幅から得られた HFL の上限を
無視して、仮定と殆んどものとします。従って
全体のまとめ
に示すように、(幾つかの黒魔術を伴って) 詳細な計算式に代入する事は
ありません。しかしながら、可能であり、トレードオフがある
ことが分かればすっきりするでしょう。