  Linux XFree-to-XInside mini-HOWTO
  by Marco Melgazzi, s64912@athena.polito.it
  version 1.0 / 1996 May

  How to convert an XFree86 modeline into an XInside one

  1.  Introduction

  During the past few months I've seen a lot of posts in comp.os.linux.x
  asking how to convert video modes between XFree86 and one of its
  commercial alternatives: XInside.

  I had evaluated before the product and had this evaluation version
  still floating on my hard disk: since I like problem solving, I've
  decided to give it a try and, after a couple of hours of fiddling and
  calculating, I came up with an informative article that was promptly
  posted.

  The discussions about how to convert suddendly vanished and I received
  1 (one) mail thanking me for the article so, since maybe somebody else
  could need this information in the future, I decided to transform that
  post in the mini-HOWTO you are reading.

  Let me state something first: I do NOT work for XInside and I only had
  access to the evaluation 1.2 version for Linux. Fiddling with monitor
  timings can be hazardous and, for this reason, I absolutely make no
  guarantees. If it works for you , fine, if you blow up your computer I
  shall not be held responsible for it.

  As you may have noticed from may name, I'm not a native speaker of
  English so you will probably find some errors here and there, I
  apologize for them and I ask you to please avoid flooding my mailbox
  with language-related flames. Thanks !

  2.  Why should I need it ?

  I think that the Xinside policy of not giving you an utility to tweak
  your video modes ( like xvidtune ) and/or to import your existing
  XFree ones in the evaluation ( and AFAIK commercial ) version is
  incomprehensible.  I've spent about three hours putting this together
  ( hint: I've compared the VESA 1024x768@70Hz entry in the two
  formats... and, besides, I'm nearly an electronic engineer ;-) while
  an Xinside programmer could have written it in a fraction of this
  time...

  I haven't downloaded the 1.3 evaluation version and I really hope they
  have fixed this. Well, if they have, this mini-HOWTO could be
  considered useless but, alas, if you read it you will learn something
  more about how everything works...

  3.  Let's go

  Let's say that you have your oh-so-tweaked XFree86 mode and you want
  to evaluate Xinside in the same conditions: we wil use my 'normal'
  video mode as an example and I will explain what you will have to do
  to convert it.

  An Xfree86 entry looks like this:

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

  Every one of the A-B and 1-4 numbers has a meaning: RTFM !  Anyway you
  don't need to know the theory behind all this to do a succesful
  conversion...

  My modeline in /usr/lib/X11/XF86Config for example is:

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

  In Xinside you have to add an entry in the Xtimings file wich should
  be located in etc/ ( from now on we suppose you are in the top Xaccel
  directory, or /usr/X11/lib/X11/AcceleratedX )

  !    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 !

  Now you have to put this newly created mode in the files shown below
  in the appropriate place.

  4.  Fixing up things

  In the excerpts shown below the -> sign tells you what was modified:
  do NOT include it in your files!

  Monitor entry ( mine is 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";

  Board info file ( mine is boards/s3/764-2.xqa , I wonder why they have
  nearly all the Hercules boards but not MINE: 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

  If the dot clock is low enough ( NOT in this case for my board ) you
  can put the entry even in the 16bpp and 32bpp sec- tions.

  The /etc/Xaccel.ini will look something like this

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

           [RESOLUTIONS]
       ->      1168x876,
               1024x768;

  The actual Xinside mode entry in etc/Xtimings

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

      HorPixel          = 1168;          // pixels
      VerPixel          = 876;           // lines
      PixelWidthRatio   = 4;
      PixelHeightRatio  = 3;
      HorFrequency      = 64.180;        // 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

  You can check your conversion by running the vgaset program with no
  parameters while running the Xinside serrver: it will output an XFree-
  like line and, if everything went OK, this line will be equal to the
  line you started from ( except if b and c are equal, I haven't been
  able to reproduce this situation in Xinside: the best case was c=b+1
  ).

  5.  The end...

  That's all folks ! I hope this will be useful to you. I don't know if
  I'll buy Xinside: it's quite good and the text speed is really
  unbelievable compared to XFree ( try to move xteddy over an xterm
  window to understand what I mean ) but I'm only a student and I don't
  have a lot of money to spend...

  Of course, if somebody at XInside thinks that this mini-HOWTO is worth
  some support, I wouldn't really mind an 1.3 complete server to 'test'.

  6.  copyright/legalese

  (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.

