INT 13h,  05h (5)        Format Cylinder                                  all

Initializes each sector on a specified cylinder with sector address
and size information.

On entry:      AH         05h
AL         Number of sectors to format (diskette) or
Interleave (XT)
CH         Cylinder number (10-bit value; upper 2 bits
in CL)
DH         Head number
DL         Drive number
ES:BX      Pointer to address field list (See below)

Returns:       AH         Status of operation (See Service 01h)
CF         Set if error, cleared otherwise

                                                                          

Notes:         Values in DL less than 80h specify floppy disks;
values from 80h to 87h specify fixed disks.

The cylinder number is a ten-bit quantity (0 through
1023). Its most significant two bits are in bits 7
and 6 of CL; the remaining eight bits are in CH. The
starting sector number fits in the low-order portion
(lower 6 bits) of CL.

If an error is encountered, use Service 0h to reset
the drive and retry the operation.

For the AT, XT-286, and PC Convertible, the BIOS
executes INT 15h, Service 90h (Device Busy), for the
diskette (Type = 01h) and the fixed disk (Type =
00h) prior to waiting for the interrupt. INT 15h,
Service 91h (Interrupt Complete), is executed upon
completion. Also diskette operations that require
the diskette motor to be on will call INT 15h,
Service 90 (Device Busy), with the type equal to
"Diskette Drive Motor Start" (Type = FDh). This
allows the system to perform another task while the
drive motor is waiting to get up to speed.

Interleave:    "Interleaving" is the process of putting logically
contiguous sectors in physically noncontiguous
locations, in order to to increase disk performance.
Below is outlined the different ways of changing the
interleave factor depending on the type of media
(fixed disk or diskette) and the machine type.

The pointer to the address field list (ES:BX) varies
depending on what type of machine and type of disk
(fixed or diskette) the formatting process will
occur on. Also the interleave factor is specified
differently for the different machines and disk
types. Below are the formats for the different types
of machines and disks.

Diskette:      ES:BX points to a list of address marks for each
sector on the track to be formatted. Each address
mark consists of 4 bytes. Therefore, to format a 9-
sector track, the list MUST consist of 36 bytes (4 *
9). The 4 bytes making up the address mark are
defined as follows:

Byte 1 - Cylinder number (C)
Byte 2 - Head number (H)
Byte 3 - Sector number (R), or Record number
Byte 4 - Sector Size (N)
0 - 128 bytes per sector
1 - 256 bytes per sector
2 - 512 bytes per sector
3 - 1024 bytes per sector

Note that you can change the interleave factor by
specifying byte 3 (sector number) in a non-
sequential order.

Standard MS-DOS diskettes are formatted with 512
bytes per sector (N=2) and with no interleave. Thus,
the address field list for a standard MS-DOS nine-
sector track would look like this:

C H R N    C H R N    C H R N ... C H R N
0 1 1 2    0 1 2 2    0 1 3 2     0 1 9 2

Before formatting a diskette, if there is more than
one type of diskette supported by the drive, you
will need to call Service 17h (Set DASD Type for
Format) or Service 18h (Set Media Type for Format).
If these services are not called, Service 05h will
format the disk using the maximum disk type
supported by the disk drive. Older machines that
don't support Service 17h (Set DASD Type for Format)
or Service 18h (Set Media Type for Format) may have
to directly modify the Diskette Drive Parameter
Table. This table is pointed to by INT 1Eh. If
modifications are made to the Diskette Parameter
Table, make sure the original values are restored.

XT             The XT uses the AL register to specify the
interleave factor. The pointer ES:BX is not needed
for the XT.

AT and XT-286  These machines use an address table (pointed to by
ES:BX), similar to the one used in diskette mode but
with a slight variation. The buffer must be 512
bytes long. The first 2 * (sectors per track) bytes
contain information for each sector on the track.
For each sector, there are 2 bytes in the table.
These 2 bytes are defined as follows:

Byte 1 - Sector Format state (F)
00h - Good sector
80h - Bad sector
Byte 2 - Sector number (N)

For example, the following table is used to format a
track for a fixed disk with 17 sectors per track and
an interleave factor of 3.

db    00h, 01h, 00h, 07h, 00h, 0Dh, 00h, 02h, 00h, 08h, 00h, 0Eh
db    00h, 03h, 00h, 09h, 00h, 0Fh, 00h, 04h, 00h, 0Ah, 00h, 10h
db    00h, 05h, 00h, 0Bh, 00h, 11h, 00h, 06h, 00h, 0Ch

See also: INT 13h, 01h
See also: INT 13h, 06h
See also: INT 13h, 07h

INT 13h, 05h (5) Format Cylinder all