home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol076 / fast2man.doc < prev    next >
Text File  |  1984-04-29  |  21KB  |  450 lines

  1. WHAT IS FAST2 AND HOW DOES IT WORK?
  2. -----------------------------------
  3. What  is  FAST2?  It is a new transient program for the CP/M  (*) 
  4. disk  operating system.    It was originally written by by  Roger 
  5. van  Valzpah and released by the CP/M user group as  FAST.   This 
  6. version  was  modified by David Bennett of the  Alfred  Hospital, 
  7. Melbourne to be compatible with CP/M version 2.0.  
  8.  
  9. FAST2  is used in conjunction with other transients to  speed  up 
  10. their execution.    Of course,  nothing but a hardware change can 
  11. increase the rate at which your CPU executes instructions.   But, 
  12. most  transients are "disk bound",  that is,  they spend a  large 
  13. percentage  of  their total execution time just waiting  for  the 
  14. information they need from the disk.   
  15.  
  16. FAST2 uses this fact to increase execution speed by reducing  the 
  17. time spent waiting for the disks.   This is accomplished by using 
  18. two different types of buffering.   Firstly, portions of the disk 
  19. which  are  frequently  accessed (the directory) are  held  in  a 
  20. buffer,  eliminating  the need to seek to read them.    Secondly, 
  21. disk  accesses are grouped together in time to reduce the  amount 
  22. of time lost to rotational latency and head load delay.
  23.  
  24. HOW TO USE FAST2
  25. ----------------
  26. The  normal  CP/M  command  to assemble  a  file  with  the  name 
  27. MUMBLE.ASM is:
  28.  
  29.      A>ASM MUMBLE
  30.  
  31. To perform the same function under FAST2, simply type:
  32.  
  33.      A>FAST2 ASM MUMBLE
  34.  
  35. Thus,  in its simplest form, FAST2 can be used as a prefix to any 
  36. normal  CP/M  command.    This  will load FAST2 which  will  link 
  37. itself  to your operating system and allocate its  disk  buffers.   
  38. Then  the  transient ASM.COM is loaded and given  control.    The 
  39. fact  that FAST2 is in the system is totally transparent  to  the 
  40. transient, except for the reduced memory size.   Messages will be 
  41. printed  just  before  and  after the transient  is  executed  to 
  42. indicate that FAST2 is in control.    After execution, you should 
  43. see something like this on your terminal:
  44.  
  45.      A>FAST2 ASM MUMBLE
  46.      Alfred Hospital FAST 2.01
  47.      CP/M ASSEMBLER - VER 1.4
  48.      1234
  49.      056H USE FACTOR
  50.      END OF ASSEMBLY
  51.      FAST terminated
  52.      A>
  53.  
  54. Where N.NN is the version number of FAST2 that you are using.
  55.  
  56. COMMAND LINE OPTIONS
  57. --------------------
  58. The  buffering  action of FAST2 may be altered with  the  use  of 
  59. command  line  options.    This is accomplished by following  the 
  60. FAST2  command with an option string enclosed in square  brackets 
  61. ("["  and "]").    A valid option string must consist of a  drive 
  62. specification   followed   by   one  or   more   buffering   mode 
  63. specifications.    This  group may be repeated for  buffering  of 
  64. multiple  drives.   Examples  of typical option strings  will  be 
  65. given below.
  66.  
  67. Explicitly  specifying  the buffering mode is desirable to  reach 
  68. the  best trade-off between speed of execution and memory  usage.   
  69. In  general,  as  more buffering is used,  execution  speed  will 
  70. increase.    However,  more  buffering means more  memory  usage.   
  71. The  type  of buffering selected should be tailored to  the  disk 
  72. usage  patterns of the transient being executed.    For instance, 
  73. write buffering will offer no speed improvement when a  transient 
  74. only  reads the disk.
  75.  
  76. One  thing  that  FAST2 must know is which disk drive  is  to  be 
  77. buffered.    This  is  communicated to FAST2 simply by using  the 
  78. single  letter  name of the desired drive (e.g.    "A"  for  disk 
  79. drive A).    As a convenience,  the current default drive may  be 
  80. specified  with the commercial at sign ("@").
  81.  
  82. The second thing which FAST2 must know is which mode of buffering 
  83. is to be used.    FAST2 supports three different buffering modes.   
  84. Each  mode may be used individually or in combination with  other 
  85. modes to offer the fastest execution.   The three modes available 
  86. are:
  87.  
  88.       Seek buffering
  89.       Read buffering
  90.       Write buffering
  91.       Yes (all of the above)
  92.  
  93. The  type  of  buffering desired is communicated to  FAST2  by  a 
  94. single  letter in the option string.    The letter is simply  the 
  95. first  letter  of the word which describes the type of  buffering 
  96. (capitalized above).   The operation and application of each mode 
  97. will  be discussed below.    Thus,  a typical FAST2 command  line 
  98. might look like this:
  99.  
  100.      B>FAST2 [ASWBSR] ASM MUMBLE.BAA
  101.  
  102. In this example,  the .ASM source file is on drive B so read  and 
  103. seek buffering have been specified for that drive.   The A drive, 
  104. on the other hand,  is to receive the result of the assembly (the 
  105. .HEX and .PRN files), so it gets write and seek buffering.
  106.  
  107. BUFFERING MODE DESCRIPTIONS
  108. ---------------------------
  109. Seek buffering causes the disk directory to be read into a buffer 
  110. the  first time a drive is accessed.    From then on,  all  reads 
  111. from  and  writes  to the directory can be  carried  out  without 
  112. moving   the  disk  head  from  its  current  position.     Thus, 
  113. transients which access the directory frequently will be sped  up 
  114. considerably by seek buffering.   Transients which fall into this 
  115. category   are  those  which  deal  with  many  different   files 
  116. simultaneously,  perform  operations  with  temporary  files  and 
  117. rename them, read or write large (more than 16K) files, and those 
  118. which perform random disk I/O.   In particular, ASM.COM, MAC.COM, 
  119. PIP.COM,  and  ED.COM  are examples of  such  transients.
  120.  
  121. Read  buffering causes an entire track from the disk to  be  read 
  122. into  a buffer the first time any sector is read from that track.   
  123. This increases execution speed because CP/M typically reads  most 
  124. of one track before going on to the next one.   Additionally, the 
  125. time  required to read a whole track is a fairly small percentage 
  126. increase  over the time required to read a single  sector.    The 
  127. net effect is that less time is spent waiting for the  rotational 
  128. latency of the disk.    This mode of buffering is most beneficial 
  129. to  transients which read disk files sequentially.    As a matter 
  130. of fact, it may slow down transients which read files in a random 
  131. access mode.    Fortunatlly, the vast majority of CP/M transients 
  132. read  the disk sequentially.    Examples of such  transients  are 
  133. ASM.COM,  MAC.COM, PIP.COM, and BASIC-E.COM (if the BASIC program 
  134. doesn't do random I/O!!).
  135.  
  136. With write buffering,  sectors that are to be written to disk are 
  137. held in a buffer for a time, instead of writing them immediately.   
  138. Sectors  for  any given track are held in the buffer  until  CP/M 
  139. tries to write to a track that is not buffered.   When it is time 
  140. to  change  tracks,  only those sectors which  were  changed  are 
  141. actually written before clearing the buffers to make room for the 
  142. new  data.    This improves execution speed for the same  reasons 
  143. that read buffering does,  i.e.   a whole track can be written in 
  144. about  the time it takes to write a single  sector.    Transients 
  145. which benifit from this type of buffering typically write to disk 
  146. sequentially.   Examples include ASM.COM, MAC.COM, and ED.COM.
  147.  
  148. DEFAULT PHILOSOPHY
  149. ------------------
  150. Two of the qualities generally associated with a good program are 
  151. versatility and ease of use.    FAST2 has been written with these 
  152. two qualities in mind as the primary design goals.    Many times, 
  153. however,  these  two  goals can be contradictory.    A  versatile 
  154. program is one which is capable of a wide variety of tasks or one 
  155. that  fits many different FAST2 Default philosophy  applications.   
  156. This  usually means a program with many user selectable  options.   
  157. Forcing  the user to type the same frequently used options  every 
  158. time  a program is invoked or committing him to remember  a  long 
  159. list  of  options  is contradictory to the goal of ease  of  use.   
  160. This conflict is resolved by the use of default mechanisms within 
  161. FAST2.
  162.  
  163. A  default  mechanism is simply a rule that can be used  to  make 
  164. assumptions  about the user's wishes when he has not stated  them 
  165. explicitly.   Thus, versatility has been retained by allowing the 
  166. user the ability to specify options explicitly, while the default 
  167. mechanism frees the user from this tedium much of the time.    In 
  168. short,  defaults allow versatility and ease of use to  peacefully 
  169. co-exist in the same program.
  170.  
  171. .cp 3
  172. DEFAULT MECHANISMS IN FAST2
  173. ---------------------------
  174. There  are two levels of defaults built into FAST2.    The  first 
  175. default mechanism is used when either the drive or buffering mode 
  176. is omitted from an option string.   If a drive name is not given, 
  177. the  default drive for CP/M is used (this is equivalent to  "@").   
  178. If  no buffering mode is specified,  read and seek buffering  are 
  179. used.   Thus, the following two commands would be equivalent.
  180.  
  181.      B>FAST2 [BRW] LOAD MUMBLE
  182.  
  183.      B>FAST2 [RW] LOAD MUMBLE
  184.  
  185. And so would the following two commands.
  186.  
  187.      A>FAST2 [BRS] PIP B:THIS=B:THAT
  188.  
  189.      A>FAST2 [B] PIP B:THIS=B:THAT
  190.  
  191. The  second  default  mechanism comes into play  when  no  option 
  192. string  is given on the command line.    Instead of executing the 
  193. transient with no buffering,  FAST2 uses a default option  string 
  194. to specify the buffering used.   This string is [@RS], giving the 
  195. user  read and seek buffering on the default drive when no option 
  196. string  is present on the command line.    The user may,  at  his 
  197. option,  alter  the default option to one which is more  suitable 
  198. for his typical uses.    For instance, if you typically use FAST2 
  199. for  assembling  and  don't have to worry about  running  out  of 
  200. memory,  a good default string would be [@RWS].    Conversely, if 
  201. you are running in a small memory system,  a good choice would be 
  202. to change the default option string.
  203.  
  204. HOW TO CHANGE THE DEFAULT OPTION STRING
  205. ---------------------------------------
  206. The  default string is stored in FAST2 at address 0130H.    Thus, 
  207. to  change  the  option string,  use SID or  DDT  to  change  the 
  208. existing string.   Assuming you have SID this is very easy:
  209.  
  210.      A>SID FAST2.COM
  211.      SID VERS 1.4
  212.      NEXT PC END
  213.      0A00 0100 94FF
  214.      #S130
  215.      0130 5B "[@RWS]
  216.      0136 20 .
  217.      #^C
  218.      A>SAVE 9 FASTX.COM
  219.  
  220. If you do not have SID, you'll have to use DDT and figure out the 
  221. hex  for  the ASCII string you wish to patch in.    Then use  the 
  222. Substitute command to patch the file as above.    In either case, 
  223. test  the  patched  file before killing  the  old  FAST2.COM  and 
  224. renaming the new file to FAST2.COM.
  225.  
  226. .cp 3
  227. WARNINGS N-E-V-E-R CHANGE DISKS WHILE EXECUTING UNDER FAST2!!!
  228.  
  229. And in case you missed that one I'll say it again...
  230.  
  231.                             YOU  MUST
  232.  
  233.       **********  N-E-V-E-R   N-O-T    E-V-E-R  **********
  234.  
  235.                           CHANGE  DISKS
  236.                  WHILE EXECUTING UNDER FAST2!!!
  237.        (not even if you think you know what you are doing)
  238.  
  239. Wait  until  you see the message "FAST2 terminated"  before  even 
  240. thinking about switching disks.    A rather nasty side effect  of 
  241. seek  buffering  is  that it disables the disk  change  detection 
  242. mechanism built into CP/M.   This means that you will NOT get the 
  243. warning  message "Bdos error on A:  R/O" if you forget and change 
  244. disks   without  booting.    Instead  you  will  get   wild   and 
  245. unpredictable  effects  possibly including destroying  your  disk 
  246. directory.
  247.  
  248. This  also  gives  rise  to  a  minor  incompatibility  with  any 
  249. transients  which  use the BDOS reset function  (BDOS  call  13).   
  250. This  function  is  used in transients which allow  the  user  to 
  251. change  disks  without  rebooting.    Some examples  are  MBASIC, 
  252. CBASIC,  WORDSTAR,  and others.   Fortunately they only this BDOS 
  253. function  when  an explicit command is used  to  permit  changing 
  254. disks.   FAST2 is compatible with transients of this sort as long 
  255. as no attempt is made to change disks.  
  256.  
  257. One  way  to  avoid  trouble is to avoid  using  FAST2  with  any 
  258. transient  which requires user input.    Any such  transient,  by 
  259. waiting  for your reply,  would leave you with the opportunity to 
  260. change disks.   To minimise the risk of your running into trouble 
  261. with  such programs,  FAST2 watches out for any requests for user 
  262. input.  When such a request is detected, FAST2 immediately writes 
  263. all  modified  blocks  back  to  disk.   While  this  gives  some 
  264. protection  against  lost data,  it fails with programs  such  as 
  265. Wordstar  which  monitor console status and  only  request  input 
  266. after a key is struck.  Again, DON'T change disks.
  267.  
  268. COMPATIBILITY
  269. -------------
  270. FAST2  is fully compatible with the following transients and  can 
  271. be expected to provide a significant reduction in execution time.        
  272.  
  273.      CP/M utilities:LOAD, SUBMIT, DUMP, MAC
  274.      Compilers:     ASM, MAC, RMAC, M80, FORTRAN, F80, COBOL-80,
  275.                     PL/I, etc.
  276.  
  277. FAST2 is fully compatible with the following transients,  but due 
  278. to the fact that they require user input,  some caution should be 
  279. exercised  when they are used with FAST2.    As mentioned  above, 
  280. stopping  for  input gives the user the chance  to  inadvertently 
  281. change  disks  which CP/M would not be able to detect.    If  the 
  282. user is able to guard against this occurrence,  he may use  FAST2 
  283. with  these  transients  and expect a  significant  reduction  in 
  284. execution time.   In particular,  the improvement in the speed of 
  285. PIP is little short of unbelievable.
  286.  
  287.      CP/M utilities:PIP, DDT, SID, ZSID
  288.      Editors:       ED, WORDMASTER, WORDSTAR, ED-80
  289.      Interpreters:  MBASIC, RUN, CRUN, CRUN2, PRUN
  290.      Other:         SELECTOR, ADVENTURE
  291.  
  292. FAST2 is fully compatible with the following transients,  but due 
  293. to  the  way in which they access the disk,  little or  no  speed 
  294. improvement can be expected.
  295.  
  296.      Special utilities: SYSGEN, MOVCPM, FAST2, COPY
  297.  
  298. Due to an unfortunate memory dependency,  STAT (version 1.4) does 
  299. not  correctly report the number of bytes remaining on  the  disk 
  300. when it is executed under FAST2.    This is no great loss because 
  301. FAST2 can do little to speed up the execution of STAT.
  302.  
  303. Best  results  are  obtained  in situations  where  the  disk  is 
  304. accessed  sequentially,  especially if large files are read  from 
  305. beginning  to end.   The following examples indicate some of  the 
  306. results which can be expected using standard single-sided single-
  307. density 8 inch diskettes.
  308.  
  309.      A>FAST2 [AYBY] PIP B:=*.*
  310.  
  311.      This command can be expected to copy a 241k diskette full of 
  312.      data, file by file, in about 80 seconds.  With verification, 
  313.      it takes perhaps 100 seconds.
  314.  
  315.      A>FAST2 [ARBY] WS
  316.  
  317.      Use this command on your Wordstar utility disk to edit  text 
  318.      on drive B: (but don't change disks!) and you will marvel at 
  319.      the  new version of your editor.   It will load overlays  in 
  320.      the  blink  of an eye and save files (e.g.  ^KS) in  nothing 
  321.      flat.
  322.  
  323.      A>FAST2 [ARBY] COBOL CMUMBLE
  324.  
  325.      The  compilation for a small 100 line program  drops  from 
  326.      about 90 seconds to less than 40.   The biggest gains are in 
  327.      loading  overlays of the compiler.
  328.  
  329.      A>FAST2 [ARBY] CBASIC BMUMBLE $BF
  330.  
  331.      One of the most irritating features of this compiler is that 
  332.      if  you switch off the listing,  you don't know which  lines 
  333.      contain  any errors which are detected.   Solution:  save  a 
  334.      listing  on disk and with FAST2 the compilation  will  still 
  335.      take no longer than before.
  336.  
  337. FAST2 MESSAGES
  338. --------------
  339. During  the course of execution,  FAST2 may print any of  several 
  340. different  messages.    Each  of these messages is  listed  below 
  341. along with conditions under which it is printed.
  342.  
  343.      Alfred Hospital FAST 2.01
  344.  
  345.      This  message is printed after the transient to be  executed 
  346.      under  fast  has been successfully loaded,  but just  before 
  347.      control is transfered to it.   This is simply an informatory 
  348.      message  and does not signal an error condition.    In  this 
  349.      message,  N.NN is the version number of FAST2 which you  are 
  350.      using.
  351.  
  352.      FAST terminated
  353.  
  354.      This  message  is printed after the transient  has  finished 
  355.      execution and all disk buffers have been emptied.   This too 
  356.      is  simply  an  informatory  message  printed  under  normal 
  357.      conditons.   
  358.  
  359.      NO COM FILE
  360.  
  361.      This message is printed when the transient filename given on 
  362.      the  command  line cannot be found in  the  directory.    No 
  363.      recovery  action  can be taken,  so the  execution  complete 
  364.      message is printed and FAST2 re-boots.
  365.  
  366.      OUT OF MEMORY
  367.  
  368.      This message is printed when the size of the TPA is exceeded 
  369.      while  allocating  buffers or while loading  the  transient.   
  370.      In  either  case,  no recovery action can be taken,  so  the 
  371.      execution  complete message is printed and  FAST2  re-boots.   
  372.      There  are  several solutions to the out of memory  problem:  
  373.      use less buffering,  use smaller transients,  or, of course, 
  374.      buy more memory.
  375.  
  376.      DISK WRITE ERROR
  377.  
  378.      This message is printed when FAST2 attempts to write data to 
  379.      disk and gets the unsuccessful completion flag back from the 
  380.      BIOS.    The  only  recovery  action  taken  is  simply  the 
  381.      printing of the message,  then execution continues normally.   
  382.      This  usually  indicates a serious error (like  a  protected 
  383.      disk) and the user should boot and take corrective  measures 
  384.      as soon as possible.
  385.  
  386.      INVALID OPTION
  387.  
  388.      This message is printed whenever an error is detected in the 
  389.      option  string  being  scaned by FAST2.    This may  be  the 
  390.      option  string supplied on the command line or  the  default 
  391.      option  string  in memory in the unlikely event that it  has 
  392.      been  incorrectly  modified.     Some  examples  of  invalid 
  393.      options are the null option ([]), options containing invalid 
  394.      characters ([Q]),  or options which specify buffering of the 
  395.      same type for the same drive twice ([ABA]).
  396.  
  397.      MEMORY HIT
  398.  
  399.      This message is printed whenever FAST2 attempts to write  to 
  400.      a  memory  location  and cannot read the data  it  has  just 
  401.      written.   The recovery action taken is to print the message 
  402.      and  ignore  the  error.    It is usually  an  indicator  of 
  403.      hardware  problems in your system and should be looked  into 
  404.      immediately.    If  MEMORY HIT errors are persistent and you 
  405.      have a ROM monitor in your system, you can use FAST2 to help 
  406.      find the memory at fault.    Create a special FAST2.COM with 
  407.      a  jump to your monitor patched into location  521H.    This 
  408.      location is called when a memory hit is detected.    The  HL 
  409.      register  contains the address of the bad byte and a bit  in 
  410.      the A register is set for each bad bit in memory.
  411.  
  412. MEMORY ALLOCATION
  413. -----------------
  414. When  FAST2 is loaded,  it automatically relocates itself to  the 
  415. top  of the TPA (just like DDT and SID).    This action  overlays 
  416. the  CCP.    A  side  effect  of this is  that  transients  which 
  417. normally  return  to  the  CCP without  booting  will  boot  when 
  418. executed under FAST2.   An example of such a transient command is 
  419. LOAD.
  420.  
  421. As  mentioned earlier,  the only way a transient can tell that it 
  422. is  being  executed under FAST2 is that the size of  the  TPA  is 
  423. decreased.    The  amount of memory taken out of the TPA by FAST2 
  424. is dependant on the number of buffers which are allocated.
  425.  
  426. .cp 4
  427.      The  formulas  used to determine the amount of  memory  used 
  428. are:
  429.      buffers = NTB * (3 + 131 * SPT) + NSB * (3 + 131 * SID)
  430.      SID = NDE / 4
  431.      mem used = 768 + [buffers]
  432.  
  433. Where:  NTB is the Number of Track Buffers  allocated
  434.         SPT is the number of Sectors Per Track
  435.         NSB is the Number of Sector Buffers allocated
  436.         SID is the number of Sectors in the Directory
  437.         NDE is the maximum Number of Directory Entries
  438.         [ ] indicate rounding up to the next multiple of 256
  439.  
  440. For  a normal 8 inch IBM compatible version of  CP/M,  all  these 
  441. computations can be replaced by a simple estimating rule:   Allow 
  442. 1024  bytes for FAST2 code overhead,  3409 bytes for  each  track 
  443. buffer (R or W), and 2099 bytes for each seek buffer (S).   As an 
  444. example, FAST2 executed without a command line option string will 
  445. use 1024 + 3409 + 2099 bytes.    If this sum is rounded up to the 
  446. next multiple of 256, the actual memory usage figure becomes 6656 
  447. bytes.   The maxmimu on a two drive system is the command  option 
  448. [AYBY]  which  costs 1024 + 4x3409 + 2x2099 or a total  of  18.5K 
  449. (18944 bytes).
  450.