INT 13H (0x13)
Function 23H (0x23 or 35) --> Set Controller Features
Register (PS and PS/2, Hard Disk)
Call with: AH = 23H
AL = feature number
DL = drive number
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
This Function is used to set the controller feature register. If the function is successful the carry flag is clear and if unsuccessful carry flag is set and AH register returns the status.
INT 13H (0x13)
Function 24H (0x24 or 36) --> Set Multiple – Transfer Mode (Hard Disk, PS and PS/2)
Call with: AH = 24H
AL = number of sectors per block
DL = drive number
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
This Function is used to set Multiple – Transfer Mode. If you want to disable the Multiple – Transfer Mode, set the number of sectors to 0. The maximum value for the block size (Such as 2,4,6,8 and 16 etc.) depends on the fixed disk drive type.
The value is stored in byte 15H of the fixed disk drive parameter table that is created by POST (Power On Self-Test). The byte at address 0040H:0074H is set to status of operation. The Values for PS/1 hard disk feature number have been listed in the following table:
Value |
Description |
01H |
Select 8-bit data transfers instead of 16-bit |
02H |
Enable write cache |
22H |
Write Same, user-specified area |
33H |
Disable retries |
44H |
Set number of ECC bytes for read long/write long |
54H |
Set cache segments |
55H |
Disable look ahead |
66H |
Disable reverting to power-on defaults |
77H |
Disable error correction |
81H |
Select 16-bit data transfers (default) |
82H |
Disable write cache |
88H |
Enable error correction (default) |
99H |
Enable retries (default) |
AAH |
Enable look ahead |
BBH |
Set ECC length for read long/write long to four bytes |
CCH |
Enable reverting to power-on defaults |
DDH |
Write Same, entire disk |
INT 13H (0x13)
Function 24H (0x24 or 36) --> Set Sectors (QuickCache II
v4.20)
Call with: AX = 24H
BX = New number of sector buffers in
cache
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
This Function is used to set the Sectors. If the function is successful AX register is 0000H else AX returns the Status.
INT 13H (0x13)
Function 25H (0x25 or 37) --> Identify Drive (Hard Disk, PS and PS/2)
Call with: AH = 25H
DL = Drive number
ES:BX = Buffer of 512 bytes for reply packet
Return: If Function Successful,
Carry Flag = Clear
Buffer filled with drive information block
If Function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
This Function is used to identify the Drive. The byte at address 0040h:0074h is set to the status of the operation. IBM officially classifies this function as optional. The Bit fields for general drive configuration have been given in the following table:
Bit(s) |
Description |
0 |
Reserved (0) |
1 |
Hard sectored |
2 |
Soft sectored |
3 |
Not MFM encoded |
4 |
Head switch time greater than 15msec |
5 |
Spindle motor control option implemented |
6 |
Fixed drive |
7 |
Removable cartridge drive |
8 |
Disk transfer rate is less than or equal to 5Mbs |
9 |
Disk transfer rate is greater than 5Mbs but less than or equal to 10Mbs |
10 |
Disk transfer rate is greater than 10Mbs |
11 |
Rotational speed tolerance is greater than 0.5% |
12 |
Data strobe offset option available |
13 |
Track offset option available |
14 |
Format speed tolerance gap required |
15 |
Reserved for non-magnetic drives (0) |
The description of Format of Drive information block as given in the ATA (AT Attachment) Specification has been given in the next table:
Offset |
Size |
Description |
00H |
WORD |
General drive configuration |
02H |
WORD |
Number of cylinders |
04H |
WORD |
Reserved |
06H |
WORD |
Number of heads |
08H |
WORD |
Number of unformatted bytes per track |
0AH |
WORD |
Number of unformatted bytes per sector |
0CH |
WORD |
Number of sectors per track |
0EH |
6 BYTES |
Vendor unique |
14H |
20 BYTES |
Serial number in ASCII, (0000H=not specified) |
28H |
WORD |
Buffer type |
2AH |
WORD |
Buffer size in 512 byte increments (0000H=not specified) |
2CH |
WORD |
Number of ECC bytes passed on Read/Write Long commands 0000H = not specified |
2EH |
8 BYTES |
Firmware revision in ASCII, 0000H=not specified |
36H |
40 BYTES |
Model number in ASCII, 0000H=not specified |
5EH
|
WORD
|
Bits 15-8 Vendor Unique, bits 7-0, (if 00H = Read/Write Multiple commands not Implemented, else xxH = Maximum number of sectors that can be transferred per interrupt on Read and Write Multiple Commands) |
60H |
WORD |
0000H = Cannot perform Doubleword I/O,
0001H = Can perform Doubleword I/O. |
62H |
WORD |
Bit 15-9 (0=reserved),
bit 8 (1=DMA Supported),
Bit 7-0 Vendor Unique. |
64H |
WORD |
Reserved |
66H |
WORD |
Bits 15-8 PIO data transfer cycle timing mode, Bits 7-0 Vendor Unique |
68H |
WORD |
Bits 15-8 DMA data transfer cycle timing mode, Bits 7-0 Vendor Unique |
6AH
|
WORD
|
Bits 15-1 reserved,
bit 0 (1=the fields reported in translation mode are valid,
0=the fields reported in translation mode may be valid) |
6CH |
WORD |
Number of current cylinders |
6EH |
WORD |
Number of current heads |
70H |
WORD |
Number of current sectors per track |
72H |
DWORD |
Current capacity in sectors |
76H |
WORD |
Reserved |
78H |
136 BYTES |
Not defined |
100H |
64 BYTES |
Vendor unique |
140H |
96 BYTES |
Reserved |
|
|
|
|