  Linux XFree-to-Xinside mini-HOWTO
  by Marco Melgazzi, marco@techie.com
  v1.3, September 1997
  JF Project, JF@linux.or.jp
  v1.3j, September 1997

  XFree86 ̃[hC XInside/XiGraphics ̃[hCɕϊ
  @B
  ______________________________________________________________________

  ڎ

  1. ͂߂
  2. [hϊȂKvH
  3. Ă݂悤I
  4. Fixing up things
  5. Ō...
  6. 菇̎
  7. ӎ
  8. 쌠ɂ
     8.1 {ɂ

  ______________________________________________________________________

  1.  ͂߂

  1996N̏tAj[XO[v comp.os.linux.x ɂ XFree86  X ̏p
  łł XInside Ƃ̊ԂŃrfI[hǂ̂悤ɕϊ΂Ƃ
  ₪eĂ܂ (XInside ͌ XiGraphics Ƃ
  ɕύXĂ܂BA̕ł͌Âi̕gĂ܂B
  Ă͎̂ XInside ̕ł)B

  XInside iƂĔ\OɎ̓j^[Ă̂ŁA̕]
  ł܂̃n[hfBXNɎcĂ܂B̂D
  Ȏ́A̖Ɏgł݂悤ƎvA2, 3 Ԃ낢낢Čv
  ZAx̐ʂoƂAɃj[XO[vɓ
  e܂B

  [hCϊɂĂ̋c_̂͊ԂȂĂ܂܂A
  ł͎̓eɑ΂ʂ̊ӂ̃[܂B䂦A
  炭̐A܂̒N̏KvƂ邩ȂƎvA
  ̎̓e mini-HOWTO ɂ܂Ƃ߂悤ƌӂ܂BꂪA܂
  ̓ǂł邱̕łB

  ܂ŏɂqׂĂB́AXInside ̊֌W҂ł͂
  Bĝ XInside  Linux p] v1.2 łAŋ߂
   (1997N5)AAccelX ̃o[W 3.1 ɂȂĂ܂BA
  ̕ɋLڂ́AƂŐVłɂ̂܂ܓĂ͂܂킯ł͂Ȃ
  ALƎvĂ܂B

   HOWTO ͔ɌÂ XInside ̃o[WɊÂĉĂ
  ŁALڂ̈ꕔ݂͌ł͕KmłȂ܂Bq
  悤ɁAXFree 3.2 oŁA͏p X T[ow܂
  łBpT[owꂽŁA{ɕsmȏ񂪂邱ƂɋC
  Âꂽ́A񎄂Ƀ[ŋĂB

  ӂׂȂ̂́Aj^̃^C~OƂ͎̂vʎ̂̏
  ɂȂƂƂłB䂦AƂĂ͈؂̕ۏ؂͂ł܂B
  肭ΖȂłARs[^΂𕬂ƂĂ͂̐
  C𕉂܂B

  ̖O琄Ǝv܂A̕ꍑ͉pł͂܂B
  炭p̌肪Ƃɂ͂łBɂĂ͂lт
  ɁApɊւ鎶ӂŎ̃[{bNXĂ܂ƂȂ
  ڂɌĂ΂Ǝv܂B

  2.  [hϊȂKvH

  ] (яp AFAIK) ɂāArfI[hŌo
  (xvidtune ̂悤) [eBeBA XFree T[õrfI[
  hC|[g郆[eBeB񋟂Ȃ Xinside ̕j́A
  ꂵ݂܂B̍Ƃ(蓮)ŝɁA 3 Ԋ|܂ (Ƃ
  qgF VESA 1024x768@70Hz ̃GgɊւ闼҂̃tH[}bgr
  ܂ (dqHw̃GWjA݂ ;-) )B3 Ԃ΁AXinside ̃v
  O}Ƃ͂Ȃ̂ł....

  ̓o[W 1.3 ȍ~̕]ł_E[hĂ܂񂪁AXinside
  ̊֌W҂ɂ͐񂱂̕sPĂقƍlĂ܂BƂ
  AoȂ΂ mini-HOWTO ͖pɂȂƂv
  Ał̎dg݂Ɋւđ̗𑣐îɂ͂Ȃ邩
  v܂B

  3.  Ă݂悤I

  ɂꂱꂢ񂵂 XFree86 [hA Xinside ɂ̂
  ܈ڂƂ󋵂łƂ܂B̏ꍇAȉ̎菇𓥂߂΁A
  邱Ƃo܂Bł͎̃ftHg̃rfI[h
  āÃ[h̕ϊ@܂B

  XFree86 ̃Gĝ͎悤ɂȂĂ܂B

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

  A  D  a  d ɂ͂ꂼʂ̈Ӗ܂Bڂ́A
  uThe Hitchhiker's Guide to X386/XFree86 Video Timinigv
  (/usr/lib/X11/doc/VideoModes.doc) ė~̂łAb_m
  ȂĂϊ͖̂ȂsƂo܂B

   /usr/lib/X11/XF86Config ̃[hĈ͎悤Ȃ̂łB

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

  Xinside ł́AGg Xtimings t@CɒǉāÃt@C
  etc/ ɒuKv܂ (́A/usr/X11/lib/X11/AcceleratedX
  Ƃ Xaccel ̃gbvfBNgN_ɂĘbi߂܂)B

  !    Somewhere in the file, put here the name you want

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

  !
  !    These four are obvious
  !
      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
  !
      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 !

  BBBB

  4.  Fixing up things

  ȉ̋Lq -> L͕ύX{Ă܂Bt@Cɂ͏
  ܂ȂłB

  Monitor Gg (̏ꍇAmonitors/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";

  rfIJ[ht@C (̏ꍇ boards/s3/764-2.xqa łA
  Hercules J[h͂قƂǑSΉĂ̂ɁAǂĎ
  Terminator 64/Dram Ă̂svcł)

  [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

  hbgNbN[ႢȂ (̃rfIJ[h͂قǒႭȂ
  ł)AGg[ 16bpp  32bpp sections ɒuƂł܂B

  /etc/Xaccel.ini ͈ȉ̂悤ɂȂĂł傤B

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

           [RESOLUTIONS]
       ->      1168x876,
               1024x768;

  etc/Xtimings ɂۂ Xinside [hGĝ͎悤Ȃ̂łB

  --------------------------------------------------------------
  [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 T[oĂԁAp[^ vgaset vO𑖂
  āAȂ̕ϊ`FbN邱Ƃł܂FŁAXFree ̎̂
  ȃCo͂Ăł傤ASĂ܂sĂ΁A
  C͂Ȃ̍ŏ̃CƓł傤(A b  c 
  ΁A Xinside ł̏󋵂mF邱Ƃł܂łF
  ǂꍇ c=b+1 ̎ł)

  5.  Ō...

  őSłB̕Ȃ̖ɗƂ҂Ă܂B߂
  A XiGraphics T[o𔃂Ƃ͂Ȃł傤BƂ̂A
  XFree86 3.2 [XꂽƂŁAgĂ Trio 64 rfIJ[
  hł[ȃeLXg\xo悤ɂȂłB

  Ƃ͂AXiGraphics T[oT|[g`bvZbgƃrfIJ[h
  XFree86 ƕL̂ŁApT[og肪Ȃꍇ
  ł傤BꍇAXiGraphics T[owȂȀ̕
  񂪖ɗA̊zm点ĂƎv
  B

  6.  菇̎

  ȉ̃XNvggƁA菇̑唼o܂BScanType  2 
   Polarity line ɂ͏[ӂĂB̃XNvg͂̐
  ͍sȂ̂ŁAK؂ȒȂƃj^΂𕬂\܂
  B

   Xinside ɂ "Doublescan" tOӖĂ邩ǂm
  ܂B䂦A𑜓x doublescan [hɕϊ悤Ƃ
  ꍇ́AӂĂBtbV[g{ɂȂĂ܂̂ŁA
  j^ɉĂ܂܂ (ہȀꍇ 400x300@72Hz 
  400x300@144Hz ɂȂĂ܂܂I)B

       #!/bin/sh
       ##########################################################################
       # XF2XInside
       #
       # ̃XNvǵAXF86Config tH[}bg modeline  XInside 
       # tH[}bgɕϊ̂łB etc/Xtiminig t@CŕKv
       # Ƃ̂łB
       #
       # dȂ̂ŁAG[`FbN͂قƂǂ܂
       # ([UthłȂȂǂƌȂł)B
       #
       # ȂŎsƁAg\܂B
       #
       #                               ( July 1996, hcz@tazlwurm.bb.bawue.de)
       #
       # Btw:  HOWTO ̋Lڂǂɍ쐬ꂽV[h́AȂ
       # @\̂łAXsetup ̃j[\܂B
       # ȂmĂl܂H
       #
       ##########################################################################
       #----------------------------------------------- F
       # ȉȂ modeline t@C̒uꏊɉĕҏWĂ
       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.  ӎ

  o  Heike Claudia Zimmerer, <hcz@tazlwurm.bb.bawue.de> ́ALq̖
     wEƓɁAƂ̑唼XNvg𑗂Ă܂
     B

  o  Bartosz Maruszewski, <B.Maruszewski@zsmeie.torun.pl> ́A̕
     |[hɖ|󂷂ƂƂɁAtypo ̎wEĂ܂B

  8.  쌠ɂ

  (c)opyright 1996-7 by Marco Melgazzi (marco@techie.com) -

  ̕ɂ́AGPL (GNU Public License) Kp܂BGPL ̃Rs[
  肷ɂ́AFree Software Foundation, Inc., 675 Mass Ave, Cambridge,
  MA 02139, USA Ɏ莆ĂB

  eẂȀL҂LĂ܂B̕ɋLڂɂ
  ẮA̐mELpɂĔ@Ȃۏ؂܂B

  8.1.  {ɂ

  {F͂ <hara@access.co.jp> (1997/01/27)
  Z    FUTi <ysenda@pop01.odn.ne.jp> (2001/10/06)

