home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / BDOS / Z80DS231.LBR / Z80DOS23.DZC / Z80DOS23.DOC
Text File  |  2000-06-30  |  8KB  |  158 lines

  1.  
  2.  Z80DOS 2.31                                                Nov 15, 1988
  3.  11/14/88
  4.  Eugene Nolan
  5.  C/O DHN* RCPM 215-623-4040 (Sysop Bob Dean)
  6.  
  7. PURPOSE:
  8.  
  9.      Z80DOS version 2.3 attempts to speed the most  basic  operation  of
  10.  the  internals  by  decreasing  the  time  it takes to look up the next
  11.  extent of a file already open. The file may  be  open  for  reading  or
  12.  writing in either sequential or random (or mixed modes).
  13.  
  14.  
  15. METHOD:
  16.  
  17.      It  does  this  by making use of File Control Block (FCB) entry 13,
  18.  the 's1' 'unused' byte in the FCB. Z3X use this byte to pass  the  user
  19.  number  of  a  file  referenced  in the command line tail to the loaded
  20.  transient, but after that the transient cannot expect it  to  still  be
  21.  there after the file is referenced.
  22.  
  23.      In  FCB+13,  Z80DOS23  will store the sector of the directory where
  24.  the file was found. This scheme will work will all disk definitions  up
  25.  to  1024  directory  entries.  Note that this sector is relative to the
  26.  base track offset for a given logical (physical) drive.
  27.  
  28.      If the file was referenced by a call to 'MAKE FILE' or a new extent
  29.  was opened while reading or writing, the FCB+13 will here again contain
  30.  the directory sector of the relevant entry in the directory.
  31.  
  32.  
  33. BDOS TUTORIAL:
  34.  
  35.      Access to the directory entries of a file using CPM 2.2  compatible
  36.  BDOS's,  at least 2.2 itself and the variants of P2DOS that are around,
  37.  will all search the directory starting at the beginning every  time  an
  38.  application  has  read/written  more  than 16k from a file, even if you
  39.  have 16k allocation per block and can contain 16 entries per  directory
  40.  entry!
  41.  
  42.      Now  let's  say  you  have  4k  allocation blocks, and 8 allocation
  43.  references per directory entry ( a fairly standard hard disk system  ),
  44.  and  there  are  1024  available entries of which 256 are used (we have
  45.  just done a SAP). Now we want to copy a 63k  file  to  this  drive.  We
  46.  start  by checking to see if the file exists, this will require reading
  47.  every directory entry for the 256 files. Now the file did not exist, so
  48.  we  'MAKE'  the  file,  again we must scan the directory looking for an
  49.  unused slot in the directory, 257 directory entries scanned this time.
  50.  
  51.      Now we have a slot and we start writing, after we have written 16k,
  52.  the  CPM2.2  compatible BDOS must then open the next extent, so it will
  53.  close the current one by searching all 257 directory  entries  for  the
  54.  FCB  it  already  has opened, write out the updated entry, and allocate
  55.  the next free block. 16k more and we then search 257 entries, write the
  56.  updated  entry  and  accept  more input till we again have 16k's worth,
  57.  again scan 257, write updated directory and accept the  last  15k.  The
  58.  application then closes the file, which requires 257 more scans and the
  59.  write of the updated directory.
  60.  
  61.      So all in all we 'looked' for this file thru  over  1541  directory
  62.  entries!  Now don't forget that we copied that file from somewhere, and
  63.  the above process was repeated every time the application read 16k from
  64.  the source file!
  65.  
  66.      Now  of course if we had fewer than 256 used entries to start with,
  67.  then there would be a correspondingly less searching required.
  68.  
  69.      Z80DOS2.3 attempts to address the above searching by decreasing the
  70.  number   of  searches  required  once  a  file  is  open  and  we  have
  71.  read/written more than 16k. The above scenario would of been  completed
  72.  with just a max of 529 directory entry scans. 257 for the original look
  73.  to see if file exists, 257 to find a free slot, and then up  to  4  for
  74.  each of the 16k hunks and the final close.
  75.  
  76.  
  77. INCOMPATABLITIES:
  78.  
  79.   There are some side effects of the above scheme. It assumes that the
  80.  root, and subsequent entries for the file, all fall in ascending order
  81.  in the directory. This is assured by Z80DOS if files were made under
  82.  it's control, as it will always 'make' the next directory higher in the
  83.  directory.
  84.  
  85.   But this scheme of having a non-zero FCB+13 and subsequent directory
  86.  entries occur higher in the directory is NOT strictly CPM2.2 compatible.
  87.  That is not to say that a CPM 2.2 compatible BDOS cannot use the files
  88.  created this way, it surely can, but it does say that some files created
  89.  by the 2.2 BDOS may not be accessible by the Z80DOS2.3 BDOS. This can
  90.  occur if you have ever had one file open for writing, and with the file
  91.  open, have deleted a file that occurred lower in the directory than the
  92.  current FCB, and the FCB entry overflows which requires opening a new
  93.  one. The 2.2 BDOS will use the extent lower in the directory for the
  94.  next entry, which Z80DOS2.3 cannot 'find' because it occurred before the
  95.  files root directory entry.
  96.  
  97.   The execellent program DU can be used to find files that may cause a
  98.  problem. Use it's 'F' command to show the directory entries for the file
  99.  in question, if the last byte of the first line of each entry shows a
  100.  value of 80, and the very last entry has a value not equal 80, then no
  101.  problem, but if an entry with a value not equal 80 occurs BEFORE an
  102.  entry with the byte equal 80, then this file will not be accessible in
  103.  it entirety. To make it compatible, merely copy it to another drive, delete
  104.  the original, and copy it back again. Or you can copy it to a different
  105.  name on the same drive, delete the original, and rename the copy.
  106.  
  107.  
  108. TESTING:
  109.  
  110.   Z80DOS2.3 has been in use on my own system (64180/ZCPR33) and I have had no
  111.  problems whatsoever. It is also in use on DHN* RCPM (SYSOP: Bob Dean), and has
  112.  run smoothly the utilities required in the managment of a remote access system,
  113.  which in this case is HBBS/BYE510/NZCOM/FOR/KMD and a myraid of others that
  114.  are in regular use both manually ( by the SYSOP and callers alike ) and
  115.  invoked for automatic BBS maintainence.
  116.  
  117.  
  118. DIFFERENCES:
  119.  
  120.   There are also other modifications made on the inside to combine like
  121.  functions, rearrangement of code to provide 'minimal' paths for the most
  122.  used functions, deletion of redundant code left over by modifications to the
  123.  original P2DOS, and decrease of the size of the ascii error messages to
  124.  make enough room for the new internal routines to implement the fast lookup
  125.  code.
  126.  
  127. ADDITIONS:
  128.  
  129.      There has been an addition of returning an identifier saying Z80DOS
  130.  is present. This has been implemented by returning a 38 hex code in the
  131.  D register upon the GET VERSION BDOS call (12).
  132.  
  133.  ZRL CAPABLE:
  134.  
  135.      The  code  as  distributed  has the necessary lines marked that are
  136.  required for assembling to a .REL (read .ZRL) format for use with NZCOM
  137.  and  JETLDR.  See the individual files for the required changes (search
  138.  for ZRL ).
  139.  
  140.  
  141. IN CONCLUSION:
  142.  
  143.      All in all, on some test runs, I have noticed up to a 25%  increase
  144.  in through-put. Even copying 100k+ files to a floppy with only 23 files
  145.  on it have seen 5% increases. And this is on  a  10mhz  64180  homebrew
  146.  SCSI ( both winchester AND floppy on SCSI ) based system ( 1 wait state
  147.  for all mem/io accesses) running a CDC WREN II (50  ms  avg  )  with  0
  148.  interleave ( 512 byte sectors/ 1k deblocking).
  149.  
  150.      As  an  example,  using  VDE266  to  call  up the Z80DDISK file for
  151.  editing (48k) took 4. seconds with the original Z80DOS2.0A,  under  the
  152.  new  scheme  3.6  secs,  a  savings of 10% time. This included the path
  153.  search of ramdisk to drive A of the first partition on the  winchester,
  154.  load of VDE from there, read the file (also from drive A) till the file
  155.  was being displayed on the terminal (19.2k baud, DTR handshaking).
  156.  
  157.                                 - end -
  158.