THE DISK OPERATING SYSTEM (D:)
     The disk operating system program (DOS) is also called the file
     management system (FMS).  DOS is not a permanent part of the computer,
     it is loaded in upon power-up if a disk drive is attached to the
     When the computer is turned on, one of the first things it does is
     send a request to the disk drive to load DOS into the computer.  This
     startup operation is called booting.  The word boot is short for
     bootstrapping -- the start-up process of early computers.  The term
     comes from "lifting one's self by one's boot straps".
     Anytime the disk boots, the computer tries to read a program starting
     at sector 1 and continuing in sequence.  If the disk has DOS on it,
     the first three sectors, called the boot record, have a program which
     loads the DOS.SYS file.  If there is no DOS.SYS file on the disk the
     computer will display:
      | BOOT ERROR         |
      | BOOT ERROR         |
      | BOOT ERROR         |
      | BOOT ERROR         |
      | BOOT ERROR         |
      | BOOT ERROR         |
      |   (etc.)           |
      |                    |
      |                    |
     When a disk is formatted, the drive read/write head passes over the
     entire disk and puts magnetic marks on it.  These marks divide the
     disk into 32 concentric tracks.  With DOS 2.0 each track is divided
     into 18 sectors, each holding 128 bytes of data.  With DOS 2.5 there
     are 32 sectors per track giving a total of 1,024 sectors.
     Each sector on the disk is marked with a reference number from 1 to
     720.  Unfortunately, the writers of DOS 2.0 didn't know this so they
     wrote the DOS to use sectors numbered from 0 to 719.  As a result, DOS
     2.0 cannot access sector 720.  The designers of the disk drive were
     the guilty party in this case.  It is normal to number from 0 in
     computers.  With DOS 2.5, sectors 720 - 1,024 can be accessed
     Sector 720 can be accessed using the computer's resident disk handler.
     Some software writers use sector 720 to hide special information to
     make their programs difficult to copy.
     Sectors 1 through 3 are called the boot record.  They contain a
     program which loads the DOS.SYS file into memory. 
     Sector 360 is called the Volume Table of Contents or VTOC.  The main
     purpose of the VTOC is to keep track of what sectors are occupied. 
     Bytes 3 and 4 of the VTOC tell how many sectors are available. 
     Starting at byte 10 is the Volume Bit Map.  Each byte in the VBM tells
     the status of eight sectors.  If a bit is a 1 the sector is available.
     If a bit is a 0 the sector is occupied.
     Sectors 361 through 368 contain the disk directory.  Each directory
     sector holds eight file names.  The first byte of a file name is
     called the flag byte.  It tells the status of that file.
                             Directory flag byte.
           7 6 5 4 3 2 1 0
          |   flag byte   |
     Bits: 7    1 = file deleted
           6    1 = file in use
           5    1 = file locked
           0    1 = open for output
     The next two bytes tell how many sectors are in the file.  The two
     bytes after them tell the starting sector of the file.  The last 11
     bytes contain the file name.
     Sector 720 cannot be accessed with DOS 2.0.
     The boot record, VTOC, directory and sector 720 use 13 sectors.  This
     leaves 707 sectors for storing files with DOS 2.0.
     Each file sector has 125 bytes of data.  The last three bytes tell how
     many bytes of the sector are used, what directory entry the sector
     belongs to and which sector is next in the file.
                             File sector structure
           7 6 5 4 3 2 1 0
          |     data      | byte 0
          - -           - -
          |     bytes     | byte 124
          | Dir. No.  |hi | byte 125
          |forward pointer| byte 126
          |S| byte count  | byte 127
          hi = high 2 bits of forward pointer
           S = Short sector flag. 1 = short sector (End Of File)
     If the directory number does not match the order of the file name in
     the directory, an error 167 (file number mismatch) will occur.
     As a file is written to an empty disk it is put in consecutive
     sectors, 125 bytes at a time.  After the file is written, the VTOC and
     directory are updated.  When new files are written they also use
     consecutive sectors.
     When a file is deleted the status bit of the directory is changed to
     show that the file has been deleted.  DOS then tracks the file, sector
     by sector, to find what sectors are used.  Finally the VTOC is updated
     to show that the deleted file's sectors are available for new files. 
     The file is not erased from the disk; only the VTOC and directory are
     When a file is deleted, an "island" of free sectors may be left on the
     disk.  When a new file is then written to the disk it will first use
     these new free sectors.  When the island is used up, DOS will skip
     over the occupied sectors to the next free sector.  This is the reason
     for the sector link.  A file can end up with it's sectors scattered
     all over a disk.  It can be complicated but it's efficient.

                              DISK FILE STRUCTURE
     The first few bytes of a file may tell DOS or another program what
     kind of file it is.  These information bytes are called a header.
     A text file is any file which has no header.  A listed BASIC program
     is a type of text file.  A letter from a word processor is another.
     A binary load file is a file intended to load to a specific address in
     memory.  The first two bytes of a binary load file are decimal 255. 
     The next two bytes hold the address at which the file is to load.  The
     last two header bytes tell the ending address for the file.  If the
     file is a program and is to run automatically, the initialization and
     run address are appended to the end of the file.
                            binary load file header
           Decimal        Hexadecimal
             255  identifier   FF
             255               FF
               0     start     00
               7               07
              15      end      FF
               8               08
     The above file would load at address $0700 (1792 decimal) and end at
     address $08FF (2063).  If a binary load file has initialization and
     run address appended to it they take on the following format:
                              Init and run tailer
        CHR   Decimal        Hexadecimal
                              init address format
        [b]     226  identifier  E2
          |       2              02
        [c]     227              E3
          |       2              02
                  n    address   nn
                  n              nn
                              run address format
      [diamond] 224  identifier  E0

          |       2              02
        [a]     225              E1
          |       2              02
                  n    address   nn
                  n              nn
      [ ]=inverse video
     A program which doesn't need special initialization can be run at the
     init address.  Otherwise, an RTS instruction is expected at the end of
     the initialization section.  The computer will then jump to the run
     address if specified.
     DOS uses the computer's CIO utility.  When a DOS disk is booted a
     non-resident handler is loaded into memory.  A new handler name, D, is
     then added to the handler table.  When CIO is called with a device
     name of D: or Dn:, CIO will search the handler table for that device
     name.  If the 'D' is found, the next two bytes in the table point to
     the DOS entry address.
     DOS is unique among CIO handlers in that it requires an eight
     character file name to follow the device name.  This file name may be
     followed by a period and then a three character extender.
     The D2: is used for drive number two if present.
     The file name must use upper-case letters or numbers.  The first
     character must always be a letter.  
     The characters * and ? may be used as wild cards.  * means any
     combination of characters and ? means any single character.
     EXAMPLES: D:P*           any file beginning with P and
                               without an extender
               D:*.EXE        any file with the extender .EXE
               D:*.*          any file.
               D:F?REMAN      one unknown character,
                               FIREMAN or FOREMAN will match
     Wild cards can only be used to load, delete, lock and unlock files. 

     When loading a file using wild cards, only the first matching file
     will be loaded.
     When renaming a file, both the new and old names are expected after
     the device name.
     To format a disk, only the device name (D: or Dn:) is needed.
     When a CIO channel is opened to the disk drive it must actually be
     opened to a specific file on the disk.  The device name in the open
     command must be followed by a file name.
     When a channel is opened to the disk, two special parameters may be
     used in ICAX1.
                             ICAX1 for disk open:
               7 6 5 4 3 2 1 0
              |        W R D A|
      D   1 = open to read the directory instead of a file
      A   1 = append data to the end of the file
     This gives the following extra ICAX1 options.
                         Disk specific ICAX1 options:
          HEX       DEC
          $06         6       open to read directory
          $09         9       output, append to the end of an
                              existing file
     When the directory is read, each file name is treated as if it were
     followed by an EOL.  A loop must be used to read all of the file names
     in the directory.  The last entry read is the free sector count. 
     After it is read, another read operation will result in an End-Of-File
     The disk drive has a number of device specific commands other than the
     regular CIO commands.  From BASIC the XIO command is used to access
     these commands.  The XIO command allows you to directly load the IOCBs
     from BASIC.  Each parameter of the XIO command places values in
     certain bytes of an IOCB.
                              XIO command format:
      XIO command channel,aux1,aux2,device:file name
     Note that the parameters resemble the BASIC OPEN command.  The BASIC
     OPEN command is identical to it's equivalent XIO command.
                   XIO commands specific to the disk drive.
     RENAME    XIO  $20   (32)
     DELETE    XIO  $21   (33)
     LOCK      XIO  $23   (35)
     UNLOCK    XIO  $24   (36)
     POINT     XIO  $25   (37)
     NOTE      XIO  $26   (38)
     FORMAT    XIO  $FE  (254)
      XIO 33 #1,0,0,"D:JUNK" = delete file named D:JUNK
      XIO 32 #1,0,0,"D:OLD,NEW" = change name of D:OLD to D:NEW
     NOTE and POINT can also be used directly from BASIC.  NOTE finds the
     current position of the read/write head on the disk.  POINT moves the
     read/write head to the desired position.
     The command format for NOTE and POINT is as follows:
      NOTE \
     BASIC requires the sector and byte parameters in both commands to be
     variables.  Fixed numbers cannot be used.  If you try to do a POINT to
     a sector outside the file the channel is open to, a point error will
     occur.  Care may need to be taken to be sure the file being accessed
     is in contiguous sectors on the disk.  If it is not, it will be
     difficult to know where to do points to.
     One use of NOTE is to use the command immediately after opening a
     channel to a disk file.  After the NOTE command, the parameter
     variables contain the coordinates of the first byte of the file.  They
     can then be used as a reference for the POINT command.
     In assembly language, ICAX3 and ICAX4 are used for the sector number
     (lsb,msb).  ICAX5 is used for the byte number.
     If the status request command is used, one of the following values
     will be found in ICSTA and the 6502 Y register.
          HEX       DEC
          $01         1       OK
          $A7       167       file locked
          $AA       170       file not found