home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / mini / XFree86-XInside < prev    next >
Text File  |  1998-05-08  |  15KB  |  529 lines

  1.   Linux XFree-to-Xinside mini-HOWTO
  2.   by Marco Melgazzi, marco@techie.com
  3.   v1.3, September 1997
  4.  
  5.   How to convert an XFree86 modeline into an XInside/XiGraphics one
  6.   ______________________________________________________________________
  7.  
  8.   Table of Contents
  9.  
  10.  
  11.   1. Introduction
  12.  
  13.   2. Why should I need it ?
  14.  
  15.   3. Let's go
  16.  
  17.   4. Fixing up things
  18.  
  19.   5. The end...
  20.  
  21.   6. Automating the process
  22.  
  23.   7. Thanks to
  24.  
  25.   8. Copyright/legalese
  26.  
  27.  
  28.  
  29.   ______________________________________________________________________
  30.  
  31.   1.  Introduction
  32.  
  33.   During the spring of 1996 I've seen a lot of posts in comp.os.linux.x
  34.   asking how to convert video modes between XFree86 and one of its
  35.   commercial alternatives: XInside ( now named XiGraphics, note anyway
  36.   that in this document I'll use the old product name, since I will
  37.   mainly refer to that version )
  38.  
  39.   I had evaluated before the product and had this evaluation version
  40.   still floating on my hard disk: since I like problem solving, I've
  41.   decided to give it a try and, after a couple of hours of fiddling and
  42.   calculating, I came up with a supposedly informative article that was
  43.   promptly posted.
  44.  
  45.   The discussions about how to convert suddendly vanished and I received
  46.   1 (one) mail thanking me for the article so, since maybe somebody else
  47.   could need this information in the future, I decided to transform that
  48.   post in the mini-HOWTO you are reading.
  49.  
  50.   Let me state something first: I do NOT work for XInside and I only had
  51.   access to the evaluation 1.2 version for Linux. I know that nowadays (
  52.   May 97 ) AccelX has reached revision 3.1, but I do think that the
  53.   information included in this document, if not verbatim, is still
  54.   applicable.
  55.  
  56.   Due to the fact that this HOWTO has been written with the help of a
  57.   pretty old Xinside version, it may well happen that some of the
  58.   information contained here is not completely accurate: as you will
  59.   read later, thanks to the birth of XFree 3.2, I haven't bought this
  60.   commercial server, so if you have, and if you notice any incorrect
  61.   information here please take the time to email me.
  62.  
  63.   Notice anyway that fiddling with monitor timings can be hazardous and,
  64.   for this reason, I absolutely make no guarantees. If it works for you
  65.   , fine, if you blow up your computer I shall not be held responsible
  66.   for it.
  67.   As you may have noticed from may name, I'm not a native speaker of
  68.   English so you will probably find some errors here and there, I
  69.   apologize for them and I ask you to please avoid flooding my mailbox
  70.   with language-related flames. Thanks !
  71.  
  72.  
  73.  
  74.   2.  Why should I need it ?
  75.  
  76.  
  77.   I think that the Xinside policy of not giving you an utility to tweak
  78.   your video modes ( like xvidtune ) and/or to import your existing
  79.   XFree ones in the evaluation ( and AFAIK commercial ) version is
  80.   incomprehensible.  I've spent about three hours putting this together
  81.   ( hint: I've compared the VESA 1024x768@70Hz entry in the two formats
  82.   ( and I'm nearly an electronic engineer ;-)) while an Xinside
  83.   programmer could have written a comparable article in a fraction of
  84.   this time...
  85.  
  86.   I haven't downloaded any evaluation version from 1.3 onwards and I
  87.   really hope they have fixed this. Well, if they have, this mini-HOWTO
  88.   could be considered useless but, alas, if you read it you will learn
  89.   something more about how everything works...
  90.  
  91.  
  92.   3.  Let's go
  93.  
  94.   Let's suppose that you have your oh-so-tweaked XFree86 mode and you
  95.   want to evaluate Xinside in the same conditions: follow the steps
  96.   described below and you should be able to do it; we will use my
  97.   default video mode as a real-life example and I will explain what you
  98.   will have to do to convert it.
  99.  
  100.   An Xfree86 entry looks like this:
  101.  
  102.  
  103.  
  104.        Modeline "blahblah" DOTCLK  A B C D  a b c d
  105.  
  106.  
  107.  
  108.  
  109.   Every one of the A-D and a-d numbers has a meaning: if you want you
  110.   can search for it in the 'The Hitchhiker's Guide to X386/XFree86 Video
  111.   Timing' ( /usr/lib/X11/doc/VideoModes.doc ) but you don't need to know
  112.   the theory behind all this to perform a succesful conversion...
  113.  
  114.   My modeline in /usr/lib/X11/XF86Config is:
  115.  
  116.  
  117.  
  118.        Modeline "1168x876" 105  1168 1256 1544 1640  876 877 891 900
  119.                             |     |    |    |    |    |   |   |   |
  120.                          DOT_CLK  A    B    C    D    a   b   c   d
  121.  
  122.  
  123.  
  124.  
  125.   In Xinside, you have to add an entry in the Xtimings file, which
  126.   should be located in etc/ ( from now on we suppose you are in the top
  127.   Xaccel directory that should be something like
  128.   /usr/X11/lib/X11/AcceleratedX )
  129.  
  130.  
  131.  
  132.  
  133.   !    Somewhere in the file, put here the name you want
  134.  
  135.   [PREADJUSTED_TIMING]
  136.       PreadjustedTimingName = "1168x876 @ 72Hz";
  137.  
  138.   !
  139.   !    These four are obvious
  140.   !
  141.       HorPixel          = 1168;         // pixels
  142.       VerPixel          = 876;          // lines
  143.       PixelWidthRatio   = 4;
  144.       PixelHeightRatio  = 3;
  145.  
  146.   !
  147.   !   hsync: DOT_CLK / D * 1000 [KHz]
  148.   !
  149.   !   hsync = 105 / 1640 * 1000 = 64.024 KHz
  150.   !
  151.   !   vsync: ( 1 / (( D / DOT_CLK ) * d) ) * 1,000,000 [Hz]
  152.   !
  153.   !   vsync: ( 1 / (( 1640 / 105 ) * 900) ) * 1,000,000
  154.   !           ( 1 / 14057.1428571 ) * 1,000,000 = 71.138 Hz
  155.   !
  156.  
  157.       HorFrequency      = 64.180;        // kHz
  158.       VerFrequency      = 71.138;        // Hz
  159.  
  160.   !   Obvious
  161.  
  162.       ScanType          = NONINTERLACED;
  163.  
  164.   !
  165.   !   Put here the +/-hsync +/-vsync XFree86 options
  166.   !
  167.       HorSyncPolarity   = POSITIVE;
  168.       VerSyncPolarity   = POSITIVE;
  169.  
  170.   !   Shouldn't change
  171.  
  172.       CharacterWidth    = 8;             // pixels
  173.  
  174.   !   DOT_CLK here
  175.  
  176.       PixelClock        = 105.000;       // MHz
  177.   !
  178.   !
  179.   !   horizontal timings section: [usec]
  180.   !
  181.       HorTotalTime  = D / DOT_CLK                  = 15.619;
  182.       HorAddrTime   = A / DOT_CLK                  = 11.124;
  183.       HorBlankStart = A / DOT_CLK                  = 11.124;
  184.       HorBlankTime  = HorTotalTime - HorBlankStart =  4.495;
  185.       HorSyncStart  = B / DOT_CLK                  = 11.962;
  186.       HorSyncTime   = C / DOT_CLK - HorSyncStart   =  2.743;
  187.  
  188.    !
  189.    !  vertical timings section:    [msec]
  190.    !
  191.  
  192.       VerTotalTime  = ( HorTotalTime * d ) / 1000  = 14.057;
  193.       VerAddrTime   = ( HorTotalTime * a ) / 1000  = 13.682;
  194.       VerBlankStart = ( HorTotalTime * a ) / 1000  = 13.682;
  195.       VerBlankTime  = VerTotalTime - VerBlankStart =  0.375;
  196.       VerSyncStart  = ( HorTotalTime * b ) / 1000  = 13.698;
  197.       VerSyncTime   = ( HorTotalTime * ( c - b ) ) / 1000
  198.                                                    = 0.219
  199.    ! Finished !
  200.  
  201.  
  202.  
  203.  
  204.   Now you have to put this newly created mode in the files shown below
  205.   in the appropriate place.
  206.  
  207.  
  208.   4.  Fixing up things
  209.  
  210.   In the excerpts shown below the -> sign tells you what was modified:
  211.   do NOT include it in your files!
  212.  
  213.   Monitor entry ( mine is monitors/mfreq/mfreq64.vda)
  214.  
  215.  
  216.  
  217.            [ESTABLISHED_TIMINGS]
  218.                "640x480 @ 60Hz",
  219.                "640x480 @ 72Hz",
  220.                "640x480 @ 75Hz",
  221.                "800x600 @ 56Hz",
  222.                "800x600 @ 60Hz",
  223.                "800x600 @ 72Hz",
  224.                "800x600 @ 75Hz",
  225.                "1024x768 Interlaced",
  226.                "1024x768 @ 60Hz",
  227.                "1024x768 @ 70Hz",
  228.                "1024x768 @ 75Hz",
  229.            "1152x900 Interlaced",
  230.                "1152x900 @ 60Hz",
  231.                "1152x900 @ 67Hz",
  232.        ->      "1168x876 @ 72Hz",
  233.                "1280x1024 Interlaced",
  234.                "1280x1024 @ 60Hz",
  235.            "1600x1200 Interlaced";
  236.  
  237.  
  238.  
  239.  
  240.   Board info file ( mine is boards/s3/764-2.xqa , I wonder why they have
  241.   nearly all the Hercules boards but not MINE: Terminator 64/Dram )
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.   [VISUAL]
  266.       BitsPerPixel   = 8;
  267.       MemoryModel    = Packed;
  268.       ColorModel     = Indexed;
  269.       BitsRGB        = 6;
  270.       NumberOfColors = 256;
  271.  
  272.       [RESOLUTIONS]
  273.       640x480,
  274.       800x600,
  275.       1024x768,
  276.   ->  1168x876,
  277.       1152x900,
  278.       1280x1024
  279.  
  280.       [DESKTOPS]
  281.       640x480,
  282.       800x600,
  283.       1024x768,
  284.       1152x900,
  285.   ->  1168x876,
  286.       1280x1024,
  287.       1600x1200
  288.  
  289.  
  290.  
  291.  
  292.   If the dot clock is low enough ( NOT in this case for my board ) you
  293.   can put the entry even in the 16bpp and 32bpp sec- tions.
  294.  
  295.   The /etc/Xaccel.ini will look something like this
  296.  
  297.  
  298.  
  299.        --------------------------------------------------------------
  300.            Board   = "s3/764-2.xqa";
  301.            Monitor = "mfreq/mfreq64.vda";
  302.            Depth   = 8;
  303.        ->  Desktop = 1168x876;
  304.  
  305.            [RESOLUTIONS]
  306.        ->      1168x876,
  307.                1024x768;
  308.  
  309.  
  310.  
  311.  
  312.   The actual Xinside mode entry in etc/Xtimings
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.   --------------------------------------------------------------
  332.   [PREADJUSTED_TIMING]
  333.       PreadjustedTimingName = "1168x876 @ 72Hz";
  334.  
  335.       HorPixel          = 1168;          // pixels
  336.       VerPixel          = 876;           // lines
  337.       PixelWidthRatio   = 4;
  338.       PixelHeightRatio  = 3;
  339.       HorFrequency      = 64.024;        // kHz
  340.       VerFrequency      = 71.138;        // Hz
  341.       ScanType          = NONINTERLACED;
  342.       HorSyncPolarity   = POSITIVE;
  343.       VerSyncPolarity   = POSITIVE;
  344.       CharacterWidth    = 8;             // pixels
  345.       PixelClock        = 105.000;       // MHz
  346.       HorTotalTime      = 15.619;        // (usec) =  205 chars
  347.       HorAddrTime       = 11.124;        // (usec) =  146 chars
  348.       HorBlankStart     = 11.124;        // (usec) =  146 chars
  349.       HorBlankTime      =  4.495;        // (usec) =   59 chars
  350.       HorSyncStart      = 11.962;        // (usec) =  157 chars
  351.       HorSyncTime       =  2.743;        // (usec) =   36 chars
  352.       VerTotalTime      = 14.057;        // (msec) =  900 lines
  353.       VerAddrTime       = 13.682;        // (msec) =  876 lines
  354.       VerBlankStart     = 13.682;        // (msec) =  876 lines
  355.       VerBlankTime      =  0.375;        // (msec) =   24 lines
  356.       VerSyncStart      = 13.698;        // (msec) =  877 lines
  357.       VerSyncTime       =  0.219;        // (msec) =   14 lines
  358.  
  359.  
  360.  
  361.  
  362.   You can check your conversion by running the vgaset program with no
  363.   parameters while running the Xinside server: it will output an XFree-
  364.   like line and, if everything went OK, this line will be equal to the
  365.   line you started from ( except if b and c are equal, I haven't been
  366.   able to reproduce this situation in Xinside: the best case was c=b+1
  367.   ).
  368.  
  369.  
  370.   5.  The end...
  371.  
  372.   That's all folks ! I hope this will be useful to you. I don't think
  373.   I'll buy the XiGraphics server in the near future for one simple
  374.   reason: the release of XFree86 3.2 solved all of the text speed
  375.   problems I was having on my humble Trio 64 video board ;)
  376.  
  377.   It seems anyway that the XiGraphics server supports a much wider array
  378.   of chipsets and video boards than XFree, so it may well happen that
  379.   the commercial 'alternative' is the only viable one for you. If this
  380.   is the case, and you bought the XiGraphics server, I would really like
  381.   to hear from you to know if the information presented here has been
  382.   useful to you, or if you found it too complex or whatever.
  383.  
  384.  
  385.   6.  Automating the process
  386.  
  387.   This small script automates most of the work. Be very careful with the
  388.   ScanType and with the two Polarity lines: the script do not set them
  389.   and, if you are too lazy to correct them, the risks of blowing up your
  390.   monitor increase quite a lot.
  391.  
  392.   Notice that I don't know if the 'Doublescan' flag has meaning in
  393.   XInside: if you try to convert a low-res doublescan mode BE CAREFUL,
  394.   you can easily kill your monitor since the refresh rate that you get
  395.   is doubled ( in fact my 400x300@72Hz became a 400x300@144Hz !).
  396.  
  397.        #!/bin/sh
  398.        ##########################################################################
  399.        # XF2XInside
  400.        #
  401.        # This script converts modelines from XF86Config format to XInside
  402.        # format as needed for the etc/Xtiming file.
  403.        #
  404.        # This is a quick hack, so don't expect much error checking (not to
  405.        # speak of anything like user friendlyness).
  406.        #
  407.        # If you call it without arguments it should tell you what to do.
  408.        #
  409.        #                               ( July 1996, hcz@tazlwurm.bb.bawue.de)
  410.        #
  411.        # Btw: New modes created as described in the HOWTO work, but don't
  412.        # show up in Xsetup's menu. Anybody who knows why?
  413.        #
  414.        ##########################################################################
  415.        #----------------------------------------------- Here we go:
  416.        # Change this if your modeline file lives somewhere else:
  417.        XF=/usr/X11/lib/X11/XF86Config
  418.        if [ $# -ne 1 ] ; then
  419.          echo "usage: ${0##*/} <mode>"
  420.          echo " example: ${0##*/} 1024x764"
  421.          echo -e " function: converts $XF modeline entry into\n Xinside Format (stdout)"
  422.          exit 1
  423.        fi
  424.        egrep -i "^[\t ]*modeline.+\"$1\""  /usr/X11/lib/X11/XF86Config |
  425.        gawk '
  426.        NF < 11  { print "! invalid Modeline:\n! " $0 "\n!"; next }
  427.        {
  428.          print "//", $0  ":"
  429.          name = $2
  430.          DOT_CLK = $3;
  431.          A = $4;
  432.          B = $5;
  433.          C = $6;
  434.          D = $7;
  435.          a = $8;
  436.          b = $9;
  437.          c = $10;
  438.          d = $11;
  439.          VerFrequency =  1000000 / ((D / DOT_CLK) * d)
  440.          print "[PREADJUSTED_TIMING]"
  441.          printf "  PreadjustedTimingName = \"%dx%d @ %.0dHz\";\n", A, a, VerFrequency
  442.          print "  HorPixel\t\t= " A ";"
  443.          print "  VerPixel\t\t= " a ";"
  444.          print "  PixelWidthRatio\t= 4;\n  PixelHeightRatio\t= 3;"
  445.          print "  HorFrequency\t\t= " DOT_CLK / D * 1000 ";\t// kHz"
  446.          print "  VerFrequency\t\t= " VerFrequency  ";\t// Hz"
  447.          print "  ScanType\t\t= NONINTERLACED;\t\t// *CHECK*"
  448.          print "  HorSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*"
  449.          print "  VerSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*"
  450.          print "  CharacterWidth\t= 8;"
  451.          print "  PixelClock\t\t= " DOT_CLK ";"
  452.          HorTotalTime = D / DOT_CLK
  453.          print "  HorTotalTime\t\t= " HorTotalTime ";"
  454.          print "  HorAddrTime \t\t= " A / DOT_CLK ";"
  455.          print "  HorBlankStart\t\t= " A / DOT_CLK ";"
  456.          print "  HorBlankTime\t\t= " D / DOT_CLK - A / DOT_CLK ";"
  457.          print "  HorSyncStart\t\t= " B / DOT_CLK ";"
  458.          print "  HorSyncTime\t\t= " C / DOT_CLK - B / DOT_CLK ";"
  459.          VerTotalTime  = ( HorTotalTime * d ) / 1000
  460.          print "  VerTotalTime\t\t= " VerTotalTime ";"
  461.          print "  VerAddrTime\t\t= " ( HorTotalTime * a ) / 1000 ";"
  462.          VerBlankStart = ( HorTotalTime * a ) / 1000
  463.     print "  VerBlankStart\t\t= " VerBlankStart ";"
  464.     print "  VerBlankTime\t\t= " VerTotalTime - VerBlankStart ";"
  465.     print "  VerSyncStart\t\t= " ( HorTotalTime * b ) / 1000 ";"
  466.     print "  VerSyncTime\t\t= " ( HorTotalTime * ( c - b ) ) / 1000
  467.     print ""
  468.   }'
  469.  
  470.  
  471.  
  472.  
  473.  
  474.   7.  Thanks to
  475.  
  476.  
  477.   ╖  Heike Claudia Zimmerer hcz@tazlwurm.bb.bawue.de for pointing out a
  478.      small inconsistency and for sending me a script that automates most
  479.      of the work.
  480.  
  481.   ╖  Bartosz Maruszewski B.Maruszewski@zsmeie.torun.pl for translating
  482.      this mini HOWTO in Polish and for pointing out a small typo.
  483.  
  484.  
  485.   8.  Copyright/legalese
  486.  
  487.   (c)opyright 1996-7 by Marco Melgazzi (marco@techie.com) - the GPL (Gnu
  488.   Public License) applies. To obtain a copy of the GPL write to the Free
  489.   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  490.  
  491.   Trademarks are owned by their owners. There is no warranty on the
  492.   accuracy and/or the usefulness of the information given in this
  493.   document.
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.