CP/M Disk Formats as revealed by DPB.COM

CP/M Disk Formats as revealed by DPB.COM written by Maurice Hawes / SUC/UK Source: SUC-magazine July 2003, Volume 23 Number 2, pp. 8 - 9
Sharp Users Club - General Section - DPB.COM
The Disk Parameter Block

In the very early versions of CP/M the format of the floppy-disk drives ( which at that time were 8“ IBM ) is built into the code and is difficult to change. But in CP/M 2.2 and later versions of CP/M the details of the disk format are held in a table known as the 'Disk Parameter Block'.

In CP/M 2.2 the 'Disk Parameter Block' consists of 15 bytes, but in some of the very late versions of CP/M ( such as 'CP/M PLUS' ) two further bytes are added to allow for 'Logical Sectors' larger than 128 Bytes.

As far as early Sharp MZ-computers are concerned, it is sufficient to consider the contents of the 15-byte Disk Parameter Block in CP/M 2.2:-

Byte Number(s) | Name of Field | Information Held
00 - 01 | SPT | No. of Logical ( 128-byte ) Sectors per Logical Track
02 | BSH | Block Shift - Block Size is given by 128 * 2(BSH)
03 | BLM | Block Mask - Block Size is given by 128 * (BLM +1)
04 | EXM | Extent Mask ( see opposite )
05 - 06 | DSM | Highest Block Number ( see opposite )
07 - 08 | DRM | Highest Directory Entry Number ( see opposite )
09 - 10 | AL0 - AL1 | 16-bit Directory Allocation Pattern ( see opposite )
11 - 12 | CKS | Directory Check Sum
13 - 14 | OFS | No. of reserved tracks ( see opposite )

DPB.COM

The CP/M 'DPB.COM' locates this table and lists all the values except CKS on the screen. Typical displays, for the 5.25" Crystal and M-T versions of CP/M 2.2 for the MZ-80K and MZ-80B respectively, are as follows:

( Parameter ) | ( MZ-80K display ) | ( MZ-80B display )
Sectors per Track | 16 | 80
Block Shift ( BSH ) | 3 | 4
Block Mask ( BLM ) | 7 | 15
Extent Mask ( EXM ) | 1 | 0
Total Blocks ( DSM ) | 129 | 169
Directory Entries ( DRM ) | 63 | 127
Allocation 0 ( AL0 ) | C0 | C0
Allocation 1 ( AL1 ) | 0 | 0
Cylinder Offset ( OFS ) | 5 | 1

As shown on the opposite page, care has to be taken when interpreting many of the values in displays such as those illustrated above.

NOTES ON INTERPRETING THE DPB.COM DISPLAY
Sectors Per Track

This may be used to find the capacity of a disk - but the calculation must allow for the fact that in some cases a 'Logical Track' is limited to ONE SIDE of a disk, but in other cases it extends over BOTH SIDES of a disk.

For example in Xtal's '35-track' CP/M for the MZ-80K a 'Logical Track' is limited to ONE side of the disk; there are therefore 35 'Logical tracks' on each side of a disk, and 70 'Logical Tracks' on the disk as a whole.
The capacity of a disk is therefore
128 * 16 * 70 = 143,360 Bytes ( 140K ).

But in M-T's '35-track' CP/M 2.2 for the MZ-80B a 'Logical Track' extends over BOTH sides of a disk; there are therefore 35 'Logical Tracks' on the whole of a disk, and the disk capacity is
128 * 80 * 35 = 358,400 ( 350K ).

BSH & BLM

Either one of these parameters may be used to calculate the CP/M block size. For example in Crystal's MZ-80K CP/M 2.2, BSH gives 128 * 23 and BLM gives 128 * (7 + 1), both = 1024 ( 1K ); whereas in Microtechnology's MZ-80B CP/M 2.2.2.15 similar calculations give the block size as 128 * 24 and 128 * (15 + 1), both = 2048 ( 2K ).

EXM

Large CP/M files are divided into EXTENTS of 16K. In early versions of CP/M 'Logical and 'Physical' Extents were both 16K; but in CP/M 2.2 and later a 'Logical' extent is 16K but a 'Physical' extent can be 16K, 32K, 64K, 128K or 256K, and this is indicated by setting EXM to either 0, 1, 3, 7, or 15 ( i.e. EXM is set to 1 less than the number of 'Logical' extents in a 'Physical' extent ).

DSM ( 2 bytes )
This indicates the HIGHEST PERMISSIBLE BLOCK NUMBER; numbering starts at 0, so the TOTAL NUMBER OF BLOCKS is 1 more than the value shown.
DRM ( 2 bytes )
This indicates the HIGHEST PERMISSIBLE DIRECTORY NUMBER; numbering starts at 0 so the MAXIMUM NUMBER OF DIRECTORY ENTRIES is 1 more than the value shown.
AL0& AL1

These parameters, taken BITWISE, indicate which of the first 16 CP/M blocks ( numbered 00 - 15 ) are allocated to the Directory. For example:-

$80 00 = 10000000 00000000 i.e. the Directory is allocated BLOCK 00 only
$C0 00= 11000000 00000000 i.e. the Directory is allocated BLOCKS 00 & 01

OFS

This shows the location of CP/M BLOCK 00 and also, by implication, how many tracks are reserved for bootstrap & system files. Thus, '5' on the MZ-80K shows that Block 00 is at the start of track 5, and Tracks 0 - 4 are used for bootstrap & system files; whereas '1' on the MZ-80B shows that Block 00 is at the start of Track 1, and Track 0 is used for bootstrap & system files.

The full implications of the Disk Parameter Block for specific CP/M and PCP/M systems on various Sharp MZ-machines are discussed in the individual MZ-80K / MZ-80B / MZ-80A / MZ-700 / MZ-800 / MZ-3500 sections of this issue.

last updated August 18, 2003
SUC / UK: Maurice Hawes