次のページ 前のページ 目次へ

Linux XFree-to-Xinside mini-HOWTO
 (by Marco Melgazzi, s64912@athena.polito.it,
 version 1.1 / 1996 July)
 (訳者注:Marco Melgazzi 氏の主メイルアドレスは 1997 年、
1月現在、marco@techie.com になっています)

XFree86-XInside.euc
 和訳:はら(hara@access.co.jp), 1997 Jan.27th



  XFree86 モードラインを XInside のものに変換する方法



  1.イントロダクション

  この数ヶ月、 XFree86 と商業製品の一つ XInside との間でどうや
ってヴィデオモードを変換するかという質問が comp.os.linux.x に
たくさん投稿されていました。
  私はその製品化の前の評価版を使っており、この評価版がまだ私の
ハードディスク上に残っていました。私は問題を解決するのが好きな
ので、私はその問題をやってみようと決心して、二、三時間いじって
みて、計算をした結果、おそらく有効な記事を即座に投稿することに
しました。
  この変換の方法についての議論はすぐに消え去ってしまいましたが、
私はその文章についての感謝のメイルを一通、受け取りました。それ
で、この先、また他の誰かがこの情報を必要とするかもしれないと思
い、私はその投稿をあなたが今読んでいるこの mini-HOWTO に書き直
すことにしたのです。
  まず最初にいくつか述べさせてください:
私は XInside のために働いているのでは「ありません」し、私は
Linux 用の評価版ヴァージョン 1.2 にアクセスすることしかできませ
んでした。モニターのタイミングをいじることは危険なことになりう
るし、この理由から、私は絶対的にいかなる保証もしません。もしこ
れであなたがうまくいけば、結構なことですが、もしあなたのコンピ
ュータが火を吹いても、私はそれについての対応はしないでしょう。
  あなたが私の名前から気付いたかもしれないように、私は英語のネ
イティブスピーカーではないので、あちこちに間違いがあるかもしれ
ません。私はそれについて謝罪します。だからお願いですから、私の
メイルボックスを言語関係の論争で一杯にしたりしないで下さい。
多謝!


  2. なぜ私はそれが必要だったか

  私は、あなたにヴィデオモードをいじるためのユーティリティ(xvidtune
のような)を与えず、かつ/または、あなたの XFree のものを評価版
(と AFAIK 商品)にインポートするユーティリティも与えないという
XInside のポリシーは不可解であると私は思います。私は、これを一緒
にするのに3時間くらいもかかってしまいましたが、(ちょっと一言:私
は二つのフォーマットで VESA 1024x768@70Hz の項目を比較しました
(そして私は今、ほとんど電機技術者です ;-) )、Xinside のプログラマ
ならこの時間のほんのちょっとを使うだけで、これと同じような文章が
書けるはずなのに、、、
  私は 1.3 評価版をダウンロードしていませんが、私は彼等がこの点を
直してくれていることを本当に希望しています。確かに、直っていれば、
この mini-HOWTO は用無しになってしまうかもしれませんが、しかし、
ああ、もしあなたがこれを読んだなら、全てがどのように働いているか
の仕組み以上の何かを学んでくれることでしょう、、、


  3.  やってみよう

  あなたが自分のまあまあ調整した XFree86 モードを持っていて、同じ
条件で XInside を試してみたいと仮定しましょう。
  以下のステップに従っていけば、それができるでしょう。
  我々は実際の例として私のデフォルトのヴィデオモードを使用して、
それを変換するにはあなたが何をするべきか説明します。


  XFree86 のエントリーはこんな風になっています:

  Modeline "blahblah" DOTCLK  A B C D  a b c d

 A-B と 1-4 の数字はどれも意味を持っています:
あなたがそうしたければ、その意味を 'The Hitchhiker's Guide to
X386/XFree86 Video Timing'(/usr/lib/X11/doc/VideoModes.doc)
で調べることができるでしょうが、うまく変換をするためにはこの全て
の背後にある理論を知る必要はないです。

 /usr/lib/X11/XF86Config にある私のモードラインは以下のように
なっています:

       Modeline "1168x876" 105  1168 1256 1544 1640  876 877 891 900
                            |     |    |    |    |    |   |   |   |
                         DOT_CLK  A    B    C    D    a   b   c   d

  XInside では、あなたは Xtimings ファイルにエントリーを付け加え
なければいけません。そのファイルは etc/ におかれているべきです。
(以下では、あなたが Xaccel ディレクトリの一番上にいるものと仮定
します。それは /usr/X11/lib/X11/AcceleratedX のようになっている
はずです)

  !    Somewhere in the file, put here the name you want
  ! そのファイルのどこか、あなたの好きな名前をここに書く

  [PREADJUSTED_TIMING]
      PreadjustedTimingName = "1168x876 @ 72Hz";

  !
  !    These four are obvious
  !
  !    これら 4 つは明白

      HorPixel          = 1168;         // pixels
      VerPixel          = 876;          // lines
      PixelWidthRatio   = 4;
      PixelHeightRatio  = 3;

  !
  !   hsync: DOT_CLK / D * 1000 [KHz]
  !
  !   hsync = 105 / 1640 * 1000 = 64.024 KHz
  !
  !   vsync: ( 1 / (( D / DOT_CLK ) * d) ) * 1,000,000 [Hz]
  !
  !   vsync: ( 1 / (( 1640 / 105 ) * 900) ) * 1,000,000
  !           ( 1 / 14057.1428571 ) * 1,000,000 = 71.138 Hz
  !

      HorFrequency      = 64.180;        // kHz
      VerFrequency      = 71.138;        // Hz

  !   Obvious
  !   明らか

      ScanType          = NONINTERLACED;

  !
  !   Put here the +/-hsync +/-vsync XFree86 options
  !

  !   ここに、+/-hsync +/-vsinc XFree86 オプションをおく

      HorSyncPolarity   = POSITIVE;
      VerSyncPolarity   = POSITIVE;

  !   Shouldn't change
  !   変えるべきではない

      CharacterWidth    = 8;             // pixels

  !   DOT_CLK here

      PixelClock        = 105.000;       // MHz
  !
  !
  !   horizontal timings section: [usec]
  !
      HorTotalTime  = D / DOT_CLK                  = 15.619;
      HorAddrTime   = A / DOT_CLK                  = 11.124;
      HorBlankStart = A / DOT_CLK                  = 11.124;
      HorBlankTime  = HorTotalTime - HorBlankStart =  4.495;
      HorSyncStart  = B / DOT_CLK                  = 11.962;
      HorSyncTime   = C / DOT_CLK - HorSyncStart   =  2.743;

   !
   !  vertical timings section:    [msec]
   !

      VerTotalTime  = ( HorTotalTime * d ) / 1000  = 14.057;
      VerAddrTime   = ( HorTotalTime * a ) / 1000  = 13.682;
      VerBlankStart = ( HorTotalTime * a ) / 1000  = 13.682;
      VerBlankTime  = VerTotalTime - VerBlankStart =  0.375;
      VerSyncStart  = ( HorTotalTime * b ) / 1000  = 13.698;
      VerSyncTime   = ( HorTotalTime * ( c - b ) ) / 1000
                                                   = 0.219
   ! Finished !
   ! おしまい !


  さて、あなたはこの新しく作ったモードを適切な場所の以下に示され
ているファイルの中に置かなければいけません。


  4.  あれこれを設定する

  以下で示している excerpts では、-> の記号は変更されるものを表わ
しています:
 あなたのファイルの中にこの記号を含めないように!

  モニターエントリー(私のは monitors/mfreq/mfreq64.vda)

           [ESTABLISHED_TIMINGS]
               "640x480 @ 60Hz",
               "640x480 @ 72Hz",
               "640x480 @ 75Hz",
               "800x600 @ 56Hz",
               "800x600 @ 60Hz",
               "800x600 @ 72Hz",
               "800x600 @ 75Hz",
               "1024x768 Interlaced",
               "1024x768 @ 60Hz",
               "1024x768 @ 70Hz",
               "1024x768 @ 75Hz",
           "1152x900 Interlaced",
               "1152x900 @ 60Hz",
               "1152x900 @ 67Hz",
       ->      "1168x876 @ 72Hz",
               "1280x1024 Interlaced",
               "1280x1024 @ 60Hz",
           "1600x1200 Interlaced";


  ボード情報ファイル(私の場合は boards/s3/764-2.xqa ですが、
どうして彼等がほとんど全部の Hercules ボードを用意している
のに、私の Terminator 64/Dram だけはそうでないのか不思議です)

  [VISUAL]
      BitsPerPixel   = 8;
      MemoryModel    = Packed;
      ColorModel     = Indexed;
      BitsRGB        = 6;
      NumberOfColors = 256;

      [RESOLUTIONS]
      640x480,
      800x600,
      1024x768,
  ->  1168x876,
      1152x900,
      1280x1024

      [DESKTOPS]
      640x480,
      800x600,
      1024x768,
      1152x900,
  ->  1168x876,
      1280x1024,
      1600x1200


 もしドットクロックが充分低いなら(私のボードの場合は違ったけれども)、
エントリーを 16bpp と 32bpp sections に置くこともできます。


 /etc/Xaccel.ini は以下のようになっているでしょう。

       --------------------------------------------------------------
           Board   = "s3/764-2.xqa";
           Monitor = "mfreq/mfreq64.vda";
           Depth   = 8;
       ->  Desktop = 1168x876;

           [RESOLUTIONS]
       ->      1168x876,
               1024x768;


  実際の XInside モードエントリーは etc/Xtimings にあります。

  --------------------------------------------------------------
  [PREADJUSTED_TIMING]
      PreadjustedTimingName = "1168x876 @ 72Hz";

      HorPixel          = 1168;          // pixels
      VerPixel          = 876;           // lines
      PixelWidthRatio   = 4;
      PixelHeightRatio  = 3;
      HorFrequency      = 64.024;        // kHz
      VerFrequency      = 71.138;        // Hz
      ScanType          = NONINTERLACED;
      HorSyncPolarity   = POSITIVE;
      VerSyncPolarity   = POSITIVE;
      CharacterWidth    = 8;             // pixels
      PixelClock        = 105.000;       // MHz
      HorTotalTime      = 15.619;        // (usec) =  205 chars
      HorAddrTime       = 11.124;        // (usec) =  146 chars
      HorBlankStart     = 11.124;        // (usec) =  146 chars
      HorBlankTime      =  4.495;        // (usec) =   59 chars
      HorSyncStart      = 11.962;        // (usec) =  157 chars
      HorSyncTime       =  2.743;        // (usec) =   36 chars
      VerTotalTime      = 14.057;        // (msec) =  900 lines
      VerAddrTime       = 13.682;        // (msec) =  876 lines
      VerBlankStart     = 13.682;        // (msec) =  876 lines
      VerBlankTime      =  0.375;        // (msec) =   24 lines
      VerSyncStart      = 13.698;        // (msec) =  877 lines
      VerSyncTime       =  0.219;        // (msec) =   14 lines


  Xinside サーバが走っている間、パラメータ無しで vgaset プログラム
を走らせて、あなたの変換をチェックすることができます:これで、XFree
の時のようなラインを出力してくれるでしょうし、もし全てうまく行って
いれば、このラインはあなたの最初のラインと等しいでしょう(ただし、も
し b と c が等しければ、私は Xinside でこの状況を確認することができ
ませんでした:最も良い場合は c=b+1 の時でした)


  5. 最後に、、、


 これで全部です、皆さん! 私はこの文章があなたの役に立つことを
期待しています。私が Xinside を買うかどうかわかりません:
Xinside はなかなか良いし、そのテキスト速度は XFree に比べて本当
に信じ難いほどですが( xterm ウインドウ上で xteddy を動かしてみれ
ば、私の言っていることがわかるでしょう)、私はただの学生で払える
お金があまりないのです、、、、
 もちろん、もし Xinside の誰かがこの mini-HOWTO が何らかのサポート
を受ける価値があると考えるなら、私は 1.3 完全版サーバをテストさせ
てくれても何の問題もないです :)


  6.  このプロセスを自動化する

 この小さなスクリプトは仕事のほとんどを自動化してくれます。
 ScanType と2つの Polarity のラインに充分に気をつけてください:
このスクリプトはそれらをセットしないし、もしあなたがあまりになま
けものそれを直せないのなら、あなたのモニタを爆発させる危険は非常
に増大するでしょう。
 私は「ダブルスキャン」フラッグが Xinside で意味を持っているかど
うか知らないことを注意させて下さい:もしあなたが低解像度のダブル
スキャンを変換したいなら、要注意です!リフレッシュレートが二重に
なってしまうため、簡単にモニターを壊してしまえるでしょう。(実際、
私の 400x300@72Hz は 400x300@144Hz になってしまいました!)

       #!/bin/sh
       ###################################################################
       # XF2XInside
       #
       # This script converts modelines from XF86Config format to XInside
       # format as needed for the etc/Xtiming file.
       #
       # This is a quick hack, so don't expect much error checking (not to
       # speak of anything like user friendlyness).
       #
       # If you call it without arguments it should tell you what to do.
       #
       #                               ( July 1996, hcz@tazlwurm.bb.bawue.de)
       #
       # Btw: New modes created as described in the HOWTO work, but don't
       # show up in Xsetup's menu. Anybody who knows why?
       #
       ####################################################################
       # このスクリプトは etc/Xtiming ファイルについて、必要に応じて
       #XF86Config フォーマットから XInside フォーマットに
       #モードラインを変換するものです。
       #
       # これはやっつけ仕事なので、たくさんのエラーチェックを期待しないで
       #ください。(ユーザフレンドリネスみたいなことも言わないでください)
       #
       # 議論はなしで、これを使ってくれれば、何をしてくれるものか
       #わかるでしょう。
       #
       # ところで:新しいモードは HOWTO の仕事の中に書かれているように
       #作られますが、Xsetup のメニューには表示しません。誰か何故だか
       #知っていますか?
       #
       ###################################################################
       #----------------------------------------------- Here we go:
       # Change this if your modeline file lives somewhere else:
       #----------------------------------------------- さあ行こう:
       # あなたのモードラインファイルがどこか他の場所にあるなら
       # ここを書き替えてください。
       XF=/usr/X11/lib/X11/XF86Config
       if [ $# -ne 1 ] ; then
         echo "usage: ${0##*/} <mode>"
         echo " example: ${0##*/} 1024x764"
 echo -e " function: converts $XF modeline entry into\n Xinside Format (stdout
)"         exit 1
       fi
       egrep -i "^[\t ]*modeline.+\"$1\""  /usr/X11/lib/X11/XF86Config |
       gawk '
       NF < 11  { print "! invalid Modeline:\n! " $0 "\n!"; next }
       {
         print "//", $0  ":"
         name = $2
         DOT_CLK = $3;
         A = $4;
         B = $5;
         C = $6;
         D = $7;
         a = $8;
         b = $9;
         c = $10;
         d = $11;
         VerFrequency =  1000000 / ((D / DOT_CLK) * d)
         print "[PREADJUSTED_TIMING]"
         printf "  PreadjustedTimingName = \"%dx%d @ %.0dHz\";\n", A, a, VerFrequency
         print "  HorPixel\t\t= " A ";"
         print "  VerPixel\t\t= " a ";"
         print "  PixelWidthRatio\t= 4;\n  PixelHeightRatio\t= 3;"
         print "  HorFrequency\t\t= " DOT_CLK / D * 1000 ";\t// kHz"
         print "  VerFrequency\t\t= " VerFrequency  ";\t// Hz"
         print "  ScanType\t\t= NONINTERLACED;\t\t// *CHECK*"
         print "  HorSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*"
         print "  VerSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*"
         print "  CharacterWidth\t= 8;"
         print "  PixelClock\t\t= " DOT_CLK ";"
         HorTotalTime = D / DOT_CLK
         print "  HorTotalTime\t\t= " HorTotalTime ";"
         print "  HorAddrTime \t\t= " A / DOT_CLK ";"
         print "  HorBlankStart\t\t= " A / DOT_CLK ";"
         print "  HorBlankTime\t\t= " D / DOT_CLK - A / DOT_CLK ";"
         print "  HorSyncStart\t\t= " B / DOT_CLK ";"
         print "  HorSyncTime\t\t= " C / DOT_CLK - B / DOT_CLK ";"
         VerTotalTime  = ( HorTotalTime * d ) / 1000
         print "  VerTotalTime\t\t= " VerTotalTime ";"
         print "  VerAddrTime\t\t= " ( HorTotalTime * a ) / 1000 ";"
         VerBlankStart = ( HorTotalTime * a ) / 1000
    print "  VerBlankStart\t\t= " VerBlankStart ";"
    print "  VerBlankTime\t\t= " VerTotalTime - VerBlankStart ";"
    print "  VerSyncStart\t\t= " ( HorTotalTime * b ) / 1000 ";"
    print "  VerSyncTime\t\t= " ( HorTotalTime * ( c - b ) ) / 1000
    print ""
  }'


  7.  感謝

  Heike Claudia Zimmerer hcz@tazlwurm.bb.bawue.de が、小さな矛盾を
指摘し、仕事のほとんどを自動化してくれるスクリプトを送ってくれた
ことを感謝します。


  8. コピーライト/法律関係

  Marco Melgazzi (s64912@athena.polito.it) が著作権(1996)を有する
-- GPL(Gnu Public License)を適用。GPL のコピーを得るには以下の住所に
連絡を取ってください。Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA.
 各商標はその所有者のものです。この文章の情報の正確さ、有用性に
ついては何の保証もいたしません。

以下、原文。
  (c)opyright 1996 by Marco Melgazzi (s64912@athena.polito.it) - the GPL
  (Gnu Public License) applies. To obtain a copy of the GPL write to the
  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
  USA.
  Trademarks are owned by their owners. There is no warranty on the
  accuracy and/or the usefulness of the information given in this
  document.

(訳者注: Marco Melgazzi 氏のメイルアドレスは現在、marco@techie.com
が主になっています)

次のページ 前のページ 目次へ