home *** CD-ROM | disk | FTP | other *** search
/ Archive Magazine 1996 / ARCHIVE_96.iso / discs / utilities / utility_01 / uni_mode / !UniMode / Manuals / Manual next >
Text File  |  1992-06-21  |  76KB  |  2,109 lines

  1. The UniMode Package Manual                      Last Updated: 21-Jun-1992
  2. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  3. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10. Contents
  11. ~~~~~~~~
  12.  
  13. Disclaimer
  14.  
  15. Copyright Notice
  16.  
  17. Introduction
  18.         - What is POST-Ware?
  19.         - History
  20.  
  21. User's Manual
  22.         - Terminology
  23.         - The programs
  24.         - The HB_Index
  25.  
  26. Programmer's Guide
  27.         - The ModeDescriptionScript (MDS)
  28.         - Use of Constants and FuNctions
  29.         - The ModeDescriptionFile (MDF)
  30.         - Notes on designing your own mode
  31.  
  32. Error messages
  33.  
  34. Bibliography
  35.  
  36. Acknowledgements
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44. Disclaimer
  45. ~~~~~~~~~~
  46.  
  47. The authors will not be liable for any damage, loss of profits, goodwill or
  48. for any indirect or consequential loss arising out of your use of this
  49. application, or your inability to use it, even if the authors have been
  50. advised of the possibility of such loss.
  51.  
  52. All efforts have been made to ensure the accuracy of the application.
  53. However, should any errors be detected, the authors would greatly appreciate
  54. being informed of them. The above notwithstanding, the authors can assume no
  55. responsibility for any errors.
  56.  
  57.  
  58.  
  59.  
  60. Copyright Notice
  61. ~~~~~~~~~~~~~~~~
  62.  
  63. You may freely copy and use the programs in this package under the following
  64. conditions:
  65.  
  66.  
  67.  
  68.  1. You can GIVE this package to anyone you like, if and only if it is
  69.     distributed with all original files and with no changes made to it.
  70.  
  71.  2  If you want to put it on a BBS or include it in your PD library, you can
  72.     do so, taking these notices into account. You may not charge any money
  73.     for it, apart from postage and storage medium costs.
  74.  
  75.  3. The UniversalMode module may be distributed separately as part of
  76.     an other application which uses MDF's provided that the module is
  77.     supplied "as is" and no charges are made for it. The UniversalMode
  78.     module remains copyright of Hendrix Bros.
  79.  
  80.  4. The entire package remains copyright of Maurice & Jean-Piδrre Hendrix
  81.     (HendrixáBros.) under all circumstances. The copyright is NOT
  82.     transferable.
  83.  
  84.  5. You should send a nice picture-postcard to the authors:
  85.              Maurice Hendrix    Jean-Piδrre Hendrix
  86.              Bergeijkstraat 17  Kanaalstraat 33
  87.              5043 BD  Tilburg   5104 AA  Dongen
  88.              The NetherLands    The Netherlands
  89.  
  90.   ** Please specify hardware-configuration when you write us.
  91.         We're interested to know:
  92.                 ñ Type of computer and OS version
  93.                 ñ Type of Monitor
  94.                 ñ Type of VidcEnhancer (Manufacturer etc.)
  95.                 ñ Version number of !UniMode
  96.                 ñ Does it work or not?
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108. Introduction
  109. ~~~~~~~~~~~~
  110.  
  111. This document describes the resources that are contained in the UniMode
  112. package. The most important parts of this manual are the User's Guide and
  113. the Programmer's Guide. The User's Guide describes how the average user can
  114. make the most out of the package. In the Programmer's Guide we try to
  115. explain how you can build your own modes. Since it is a Programmer's Guide
  116. the VIDC datasheets and/or some experience with programming the VIDC will be
  117. necessary.
  118.  
  119. This application should work on the following machines:
  120.  
  121. R series (running under RISC OS)
  122. A300 series
  123. A3000 series
  124. A400 series
  125. A400/1 series
  126. A500 series
  127. A5000 series
  128.  
  129. * Do you have a machine that is part of the Acorn RISC Range of computers
  130.   but is not in this list? Then we are very interested in hearing from you.
  131. * Do you have a machine that is part of the Acorn RISC Range of computers
  132.   and does UniMode not work on your machine? Let us know and maybe we can
  133.   find a solution.
  134.  
  135. We hope that you will enjoy using this package. If you do or if you don't
  136. let us know.
  137.  
  138.  
  139.  
  140.  
  141.  
  142. The software in this package is POST-Ware.
  143.  
  144. What is POST-Ware?
  145. ==================
  146.  
  147. For programs in the Shareware or Careware domain you pay a small amount of
  148. money. Authors of Public Domain programs expect you to send them a small
  149. amount of money in appreciation. This does not work. Most people will not
  150. pay for Public Domain programs and they come up with the most astonishing
  151. reasons. Shareware programs are mostly paid for once. After that they are
  152. copied (illegally) many times.
  153.  
  154. POST-Ware programs are based upon the Human-nature of not wanting to pay for
  155. anything if you can get it for free. Let's face it, the chances of getting
  156. dragged to court by some author are astronomically small. So, knowing this,
  157. authors of POST-Ware programs don't expect anybody to pay for their efforts.
  158. But they DO like to know whether their program is actually being used
  159. (=copied) and how it performs. So, they request each user to send them a
  160. picture-postcard. This way the author knows that somewhere out there someone
  161. is actually using his program. Since the cost of a postcard and stamp are so
  162. small, the chances of receiving a postcard are much bigger than those of
  163. receiving any money. If he is lucky he'll get all kinds of postcards from
  164. all over the world and he can put them to many uses:
  165.  
  166. 1. Hang them on the wall as decoration
  167.  
  168. 2. Look at them to boost his ego when he is feeling down.
  169.  
  170. 3. Use them as a reference, when applying for a job (success not guaranteed)
  171.  
  172. 4. You can think of a few more, can't you?
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187. History
  188. =======
  189.  
  190. Over the years people have been dissatisfied with the screenmodes that were
  191. offered by RISC OS and making soft-modes was strictly prohibited to the few
  192. who really understood how it was done. Users wanted bigger HiRes modes,
  193. small memory-saving modes, VGA or SVGA modes, modes with specific X:Y
  194. ratios, etcetera. Out of this need, programs were developed to help people
  195. create their own soft-modes. Also, several companies offered programs that
  196. supplied ready-made modes. With the coming of the so-called VidcEnhancers
  197. the amount of such programs grew extensively.  Many of these programs are
  198. modules. They supply one or more modes. Unfortunately the user cannot
  199. control which modenumber is allocated to a given mode. The problems related
  200. to this are obvious:
  201.  
  202.   1. Some modules supply visually different modes but with the same
  203.   modenumbers. Due to clashing modenumbers the user can only use one of the
  204.   modules. If he wishes to use the other mode (which has the same modenumber)
  205.   then he needs to go to the CLI to kill one module and load the other. This
  206.   can be very frustrating to many a user.
  207.  
  208.   2. A large number of modules supplies modes with a modenumber between 29
  209.   and 46. These programs no longer work under RISC OS 3. This is because
  210.   RISC OS 3 itself supplies modes in the range 0...46. So if you had a
  211.   favourite mode 42 and you upgrade to RISC OS 3 you'd loose your favourite
  212.   mode. Or would you?
  213.  
  214.   3. Some of the VIDC Enhancer-Add-On's offered for the RISC OS 2 machines
  215.   are mapped into a specific bit in the IOC. Others are interfaced using the
  216.   IIC-bus. When Acorn released their A5000 machine they decided not to
  217.   support any of these so-called third party products. Therefore all modules
  218.   that supply a mode that requires a VIDC Enhancer-Add-On do not properly
  219.   display on an A5000. Even worse, modules designed for one type of
  220.   VidcEnhancer, do not work properly with ANY other VidcEnhancer.
  221.  
  222. The solution is easy. UniMode was created because we experienced these
  223. problems with the newly acquired A5000. UniMode let's YOU decide which
  224. mode-definition is allocated to which modenumber and what kind of
  225. VidcEnhancer YOU want to use. It is fully RISC OS 2 compliant and runs under
  226. RISC OS 3 as well. The entire package was developed and tested on both a 2Mb
  227. A5000 (with On-Board-Enhancer) and a 4Mb A310 (with SCSI, ARM3 and VIDC
  228. Enhancer-Add-On).
  229.  
  230. It is advisable that programmers read the User's Guide before reading the
  231. Programmer's Guide, since some basic information can be found there.
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258. User's Guide
  259. ~~~~~~~~~~~~
  260.  
  261.  
  262.  
  263.  
  264. This section tries to explain how UniMode works and how you should go about
  265. to make the most of it.
  266.  
  267.  
  268.  
  269.  
  270. Terminology
  271. ===========
  272.  
  273. The following terms are introduced with this package:
  274.  
  275. MDF or ModeDescriptionFile:
  276.   This is a binary file with filetype &103. The VIDC- and Workspacelists of
  277.   a mode are stored in this file together with some machine specific data.
  278.   The UniversalMode module loads this file when you use the ModeLoad
  279.   command. An MDF can be recognized by it's icon and the FileType: UniMode.
  280.  
  281. MDS or ModeDescriptionScript:
  282.   This is a textfile. This file contains all the information of the
  283.   corresponding MDF in ASCII-format. This file can be edited to change
  284.   certain parameters or variables. After that you can compile the MDS back
  285.   into an MDF. If you are going to edit the MDS, be warned that if you do
  286.   not know anything about programming the VIDC you may not like the result
  287.   of your venture.
  288.  
  289. VIDC Enhancer-Add-On:
  290.   With this we mean the third party products generally known as the
  291.   "VIDC Enhancer" which are available for 300/3000/400 series of machines
  292.   from several companies.
  293.  
  294. On-Board-Enhancer:
  295.   With this we mean the Enhancer-hardware built-in by Acorn in the 500/5000
  296.   series and (probably) future machines.
  297.  
  298. VidcEnhancer:
  299.   We use the term VidcEnhancer when we wish to refer to both the VIDC
  300.   Enhancer-Add-On and the On-Board-Enhancer.
  301.  
  302.  
  303.  
  304.  
  305. The programs
  306. ============
  307.  
  308. In this section most of the files supplied with the package are explained.
  309. The directory path given between the curly brackets is the path where you
  310. can find the program.
  311.  
  312. !UniMode
  313. --------
  314.  
  315. This is the application. Double-click on it's icon to install the
  316. application on the icon bar. The application supports Acorn's Interactive
  317. Help. Shift-Double-click will open the application directory and reveal the
  318. following sub-directories:
  319.  
  320. <UniMode$Dir>.Manuals    contains this manual and several textfiles.
  321. <UniMode$Dir>.Modes      contains any MDF-s that you have compiled or
  322.                          extracted.
  323. <UniMode$Dir>.ModeScript contains the script files.
  324. <UniMode$Dir>.Utils      contains the various utilities supplied with the
  325.                          package.
  326.  
  327. If you start the application it will install itself onto the icon bar. When
  328. you double-click on an MDF or when you drag an MDF to the icon bar-icon the
  329. following window will open:
  330.  
  331.  
  332. ** See the !Drawfile "Window" **
  333.  
  334.  
  335. You can now assign the mode definition to a modenumber. Use the Palette to
  336. change the Desktop mode. If you close the window, the mode definition is not
  337. loaded. Clicking with Select over the icon bar-icon opens the directory
  338. <UniModeMDS$Dir> which contains the ModeDescriptionScripts. Clicking with
  339. Menu over the icon bar-icon opens the application's menu.
  340.  
  341. The menu supplies the following options:
  342.  
  343.       Info        ë
  344.       ..........
  345.       Compile     ë
  346.       Expand
  347.       MDF Info
  348.       Enhancer    ë
  349.       TimeRaster
  350.       Directories ë
  351.       Quit
  352.  
  353. * Choosing 'Quit' will remove the application from the icon bar. However,
  354.    UniMode and all mode definitions that have been loaded remain active
  355.    until you RMKill the module, switch off the machine or use *ModeClear to
  356.    remove a specific mode.
  357.  
  358. * 'Info ë' leads to a standard information window
  359.  
  360. * 'Directories ë' opens the following sub-menu:
  361.  
  362.         MDF             opens the directory <UniModeMDF$Dir>
  363.         MDS             opens the directory <UniModeMDS$Dir>
  364.         Manuals         opens the directory <UniMode$Dir>.Manuals
  365.         Utils           opens the directory <UniMode$Dir>.Utils
  366.  
  367. * 'TimeRaster' calls the utility "TimeRaster". The effect is that the
  368.   rasterfrequency of the current mode is displayed.
  369.  
  370. * 'Enhancer ë' leads to a sub-menu with the options On, Off, Auto,
  371.   Intelligent, Prefs and Quiet. Clicking on one of these options switches
  372.   the UniMode module in the corresponding state. Refer to the paragraph
  373.   entitled "UniMode (UniversalMode Module)" for more details. The current
  374.   of the module is reflected in the menu with a tick-mark. The state of the
  375.   VidcEnhancer is reflected through the last option in this menu. If the
  376.   VidcEnhancer is switched on by the module; the menu-item reads:
  377.   'Status: On'. If the VidcEnhancer is switched off by the module then the
  378.   menu-item reads: 'Status: Off'. If the module is switched into its Quiet
  379.   mode the status of the VidcEnhancer is controlled by other software and
  380.   hence unknown. This is shown by the last menu-item as: 'Status: ???'.
  381.  
  382. * Clicking on 'MDF Info' opens a dialog window with the title: "Input :".
  383.   Dragging an MDF or a selection of MDF-s to this window will display some
  384.   information about the ModeDefinition contained in this/these file(s).
  385.  
  386. * Clicking on 'Expand' opens a dialog window with the title: "Input :".
  387.  
  388.       1 Dragging an MDF to this window, will change the title to "Expand".
  389.         The icon in the window will change to a Textfile-icon. The filename
  390.         will appear in the entry-space. You can change this name before you
  391.         drag the Textfile-icon to a directory-viewer. The MDF that you
  392.         dragged to the window will then be expanded into an MDS. It will be
  393.         stored in the directory where you dragged the Textfile-icon under
  394.         the name that is in the entry-space.
  395.  
  396.       2 Alternatively, you can drag a directory-icon onto this window. The
  397.         title of the window will change to "Batch Expand". The icon in the
  398.         window will change into a directory-icon. The name of the source
  399.         directory will appear in the entry-space. You can change this name
  400.         before you drag the directory-icon to a directory-viewer. Any MDF's
  401.         in the source directory will be expanded. If the destination
  402.         directory does not exist, it will be created first.
  403.  
  404.   The destination can NOT be the same as the source. Attempting to do this
  405.   will generate a 'File Open' error.
  406.  
  407.  
  408. * Clicking 'Compile >' will result in a dialog window being opened.
  409.   Dragging an MDS to this window, will change the title to "Compile".
  410.   The icon in the window will change to an UniMode-icon. The filename will
  411.   appear in the entry-space. You can now change this name before you drag
  412.   the UniMode-icon to a directory viewer. The MDS that you dragged to the
  413.   window will be compiled into an MDF. It will be stored in the directory
  414.   where you dragged the UniMode-icon. The MDF will be given the name that is
  415.   displayed in the entry-space.
  416.  
  417.   NOTE:
  418.   The compiler has the option of creating a log-file. (See the paragraph
  419.   'CompileMDS' for more details) By default, the log-file will be sent to
  420.   the null: device. You can change the destination of the log-file to
  421.   virtually anything (e.g. vdu: or printer: or ram:$.Log etc.) by entering
  422.   this destination into the writable menu-item behind 'Compile >'. Remember
  423.   that entering a destination which does not exist can lock up the machine.
  424.   E.g. sending the log-file to a switched-off 'printer:' can hang the
  425.   machine.
  426.  
  427.  
  428.  
  429.  
  430.  
  431. !Boot
  432. -----
  433.  
  434. { <UniMode$Dir> }
  435.  
  436. The !Boot file of the application is inoculated against the Extend virus by
  437. default.
  438.  
  439.  
  440. !Run
  441. ----
  442.  
  443. { <UniMode$Dir> }
  444.  
  445. If you have a Multiscan monitor remove the '|' in front of the second
  446. IconSprites command and put it in front of the first IconSprites command.
  447. This will load mode 20 icons instead of the default mode 12 icons.
  448.  
  449.  
  450. Templates
  451. ---------
  452.  
  453. { <UniMode$Dir> }
  454.  
  455. This file contains the necessary window templates of the application.
  456.  
  457.  
  458. !Sprites
  459. --------
  460.  
  461. { <UniMode$Dir> }
  462.  
  463. This sprites-file holds the mode 12 icons, which can be used for all
  464. monitortypes.
  465.  
  466.  
  467. !Sprites22
  468. ----------
  469.  
  470. { <UniMode$Dir> }
  471.  
  472. This file is used by RISC OS 3. It contains high-definition colour icons for
  473. use with VGA, SVGA or MultiScan monitors.
  474.  
  475.  
  476. !Sprites23
  477. ----------
  478.  
  479. { <UniMode$Dir> }
  480.  
  481. This file is used by RISC OS 3. It contains monochrome icons for use with
  482. Hi-Res Monochrome monitors.
  483.  
  484.  
  485. UniMode (UniversalMode module)
  486. ------------------------------
  487.  
  488. { <UniMode$Dir> }
  489.  
  490. Before you are able to make your modes with !UniMode you will need to know
  491. how the package works. The core of the package is the relocatable
  492. UniversalMode module. This module provides all the interfaces with the
  493. operating system.
  494.  
  495. The most important reason to write this module, was to gain full control
  496. over the VidcEnhancer, and so getting lost of the "AutoVidc" program which
  497. was only partly a solution to the problems. You might look at the
  498. !UniMode-package as if it is an upgrade from "AutoVidc". The module provides
  499. 5 ways in controlling the VidcEnhancer, all of them grew out of need:
  500.  
  501. *Vidc On           This command switches the VidcEnhancer on (36 MHz). The
  502.                    pixelrate of any mode is increased to 1.5 times of the
  503.                    default rate. This means that normal
  504.                    B(roadcast)S(tandard)-modes become real calm
  505.                    (50 -> 75 Hz). Or you can use much bigger modes at a
  506.                    respectable rasterfrequency.
  507.  
  508. *Vidc Off          This command reverses the *Vidc On effect.
  509.  
  510. *Vidc Auto         This command was implemented to emulate the SuperVidc
  511.                    Auto command and the AutoVidc control. Where SuperVidc
  512.                    uses a triggerlevel, or AutoVidc uses an internal table
  513.                    to determine whether the VidcEnhancer should be switched
  514.                    on or off, UniMode uses the VidcEnhancerbit in an MDF.
  515.                    Modes which are generated using the !Unimode-package can
  516.                    be programmed to switch the VidcEnhancer on or off (for
  517.                    details see the description on making an MDS). For
  518.                    standard RISC OS modes, you can load a "VidcOn" or a
  519.                    "VidcOff"-file on that mode. Example: if you want the
  520.                    VidcEnhancer to be switched on when entering mode 12 just
  521.                    type *Modeload VidcOn 12. Alternatively *MDF:VidcOn 12
  522.                    may be used since RISC OS will recognise the filetype.
  523.                    One minor set-back is that the VidcEnhancer will only be
  524.                    switched off if a "VidcOff" was loaded for another mode,
  525.                    or a *Vidc Off command is issued.
  526.  
  527. *Vidc Intelligent  This command switches the module to its "Intelligent"
  528.                    state. This means that a very complex algorithm is used,
  529.                    every time you select another mode, to determine whether
  530.                    the VidcEnhancer should be switched on or off. We have
  531.                    not (yet) found any mode that is judged incorrectly by
  532.                    the algorithm. This is also the default state.
  533.  
  534. *Vidc Prefs        *Vidc Prefs is a combination of all goodies, especially
  535.                    included for those who CAN get the Intelligent algorithm
  536.                    to fail. In this state the action taken by !UniMode is
  537.                    modenumber-dependent: RISC OS 3 modes are switched on
  538.                    according to our own preferences. All other modes under
  539.                    96 will act as if the module is in its Intelligent-state.
  540.                    Modes from 96 to 111 will act as if the module is in its
  541.                    Auto-state. Modes from 112 to 119 will switch the
  542.                    VidcEnhancer on, the remaining modes from 120 to 128 will
  543.                    switch it off.
  544.  
  545. *Vidc Quiet        This command switches the module to its "Quiet" state.
  546.                    This means that the module will not affect the state of
  547.                    the VidcEnhancer. This allows other soft- or hardware to
  548.                    affect the state of the VidcEnhancer.
  549.  
  550. A little feedback from the module to the user might come in handy if you
  551. are busy programming MDF's. So the *Vidc Status command was included to
  552. return some information on the module- and VidcEnhancer-state.
  553.  
  554. Concerning modes, RISC OS 2 has two shortcomings, there are no commands
  555. provided to set the mode used by the operating system and/or the WIMP. Up to
  556. now; since they were implemented in UniMode:
  557.  
  558. *Mode <mode#>      Sets a new screen mode. Eg.: *mode 12
  559.  
  560. *WMode <mode#>     Sets a new mode which will be used by the WIMP. Eg.:
  561.                    *WMode 12
  562.  
  563. All you need to do, to use a soft-mode, is loading a ModeDescriptionFile
  564. (MDF) in the workspace of the module at the modenumber you want. This can
  565. be done by using the command:
  566.  
  567.   *ModeLoad <filename> <mode#>
  568.  
  569. To remove a modedefinition from the list can be done by using the command:
  570.  
  571.   *ModeClear <Mode#>
  572.  
  573. The mode <Mode#> will no longer be available from this module.
  574.  
  575.  
  576. NOTICE: Never load an MDF at a modenumber which is already provided by
  577.         RISC OS itself. This won't work properly. There are only two
  578.         exceptions: the MDF's "VidcOn" and "VidcOff"
  579.  
  580. *HardwareRevision
  581.                 makes it possible to set the HardwareRevision manually in
  582.                 case the determination algorithm used in this module fails.
  583.                 Revision    Enhancer type
  584.                 -------------------------------------------------
  585.                 0           Atomwide compatible (IO1)
  586.                 1           Acorn On-Board      (eg. A540 A5000)
  587.                 2           Watford compatible  (IIC) 
  588.                 3           Atomwide compatible (IO2)
  589.  
  590.                 *HardwareRevision without a parameter echoes the current
  591.                 hardwarerevisionlevel set.
  592.  
  593. Commands Syntax:
  594.  
  595.         *ModeLoad <FileName> <Mode#>
  596.         *ModeClear <Mode#>
  597.         *Mode [<Mode#>]
  598.         *WMode <Mode#>
  599.         *VIDC On|Off|Auto|Prefs|Intelligent|Quiet|Status
  600.          (Default: Intelligent)
  601.         *HardwareRevision [<level>]
  602.  
  603.  
  604. Additionally the module sets the systemvariable <MDF$Path> as follows:
  605.  
  606. SetMacro MDF$Path <Run$Path>,<UniModeMDF$Dir>.
  607.  
  608. This means that you don't have to specify the entire path (E.g. in
  609. *ModeLoad) of the MDF, instead, MDF: will suffice.
  610.                                           
  611. NOTE    Because we did not know how to interface with the Watford-compatible
  612.         VidcEnhancer (Revisionlevel 2), this VidcEnhancer is not supported.
  613.         If YOU do know how to do this let us know so that we can update the
  614.         software.
  615.  
  616.  
  617. !RunImage
  618. ---------
  619.  
  620. { <UniMode$Dir> }
  621.  
  622. This program supplies the icon bar front-end of the application. Refer to
  623. the paragraph '!UniMode' for a description of this program.
  624.  
  625.  
  626. !Help
  627. -----
  628.  
  629. { <UniMode$Dir> }
  630.  
  631. A small help-file.
  632.  
  633.  
  634.  
  635. CompileMDS
  636. ----------
  637.  
  638. { <UniMode$Dir>.Utils  }
  639.  
  640. This program compiles an MDS into an MDF. For safety reasons, you can only
  641. compile one file at a time. There are two ways of compiling an MDS. The
  642. first one is discussed in the paragraph '!UniMode'. The second way of
  643. compiling an MDS is via the CLI:
  644.  
  645. SYNTAX:
  646.  
  647. *CompileMDS [<Inputfile> [<Outputfile> [<Logfile>]]]
  648.  
  649. INPUT:
  650.  
  651. Input file      : This is the filename of the MDS. The directory is assumed
  652.                   to be the standard directory where all script files are
  653.                   stored: <UniModeMDS$Dir>.
  654.  
  655. Output file     : This is the filename of the MDF. The directory is assumed
  656.                   to be the standard directory where all definition-files
  657.                   are stored: <UniModeMDF$Dir>.
  658.  
  659. Run-time logging: CompileMDS reports on virtually everything it is doing
  660.                   (including any anomalies or errors that are encountered).
  661.                   You can redirect this output to virtually any destination
  662.                   (E.g.: null:, vdu:, printer:, serial:, ram:logfile,
  663.                   adfs::0.$.logfile, etc.) Remember that the destination
  664.                   must exist. Sending the logfile to a (non-existent)
  665.                   serial: device can lock the machine.
  666.  
  667. OUTPUT:
  668.  
  669. The program outputs a log to the specified file/device and an MDF to the
  670. specified path/filename.
  671.  
  672. NOTE:
  673.  
  674. * The program does NOT check whether an MDF already exists.
  675.  
  676. * An MDS is compiled in four passes.
  677.   During the first pass the compiler checks the MDS for spelling mistakes.
  678.   An error during this pass generally means a spelling mistake in one of the
  679.   variablenames or in either card. Refer to the log to see where the mistake
  680.   occurred.
  681.   During the second pass the compiler will attempt to evaluate the value
  682.   assigned to each variable. At the same time it will check whether the
  683.   variable is valid. For example HDSR is a VIDC register. It can only occur
  684.   in .VIDClist. If you would include this variable in .WorkspaceList the
  685.   compiler would generate an error.
  686.   Pass 3 is used to evaluate all the values and assign them to the
  687.   appropriate variable ready for compilation. During this pass the compiler
  688.   will report which variables will be programmed with which value. The third
  689.   pass is also used to do a so-called "Cross-check". During the cross-check
  690.   the compiler tries to find out whether the MDF being created COULD result
  691.   in a working mode or not. Any warnings generated during the cross-check
  692.   MIGHT indicate that the defined mode will not give a satisfiable display
  693.   on your monitor. The compiler will also try to calculate the mode's
  694.   rasterfrequency. This may deviate from the measured rasterfrequency by
  695.   ▒ 2Hz. Refer to your monitor's manual to see if this mode can be
  696.   displayed on your monitor. (Look in the technical specifications for
  697.   "Vertical Sync", "Vertical Synchronisation", "Raster Frequency" or
  698.   something similar. Typical values will be in a range between 50...100 Hz)
  699.   Finally the HB_Index of the mode is calculated. Refer to the paragraph
  700.   'HB_Index' for more details.
  701.   The final pass (Pass 4) is the compilation pass. All that happens here is
  702.   the creation of the MDF from the results of the previous passes.
  703.  
  704. * If the Logfile is set to null: then errors and warnings are reported to
  705.   you through a standard text-window (provided that you're compiling from
  706.   the desktop). If the Logfile is set to anything else the errors or
  707.   warnings are put in the log. The compiler will display a message that an
  708.   error or warning has occurred and refer you to the log.
  709.  
  710.  
  711.  
  712. Expand / ExpandAll
  713. ------------------
  714.  
  715. { <UniMode$Dir>.Utils }
  716.  
  717. These programs are used to convert an MDF into an MDS. The functional
  718. difference between the two is that 'Expand' operates on one file at a time
  719. while 'ExpandAll' operates on an entire directory. You can optionally supply
  720. the required parameters at the commandline.
  721.  
  722. SYNTAX:
  723.  
  724. *Expand [<Inputfile> [<Outputfile>]]
  725. *ExpandAll [<SourcePath> [<DestinationPath>]]
  726.  
  727. INPUT:
  728.  
  729. Input file      : ('Expand') This is the name of the MDF. The directory is
  730.                   assumed to be the standard directory where all
  731.                   definition-files are located: <UniModeMDF$Dir>.
  732.  
  733. Output file     : ('Expand') This is the name of the MDS. The directory is
  734.                   assumed to be the standard directory where all script
  735.                   files are located: <UniModeMDS$Dir>.
  736.  
  737. Source Path     : ('ExpandAll') This is the name of the path where the MDF-s
  738.                   can be found. This is <UniModeMDF$Dir>. by default.
  739.  
  740. Destination Path: ('ExpandAll') This is the name of the path where the MDS-s
  741.                   must be stored. This is <UniModeMDS$Dir>. by default.
  742.  
  743. OUTPUT:
  744.  
  745. The programs output the appropriate MDS(-s) to the specified path/filename.
  746.  
  747. NOTE:
  748.  
  749. * The programs are not recursive, i.e. they only operate on the files in the
  750. given directory.
  751. * 'Expand' can also be accessed by clicking 'Expand' in the !UniMode menu on
  752. the desktop. Refer to the paragraph '!UniMode' for more details.
  753.  
  754.  
  755. Extract / ExtractAll
  756. --------------------
  757.  
  758. { <UniMode$Dir>.Utils }
  759.  
  760. These programs can be used to extract the mode definitions from a RAM-based
  761. module and thus create an MDF.
  762.  
  763. Since copyright laws apply to some of these mode definitions, you may
  764. extract them for use in your OWN version of UniversalMode, but you may not
  765. pass these MDF-s to others.
  766.  
  767. It is not necessary to disassemble a mode-supplying module. By simply
  768. calling OS_ServiceCall &50 'Extract' and 'ExtractAll' can find out all they
  769. need to know about a given mode in order to compile an MDF. The functional
  770. difference between these two programs is that 'Extract' extracts one mode at
  771. a time while 'ExtractAll' extracts all modes defined by RAM-based modules.
  772. You can optionally supply the required parameters at the commandline.
  773.  
  774. SYNTAX:
  775.  
  776. *Extract [<Modenumber> [<Outputfile>]]
  777. *ExtractAll [<CommonPart> [Q|S]]
  778.  
  779. INPUT:
  780.  
  781. 'Extract' displays the available modes. Type in the number of the mode that
  782. you wish to extract. You are offered a path/filename which you can change to
  783. your own liking.
  784.  
  785. 'ExtractAll' displays the available modes. You need to enter the common part
  786. of the path/file-name. 'ExtractAll' appends the modenumber to this name and
  787. saves the MDF-s. (E.g. if the modes 50, 51 and 52 are available and the
  788. common part is specified as 'm'. Then the modes are saved as 'm50', 'm51'
  789. and 'm52')
  790.  
  791. 'ExtractAll' lets you choose whether to "(Q)uery each" or "(S)ave all".
  792. Enter 'Q' and the program will let you change the filename before saving it.
  793. Delete the filename and that mode will be skipped. Enter 'S' and all modes
  794. will be extracted.
  795.  
  796. OUTPUT:
  797.  
  798. Both programs output MDF-s to the specified path/filename.
  799.  
  800. NOTE:
  801.  
  802. * RISC OS modes can not be extracted, because the UtilityModule does not
  803. reply to OS_ServiceCall &50 and no other means of retrieving this data is
  804. supplied by RISC OS.
  805.  
  806. * Both 'Extract' and 'ExtractAll' also extract the soft-modes loaded by
  807. UniMode. If you do not want this to happen, you should enter
  808. *RMKill UniversalMode before starting either of these programs.
  809.  
  810. * 'Extract' and 'ExtractAll' create a MDS with the following MachineSpecs
  811. by default:
  812.  
  813. .MachineSpecs
  814.  
  815.   VidcOn
  816.   MultiScan
  817.  
  818.  
  819.  
  820.  
  821.  
  822. ExtractOS2 / ExtractOS3
  823. -----------------------
  824.  
  825. { <UniMode$Dir>.Utils }
  826.  
  827. As mentioned above, RISC OS modes can not be extracted by 'Extract(All)'. In
  828. some circumstances, however, you need the contents of the RISC OS registers
  829. in order to make a working MDF. For instance: If you want to use an MDF
  830. based on a RISC OS 3 BaseMode on a RISC OS 2 machine, you have got a
  831. problem. The best way around this, is to set BaseMode to the nearest
  832. RISC OS 2 BaseMode and then define ALL VIDC registers with the RISC OS 3
  833. values.
  834.  
  835. Using 'ExtractOSn':
  836.  
  837. 1. Create a RAM-disc of approximately 112k.
  838. 2. Create a directory 'Modes' on the RAM-disc.
  839. 3. Create a directory 'ModeScript' on the RAM-disc.
  840. 4. a. On a RISC OS 2 machine run the program 'ExtractOS2'
  841.    b. On a RISC OS 3 machine run the program 'ExtractOS3'
  842. 5. The RAM-disc now contains the MDF's and MDS's of the OS-modes. (All MDF's
  843.    are automatically expanded using 'ExpandAll'
  844.  
  845. Since distribution of these definitions may violate Acorn's copyright we
  846. have not included the RISC OS MDF's in the package.
  847.  
  848. INPUT:
  849.  
  850. -
  851.  
  852. OUTPUT:
  853.  
  854. These programs create MDF's of RISC OS modes. The MDF's are stored on the
  855. RAM-disc. The program 'ExpandAll' is called to create the MDS's.
  856.  
  857. NOTE:
  858.  
  859. * The presence of the directories 'Modes' and 'ModeScript' on the
  860.   RAM-disc is assumed.
  861. * It should be obvious that 'ExtractOS2' cannot be used on a RISC OS 3
  862.   machine and vv.
  863. * It is very likely that 'ExtractOS3' only works on A5000 machines and not
  864.   on other machines running RISC OS 3.
  865. * It is also very likely that 'ExtractOS2' and 'ExtractOS3' do not work on
  866.   an A540 (different OS versions). We haven't tested this so if you have an
  867.   A540, let us know!
  868.  
  869.  
  870.  
  871. InfoMDF
  872. -------
  873.  
  874. { <UniMode$Dir>.Utils }
  875.  
  876. 'InfoMDF' gives information about a given MDF.
  877.  
  878. SYNTAX:
  879.  
  880. *InfoMDF [<Inputfile>]
  881.  
  882. INPUT:
  883.  
  884. Mode file       : This is the name of the MDF. The directory is
  885.                   assumed to be the standard directory where all
  886.                   definition-files are located: <UniModeMDF$Dir>.
  887.  
  888. OUTPUT:
  889.  
  890. Displays some information about the mode. (i.e.: size, colours,
  891. memory-requirements etc.)
  892.  
  893. NOTE:
  894. 'InfoMDF' can also be accessed through the desktop front-end. Refer to the
  895. paragraph called "!UniMode" for more details.
  896.  
  897.  
  898.  
  899.  
  900. ModeInfo
  901. --------
  902.  
  903. { <UniMode$Dir>.Utils }
  904.  
  905. 'ModeInfo' gives some basic information about the modes that you have
  906. currently available through RISC OS; loaded into UniMode; or supplied by
  907. other modules.
  908.  
  909. SYNTAX:
  910.  
  911. *ModeInfo [<Mode#>]
  912.  
  913. INPUT:
  914.  
  915. -
  916.  
  917. OUTPUT:
  918.  
  919. With no parameters ModeInfo will return the information of all modes
  920. currently installed. If you supply a number in the range 0...127 the
  921. information (if any) of that mode only is given.
  922.  
  923.  
  924.  
  925. UMUserLib
  926. ---------
  927.  
  928. { <UniMode$Dir>.Utils }
  929.  
  930. 'UMUserLib' is a library. It is linked into 'Expand(All)' and 'CompileMDS'.
  931. The library contains a number of functions. These functions can be used in
  932. the definition of the MDF as substitutes for numerical values. See the
  933. Programmer's Guide for more details.
  934.  
  935.  
  936.  
  937. UniModeLib
  938. ----------
  939.  
  940. { <UniMode$Dir>.Utils }
  941.  
  942. 'UniModeLib' is also a library. It is linked into all utilities including
  943. the !RunImage. This library supplies the shared resources for the programs
  944. in the package. The contents of this library should not be altered by the
  945. user. If you wish to add FuNctions or PROCedures you should add them to
  946. 'UMUserLib' instead.
  947.  
  948.  
  949.  
  950. TimeRaster
  951. ----------
  952.  
  953. { <UniMode$Dir>.Utils }
  954.  
  955. This Utility can be used to measure the rasterfrequency of the current mode.
  956. The result may deviate ▒ 2Hz from what is calculated by CompileMDS. This
  957. deviation is due to rounding differences.
  958.  
  959.  
  960.  
  961. The HB_Index
  962. ============
  963.  
  964. The HB_Index is a number which gives a rough indication of the speed of a
  965. mode. The HB_Index is calculated as follows:
  966.  
  967.                              1000
  968.                  1) R = ---------------
  969.                         Rasterfrequency
  970.  
  971.  
  972.                         (bpp * (XWindLimit+1) * (YWindLimit+1) * 1000)
  973.                  2) M = ----------------------------------------------
  974.                                                 8
  975.  
  976.  
  977.                                         M
  978.                                  4E7 - ---
  979.                                         R
  980.                   3) HB_Index = -----------
  981.                                     4E7
  982.  
  983. The result is a number between 0.00 and 1.00. A low number typically means a
  984. slow mode, while a higher number suggests a faster mode. The speed of a mode
  985. can be experienced if the WIMP has to redraw a complete screen - with many
  986. different windows overlapping each other - after eg. a mode change (Press
  987. F12 followed by [RETURN]) to simulate a mode change). A slow mode will take
  988. a longer time to redraw the screen. As a result a fast mode indicates that
  989. the ARM has more time left to perform other operations. Generally you will
  990. want to perform time-expensive tasks such as printing etc. in a fast-mode.
  991. Eg. Mode 0 (which is often used for this purpose) has an HB_Index of
  992. approximately 0.97 while Mode 28 (clearly a slower mode) has an HB_Index of
  993. 0.55. The HB_Index depends on the Rasterfrequency of the mode. Therefore the
  994. compiler calculates an HB_Index for the mode for both VidcEnhancer states.
  995. With the currently available hardware (ARM2/ARM3 and 8 or 12 MHz MEMC's)
  996. modes with an HB_Index higher than 0.55 are usually experienced as
  997. reasonably fast modes. Modes with an HB_Index lower than 0.45 will be
  998. experienced as slow or even "snailish".
  999.  
  1000.  
  1001.  
  1002.  
  1003.  
  1004.  
  1005.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023.  
  1024.  
  1025.  
  1026.  
  1027.  
  1028. Programmer's Guide
  1029. ~~~~~~~~~~~~~~~~~~
  1030.  
  1031. This part of the manual deals with the structure of the ModeDescriptionFile
  1032. (MDF) and the ModeDescriptionScript (MDS).
  1033.  
  1034.  
  1035.  
  1036.  
  1037. The ModeDescriptionScript (MDS)
  1038. ===============================
  1039.  
  1040. If you wish to design your own soft-mode you can do so by creating an MDS. The
  1041. structure of the MDS must follow these rules:
  1042.  
  1043. 1. The first line of the file must start with the literal text:
  1044. 'ModeDescription'. Use the space after it to give a short description of the
  1045. mode, and the date you made it.
  1046.  
  1047. 2. Comments may be included anywhere in the file. A comment must be preceded
  1048. by either a ';' or a '|'.
  1049.  
  1050. 3. The description is sub-divided into 4 sections called lists. Each list
  1051. is headed by a card identifying it. Here are the lists:
  1052.         a. Constant Declaration. You can declare up to 16 constants.
  1053.         b. Machine Specifications. This is used to specify the monitortype
  1054.            for which the mode is suitable and how the VidcEnhancer is to be
  1055.            used.
  1056.         c. VIDC Registers. Here you can define the values to be programmed
  1057.            into the VIDC registers.
  1058.         d. Mode Variables. Here you can specify the values to be programmed
  1059.            into the Mode Variables.
  1060.  
  1061. 4. To use a list you must enter its card at the start of a line. Each
  1062. successive line contains the name of a variable followed by an appropriate
  1063. value. Variablename and value must be separated by one or more spaces. Edit
  1064. the MDS "ExampleMDS" or "DIY_BSDM" to see an example.
  1065.  
  1066. 5. The last line in the file must start with the literal text: .End
  1067.  
  1068. Below, each list will be discussed to make its use more clear.
  1069.  
  1070.  
  1071.  
  1072.  
  1073. Constant Declarations (Card: .Declarations)
  1074. -------------------------------------------
  1075.  
  1076. This list enables you to declare up to 16 constants (C(0) ~ C(15)). A
  1077. constant can be used to make a definition more clear.  <Value> can be
  1078. anything that can be passed through BASIC's EVAL function
  1079.  
  1080. Syntax:
  1081.  
  1082. C(<VariableNumber>)     <Value>
  1083.  
  1084. E.g.: You could declare C(0) to hold the number of bits per pixel, C(1)
  1085. could hold the number of columns and C(2) the number of rows. You can then
  1086. define ScreenSize in the WorkSpaceList as follows:
  1087.  
  1088.   ScreenSize      C(0)*C(1)*C(2)/8
  1089.  
  1090.  
  1091.  
  1092.  
  1093. Machine Specifications (Card: .MachineSpecs)
  1094. --------------------------------------------
  1095.  
  1096. This list lets you define the required machine specifications.
  1097.  
  1098. Syntax:
  1099.  
  1100. <Specification>
  1101.  
  1102.  
  1103.  
  1104. Specification           Meaning
  1105. -----------------------------------------------------------------------------
  1106. VidcOn|VidcOff          Turn VidcEnhancer On|Off when this screenmode is
  1107.                         selected and Unimode is in 'Auto'-mode.
  1108. Standard50Hz            This screenmode can be displayed on a Standard 50Hz
  1109.                         monitor
  1110. MultiScan               This screenmode can be displayed on a MultiScan
  1111.                         monitor
  1112. MonoHiRes64Hz           This screenmode can be displayed on a HiRes
  1113.                         Monochrome monitor
  1114. VGA60Hz                 This screenmode can be displayed on a 60Hz VGA
  1115.                         monitor
  1116. SVGA                    This screenmode can be displayed on a SVGA
  1117.                         monitor (RISC OS 3 only)
  1118. LCD                     This screenmode can be displayed on a LCD
  1119.                         (RISC OS 3 only)
  1120.  
  1121.  
  1122. E.g.:
  1123.  
  1124. .MachineSpecs
  1125.  
  1126.   VidcOn
  1127.   MultiScan
  1128.   LCD
  1129.  
  1130. Meaning: This mode is valid only for a MultiScan monitor or LCD display.
  1131.          When UniMode is in 'Auto' mode, the VidcEnhancer will be switched
  1132.          on.
  1133.  
  1134.  
  1135.  
  1136.  
  1137. VIDC Registers (Card: .VIDCList)
  1138. --------------------------------
  1139.  
  1140. You can program each of the VIDC registers defined below. If the
  1141. WorkspaceList is present the VIDCList must also be defined. The value with
  1142. which you program each register must be EVAL-able by BASIC. If you do not
  1143. define a register, its value will be copied from the basemode that you
  1144. defined. You must therefore at least define the variable BaseMode.
  1145.  
  1146. Syntax:
  1147.  
  1148. <Registername>          <Value>
  1149.  
  1150. *** Note, however, that the definition of the registers of a RISC OS 3 mode
  1151. is not necessarily identical to the definition of the same mode under
  1152. RISC OS 2!! E.g. In RISC OS 2's mode 12 the register HBSR has the value of
  1153. 217, while under RISC OS 3 the same register HBSR of mode 12 has the value
  1154. 135!
  1155.  
  1156. Discussed below are the VIDC registers which can be programmed using the
  1157. Unimode-package. They're only used by the VIDC. Refer to the !Draw-file:
  1158. "VIDC_Regs" to see how the registers, discussed below, are mapped to the
  1159. screen. We advise you to print this file if you want to study it. This will
  1160. improve the readability of the texts.
  1161.  
  1162. HCR: Horizontal Cycle Register. This register defines the period of the
  1163.      complete horizontal scan, in units of a pixel. It can be programmed
  1164.      with values from 2...2048, and must be even.
  1165.  
  1166.            pixelrate
  1167.      HCR = --------- = HBER + HorizontalFrontPorch
  1168.            linefreq
  1169.  
  1170.  
  1171. HSWR: Horizontal Sync Width Register. This register defines the width of the
  1172.       horizontal sync (HSYNC) pulse, in units of a pixel. It can be
  1173.       programmed with values ranging from 2...2048, and must be even.
  1174.  
  1175.       HSWR = pixelrate * HSYNCDuration
  1176.                 [MHz]        [╡s]
  1177.  
  1178.  
  1179. HBSR: Horizontal Border Start Register. This register defines the time from
  1180.       the start of the HSYNC-pulse to the start of the border, in
  1181.       units of a pixel. It can be programmed with values ranging from
  1182.       1...2047, and must be odd.
  1183.  
  1184.       If no border is demanded, then HBSR should equal HDSR.
  1185.  
  1186.       HBSR = HSWR + HorizontalBackPorch
  1187.  
  1188.  
  1189. HDSR: Horizontal Display Start Register. This register defines the time from
  1190.       the start of the HSYNC-pulse to the start of the active display,
  1191.       in units of a pixel. It can be programmed with values ranging from
  1192.       1...2047, and must be odd.
  1193.  
  1194.       HDSR = HBSR + LeftBorderWidth
  1195.  
  1196.  
  1197. HDER: Horizontal Display End Register. This register defines the time from
  1198.       the start of the HSYNC-pulse to the end of the active display
  1199.       (i.e. the first pixel which is NOT part of the active display), in
  1200.       units of a pixel. It can be programmed with values ranging from
  1201.       1...2047, and must be odd.
  1202.  
  1203.       HDER = HDSR + PixelsOnActiveDisplayLine
  1204.  
  1205.  
  1206. HBER: Horizontal Border End Register. This register defines the time from
  1207.       the start of the HSYNC-pulse to the end of the border (i.e. the
  1208.       first pixel which is NOT part of the border), in units of a pixel. It
  1209.       can be programmed with values ranging from 1...2047, and must be odd.
  1210.  
  1211.       If no border is demanded, then HBER should equal HDER.
  1212.  
  1213.       HBER = HDER + RightBorderWidth
  1214.  
  1215.  
  1216. HIR: Horizontal Interlace Register. If an interlaced display is required,
  1217.      this register should be programmed. In all (most) other cases it may be
  1218.      omitted. It can be programmed with values ranging from 1...2047, and
  1219.      must be odd.
  1220.      *** NOTE: Interlaced displays have never been tested by the authors, so
  1221.                we recommend either not to use it OR take very, very much
  1222.                time for it (debugging the Unimode-utilities might be
  1223.                needed). When using a multiscan monitor, interlaced displays
  1224.                should not be used. (Most can't display them anyway.)
  1225.  
  1226.  
  1227. VCR: Vertical Cycle Register. This register defines the period of the
  1228.      complete vertical scan, in units of a line. It can be programmed with
  1229.      values ranging from 1...1024.
  1230.  
  1231.              linefreq        pixelrate
  1232.      VCR =  ----------- = ----------------- = VBER + VerticalFrontPorch
  1233.             rasterfreq    HCR * rasterfreq
  1234.  
  1235.  
  1236. VSWR: Vertical Sync Width Register. This register defines the width of the
  1237.       vertical sync (VSYNC) pulse, in units of a line. It can be programmed
  1238.       with values ranging from 1...1024.
  1239.  
  1240.              no. lines during VSYNC
  1241.       VSWR = ----------------------
  1242.                    linefreq
  1243.  
  1244.  
  1245. VBSR: Vertical Border Start Register. This register defines the time from
  1246.       the start of the VSYNC-pulse to the start of the border, in
  1247.       units of a line. It can be programmed with values ranging from
  1248.       1...1024.
  1249.  
  1250.       If no border is demanded, then VBSR should equal VDSR
  1251.  
  1252.       VBSR = VSWR + VerticalBackPorch
  1253.  
  1254.  
  1255. VDSR: Vertical Display Start Register. This register defines the time from
  1256.       the start of the VSYNC-pulse to the start of the active display,
  1257.       in units of a line. It can be programmed with values ranging from
  1258.       1...1024.
  1259.  
  1260.       VDSR = VBSR + TopBorderHeight
  1261.  
  1262.  
  1263. VDER: Vertical Display End Register. This register defines the time from the
  1264.       start of the VSYNC-pulse to the end of the active display (i.e.
  1265.       the first line which is NOT part of the active display), in units of a
  1266.       line. It can be programmed with values ranging from 1...1024.
  1267.  
  1268.       VDER = VDSR + ActiveDisplayLines
  1269.  
  1270.  
  1271. VBER: Vertical Border End Register. This register defines the time from the
  1272.       start of the VSYNC-pulse to the end of the border (i.e. the
  1273.       first line which is NOT part of the active border), in units of a
  1274.       line. It can be programmed with values ranging from 1...1024.
  1275.  
  1276.       If no border is demanded, then VBER should equal VDER.
  1277.  
  1278.       VBER = VDER + BottomBorderHeight
  1279.  
  1280.  
  1281. CR: Control Register. For this register, a special function has been
  1282.     included in the 'UMUserLib'. It can be called with FNCR("..."). Here
  1283.     is a list of keywords that can be used within the quotation-marks, with
  1284.     their meaning. Between brackets is given an abbreviation for that
  1285.     keyword. Since the string is decoded by RISC OS' "OS_ReadArgs", all
  1286.     keywords must be preceded with a '-'.
  1287.  
  1288.     * -PixelRate <value>  (-PR). This is the VIDC-pixelrate in MHz, and can
  1289.        be programmed with 8, 12, 16 or 24. When the VidcEnhancer is switched
  1290.        on, these rates will be 50% higher. It is NOT possible to program
  1291.        PixelRate with e.g. 36. A pixelrate of 36 MHz can be obtained by
  1292.        programming PixelRate to 24 and setting VidcOn in the
  1293.        MachineSpecsList.
  1294.  
  1295.     * -BitsPerPixel <value>  (-BPP). This is the number of bits per pixel,
  1296.        and can be programmed with values 1, 2, 4 or 8 (for resp. 2, 4, 16
  1297.        and 256 colour modes).
  1298.  
  1299.     * -DMARequest <value>  (-DR). This is the moment the VIDC will try to
  1300.        get four new words from the main memory. It can be programmed with
  1301.        one of the values 0, 1, 2, 3, 4, 5, 6, 7 or 8, where 0 and 4, 1 and
  1302.        5, 2 and 6, 3 and 7 have the same meaning (DMA request after resp.
  1303.        word 0, 4 etc.). Since it is difficult to give a clear explanation
  1304.        of which value should be programmed in which case, a value of 8 asks
  1305.        the computer to compute a sensible value and fill it in.
  1306.  
  1307.     * -InterlaceSync  (-IS). This is a switch. Presence only is important.
  1308.        It must only be used if an interlaced display is required. Interlaced
  1309.        displays have never been tested by the authors, so we recommend
  1310.        either not to use it OR take very, very much time for it (debugging
  1311.        the Unimode-utilities might be needed). When using a multiscan
  1312.        monitor, interlaced displays should not be used. (Most can't display
  1313.        them anyway.)
  1314.  
  1315.     Examples:
  1316.                 CR   FNCR("-PixelRate 16 -BitsPerPixel 4 -DMARequest 8")
  1317.                 CR   FNCR("-PR 16 -BPP 4 -DR 8")
  1318.  
  1319. DATA: It may be desirable to program a VIDC register that has not been
  1320.       mentioned above. In such a case you can include "DATA" followed by the
  1321.       value you want to write to the VIDC. The value must be 32-bits wide.
  1322.       The registeraddress must be contained in the top 6 bits (bits
  1323.       26...31). The data to store in the register is contained in bits
  1324.       0...23. Bits 24 and 25 must be zero. Theoretically you should not be
  1325.       needing this statement. But you never know...
  1326.  
  1327.       Example:
  1328.         In theory, the value to be programmed into the Control Register can
  1329.         be defined in three different ways:
  1330.  
  1331.         1. Via a function
  1332.                 CR      FNCR("-PixelRate 8 -BitsPerPixel 4 -DMARequest 2")
  1333.  
  1334.         2. Via a numerical value
  1335.                 CR      59
  1336.             or  CR      &3B
  1337.             or  CR      %00111011
  1338.  
  1339.         3. Via a "DATA" statement
  1340.                 DATA    &E000003B
  1341.  
  1342.     NOTE: Remember that this is only an example and you should use option 1.
  1343.           or 2. if the register to be programmed is supported by the
  1344.           compiler. "DATA" should only be used as a last resort for
  1345.           programming unsupported registers!!
  1346.  
  1347.  
  1348.  
  1349.  
  1350.  
  1351.  
  1352. Mode Variables (Card: .WorkspaceList)
  1353. -------------------------------------
  1354.  
  1355. This list contains the definition of each of the variables that are reported
  1356. through OS_ReadModeVariable. If the VIDCList is present the WorkspaceList
  1357. must also be defined. The value with which you program each variable must be
  1358. EVAL-able. If you do not define a variable, its value will be copied from
  1359. the basemode that you defined. You must therefore at least define the
  1360. variable BaseMode. These variables are also discussed in the RISC OS 2 PRM
  1361. on pages 350...352.
  1362.  
  1363.  
  1364. ModeFlags: For this variable, a special function has been included in the
  1365.            'UMUserLib'. It can be called with: FNMF(" ... "). Here is
  1366.            a list of keywords that can be used within the quotation-marks,
  1367.            with their meaning when included. Between brackets is given an
  1368.            abbreviation for that keyword. All keywords act as switches, if
  1369.            they're not present they will be automatically UNset. Since the
  1370.            string is decoded by RISC OS' "OS_ReadArgs", all keywords must be
  1371.            preceded with a '-'.
  1372.  
  1373.            * -NonGraphicsMode (-NGM). The mode does not support graphics.
  1374.               With the current hardware, a mode can always support graphics.
  1375.  
  1376.            * -TeletextMode (-TM). The mode is a Teletext mode, like mode 7,
  1377.               and thus acts a little different with respect to certain
  1378.               charactercodes.
  1379.  
  1380.            * -GapMode (-GM). The mode is a GapMode. This means that a
  1381.               character does not use the normal 8 lines, but it uses 10
  1382.               instead. This can improve readability of the mode enormously.
  1383.  
  1384.            * -BBCGapMode (-BBCGM). The mode is a BBC compatible gapmode
  1385.               (e.g. mode 3 and 6).
  1386.  
  1387.            * -HiResMonoMode (-HRMM). The mode is to be displayed on a high
  1388.               resolution monochrome monitor.
  1389.  
  1390.            * -VDUCharsDoubleHeight (-VCDH). VDU characters are displayed in
  1391.               double height.
  1392.  
  1393.            * -HardwareScrollNotUsed (-HSNU). The hardwarescroll available in
  1394.               the ARM-based computers will not be used. This can slow down
  1395.               your machine enormously, especially when using large modes.
  1396.  
  1397. ScrRCol: This is the number of characters on a line minus one. If the active
  1398.          display is 640 pixels wide (this can be derived from
  1399.          [HDER] - [HDSR]), it must be programmed with
  1400.          640 / 8 - 1 = 80 - 1 = 79.
  1401.  
  1402. ScrBRow: This is the number of character-lines minus one. If the active
  1403.          display counts 256 lines (this can be derived from
  1404.          [VDER] - [VDSR]), it must be programmed with
  1405.          256 / 8 - 1 = 32 - 1 = 31. If it is a GapMode, the active display
  1406.          might count 250 lines, and ScrBRow should be programmed with
  1407.          250 / 10 - 1 = 25 - 1 = 24.
  1408.  
  1409. NColour: This is the number of colours minus one (1, 3, 15). However 256
  1410.          colour modes should be programmed with 64 - 1 = 63. It must conform
  1411.          to the CR setting.
  1412.  
  1413. XEigFactor: This is the number of times an X-coordinate must be divided by 2
  1414.             to derive the actual pixel. If there are 640 pixels in the
  1415.             active display on a line, and XEigFactor is set to 1, RISC OS
  1416.             will work with coordinates in the range from 0 to
  1417.             (640 * 2) - 1 = 1279. When set to 2, this range is from 0 to
  1418.             (640 * 2 * 2) - 1 = 2559.
  1419.  
  1420. YEigFactor: This is the number of times a Y-coordinate must be divided by 2
  1421.             to derive the actual pixel. If there are 256 lines in the active
  1422.             display,  and YEigFactor is set to 1 RISC OS will work with
  1423.             coordinates in the range from 0 to (256 * 2) - 1 = 511. When set
  1424.             to 2, this range is from 0 to (256 * 2 * 2) -1 = 1023
  1425.  
  1426. LineLength: This is the number of bytes on a pixel row. It should equal
  1427.             (chars per line) * (bits per pixel).
  1428.  
  1429. ScreenSize: This is the number of bytes one screenbuffer occupies. It
  1430.             should equal
  1431.             (chars per line) * (bit per pixel) * (active lines).
  1432.  
  1433. YShftFactor: This variable should not be used. It is kept for compatibility
  1434.              reasons only.
  1435.  
  1436. Log2BPP: This is the ▓log(bits per pixel). This is for 2, 4, 16 and 256
  1437.          colour modes resp. 0, 1, 2, 3, and must conform to the CR setting.
  1438.  
  1439. Log2BPC: This is the ▓log(bytes per character). It usually equals Log2BPP.
  1440.  
  1441. XWindLimit: This is the number of pixels on an active line, minus 1. So it
  1442.             should equal [HDER] - [HDSR] - 1.
  1443.  
  1444. YWindLimit: This is the number of active lines, minus 1. So it should equal
  1445.             [VDER] - [VDSR] - 1.
  1446.  
  1447.  
  1448. Syntax:
  1449.  
  1450. <Variablename>          <Value>
  1451.  
  1452.  
  1453.  
  1454.  
  1455. Finalisation (Card: .End)
  1456. -------------------------
  1457.  
  1458. This card is used to signal the end of the definition. Anything beyond this
  1459. card is ignored.
  1460.  
  1461.  
  1462.  
  1463.  
  1464. Use of Constants and FuNctions
  1465. ==============================
  1466.  
  1467. The value programmed into either a VIDCRegister or a ModeVariable can be
  1468. virtually anything. Of course you can program it with a normal integer. But,
  1469. you can also pass a formula like: 480*256*4. Or if you have declared a
  1470. constant something like:  C(0)*C(1)*C(2). But that's not where it ends. You
  1471. can make it even more complex. For instance: LOG(C(2))/LOG(2) to calculate
  1472. Log2BPP. This can be done because the value is passed through the function
  1473. EVAL before it is programmed into the MDF. The great advantage of this
  1474. mechanism is the fact that FuNctions can be part of the value. For this
  1475. purpose the library 'UMUserLib' is linked into the compiler. Currently the
  1476. following FuNctions are provided by this library:
  1477.  
  1478. FNCR()
  1479. Instead of thumbing through the Functional Description in the VIDC
  1480. Datasheets and manually working out the contents of the Control Register,
  1481. you can simply use this function to calculate the correct value for you.
  1482. Refer to the paragraph 'VIDC Registers' for a description of this function.
  1483.  
  1484. FNMF()
  1485. The variable ModeFlags is a compound variable. Each bit has a different
  1486. meaning. By using this function you needn't calculate the contents of this
  1487. variable yourself. Refer to the paragraph 'Mode Variables' for a description
  1488. of this function.
  1489.  
  1490. FN_DecodeCR
  1491. This function reverses the effect of FNCR() and is used by
  1492. 'Expand(All)' when creating an MDS.
  1493.  
  1494. FN_DecodeMF
  1495. This function reverses the effect of FNMF() and is used by 'Expand(All)'
  1496. when creating an MDS.
  1497.  
  1498. You can of course add other functions to your personal copy of the library to
  1499. enhance the package to your own personal needs. If you do, however, we would
  1500. like to hear from you, as we may want to include these enhancements in
  1501. future releases of the package.
  1502.  
  1503. The MDS's "ExampleMDS" and "DIY_BSDM" are working examples of how you can
  1504. create your own MDS.
  1505.  
  1506.  
  1507.  
  1508.  
  1509. The ModeDescriptionFile (MDF)
  1510. =============================
  1511.  
  1512. In order to use a ModeDescriptionScript (MDS) you need to compile it into a
  1513. ModeDescriptionFile (MDF). Refer to the paragraphs "!UniMode" and
  1514. "CompileMDS" for an explanation about how this can be done.
  1515.  
  1516. The MDF can be loaded into the memory with the command *ModeLoad from the
  1517. CLI. It can also be loaded via the desktop front-end "!UniMode". Refer to
  1518. the appropriate paragraph for more details on this.
  1519.  
  1520. The MDF is a binary file with the filetype &103 ("UniMode"). The structure
  1521. of this file is as follows.
  1522.  
  1523. Offset into File        Contents
  1524. -----------------------------------------------------------------------
  1525.  
  1526. &00000000               MachineSpecs word
  1527.  
  1528. &00000004               Offset to the VIDC list from the beginning of the
  1529.                         file (If bit30 of the MachineSpecs word is set)
  1530.  
  1531. &00000008               Offset to WorkSpaceList from the beginning of the
  1532.                         file (If bit30 of the MachineSpecs word is set)
  1533.  
  1534. [&00000004]             VIDC list (format of the list as defined on page 708
  1535.                         of the RISC OS 2 PRM)
  1536.         +0      0       (indicates format of list)
  1537.         +4      VIDC basemode
  1538.         :
  1539.         +n      -1      (n equals: [&00000008]-4)
  1540.  
  1541. [&00000008]             Workspace list (format of the list as defined on
  1542.                         page 709 of the RISC OS 2 PRM)
  1543.         +0      0       (indicates format of list)
  1544.         +4      Basemode
  1545.         :
  1546.         +n      -1
  1547.  
  1548.  
  1549. The bits of the MachineSpecs word have the following meaning
  1550.  
  1551. bit     meaning if set
  1552. ---------------------------------------------------------------------
  1553.  
  1554. 0..n    MonitorType n is supported by this mode.
  1555.         b0 = Standard 50Hz monitor
  1556.         b1 = MultiScan monitor
  1557.         b2 = Mono HiRes 64Hz monitor
  1558.         b3 = VGA 60Hz monitor
  1559.         b4 = SVGA monitor (RISC OS 3 only)
  1560.         b5 = LCD display (RISC OS 3 only)
  1561.  
  1562. 30      VIDClist & WorkSpaceList are included
  1563.  
  1564. 31      VidcEnhancer should be switched on
  1565.  
  1566. On the whole you will find that the only MDF's that do NOT have bit30 of the
  1567. MachineSpecs word set are "VidcOn" and "VidcOff".
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575. Notes on designing your own modes
  1576. =================================
  1577.  
  1578. Below you will find a compilation of hints and notes that, we think,  may be
  1579. of value to you. As we were developing and experimenting with this package
  1580. we gradually built this library of general knowledge and tips. They are in
  1581. random order, added to the manual as we encountered them.
  1582.  
  1583.  
  1584.   * A Broadcast Standard Display Mode (BSDM) is specifically designed for
  1585.     Standard50Hz monitors (MonitorType 0) and has these specifications:
  1586.  
  1587.           ñ linefrequency       : 15625    Hz
  1588.           ñ rasterfrequency     :    50    Hz
  1589.           ñ line time           :    64   ╡s
  1590.           ñ HSYNC               :     4.5 ╡s
  1591.           ñ HorizontalBackPorch :     5.8 ╡s
  1592.           ñ HorizontalFrontPorch:     1.3 ╡s
  1593.           ñ VCR                 :   312    lines
  1594.           ñ VSYNC (=VSWR)       :     3    lines
  1595.           ñ VerticalBackPorch   :    15    lines
  1596.           ñ VerticalFrontPorch  :    10    lines
  1597.  
  1598.     Refer to the MDS 'DIY_BSDM' for an example of how to make your own BSDM.
  1599.  
  1600.     Other modes must obey the monitor's specs. Look for them in your manual.
  1601.  
  1602.   * Both porches, front and back, are with respect to the SYNC-pulse. Thus
  1603.     the frontporch is between the end of the border and the start of
  1604.     the SYNC-pulse of the next line (flyback). The backporch is between the
  1605.     end of the SYNC-pulse and the start of the border.
  1606.  
  1607.   * All registers and variables must be correctly programmed, to obtain a
  1608.     useable mode and all depend on each other.
  1609.  
  1610.   * Normally a character is 8 by 8 pixels. This means that if you want
  1611.     RISC OS to print readable characters, you should use multiples of 8
  1612.     pixels and lines when defining the width and height of the active
  1613.     display.
  1614.  
  1615.   * The first line of an MDS contains the word 'ModeDescription'. Use the
  1616.     space after it to give a short description of the mode, and the date you
  1617.     made it.
  1618.  
  1619.   * Linefrequency = the number of times a horizontal line is written by the
  1620.     monitor per second.
  1621.  
  1622.   * Rasterfrequency = the number of times a complete screen is written per
  1623.     second.  It should at least equal 50Hz, otherwise the screen will become
  1624.     flickery. There is a utility included: 'TimeRaster' to measure the
  1625.     rasterfrequency of the current mode. You can also calculate it with this
  1626.     formula:
  1627.  
  1628.                 PixelRate * 1E6
  1629.                 --------------- = Rasterfrequency
  1630.                    HCR * VCR
  1631.  
  1632.  
  1633.  
  1634.   * A pixel is not necessarily part of the active display. To define the
  1635.     H-registers, the unit pixel is also used. In this case only the time a
  1636.     pixel takes is important. Only pixels part of the active display can be
  1637.     given another colour (apart from the one-coloured border).
  1638.  
  1639.   * The active display is that part of the entire screen that can be seen
  1640.     and changed by other programs. It is the part you usually work on.
  1641.  
  1642.   * For those of us who cannot afford a VidcEnhancer, there might be a
  1643.     software solution: when the original mode has a pixelrate of 8, 12 or
  1644.     16 MHz you can 'turn on' your 'VidcEnhancer' by changing these values to
  1645.     resp. 12, 16 or 24. 12 MHz modes can be changed to 16 MHz, and so use a
  1646.     higher scanrate, but the it does not equal the Enhancer-on-off-ratio
  1647.     of 1.5.
  1648.  
  1649.   * [VCR]...[HCR] gives you a rectangle. Within this rectangle the actual
  1650.     mode is programmed.
  1651.  
  1652.   * When you are designing a new mode you can save yourself a lot of work
  1653.     if you use the MDS of an existing mode. Especially RISC OS modes
  1654.     extracted with 'ExtractOSn' are very suitable. Simply take the MDS of
  1655.     a mode that looks like what you want and change the appropriate
  1656.     registers and/or variables.
  1657.  
  1658.   * The HSWR is the register which is the most difficult to define. The
  1659.     HSYNC must be long enough so that the DMA Address Generator in the MEMC
  1660.     can reset the screen pointer. This takes 2125ns. You can therefore
  1661.     calculate the minimum value that must be programmed into the HSWR with
  1662.     the following formula:
  1663.  
  1664.                 2125 * pixelrate
  1665.         HSWR =  ----------------
  1666.                      1000
  1667.  
  1668.     During the HorizontalBackPorch the Video FIFO needs to load at least
  1669.     one word 4 pixel-times before the display starts. The length of the
  1670.     HorizontalBackPorch can be calculated with:
  1671.  
  1672.                 1437 * pr + 4000
  1673.                 ---------------- = HorizontalBackPorch
  1674.                       1000           (Round up to the next integer)
  1675.  
  1676.     These values are needed to calculate the HBSR as follows:
  1677.  
  1678.         HBSR = HSWR + HorizontalBackPorch
  1679.  
  1680.     NOTE: IF your machine has a faster MEMC (i.e.> 8 MHz ) you might be able
  1681.           to program the HSWR with a lower value without any problems. The
  1682.           compiler will still give a warning and the MDF may not give a good
  1683.           result on other machines. The minimum value suggested by the
  1684.           compiler ensures that the MDF works on almost all machines. Keep
  1685.           also in mind that the HSWR must be long enough for the monitor to
  1686.           synchronize to it aswell !!
  1687.  
  1688.   * If you want UniMode to 'intelligently' switch the VidcEnhancer on
  1689.     whenever you select the mode, make sure that the rasterfrequency of the
  1690.     mode is less than 50Hz (with the VidcEnhancer switched off).
  1691.     You can (sometimes!) do this by increasing the HCR and/or VCR. After
  1692.     that you may have to re-align the display by changing the other
  1693.     registers also. Remember, that this method is not guaranteed to work and
  1694.     you may not like the result.
  1695.  
  1696.   * 8 MHz; 1 bpp modes (with VidcOff) are not supported by the VIDC-chip.
  1697.     Sometimes however you may be able to display them if you switch the
  1698.     VidcEnhancer On and Off again.
  1699.  
  1700.   * You can use ARMBE (the ARMBasicEditor) with your favourite mode if you
  1701.     load the ModeDescriptionFile at modenumber 22. Then setup the ARMBE to
  1702.     use mode 22. Make sure that you have enough ScreenMemory available and
  1703.     that the MDF has been loaded prior to entering the BasicEditor or the
  1704.     BasicEditor will re-configure the mode used to 0.
  1705.  
  1706.   * When you expand a file you drag the Textfile-icon to a directory-viewer.
  1707.     Alternatively, you can drag the icon to a icon bar-icon. If the
  1708.     application (eg. !Edit) supports data-transfer via Wimp$Scrap the MDS
  1709.     will be automatically loaded into the application. This can be very
  1710.     useful if you want to expand an MDF and immediately start editing it.
  1711.  
  1712.   * Usually Log2BPP and Log2BPC will contain the same value.
  1713.  
  1714.   * It is our experience that people will try to define a mode which
  1715.     takes their own monitor to it's very limits (Eg. The highest or lowest
  1716.     rasterfrequency possible; or a very wide display that only just fits).
  1717.     Although this is perfectly "legal" in your own case remember this:
  1718.     Not all monitors have the same specs. And the MDF you created may not
  1719.     work properly on other monitors.
  1720.  
  1721.   * Do you see flickering pixels in the upper-right corner of the display?
  1722.     Does the first display-line behave "strangely"?
  1723.     These are the telltale signs of a (too) short HorizontalBackPorch. As
  1724.     explained, the HorizontalBackPorch must be long enough to allow the
  1725.     Video FIFO to load one word four pixel-times BEFORE the display starts.
  1726.     If the HorizontalBackPorch is too short this word will not have been
  1727.     loaded into the Video FIFO resulting in the first few pixels not being
  1728.     displayed properly.
  1729.  
  1730.   * While experimenting you may discover that your monitor can display modes
  1731.     with a rasterfrequency higher than the specifications of your monitor
  1732.     given by the manufacturer. Your monitor's manufacturer had a good reason
  1733.     for those specifications, so stick to them. We can't tell what might
  1734.     happen...
  1735.  
  1736.   * What to do if the VidcEnhancer does not respond.
  1737.     1. Check the *HardwareRevision set and adjust it to yours.
  1738.     2. Check if there are any modules providing modes or controlling the
  1739.        enhancer are loaded (except UniversalMode). *RMKill them, perhaps you
  1740.        might like to Extract some modes from the modules first.
  1741.     3. You may have a Watford VidcEnhancer. This VidcEnhancer IS recognised
  1742.        by UniMode but we don't know how to control it. If you DO know how to
  1743.        do this let us know and we'll send you an update.
  1744.     4. You may have a VidcEnhancer that we have never heard of.
  1745.  
  1746.   * On some monitors the colour white may appear to be somewhat yellowish.
  1747.     You may want to improve the visual appearance of white. There is a trick
  1748.     that is used in the paper-making industry to make paper appear more
  1749.     white, the same trick is also used by many people when they do their
  1750.     laundry. The trick is to add some bleu to the whites. The visual
  1751.     appearance of white with a teint of blue is: "Whiter than white" as they
  1752.     say in washing-powder commercials. How do you implement this trick on
  1753.     your desktop? It's easy:
  1754.  
  1755.         1. Click SELECT over the palette icon on the icon-bar.
  1756.         2. Click SELECT over the colour white (colournumber 0)
  1757.         3. Reduce the amount of red by one unit.
  1758.         4. Reduce the amount of green by one unit.
  1759.  
  1760.     You may want to save this palette to a convenient spot (the
  1761.     Library-directory perhaps?) on your boot-disk and include the filename
  1762.     into your !Boot file. Thus, these settings will be loaded whenever you
  1763.     start your computer. NOTE, however, that this does not work on 256
  1764.     colour modes because a different method of colour selection is used
  1765.     here.
  1766.  
  1767.   * If you discover any bugs or if you encounter difficulties which you
  1768.     cannot solve or if you have any questions, the authors would greatly
  1769.     appreciate hearing from you. It is our policy to give users all the
  1770.     support that we can give. Keep in mind that more (clearer) information
  1771.     supplied to us increases your chances of satisfaction. If you send us a
  1772.     disc containing the offending MDF, MDS or utility and a clear
  1773.     description (maybe even a log-file?) of the problem we will most
  1774.     certainly try to solve your problem. Since we only have a low budget;
  1775.     including some stamps (or cash to buy them) will guarantee you the
  1776.     return of your disc.
  1777.  
  1778.  
  1779.     
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.  
  1787.  
  1788. Error messages
  1789. ~~~~~~~~~~~~~~
  1790.  
  1791. The error messages produced by !UniMode or one of the utilities are
  1792. generally self-explanatory. If an error occurs the programs will try to
  1793. indicate what is wrong. Below you will find a list of all the error messages
  1794. that are generated by the programs themselves. (i.e. NOT the error messages
  1795. produced by BASIC or the Wimp and reported THROUGH these programs.) Where
  1796. necessary an explanation of the error message is given.
  1797.  
  1798.  
  1799.  
  1800.  
  1801. Source: icon bar front-end
  1802.  
  1803. * To save, drag the icon to a directory viewer!
  1804.  
  1805. * Can't handle more than one file at a time. (Enter a mode-number or close
  1806.   the window)
  1807.  
  1808. * Fatal error in UniMode. Must exit immediately.
  1809.  
  1810.         = If you encounter this error-message then you have a copy of the
  1811.           ▀-version. Update to a later version.
  1812.  
  1813. * Not a ModeDescriptionFile
  1814.  
  1815. * Mode number must be less than 128!
  1816.  
  1817. * Mode number must be greater than or equal to 0!
  1818.  
  1819. * Filename too short. (Must be at least 1 character)
  1820.  
  1821. * Filename too long. (Must be 10 characters or less)
  1822.  
  1823.         = A filename can not be longer than 10 characters. The path need not
  1824.           be included here. Once you drag the icon to a directory-viewer the
  1825.           program will know where to put the file.
  1826.  
  1827.  
  1828.  
  1829.  
  1830. Source: CompileMDS
  1831.  
  1832. Errors from BASIC reported through this program can be recognized by the
  1833. inclusion of the text "(from 'CompileMDS')". The program can report three
  1834. kinds of errors:
  1835.  
  1836.         1. Fatal RunTime error. This error is usually caused by BASIC. If
  1837.            the error was caused by the EVAL function then the compiler will
  1838.            try to show where it went wrong.
  1839.         2. FATAL ERROR. This error is generated by the compiler when it can
  1840.            not finish the compilation. Here too the compiler will try to
  1841.            give a hint as to what is wrong.
  1842.         3. WARNING. This error is generated by the compiler. The compiler
  1843.            will not abort the compilation because the circumstances that
  1844.            caused this error might have been created on purpose.
  1845.            Nevertheless, you should take a look at the log before using the
  1846.            MDF.
  1847.  
  1848. Some of the errors below are merely listed, because they CAN be generated by
  1849. the program. Generally, other errors will occur before these can be
  1850. triggered. Nevertheless, they are still in the program because of "Murphy's
  1851. Law".
  1852.  
  1853. * Unknown variable ( <Var> ) in line <line#> : '<line>'
  1854.  
  1855.         = This indicates a spelling mistake. The variable or registername
  1856.           <Var> could not be matched.
  1857.  
  1858. * No .END encountered
  1859.  
  1860. * Variable <Var> is not valid in this list. Line <line#> : '<line>'
  1861.  
  1862.         = The variable/register <var> does not belong in the current list.
  1863.           You have probably added a VIDC register in the WorkspaceList or a
  1864.           Mode Variable in the VIDCList.
  1865.  
  1866. * MachineSpecs MUST be defined! (Can't live without 'em)
  1867.  
  1868. * Can't have a WorkspaceList without a VIDClist.  (At least specify
  1869. BASEMODE)
  1870.  
  1871. * Can't have a VIDClist without a Workspacelist.  (At least specify
  1872. BASEMODE)
  1873.  
  1874. * BASEMODE must be defined in VIDClist
  1875.  
  1876. * BASEMODE must be defined in WorkspaceList
  1877.  
  1878. * Can't proceed. No bpp-defined.
  1879.  
  1880.         = This error should not occur since the bpp-setting is derived from
  1881.           the BASEMODE.
  1882.  
  1883. * Size count error
  1884.  
  1885.         = This means that the amount of memory allocated for the compilation
  1886.           of the file is too large. It indicates possible duplicate
  1887.           register or variable assignment(s). Check the MDS to see if you
  1888.           used the same variable or registername more than once.
  1889.  
  1890. * Conflict in bpp-setting!
  1891.  
  1892.         = The number of bits per pixel are defined via:
  1893.                 1. the BaseMode of the VIDClist
  1894.                 2. the BaseMode of the WorkspaceList
  1895.                 3. the Control Register (CR)
  1896.                 4. the value of NColour
  1897.                 5. the value of Log2BPP
  1898.            All must result in the same bpp-setting.
  1899.  
  1900. * This does not fit in the register! (Line <line#> : <line> )
  1901.  
  1902.         = The value being programmed into a register can only be 10 bits
  1903.           wide (after conversion). Refer to the paragraph entitled 'VIDC
  1904.           Registers' in the Programmer's Guide for details about maxima and
  1905.           minima.
  1906.  
  1907. * Can't EVALuate parameter ( <parm> ) in line ( <line#> ) : <line>
  1908.  
  1909.         = The offending parameter <parm> in line <line> has caused BASIC's
  1910.           EVAL function to fail. The error message from BASIC is included in
  1911.           the log. This will generally clarify the problem.
  1912.  
  1913. * Can't EVALuate parameter ( <parm> ) in line ( <line#> ) with formula (
  1914. <formula> )
  1915.  
  1916. * This is not a ModeDescriptionFile
  1917.  
  1918. * BaseMode does not exist on this machine.
  1919.  
  1920.         = The BaseMode specified is not supplied by the OS version on your
  1921.           machine or your machine has been configured for a monitortype that
  1922.           does not support this BaseMode.
  1923.  
  1924. * BaseMode should not be a soft-mode.
  1925.  
  1926.         = The BaseMode specified DOES exist. But it is claimed by a module
  1927.           in RAM. Remove the module by '*RMKill'-ing it and try again.
  1928.           RISC OS does not allow, the use of soft-modes as BaseMode.
  1929.  
  1930. * Can't establish type of connected monitor
  1931.  
  1932.         = For newer versions of RISC OS the monitortype can be configured as
  1933.           "Auto". In such a case the computer tries to 'sense' what kind of
  1934.           monitor is connected. At the moment of this release we did not
  1935.           know how to find out the monitortype in such a case. If you DO
  1936.           know, please let us know. This does not affect the compiler in any
  1937.           way. It is just a message from the compiler that it can not check
  1938.           whether the mode can be displayed on your monitor.
  1939.  
  1940. * Configured monitor is not in the .MachineSpecs
  1941.  
  1942.         = The monitor for which your machine has been configured has not
  1943.           been specified in the list MachineSpecs. This means that the mode
  1944.           MAY not display correctly on your monitor. Try and find out.
  1945.  
  1946. * HSWR should be : <val> or greater.
  1947.  
  1948.         = The minimum value of HSWR is calculated by the compiler. Refer to
  1949.           the paragraph "Notes on designing your own mode"
  1950.  
  1951. * HBSR should be : <val> or greater.
  1952.  
  1953.         = The minimum value of HBSR is calculated by the compiler. Refer to
  1954.           the paragraph "Notes on designing your own mode"
  1955.  
  1956. * <reg1> can not be greater than <reg2> or <reg2> was not defined.
  1957.  
  1958. * value assigned to <reg> must be even.
  1959.  
  1960. * value assigned to <reg> must be odd.
  1961.  
  1962. * The width of the display (HDER-HDSR) should be a multiple of 8 pixels.
  1963.  
  1964. * (HDER-HDSR) must be equal to (XWindLimit+1)
  1965.  
  1966. * The height of the display (VDER-VDSR) should be a multiple of 8 pixels.
  1967.  
  1968. * (VDER-VDSR) must ve equal to (YWindLimit+1)
  1969.  
  1970. * Minimum required screenmemory : <val>
  1971.  
  1972.         = Make sure that the value assigned to ScreenSize is equal to
  1973.  
  1974.           / (HDER-HDSR) * (VDER-VDSR) * 2^BitsPerPixel     \
  1975.          ( ------------------------------------------  +255 ) AND &7FFFFF00
  1976.           \                 8                              /
  1977.  
  1978.           This does not apply in certain situations (e.g. Teletext Modes)
  1979.  
  1980. * VSWR must at least be 1.
  1981.  
  1982. * LineLength should be : <val>
  1983.  
  1984.  * Wrong definition PR
  1985.  
  1986.         = PR (means PixelRate) must be programmed with 8, 12, 16 or 24
  1987.  
  1988. * Wrong definition BPP
  1989.  
  1990.         = BPP (means BitsPerPixel) must be programmed with 1, 2, 4 or 8
  1991.  
  1992. * Wrong definition DR
  1993.  
  1994.         = DR (means DMARequest) must be programmed with 0, 1, 2, 3, 4, 5, 6,
  1995.           7 or 8
  1996.  
  1997.  
  1998.  
  1999. Source: Expand / ExpandAll
  2000.  
  2001. Errors from BASIC reported through these programs can be recognized by the
  2002. inclusion of the text "(from 'Expand')" or "(from 'ExpandAll')".
  2003.  
  2004. * Not A ModeDescriptionFile
  2005.  
  2006. * *** Warning *** Unsupported VIDCList !
  2007.  
  2008.         = The programs are all compatible with RISC OS 2. The
  2009.           VIDClist-version is always '0'. If, in the future, other VIDCs
  2010.           are introduced, they may require a different VIDClist and hence
  2011.           have a different VIDClist-version. Re-compiling such modes MAY
  2012.           not give the desired effect.
  2013.  
  2014. * *** Warning *** Unsupported WorkspaceList !
  2015.  
  2016.         = The programs are all compatible with RISC OS 2. The
  2017.           WorkspaceList-version is always '0'. If, in the future, other
  2018.           VIDCs are introduced, they may require a different WorkspaceList
  2019.           and hence have a different WorkspaceList-version. Re-compiling
  2020.           such modes MAY not give the desired effect.
  2021.  
  2022. * ;DATA      &xxxxxxxx  ;This is unrecognised VIDC data
  2023.  
  2024.         = If the program encounters data which it cannot translate it will
  2025.           include the raw (unprocessed) data into the MDS as a comment. In
  2026.           such a case you can try to find out what the data means. This is
  2027.           therefore not a real error message as it is only reported in the
  2028.           MDS.
  2029.  
  2030.  
  2031.  
  2032.  
  2033.  
  2034.  
  2035.  
  2036.  
  2037.  
  2038.  
  2039.  
  2040.  
  2041.  
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047. Bibliography
  2048. ~~~~~~~~~~~~
  2049.  
  2050.  
  2051. Books for further reading:
  2052.  
  2053. - RISC OS Programmer's Reference Manual (Acorn Computers Ltd.)
  2054.  
  2055. - Acorn RISC Machine Family Data Manual
  2056.         - The 32-bit RISC Microprocessor System -  (Prentice Hall)
  2057.  
  2058.  
  2059.  
  2060.  
  2061.  
  2062.  
  2063.  
  2064.  
  2065.  
  2066.  
  2067.  
  2068. Acknowledgements
  2069. ~~~~~~~~~~~~~~~~
  2070.  
  2071. Special thanks are due to (in random order) :
  2072.  
  2073.  
  2074. - Acorn Computers Ltd., Cambridge UK
  2075.  
  2076. - Velobyte CV., Rotterdam NL
  2077.  
  2078. - B. Bles, Woerden NL
  2079.  
  2080. - E. DorrΘ, NL 
  2081.  
  2082. - FKW & ETJ v/d Pol, Hoeven NL
  2083.  
  2084. - VLSI Technology Inc., San Jose USA
  2085.  
  2086. - Prentice Hall International Ltd., London UK
  2087.  
  2088. - J.P. Hendrix, Dongen NL
  2089.  
  2090. - M. Hendrix, Tilburg NL
  2091.  
  2092.  
  2093.  
  2094.  
  2095.  
  2096.  
  2097.  
  2098.  
  2099.  
  2100.  
  2101.         Ho! Ho! Ho! to the bottle I go
  2102.         To heal my heart and drown my woe.
  2103.         Rain may fall and wind may blow,
  2104.         And many miles be still to go,
  2105.         But under a tall tree I will lie,
  2106.         And let the clouds go sailing by.
  2107.  
  2108.  
  2109.                                         J.R.R. Tolkien