Amstrad CP/M disc formats

Amstrad computers use standard CP/M 2 or CP/M 3 formats. The additional information comes in their detection system.

Amstrad and Locomotive Software have made a number of non-CP/M systems which use the CP/M 2 disc format. These are:

Amstrad CP/M (and +3DOS) has an eXtended Disc Parameter Block (XDPB):


        DEFW    spt     ;Number of 128-byte records per track

        DEFB    bsh     ;Block shift. 3 => 1k, 4 => 2k, 5 => 4k....

        DEFB    blm     ;Block mask. 7 => 1k, 0Fh => 2k, 1Fh => 4k...

        DEFB    exm     ;Extent mask, see later

        DEFW    dsm     ;(no. of blocks on the disc)-1

        DEFW    drm     ;(no. of directory entries)-1

        DEFB    al0     ;Directory allocation bitmap, first byte

        DEFB    al1     ;Directory allocation bitmap, second byte

        DEFW    cks     ;Checksum vector size, 0 or 8000h for a fixed disc.

                        ;No. directory entries/4, rounded up.

        DEFW    off     ;Offset, number of reserved tracks

        DEFB    psh     ;Physical sector shift, 0 => 128-byte sectors

                        ;1 => 256-byte sectors  2 => 512-byte sectors...

        DEFB    phm     ;Physical sector mask,  0 => 128-byte sectors

                        ;1 => 256-byte sectors, 3 => 512-byte sectors...



        DEFB    sidedness

                        ;Bits 0-1:  0 => Single sided

                        ;           1 => Double sided, flip sides

                        ;              ie track   0 is cylinder   0 head 0

                        ;                 track   1 is cylinder   0 head 1

                        ;                 track   2 is cylinder   1 head 0 

                        ;               ...

                        ;                 track n-1 is cylinder n/2 head 0

                        ;                 track   n is cylinder n/2 head 1

                        ;           2 => Double sided, up and over

                        ;              ie track   0 is cylinder 0 head 0

                        ;                 track   1 is cylinder 1 head 0

                        ;                 track   2 is cylinder 2 head 0 

                        ;               ...

                        ;                 track n-2 is cylinder 2 head 1

                        ;                 track n-1 is cylinder 1 head 1

                        ;                 track   n is cylinder 0 head 1

                        ;Bit 7 set if the format is double track.

        DEFB    tracks/side

        DEFB    sectors/track

        DEFB    first physical sector number

        DEFW    sector size, bytes

        DEFB    uPD765A read/write gap

        DEFB    uPD765A format gap

        DEFB    MFM/Multitrack flags byte

                                ;Bit 7 set => Multitrack else Single track

                                ;Bit 6 set => MFM mode else FM mode

                                ;Bit 5 set => Skip deleted data address mark

        DEFB    freeze flag     ;Set to nonzero value to force this format 

                                ;to be used - otherwise, attempt to determine

                                ;format when a disc is logged in.



        

Format detection

CPC system

This simple system is used by CPC computers:

If the first physical sector is 41h, the disc is in System format, ie:

single sided, single track, 40 tracks, 9 sectors/track, 512-byte sectors, 2 reserved tracks, 1k blocks, 2 directory blocks, gap lengths 2Ah and 52h, bootable.

If the first physical sector is C1h, the disc is in Data format, ie:

single sided, single track, 40 tracks, 9 sectors/track, 512-byte sectors, no reserved tracks, 1k blocks, 2 directory blocks, gap lengths 2Ah and 52h, not bootable.

PCW/Spectrum system

In addition to the above system, the PCW and Spectrum +3 can determine the format of a disc from a 16-byte record on track 0, head 0, physical sector 1:


        DEFB    format number   ;0 => SS SD, 3 => DS DD. Other values => bad format.

                                ;1 and 2 are for the CPC formats, but those 

                                ;formats don't have boot records anyway.

        DEFB    sidedness       ;As in XDPB

        DEFB    tracks/side

        DEFB    sectors/track

        DEFB    physical sector shift   ;psh in XDPB

        DEFB    no. reserved tracks     ;off in XDPB

        DEFB    block shift             ;bsh in XDPB

        DEFB    no. directory blocks

        DEFB    read/write gap length

        DEFB    format gap length

        DEFB    0,0,0,0,0               ;Unused

        DEFB    checksum fiddle byte    ;Used to indicate bootable

                        ;discs. Change this byte so that the 8-bit 

                        ;checksum of the sector is:

                        ;  1 - sector contains a PCW9512 bootstrap  

                        ;  3 - sector contains a Spectrum +3 bootstrap

                        ;255 - sector contains a PCW8256 bootstrap

                        ;(the bootstrap code is in the remainder of the sector) 



If all bytes of the spec are 0E5h, it should be assumed that the disc is a 173k PCW/Spectrum +3 disc, ie:

single sided, single track, 40 tracks, 9 sectors/track, 512-byte sectors, 1 reserved track, 1k blocks, 2 directory blocks, gap lengths 2Ah and 52h, not bootable.


Valid XHTML 1.0!