cpm « MAN PAGE



CPM(5)				 File formats				CPM(5)

NAME
       cpm - CP/M disk and file system format

DESCRIPTION
   Characteristic sizes
       Each CP/M disk format is described by the following specific sizes:

	      Sector size in bytes
	      Number of tracks
	      Number of sectors
	      Block size
	      Number of directory entries
	      Logical sector skew
	      Number of reserved system tracks

       A  block is the smallest allocatable storage unit.  CP/M supports block
       sizes of 1024, 2048, 4096, 8192 and 16384 bytes.   Unfortunately,  this
       format  specification  is  not stored on the disk and there are lots of
       formats.  Accessing a block is  performed  by  accessing  its  sectors,
       which are stored with the given software skew.

   Device areas
       A CP/M disk contains three areas:

	      System tracks (optional)
	      Directory
	      Data

       The  system  tracks store the boot loader and CP/M itself.  In order to
       save disk space, there are non-bootable formats which omit those system
       tracks.	 The  term  disk capacity always excludes the space for system
       tracks.	Note that there is no bitmap or list for  free	blocks.   When
       accessing  a  drive for the first time, CP/M builds this bitmap in core
       from the directory.

   Directory entries
       The directory is a sequence of directory entries (also called extents),
       which contain 32 bytes of the following structure:

	      St F0 F1 F2 F3 F4 F5 F6 F7 E0 E1 E2 Xl Bc Xh Rc
	      Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al Al

       St is the status; possible values are:

	      0-15: used for file, status is the user number
	      16-31:  used for file, status is the user number (P2DOS) or used
	      for password extent (CP/M 3 or higher)
	      32: disc label
	      33: time stamp (P2DOS)
	      0xE5: unused

       F0-E2 are the file name and its extension.  They  may  consist  of  any
       printable  7  bit ASCII character but: < > . , ; : = ? * [ ].  The file
       name must not be empty, the extension may be empty.   Both  are	padded
       with  blanks.   The  highest bit of each character of the file name and
       extension is used as attribute.	 The  attributes  have	the  following
       meaning:

	      F0: requires set wheel byte (Backgrounder II)
	      F1:  public  file (P2DOS, ZSDOS), foreground-only command (Back-
	      grounder II)
	      F2: date stamp (ZSDOS), background-only  commands  (Backgrounder
	      II)
	      F7: wheel protect (ZSDOS)
	      E0: read-only
	      E1: system file
	      E2: archived

       Public files (visible under each user number) are not supported by CP/M
       2.2, but there is a patch and some free CP/M clones support them  with-
       out any patches.

       The  wheel  byte is (by default) the memory location at 0x4b.  If it is
       zero, only non-privileged commands may be executed.

       Xl and Xh store the extent number.  A file may use more than one direc-
       tory  entry,  if  it  contains more blocks than an extent can hold.  In
       this case, more extents are allocated and  each	of  them  is  numbered
       sequentially  with  an extent number.  If a physical extent stores more
       than 16k, it is considered to contain multiple  logical	extents,  each
       pointing  to  16k  data, and the extent number of the last used logical
       extent is stored.  Note: Some formats decided to always store only  one
       logical	extent	in a physical extent, thus wasting extent space.  CP/M
       2.2 allows 512 extents per file, CP/M 3 and higher allow  up  to  2048.
       Bit 5-7 of Xl are 0, bit 0-4 store the lower bits of the extent number.
       Bit 6 and 7 of Xh are 0, bit 0-5 store the higher bits  of  the	extent
       number.

       Rc  and	Bc  determine the length of the data used by this extent.  The
       physical extent is divided into logical extents, each of them being 16k
       in  size (a physical extent must hold at least one logical extent, e.g.
       a blocksize of 1024 byte with two-byte block pointers is not  allowed).
       Rc  stores  the	number	of  128  byte records of the last used logical
       extent.	Bc stores the number of bytes in the last  used  record.   The
       value  0  means 128 for backward compatibility with CP/M 2.2, which did
       not support Bc.

       Al stores block pointers.  If  the  disk  capacity  is  less  than  256
       blocks,	Al  is	interpreted  as 16 byte-values, otherwise as 8 double-
       byte-values.  A block pointer of 0 marks a hole in the file.  If a hole
       covers  the  range  of a full extent, the extent will not be allocated.
       In particular, the first extent of a file  does	not  necessarily  have
       extent  number 0.  A file may not share blocks with other files, as its
       blocks would be freed if the other files is erased without a  following
       disk  system  reset.   CP/M returns EOF when it reaches a hole, whereas
       UNIX returns zero-value bytes, which makes holes invisible.

   Time stamps
       P2DOS and CP/M Plus support time  stamps,  which  are  stored  in  each
       fourth  directory  entry.   This entry contains the time stamps for the
       extents using the previous three  directory  entries.   Note  that  you
       really  have  time stamps for each extent, no matter if it is the first
       extent of a file or not.  The structure of time stamp entries is:

	      1 byte status 0x21
	      8 bytes time stamp for third-last directory entry
	      2 bytes unused
	      8 bytes time stamp for second-last directory entry
	      2 bytes unused
	      8 bytes time stamp for last directory entry

       A time stamp consists of two dates: Creation and modification date (the
       latter  being  recorded	when  the  file is closed).  CP/M Plus further
       allows optionally to record the access  instead	of  creation  date  as
       first time stamp.

	      2 bytes (little-endian) days starting with 1 at 01-01-1978
	      1 byte hour in BCD format
	      1 byte minute in BCD format

   Disc labels
       CP/M  Plus support disc labels, which are stored in an arbitrary direc-
       tory entry.  The structure of disc labels is:

	      1 byte status 0x20
	      F0-E2 are the disc label
	      1 byte mode: bit 7 activates password protection, bit  6	causes
	      time  stamps  on	access,  but 5 causes time stamps on modifica-
	      tions, bit 4 causes time stamps on creation and  bit  0  is  set
	      when a label exists.  Bit 4 and 6 are exclusively set.
	      1  byte  password  decode byte: To decode the password, xor this
	      byte with the password bytes in  reverse	order.	 To  encode  a
	      password, add its characters to get the decode byte.
	      2 reserved bytes
	      8 password bytes
	      4 bytes label creation time stamp
	      4 bytes label modification time stamp

   Passwords
       CP/M  Plus  supports passwords, which are stored in an arbitrary direc-
       tory entry.  The structure of these entries is:

	      1 byte status (user number plus 16)
	      F0-E2 are the file name and its extension.
	      1 byte password mode: bit 7 means password required for reading,
	      bit 6 for writing and bit 5 for deleting.
	      1  byte  password  decode byte: To decode the password, xor this
	      byte with the password bytes in  reverse	order.	 To  encode  a
	      password, add its characters to get the decode byte.
	      2 reserved bytes
	      8 password bytes

SEE ALSO
       mkfs.cpm(1), fsck.cpm(1), fsed.cpm(1), cpmls(1)

CP/M tools			 Oct 19, 2005				CPM(5)

		

No notes yet, be the first!

Any tips, suggestions, comments or questions about » cpm man page?

+ADD A NOTE+

(optional, won't be displayed)


Antispam code: Antispam code