home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / misc / fast2.ark / FAST.MAN < prev    next >
Text File  |  1983-09-09  |  18KB  |  511 lines

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