home *** CD-ROM | disk | FTP | other *** search
/ Enter 1999 April - Disc 1 / enter_04_1999_1.iso / OS2 / XFREE86 / XDOC.ZIP / XFree86 / lib / X11 / doc / README.Config < prev    next >
Encoding:
Text File  |  1999-01-09  |  21.1 KB  |  661 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.                    Configuring XFree86: A Step-By-Step Guide
  11.  
  12.                  David Wexelblat and The XFree86 Project, Inc
  13.  
  14.                                 5 October 1994
  15.  
  16.  
  17.  
  18.                                    Abstract
  19.  
  20.           This document describes how to set up your XFree86 server and
  21.      the corresponding XF86Config configuration file.  If you follow the
  22.      procedures in this document, you should have no problems getting your
  23.      server up and running quickly.       This document is designed to be
  24.      generic.  Be certain to refer to the operating system specific README
  25.      file for your OS (e.g.  README.SVR4) and the card/chipset specific
  26.      README file for you video card (e.g. README.trident).  Where these
  27.      specific files contradict this generic file, you should follow the
  28.      specific instructions (there shouldn't be much of that, though).
  29.  
  30.  
  31.  
  32. 1.  Procedure Overview
  33.  
  34. There are two steps to getting things up and running.  The first is to select
  35. the appropriate server that you will be using and set it up as the default
  36. server.  The second step is to set up the XF86Config file.  This file is used
  37. to configure the server for your pointer device (e.g. mouse, trackball), video
  38. card, and monitor, as well as a few other things.
  39.  
  40. The XF86Config file contains several sections; these procedures will lead you
  41. through filling out each part.  There is a default/sample XF86Config file in
  42. /usr/X11R6/lib/X11/XF86Config.sample; you should copy this to
  43. /usr/X11R6/lib/X11/XF86Config, and edit that file to your specific configura-
  44. tion.  The XF86Config(4/5) manual page describes the XF86Config file contents
  45. and options in detail.  Be sure to read through that manual page as you fill in
  46. your XF86Config file.
  47.  
  48. The sections of the XF86Config file are:
  49.  
  50.       Files
  51.             Sets the default font and RGB paths.
  52.  
  53.       Server Flags
  54.             Sets a few general server options.  Refer to the manual page to
  55.             learn about these.
  56.  
  57.       Keyboard
  58.             Sets up keyboard devices, and sets a few optional parameters.
  59.  
  60.       Pointer
  61.             Sets up the pointer devices, and sets a few optional parameters.
  62.  
  63.  
  64. Configuring XFree86: A Step-By-Step Guide                                     1
  65.  
  66.  
  67.  
  68.  
  69.  
  70. Configuring XFree86: A Step-By-Step Guide                                     2
  71.  
  72.  
  73.  
  74.       Monitor
  75.             Describes your monitor(s) to the server.
  76.  
  77.       Graphics Device
  78.             Describes your video hardware to the server.
  79.  
  80.       Screen.
  81.             Describes how the monitor and video hardware should be used.
  82.  
  83.  
  84. 2.  Setting Up The Correct Default Server
  85.  
  86. The default server name is /usr/X11R6/bin/X.  This is a link to a specific
  87. server binary XF86_xxxx, located in /usr/X11R6/bin/.  You should check which
  88. server the X link is connected to.  If it is not correct, remove it and make a
  89. new link to the correct binary.  The server binaries are:
  90.  
  91.       XF86_SVGA:
  92.             Super-VGA server.  Contains accelerated support for Cirrus
  93.             542{0,2,4,6,8,9}, 543{0,4} and Western Digital 90C3{1,3} and Oak
  94.             Technologies Inc. OTI087 chipsets, unaccelerated for the rest of
  95.             the supported chipsets.
  96.  
  97.       XF86_Mono:
  98.             (S)VGA monochrome, optionally Hercules or other monochrome hardware
  99.             support is linked in.
  100.  
  101.       XF86_VGA16:
  102.             Generic VGA 16-color server.
  103.  
  104.       XF86_S3:
  105.             S3 accelerated server.
  106.  
  107.       XF86_Mach32:
  108.             ATI Mach32 accelerated server.
  109.  
  110.       XF86_Mach64:
  111.             ATI Mach64 accelerated server.
  112.  
  113.       XF86_Mach8:
  114.             ATI Mach8 accelerated server.
  115.  
  116.       XF86_8514:
  117.             8514/A accelerated server.
  118.  
  119.       XF86_P9000:
  120.             P9000 accelerated server.
  121.  
  122.       XF86_AGX:
  123.             AGX accelerated server.
  124.  
  125.       XF86_W32:
  126.             ET4000/W32 and ET6000 accelerated server.
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. Configuring XFree86: A Step-By-Step Guide                                     3
  137.  
  138.  
  139.  
  140. There is a manual page for each of these servers; refer to the manual page for
  141. specific details on supported chipsets and server-specific configuration
  142. options.
  143.  
  144. Note that it is possible to modify the drivers configured into a server via the
  145. LinkKit; the server binary may not contain all of the possible drivers, depend-
  146. ing on how the distribution was assembled.  You can run /usr/X11R6/bin/X -show-
  147. config to get a printout of the configured drivers.  If you need to relink your
  148. server, refer to the README file in the LinkKit for specific information.
  149.  
  150.  
  151. 3.  The Easy Parts of XF86Config
  152.  
  153. The "Files" section of the XF86Config file contains the path to the RGB
  154. database file (which should, in general, never need to be changed), and the
  155. default font path.  You can have multiple FontPath lines in your XF86Config;
  156. they are concatenated.  Ensure that each directory listed exists and is a valid
  157. font directory.  If the server complains about "Can't open default font
  158. 'fixed'", it is because there is an invalid entry in your font path.  Try run-
  159. ning the 'mkfontdir' command in each directory if you are certain that each one
  160. is correct.  The XF86Config(4/5) manual page describes other parameters that
  161. may be in this section of the file.
  162.  
  163. Next comes the "Keyboard" section.  In this section, you can specify the key-
  164. board protocol (Xqueue or Normal), the repeat rate, and the default mapping of
  165. some of the modifier keys.  In general, nothing will need to be modified here.
  166. Users of non-English keyboards might want to change the definitions of the mod-
  167. ifier keys. See the XF86Config(4/5) man page for details.
  168.  
  169. After this comes the "Pointer" section.  In this section you can specify the
  170. pointer protocol and device.  Note that the protocol name does not always match
  171. the manufacturer's name.  For example, some Logitech mice (especially newer
  172. ones) require either the MouseMan or Microsoft protocols, not the Logitech pro-
  173. tocol.  Some other mouse parameters can be adjusted here.  If you are using a
  174. two-button mouse, uncomment the Emulate3Buttons keyword - in this mode, press-
  175. ing both mouse buttons simultaneously causes the server to report a middle but-
  176. ton press.
  177.  
  178. Note that if the server complains about being unable to open your mouse device,
  179. this is NOT a server problem.  It has been a very common misconfiguration error
  180. on several of the OSs, and 99.999% of the time it is because the device is not
  181. correctly configured in the OS.  Hence don't bug us until after you prove that
  182. your OS level support is correct.
  183.  
  184.  
  185. 4.  Configuring the Video Hardware
  186.  
  187. The video hardware is described in the "Device" sections.  Multiple device sec-
  188. tions are permitted, and each section describes a single graphics board.
  189.  
  190. Be sure to read the server manual pages and the chipset-specific README files
  191. for any non-generic information that may apply to your setup.
  192.  
  193. To create a Device section you need to collect the data for your hardware, and
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. Configuring XFree86: A Step-By-Step Guide                                     4
  203.  
  204.  
  205.  
  206. make some configuration decisions.  The hardware data you need is:
  207.  
  208.    o Chipset
  209.  
  210.    o Amount of video memory
  211.  
  212.    o Dot-clocks available or clock chip used (if programmable)
  213.  
  214.    o Ramdac type (for some servers)
  215.  
  216. The server, in general, is capable of filling these on its own, but it is best
  217. to fully specify things in the XF86Config file, so that no mistakes are made.
  218. The 'Chipset' is one of the keyword strings for a configured driver (which can
  219. be displayed by running 'X -showconfig').  Of the accelerated servers, only
  220. some have chipset drivers currently.  The amount of memory is specified in
  221. KBytes, so 1M of memory would be specified as 1024.
  222.  
  223. The dot-clocks are the trickiest part of card configuration.  Fortunately a
  224. large database of collected dot-clocks is available.  A list of Device entries
  225. for some graphics boards can be found in the `Devices' file.  If you find one
  226. for your card, you can start with that.  Also, the first part of the modeDB.txt
  227. file lists information for a myriad of SVGA cards.  For accelerated cards, you
  228. can also look in the `AccelCards' file.  If you are fortunate, your card is
  229. listed in one place or the other.  If you find your card, copy the numbers from
  230. the database to the Clocks line in your XF86Config file, exactly as they appear
  231. in the database, without sorting, and leaving any duplicates.  Note that some
  232. of the newer accelerated cards use a programmable clock generator, in which
  233. case a ClockChip line is used in your XF86Config file to identify the type of
  234. clock generator.  (e.g. 'ClockChip "icd2061a"', which would be used for a #9
  235. GXe board).
  236.  
  237. If you can't find a listing for your board, you can attempt to have the server
  238. detect them.  Run the command 'X -probeonly >/tmp/out 2>&1' (for sh or ksh) or
  239. 'X -probeonly >&/tmp/out' (for csh). Be sure that the XF86Config file does not
  240. contain a Clocks line at this point. Running this will cause your monitor to
  241. freak out for a couple of seconds, as the server cycles through the clocks
  242. rapidly.  It should not damage your monitor, but some newer monitors may shut
  243. themselves off because things may go out of spec.  Anyhow, when this gets done,
  244. look in the file /tmp/out for the detected dot-clocks.  Copy these to the
  245. Clocks line in your XF86Config file, exactly as they appear in /tmp/out.  Don't
  246. sort them or rearrange them in any way.
  247.  
  248. It is possible that your board has a programmable clock generator.  A symptom
  249. of this will be a printout of only 2 or 3 clock values, with the rest all
  250. zeros.  If you run into this, and your board is not listed in the databases,
  251. contact the XFree86 team for help, or post a message to comp.win-
  252. dows.x.i386unix.  Note that most current Diamond hardware falls into this cate-
  253. gory, and Diamond will not release the programming details, so we can't help
  254. you.  There are some ethically questionable solutions available that you can
  255. inquire about on netnews; we do not advocate these methods, so do not contact
  256. us about them.
  257.  
  258. Some servers (S3 and AGX) require you to identify the type and speed of the
  259. RAMDAC your board uses in order to get the most out of the hardware.  This is
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. Configuring XFree86: A Step-By-Step Guide                                     5
  269.  
  270.  
  271.  
  272. done by adding 'Ramdac' and 'DacSpeec' entries.  For details of the supported
  273. RAMDACs, refer to the appropriate server manual page.  Note, in previous ver-
  274. sions of XFree86 the RAMDAC type was specified with an Option flag.
  275.  
  276. You may need to specify some Option flags for your hardware The server manual
  277. pages will describe these options, and the chipset-specific README files will
  278. tell you if any are required for your board.
  279.  
  280.  
  281. 5.  Configuring the Monitor and its Modes
  282.  
  283. Configuring monitor modes can be a trying experience, unfortunately, because of
  284. the lack of standardization in monitor hardware.  We have attempted to simplify
  285. this by collecting databases of specific monitor information, and assembling a
  286. set of "generic" modes that should get pretty much any monitor up and func-
  287. tional.  For all the gory details of mode generation and tuning, refer to the
  288. `VideoModes.doc' document by Eric Raymond.
  289.  
  290. The monitor specs and video modes are described in the "Monitor" sections in
  291. the XF86Config file.  To create a Monitor section, you need to know your moni-
  292. tor's specifications.  In particular, you need to know what range of horizontal
  293. sync and vertical sync (refresh) rates it supports and what its video bandwidth
  294. is.  This information should be available in the monitor's user manual.  Also
  295. check the 'Monitors' file to see if it has an entry for your monitor.  See the
  296. XF86Config(4/5) manual page for details of how this information is entered into
  297. the Monitor section.
  298.  
  299. Next, you need to provide a set of video modes that are suitable for the moni-
  300. tor.  The first step is to check in the 'Monitors' and modeDB.txt files to see
  301. if there is a listing of modes for your specific monitor.  If there is, copy
  302. those modes to the Monitor section of your XF86Config file.  Verify that there
  303. is a clock listed on the Clocks line in your XF86Config that matches the dot-
  304. clock in the 2nd parameter of each mode line; delete any mode line that does
  305. not have a matching clock on your card.  If you still have modes left, you are
  306. in good shape.
  307.  
  308. If you don't find any specific modes, or need more modes for the resolutions
  309. you want to use, refer to the Generic Video Modes listing below.  Match the
  310. mode specification against your monitor's specifications; pick the highest-
  311. refresh mode that is within specs, and make sure you have a matching dot-clock
  312. on your Clocks line.  Try the VESA modes before any corresponding alternate
  313. mode setting.  Copy the mode specification to the Monitor section of your
  314. XF86Config file.  Note that these modes are likely not optimal; they may not be
  315. sized perfectly, or may not be correctly centered.  But they should get you up
  316. and running.  If you want to tune the mode to your monitor, you can read the
  317. 'Fixing Problems with the Image' section of the VideoModes.doc file.
  318.  
  319. A note before you are done.  If the same mode name occurs more than once in the
  320. Monitor section of the XF86Config file, the server will use the first mode with
  321. a matching clock.  It is generally considered a bad idea to have more than one
  322. mode with the same name in your XF86Config file.
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. Configuring XFree86: A Step-By-Step Guide                                     6
  335.  
  336.  
  337.  
  338. 6.  Combining the Video Hardware and Monitor Data
  339.  
  340. Once you have given a description of your monitor and graphics hardware you
  341. need to specify how they are to be used by the servers.  This is done with the
  342. "Screen" sections in the XF86Config file.  You need to supply a Screen section
  343. for each of the server driver types you will be using.  The driver types are
  344. "SVGA" (XF86_SVGA), "VGA16" (XF86_VGA16), "VGA2" (XF86_Mono), "MONO"
  345. (XF86_Mono, XF86_VGA16), and "ACCEL" (XF86_S3, XF86_Mach32, XF86_Mach8,
  346. XF86_Mach64, XF86_8514, XF86_P9000, XF86_AGX, XF86_W32).  Each Screen section
  347. specifies which Monitor description and Device description are to be used.
  348.  
  349. The Screen sections include one or more "Display" subsections.  One Display
  350. subsection may be provided for each depth that the server supports.  In the
  351. Display subsection you can specify the size of the virtual screen the server
  352. will use.  The virtual screen allows you to have a "root window" larger than
  353. can be displayed on your monitor (e.g.  you can have an 800x600 display, but a
  354. 1280x1024 virtual size).  The Virtual keyword is used to specify this size.
  355. Note that many of the new accelerated server use non-displayed memory for
  356. caching.  It is not desirable to use all of your memory for virtual display, as
  357. this leaves none for caching, and this can cost as much as 30-40% of your
  358. server performance.
  359.  
  360. The last thing you specify in Display subsection is the display modes.  These
  361. are the physical display resolutions that the server will use.  The name is
  362. arbitrary, but must match something in the appropriate Monitor section.  In
  363. general, these names are the display resolution (e.g. "1024x768"), but need not
  364. be.  You can list as many as desired; the first is the default/starting dis-
  365. play, and you can cycle through the list with Ctrl-Alt-Keypad+ or Ctrl-Alt-Key-
  366. pad- hotkey sequences.
  367.  
  368. That's it.  Now you're ready to test out your new XFree86 installation.
  369.  
  370.  
  371. 7.  Generic Video Modes
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. Configuring XFree86: A Step-By-Step Guide                                     7
  401.  
  402.  
  403.  
  404.      #
  405.      #  Mode       Refresh  Hor. Sync  Dot-clock  Interlaced?  VESA?
  406.      #  ------------------------------------------------------------
  407.      #  640x480     60Hz      31.5k     25.175M       No         No
  408.      #  640x480     60Hz      31.5k     25.175M       No         No
  409.      #  640x480     63Hz      32.8k     28.322M       No         No
  410.      #  640x480     70Hz      36.5k     31.5M         No         No
  411.      #  640x480     72Hz      37.9k     31.5M         No        Yes
  412.      #  800x600     56Hz      35.1k     36.0M         No        Yes
  413.      #  800x600     56Hz      35.4k     36.0M         No         No
  414.      #  800x600     60Hz      37.9k     40.0M         No        Yes
  415.      #  800x600     60Hz      37.9k     40.0M         No         No
  416.      #  800x600     72Hz      48.0k     50.0M         No        Yes
  417.      #  1024x768i   43.5Hz    35.5k     44.9M        Yes         No
  418.      #  1024x768    60Hz      48.4k     65.0M         No        Yes
  419.      #  1024x768    60Hz      48.4k     62.0M         No         No
  420.      #  1024x768    70Hz      56.5k     75.0M         No        Yes
  421.      #  1024x768    70Hz      56.25k    72.0M         No         No
  422.      #  1024x768    76Hz      62.5k     85.0M         No         No
  423.      #  1280x1024i  44Hz      51kHz     80.0M        Yes         No
  424.      #  1280x1024i  44Hz      47.6k     75.0M        Yes         No
  425.      #  1280x1024   59Hz      63.6k    110.0M         No         No
  426.      #  1280x1024   61Hz      64.24k   110.0M         No         No
  427.      #  1280x1024   74Hz      78.85k   135.0M         No         No
  428.  
  429.      #
  430.      # 640x480@60Hz Non-Interlaced mode
  431.      # Horizontal Sync = 31.5kHz
  432.      # Timing: H=(0.95us, 3.81us, 1.59us), V=(0.35ms, 0.064ms, 1.02ms)
  433.      #
  434.      # name        clock   horizontal timing     vertical timing      flags
  435.       "640x480"     25.175  640  664  760  800    480  491  493  525
  436.  
  437.      #
  438.      # Alternate 640x480@60Hz Non-Interlaced mode
  439.      # Horizontal Sync = 31.5kHz
  440.      # Timing: H=(1.27us, 3.81us, 1.27us) V=(0.32ms, 0.06ms, 1.05ms)
  441.      #
  442.      # name        clock   horizontal timing     vertical timing      flags
  443.       "640x480"     25.175  640  672  768  800    480  490  492  525
  444.  
  445.      #
  446.      # 640x480@63Hz Non-Interlaced mode (non-standard)
  447.      # Horizontal Sync = 32.8kHz
  448.      # Timing: H=(1.41us, 1.41us, 5.08us) V=(0.24ms, 0.092ms, 0.92ms)
  449.      #
  450.      # name        clock   horizontal timing     vertical timing      flags
  451.       "640x480"     28.322  640  680  720  864    480  488  491  521
  452.  
  453.      #
  454.      # 640x480@70Hz Non-Interlaced mode (non-standard)
  455.      # Horizontal Sync = 36.5kHz
  456.      # Timing: H=(1.27us, 1.27us, 4.57us) V=(0.22ms, 0.082ms, 0.82ms)
  457.      #
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. Configuring XFree86: A Step-By-Step Guide                                     8
  467.  
  468.  
  469.  
  470.      # name        clock   horizontal timing     vertical timing      flags
  471.       "640x480"     31.5    640  680  720  864    480  488  491  521
  472.  
  473.      #
  474.      # VESA 640x480@72Hz Non-Interlaced mode
  475.      # Horizontal Sync = 37.9kHz
  476.      # Timing: H=(0.76us, 1.27us, 4.06us) V=(0.24ms, 0.079ms, 0.74ms)
  477.      #
  478.      # name        clock   horizontal timing     vertical timing      flags
  479.       "640x480"     31.5    640  664  704  832    480  489  492  520
  480.  
  481.      #
  482.      # VESA 800x600@56Hz Non-Interlaced mode
  483.      # Horizontal Sync = 35.1kHz
  484.      # Timing: H=(0.67us, 2.00us, 3.56us) V=(0.03ms, 0.063ms, 0.70ms)
  485.      #
  486.      # name        clock   horizontal timing     vertical timing      flags
  487.       "800x600"     36      800  824  896 1024    600  601  603  625
  488.  
  489.      #
  490.      # Alternate 800x600@56Hz Non-Interlaced mode
  491.      # Horizontal Sync = 35.4kHz
  492.      # Timing: H=(0.89us, 4.00us, 1.11us) V=(0.11ms, 0.057ms, 0.79ms)
  493.      #
  494.      # name        clock   horizontal timing     vertical timing      flags
  495.       "800x600"     36      800  832  976 1016    600  604  606  634
  496.  
  497.      #
  498.      # VESA 800x600@60Hz Non-Interlaced mode
  499.      # Horizontal Sync = 37.9kHz
  500.      # Timing: H=(1.00us, 3.20us, 2.20us) V=(0.03ms, 0.106ms, 0.61ms)
  501.      #
  502.      # name        clock   horizontal timing     vertical timing      flags
  503.       "800x600"     40      800  840  968 1056    600  601  605  628 +hsync +vsync
  504.  
  505.      #
  506.      # Alternate 800x600@60Hz Non-Interlaced mode
  507.      # Horizontal Sync = 37.9kHz
  508.      # Timing: H=(1.20us, 3.80us, 1.40us) V=(0.13ms, 0.053ms, 0.69ms)
  509.      #
  510.      # name        clock   horizontal timing     vertical timing      flags
  511.       "800x600"
  512.  
  513.      Generated from XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/Config.sgml,v 3.11.2.1 1998/04/29 04:18:28 dawes Exp $
  514.  
  515.  
  516.  
  517.  
  518.  
  519.      $XConsortium: Config.sgml /main/7 1996/10/19 18:03:03 kaleb $
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532. Configuring XFree86: A Step-By-Step Guide                                     9
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.                                    CONTENTS
  603.  
  604.  
  605.  
  606. 1. Procedure Overview ....................................................... 1
  607.  
  608. 2. Setting Up The Correct Default Server .................................... 2
  609.  
  610. 3. The Easy Parts of XF86Config ............................................. 3
  611.  
  612. 4. Configuring the Video Hardware ........................................... 3
  613.  
  614. 5. Configuring the Monitor and its Modes .................................... 5
  615.  
  616. 6. Combining the Video Hardware and Monitor Data ............................ 6
  617.  
  618. 7. Generic Video Modes ...................................................... 6
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.                                        i
  659.  
  660.  
  661.