biosdisk() Hard Disk / Floppy I/O
#include <bios.h>
int biosdisk(cmd,drive,head,track,sector,nsects,buffer);
int cmd; Operation to perform
int drive; Disk drive to be used
int head; Starting sector
int track; Starting sector
int sector; Starting sector
int nsects; Number of sectors
void *buffer; Table of sector headers
biosdisk() issues disk operations directly to the BIOS via interrupt
call 0x13. 'drive' specifies which disk drive is to be used (0 =
first floppy disk drive, 1 = second floppy disk drive, 2 = third,
etc). For hard disk drives, 0x80 specifies the first hard drive,
0x81 = the second hard drive, 0x82 = the third, etc. For hard disks,
the physical drive is specified, but not the disk partition. The
application program must interpret the partition table information
itself.
'cmd' references the operation to perform. Depending on the value of
'cmd', the other parameters may or may not be needed. The possible
values for 'cmd' for any IBM PC, XT, or AT are:
0 Resets diskette system. The drive controller is forced to
do a hard reset. All other parameters are ignored.
1 Returns the status of the last disk operation. All other
parameters are ignored.
2 Reads one or more disk sectors into memory. The starting
sector is given by 'head', 'track', and 'sector'.
'nsects' indicates the number of sectors. The data is
read, 512 bytes per sector, into 'buffer'.
3 Writes one or more disk sectors from memory. The starting
sector is given by 'head', 'track', and 'sector'.
'nsects' indicates the number of sectors. The data is
written, 512 bytes per sector, from 'buffer'.
4 Verifies one or more sectors. The starting sector is
given by 'head', 'track' and 'sector'. 'nsects' indicates
the number of sectors.
5 Formats a track. The track is specified by 'head' and
'track'. 'buffer' points to a table of sector headers to
be written on 'track'.
'cmd' values allowed only for an XT or AT are:
6 Formats a track and sets bad sector flags
7 Formats the drive beginning at a specified track
8 Returns the current drive parameters (drive information
is returned in 'buffer' in the first four bytes)
9 Initializes drive-pair characteristics
10 Does a long read, which reads 512 plus 4 extra bytes per
sector
11 Does a long write, which writes 512 plus 4 extra bytes
per sector
12 Does a disk seek
13 Alternates disk reset
14 Reads sector buffer
15 Writes sector buffer
16 Tests whether the named drive is ready
17 Recalibrates the drive
18 Controller RAM diagnostic
19 Drive diagnostic
20 Controller internal diagnostic
Returns: A status byte composed of the following bits:
0x00 Operation successful
0x01 Bad command
0x02 Address mark not found
0x04 Record not found
0x05 Reset failed
0x07 Drive parameter activity failed
0x09 Attempt to DMA across 64K boundary
0x0B Bad track flag detected
0x10 Bad ECC on disk read
0x11 ECC corrected data error
0x20 Controller has failed
0x40 Seek operation failed
0x80 Attachment failed to respond
0xBB Undefined error occurred
0xFF Sense operation failed
Notes: 0x11 is not an error because the data is correct. The
value is returned anyway to give the application an
opportunity to decide for itself.
This page last updated on Fri Nov 30 10:48:32 MSK 2001
Copyright © 1992-2001, Vitaly Filatov, Moscow, Russia
Webmaster