Capítulo – 9
Manejo de discos duros grandes
Manejo de discos duros grandes
En el capítulo anterior, discutimos las funciones de BIOS-Disk y el uso de interrupciones para acceder a los medios físicos de los discos duros. Usamos funciones INT 13H allí para acceder a los discos duros.
La interfaz INT 13H admite muchos comandos diferentes, como lectura, escritura, formateo y verificación, etc. que se pueden enviar al BIOS, que luego los pasa al disco duro. Como ha sido utilizado por DOS durante mucho tiempo, INT13H ha sido el estándar durante muchos años.
El INT 13H asigna 24 bits para la especificación de la geometría de la unidad y requiere que el programa invocador conozca los parámetros específicos del disco duro y proporcione el direccionamiento exacto de la cabeza, el cilindro y el sector a las rutinas para permitir el acceso al disco.
El BIOS usa la geometría del disco duro tal como está configurada en el programa de configuración del BIOS. Los 24 bits asignados por la interfaz INT 13H para la especificación de la geometría del controlador se dividen de la siguiente manera:
- 10 bits para el número de cilindro. Así, el límite máximo de cilindros totales puede ser de hasta 1.024 cilindros.
- 8 bits para el número principal. Por lo tanto, el límite máximo de cabezas totales es de hasta 256.
- 6 bits para el número de sector. Así, un total máximo de sectores puede ser de hasta 63 sectores.
Por lo tanto, los sectores máximos admitidos por este enfoque pueden ser de hasta 1024 * 256 * 63 = 16515072.
Esto significa que la interfaz INT13H puede admitir discos que contengan hasta aproximadamente 16,5 millones de sectores, que a 512 bytes por sector conduce a un máximo de 8,46 GB. Eso es exactamente lo que quiero explicar. Así usando todas estas funciones o INT 13H, podemos acceder a los discos de hasta 8,46 GB únicamente.
Por eso, en los últimos años, las limitaciones de esta antigua interfaz han hecho que se abandone en favor de una nueva forma de direccionar los discos duros, como se describe a continuación en este capítulo.
Antes que nada, ¡déjame contarte una historia!
Hace once años, cuando estaba en séptimo grado, en mi escuela, escuché hablar del disco duro con capacidad de 42 MB, quizás era WDA-L42 de IBM. Fue realmente difícil para mí y para mis amigos imaginar una capacidad de disco duro tan grande en ese momento.
La metodología INT 13H se desarrolló hace unos veinte años a partir de hoy. Ahora puede comprender que un disco duro de 8 GB era mucho más grande para caber incluso en los sueños de esa época. Pero hoy, si hablamos de un disco duro de 8 GB a cualquier usuario de computadora personal, es posible que no le guste usarlo diciendo que tiene poca capacidad de almacenamiento.
Esta es la razón por la que la interfaz INT 13H finalmente ha llegado al final de su utilidad en los sistemas modernos. INT 13H usó 24 bits para asignar la geometría del disco y, lamentablemente, no fue posible expandir la interfaz BIOS INT 13H existente porque, si se hiciera, una gran cantidad de hardware y software más antiguos dejarían de funcionar, y puede comprender que el mercado de computadoras actual nunca puede soportar un cambio tan grande con millones de productos de software y hardware más antiguos para dejar de funcionar.
Teniendo en cuenta esta condición, INT 13H se reemplazó con una interfaz más nueva llamada extensiones INT 13H. Sin embargo, DOS y algunos otros sistemas operativos más antiguos aún pueden usar INT 13H y para otros fines de compatibilidad.
La nueva interfaz INT 13H utiliza 64 bits en lugar de 24 bits para el direccionamiento y permite un tamaño máximo de disco duro de 9,4 * 1021 bytes, que en realidad es 9,4 billones de gigabytes o 9400000000000 Gigabytes. Espero que ahora estemos relajados por algún tiempo hasta que se rompa este límite.
A continuación se describen algunas funciones importantes de la extensión para la interrupción 13H. Puede usar estas funciones en la programación de la misma manera que estaba usando las funciones de INT 13H. Esta es también una razón por la que estas funciones se denominan extensiones de INT 13H.
INT 13H Extensions:
INT 13H (0x13)
Function 1BH (0x1B or 27) --> Get Manufacturing Header (ESDI Fixed Disk)
Call with: AH = 1BH
AL = number of sector(s) to read
DL = drive
ES: BX = buffer for manufacturing header
(defect list)
Returns: If function successful
Carry flag = clear
AH = 00H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Esta función se utiliza para obtener el encabezado de fabricación del disco fijo. La primera lectura del sector contiene el encabezado de fabricación con el número de entradas de defectos y el comienzo del mapa de defectos; los sectores restantes contienen el resto del mapa de defectos. El formato de encabezado de fabricación (formato de registro de mapa de defectos) se puede encontrar en la referencia técnica de unidades de disco fijas de 70 MB y 115 MB de IBM.
INT 13H (0x13)
Function 1BH (0x1B or 27) --> Get Pointer to SCSI Disk Information Block (Future Domain SCSI Controller)
Call with: AH = 1BH
DL = hard drive ID
Returns: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
ES:BX = SCSI disk information block
Comments:
Esta función se utiliza para llevar el puntero al bloque de información del disco SCSI. Esto también establece un indicador no reiniciable que evita que se muestren algunos mensajes del controlador.
INT 13H (0x13)
Function 1CH (0x1C or 28) --> Get Pointer to Free Controller Ram (Future Domain SCSI Controller)
Call with: AH = 1CH
DL = hard drive ID for any valid SCSI
hard disk
Returns: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
ES:BX = first byte of free RAM on controller
Comments:
Esta función se utiliza para obtener la RAM del controlador libre. ES:BX apunta al primer byte de RAM libre en el controlador, disponible para otros usos. ES contiene el segmento en el que reside el controlador. Los dos puertos de E/S mapeados en memoria del controlador están en las compensaciones 1C00H y 1E00H.
INT 13H (0x13)
Function 1C08H (0x1C08) --> Get Command Completion Status (ESDI Fixed Disk)
Call with: AX = 1C08H
DL = drive
ES:BX = buffer for Command Complete
Status Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Esta función se utiliza para obtener el estado de finalización del comando. Si la función tiene éxito, la bandera de acarreo se borra y si no tiene éxito, se establece la bandera de acarreo.
INT 13H (0x13)
Function 1C09H (0x1C09) --> Get Device Status (ESDI Fixed Disk)
Call with: AX = 1C09H
DL = drive
ES:BX = buffer for Device Status Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Esta función se utiliza para obtener el estado del dispositivo. Si la función tiene éxito, la bandera de acarreo se borra y si no tiene éxito, se establece la bandera de acarreo.
INT 13H (0x13)
Function 1C0AH (0x1C0A) --> Get Device Configuration (ESDI Fixed Disk)
Call with: AX = 1C0AH
DL = drive
ES:BX = buffer for Drive Configuration Status
Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Esta función se utiliza para obtener la configuración del dispositivo para el disco. Si la función tiene éxito, el indicador de acarreo se borra y el registro AH es 01H; de lo contrario, se establece el indicador de acarreo y el registro AH devuelve el estado. La siguiente tabla muestra el formato del bloque de estado de configuración de la unidad ESDI:
Desplazamiento
|
Tamaño
|
Descripción
|
00H
|
Byte
|
09H
|
01H
|
Byte
|
number of words in block (06H)
|
02H
|
Byte
|
flags
|
03H
|
Byte
|
number of spare sectors per cylinder
|
04H
|
Double Word
|
total number of usable sectors
|
08H
|
Word
|
total number of cylinders
|
0AH
|
Byte
|
tracks per cylinder
|
0BH
|
Byte
|
sectors per track
|
INT 13H (0x13)
Function 1C0BH (0x1C0B) --> Get Adapter Configuration (ESDI Fixed Disk)
Call with: AX = 1C0BH
ES:BX = buffer for Controller Configuration
Status Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Esta función se utiliza para obtener la configuración del adaptador. Si la función tiene éxito, la bandera de acarreo se borra y AH es 01H, si la bandera de acarreo no tiene éxito se establece y AH devuelve el estado.
INT 13H (0x13)
Function 1C0CH (0x1C0C) --> Get POS Information (ESDI Fixed Disk)
Call with: AX = 1C0CH
ES:BX = buffer for POS Information Status
Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Esta función se utiliza para obtener la información de POS. Si la función tiene éxito, la bandera de acarreo se borra y AH es 01H, si la bandera de acarreo no tiene éxito se establece y AH devuelve el estado.
INT 13H (0x13)
Function 1C0EH (0x1C0E) --> Translate RBA to ABA (ESDI Fixed Disk)
Call with: AX = 1C0EH
CH = low 8 bits of cylinder number
CL = sector number (high two bits of
cylinder number in bits 6 and 7)
DH = head number
DL = drive number
ES:BX = ABA (Absolute Block Address)
number
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Esta función traduce la RBA (Dirección de bloque relativa) a ABA (Dirección de bloque absoluta). Si la función tiene éxito, el indicador de acarreo se borra y el registro AH es 01H; de lo contrario, se establece el indicador de acarreo y AH devuelve el estado.
INT 13H (0x13)
Function 20H (0x20 or 32) --> Get Current Media Format (Compaq ATAPI Removable Media Device)
Call with: AH = 20H
DL = drive number
Return: If Function Successful,
Carry Flag = clear
AL = media type
AH = 00H
If Function Unsuccessful,
CF = set
AH = error code
Comments:
Esta función se utiliza para obtener el formato de medios actual. Los valores para el tipo de medio de disquete Compaq/ATAPI se proporcionan en la siguiente tabla:
Value
|
Media
|
03H
|
720K (1M unformatted)
|
04H
|
1.44M (2M unformatted)
|
06H
|
2.88M (4M unformatted)
|
0CH
|
360K
|
0DH
|
1.2M
|
0EH
|
Toshiba 3mode
|
0FH
|
NEC 3mode (1024 bytes per sectors)
|
10H
|
ATAPI Removable Media Device
|
INT 13H (0x13)
Function 21H (0x21 or 33) --> Read Multiple Disk Sectors (PS and PS/2, Hard Disks)
Call with: AH = 21H
AL = number of sectors to Read
CH = low byte of 12-bit cylinder number
CL = starting sector (bits 0 to 5) and bits 8
and 9 of cylinder (bits 6 and 7)
DH = head number (bits 0 to 5) and bits 10
and 11 of cylinder (bits 6 and 7)
DL = drive number
ES:BX = Data buffer to be read
Return: If Function Successful,
Carry flag = clear
ES:BX = Filled Data Buffer
If Function Unsuccessful,
Carry flag = set
AH = status
Comments:
La función se utiliza para leer los múltiples sectores del disco utilizando el modo de bloque múltiple, que genera una interrupción solo después del final de la transferencia de un grupo de sectores en lugar de después de cada sector.
INT 13H (0x13)
Function 22H (0x22 or 34) --> Write Multiple Disk Sectors (PS and PS/2, Hard Disks)
Call with: AH = 22H
AL = number of sectors to be written
CH = low byte of 12-bit cylinder number
CL = starting sector (bits 0 to 5) and bits 8
and 9 of cylinder (bits 6 and 7)
DH = head number (bits 0 to 5) and bits 10
and 11 of cylinder (bits 6 and 7)
DL = drive number
ES:BX = buffer containing data to be written
Return: If function Successful,
Carry Flag = clear
AH = 01H
If function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
La función se usa para escribir múltiples sectores de disco usando el modo de bloque múltiple, que genera una interrupción solo después del final de la transferencia de un grupo de sectores en lugar de después de cada sector.
INT 13H (0x13)
Function 22H (0x22 or 34) --> Enable/Disable Cache (QuickCache II v4.20)
Call with: AH = 22H
AL = new state (00H, if disabled and 01H,
if enabled)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = status
Comments:
Esta función activa y/o desactiva el almacenamiento en caché de todas las unidades. Si la función tiene éxito, el registro AX es 0000H; de lo contrario, devuelve el estado.
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:
Esta función se utiliza para configurar el registro de características del controlador. Si la función tiene éxito, la bandera de acarreo se borra y si la bandera de acarreo no tiene éxito se establece y el registro AH devuelve el estado.
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:
Esta función se utiliza para configurar el modo de transferencia múltiple. Si desea desactivar el modo de transferencia múltiple, establezca el número de sectores en 0. El valor máximo para el tamaño del bloque (como 2, 4, 6, 8 y 16, etc.) depende del tipo de unidad de disco fijo.
El valor se almacena en el byte 15H de la tabla de parámetros de la unidad de disco fijo que se crea mediante la POST (autoprueba de encendido). El byte en la dirección 0040H:0074H se establece en el estado de funcionamiento. Los valores para el número de característica del disco duro PS/1 se enumeran en la siguiente tabla:
Valor
|
Descripción
|
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:
Esta Función se utiliza para configurar los Sectores. Si la función tiene éxito, el registro AX es 0000H, de lo contrario, AX devuelve el estado.
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:
Esta función se utiliza para identificar la unidad. El byte en la dirección 0040h:0074h se establece en el estado de la operación. IBM clasifica oficialmente esta función como opcional. Los campos de bits para la configuración general del variador se proporcionan en la siguiente tabla:
Bit(s)
|
Descripción
|
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)
|
La descripción del bloque de información del formato de la unidad tal como se proporciona en la especificación ATA (AT Attachment) se proporciona en la siguiente tabla:
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
|
INT 13H (0x13)
Function 25H (0x25 or 37) --> Set Flush Interval (QuickCache II v4.20)
Call with: AH = 25H
BX = Interval of Flush
Return: If Function Successful,
AH = 0000H
If Function Unsuccessful,
AH = status
Comments:
Esta función se utiliza para establecer el intervalo de lavado. Si la función tiene éxito, AH es 0000H; de lo contrario, AH devuelve el estado.
INT 13H (0x13)
Function 26H (0x26 or 38) --> QuickCache II v4.20 Uninstall
Call with: AH = 26H
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = status
Comments:
AX devuelve el estado de 0001H a 00FFH para el vector de interrupción que fue enganchado por otro TSR
INT 13H (0x13)
Function 27H (0x27 or 39) --> Installation Check (QuickCache II v4.20)
Call with: AH = 27H
BX = 0000H
Return: BH = Major Version
BL = Binary Minor Version
If installed,
AX = 0000H
BX = Non-zero
Comments:
Si está instalado, el registro AX es 0000H y BX devuelve un valor distinto de cero.
INT 13H (0x13)
Function 28H (0x28 or 40) --> Set Automatic Dismount (QuickCache II v4.20)
Call with: AH = 28H
AL = New State
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Call function with AL = 00H to Disable and with AL = 01H to Enable.
INT 13H (0x13)
Function 29H (0x29 or 41) --> No Operation (QuickCache II v4.20)
Call with: AH = 29H
Return: AX = 0000H
INT 13H (0x13)
Function 2AH (0x2A or 42) --> Set Buffer Size (QuickCache II v4.20)
Call with: AH = 2AH
AL = Buffer Size
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para establecer el tamaño del búfer. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado.
INT 13H (0x13)
Function 2BH (0x2B or 43) --> Drive Access Sounds (QuickCache II v4.20)
Call with: AH = 2BH
AL = new state (00h disabled, 01h
enabled)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado. Función de llamada con AL = 00H para deshabilitar y AL = 01H para habilitar Drive Access Sounds
INT 13H (0x13)
Function 2CH (0x2C or 44) --> Set Buffered Write (QuickCache II v4.20)
Call with: AH = 2CH
AL = new state
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función activa o desactiva las escrituras retrasadas para todas las unidades. Use AH=38H para cambiar una sola unidad. Use AL = 00H para Deshabilitar y 01H para Habilitar.
INT 13H (0x13)
Function 2DH (0x2D or 45) --> Set Buffered Read (QuickCache II v4.20)
Call with: AH = 2Dh
AL = new state (00h disabled, 01h
enabled)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función habilita o deshabilita la lectura anticipada para todas las unidades. Use AL = 00H para Deshabilitar y AL = 01H para Habilitar. Use AH=37H para cambiar una sola unidad.
INT 13H (0x13)
Function 2EH (0x2E or 46) --> Set Flush Count (QuickCache II v4.20)
Call with: AH = 2EH
BX = Flush count
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para configurar el Flush Count. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado.
INT 13H (0x13)
Function 2FH (0x2F or 47) --> Force Immediate Incremental Flush (QuickCache II v4.20)
Call with: AH = 2FH
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado.
INT 13H (0x13)
Function 30H (0x30 or 48) --> Get Information (QuickCache II v4.20)
Call with: AH = 30H
AL = Information Number (See Table in
Comments)
DS:DX = buffer for info
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para obtener los diferentes tipos de información sobre el sistema, especificados por AL. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado. AX = 8000H indica el especificador de información no válido. Los números de información que se especificarán a AL se enumeran en la siguiente tabla:
Valor
|
Descripción
|
00H
|
System information
|
01H
|
Drive information
|
02H
|
Access frequency (Array of 30 words)
|
03H
|
Drive Index (Array of 32 bytes indicating BIOS drive for DOS drive)
|
INT 13H (0x13)
Function 31H (0x31 or 49) --> Reserve Memory (QuickCache II v4.20)
Call with: AH = 31H
BX = Number of paragraphs of
conventional memory to reserve for
Applications.
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para reservar la memoria para aplicaciones. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado.
INT 13H (0x13)
Function 32H (0x32 or 50) --> Enable Caching For Specific Drive(QuickCache II v4.20)
Call with: AH = 32H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para habilitar el almacenamiento en caché para una unidad específica. Por ejemplo, llame a Función con AL = 00H para A: y así sucesivamente. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado.
INT 13H (0x13)
Function 33H (0x33 or 51) --> Disable Caching For Specific Drive (QuickCache II v4.20)
Call with: AH = 33H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se usa para deshabilitar el almacenamiento en caché para una unidad específica. Por ejemplo, llame a Función con AL = 00H para A: y así sucesivamente. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado.
INT 13H (0x13)
Function 34H (0x34 or 52) --> Lock/Unlock Sector(s) (QuickCache II v4.20)
Call with: AH = 34H
AL = Locking/Unlocking function number
(See the Table Given in Comments)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para llamar a funciones de bloqueo/desbloqueo de sectores, especificados por AL. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado. Los diferentes números de función a llamar con AL se dan en la siguiente tabla:
Valor
|
Función
|
00H
|
End sector locking/unlocking
|
01H
|
Lock all accessed sectors into cache
|
02H
|
Unlock all accessed sectors and discard from cache
|
INT 13H (0x13)
Function 35H (0x35 or 53) --> Set Lock Pool Size (QuickCache II v4.20)
Call with: AH = 35H
BX = Number of sectors in lock pool
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para establecer el tamaño del grupo de bloqueo. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado.
INT 13H (0x13)
Function 36H (0x36 or 54) --> Set Trace Buffer Size
Call with: AH = 36H
AL = New size of trace buffer
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para establecer el tamaño del búfer de seguimiento. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado. Esta Función se suele llamar con la Función 24H de INT 13H con AL=05H.
INT 13H (0x13)
Function 37H (0x37 or 55) --> Set Buffered Reads For Specific Drive (QuickCache II v4.20)
Call with: AH = 37H
AL = New state
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para establecer lecturas almacenadas en búfer para una unidad específica. Si AL = 00H el Estado está habilitado, de lo contrario deshabilitado. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado.
INT 13H (0x13)
Function 38H (0x38 or 56) --> Set Buffered Writes for Specific Drive (QuickCache II v4.20)
Call with: AH = 38H
AL = New state
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para establecer escrituras en búfer para una unidad específica. Si AL = 00H el Estado está habilitado, de lo contrario deshabilitado. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado.
INT 13H (0x13)
Function 39H (0x39 or 57) --> Set Read Buffer Size for Specific Drive (QuickCache II v4.20)
Call with: AH = 39H
AL = New size of read buffer
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para establecer el tamaño del búfer de lectura para una unidad específica, como DL = 00H para A: y así sucesivamente. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado.
INT 13H (0x13)
Function 3AH (0x3A or 58) --> Set Write Buffer Size for Specific Drive (QuickCache II v4.20)
Call with: AH = 3AH
AL = New size of Write buffer
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para establecer el tamaño del búfer de escritura para una unidad específica, como DL = 00H para A: y así sucesivamente. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado.
INT 13H (0x13)
Function 3DH (0x3D or 61) --> Enable/Disable Cylinder Flush for Drive (QuickCache II v4.20)
Call with: AH = 3DH
AL = New state
DL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se usa para habilitar/deshabilitar el lavado del cilindro para una transmisión específica, como DL = 00H para A: y así sucesivamente. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado. Si el registro AL se establece en 01H, el estado es habilitado, de lo contrario, deshabilitado.
INT 13H (0x13)
Function 3EH (0x3E or 62) --> Set Single-Sector Bonus (QuickCache II v4.20)
Call with: AH = 3EH
AL = New value for bonus
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta Función se utiliza para establecer el Bono de Sector Único. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado.
INT 13H (0x13)
Function 3FH (0x3F or 63) --> Set Bonus Thrashold (QuickCache II v4.20)
Call with: AH = 3FH
AL = New value for bonus threshold
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta función se utiliza para establecer el umbral de bonificación. Si la función tiene éxito, AX es 0000H, si no tiene éxito, AX devuelve el estado
INT 13H (0x13)
Function 41H (0x41 or 65) --> Installation Check (IBM/MS INT 13H Extensions)
Call with: AH = 41H
BX = 55AAH
DL = Drive number (80H-FFH)
Return: If Extensions Supported and Function Successful,
Carry Flag = Clear
BX = AA55H
AH = Major version of extensions (See the
table in Comments)
AL = Internal use
CX = API subset support bitmap (See the
Table in Comments)
DH = Extension version (v2.0 and later)
If Extension not Supported or Function Unsuccessful,
Carry Flag = set
AH = 01H (Function Invalid)
Comments:
Esta función comprueba si las extensiones de IBM/MS INT 13H están instaladas y son compatibles. Los valores para las versiones principales de las extensiones se proporcionan en la siguiente tabla:
Valor
|
Versión principal de la extensión
|
01H
|
1.x
|
20H
|
2.0 / EDD-1.0
|
21H
|
2.1 / EDD-1.1
|
30H
|
EDD-3.0
|
Los campos de bits para el mapa de bits de soporte de la API de IBM/MS INT 13H Extensions se proporcionan en la siguiente tabla:
Bit(s)
|
Descripción
|
0
|
Extended disk access functions (AH=42H, 43H, 44H, 47h and 48H) supported.
|
1
|
Removable drive controller functions (AH=45H, 46H, 48H, 49H, and INT15/AH =52H) supported.
|
2
|
Enhanced disk drive (EDD) functions (AH=48H and AH=4EH) supported. Extended drive parameter table is valid.
|
3-15
|
Reserved (0)
|
INT 13H (0x13)
Function 42H (0x42 or 66) --> Extended Read (IBM/MS INT 13H Extensions)
Call with: AH = 42H
DL = Drive number
DS:SI = Disk address packet (See the table in
comments)
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Esta función es la extensión de la función de lectura de disco. Si la función tiene éxito, el indicador de acarreo se borra y el registro AH es 00H; de lo contrario, se establece el indicador de acarreo y AH devuelve el código de error. El campo de recuento de bloques del paquete de direcciones de disco se establece en el número de bloques transferidos con éxito. El formato del paquete de direcciones de disco se proporciona a continuación:
Desplazamiento
|
Tamaño
|
Descripción
|
00H
|
BYTE
|
Size of Packet (10H)
|
01H
|
BYTE
|
Reserved (0)
|
02H
|
WORD
|
Number of blocks to transfer
|
04H
|
DWORD
|
Transfer buffer
|
08H
|
QWORD
|
Starting absolute block number (LBA)
|
INT 13H (0x13)
Function 43H (0x43 or 67) --> Extended Write (IBM/MS INT 13H Extensions)
Call with: AH = 43H
AL = write flags (See the table in
comments)
DL = drive number.
DS:SI = disk address packet
Return: If Function Successful,
Carry Flag = clear
AH = 00H
If Function Unsuccessful,
Carry Flag = set
AH = error code
Comments:
Esta función es la extensión de la función de escritura en disco. Si la función tiene éxito, el indicador de acarreo se borra y el registro AH es 00H; de lo contrario, se establece el indicador de acarreo y AH devuelve el código de error. El campo de recuento de bloques del paquete de direcciones de disco se establece correctamente en el número de bloques. La información de los indicadores de escritura para diferentes versiones se proporciona en la siguiente tabla:
Version 1.0 and 2.0
|
Version 2.1 and later
|
Value
|
Description
|
Value
|
Description
|
Bit 0
|
Verify Write
|
00H and 01H
|
Write without Verify
|
Bits 1 to 7
|
Reserved (0)
|
02H
|
Write with verify
|
INT 13H (0x13)
Function 44H (0x44 or 68) --> Verify Sectors (IBM/MS INT 13H Extensions)
Call with: AH = 44H
DL = drive number
DS:SI = disk address packet
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Esta función es la extensión de la función Verificar Sectores. Si la función tiene éxito, el indicador de acarreo se borra y el registro AH es 00H; de lo contrario, se establece el indicador de acarreo y AH devuelve el código de error. El campo de conteo de bloques del paquete de direcciones de disco se establece correctamente en el número de bloques
INT 13H (0x13)
Function 45H (0x45 or 69) --> Lock/Unlock Drive (IBM/MS INT 13H Extensions)
Call with: AH = 45H
AL = Operation Number (See the Table in
comments)
DL = Drive number
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
AL = Lock State (00H = Unlocked)
If Function Unsuccessful,
Carry Flag = Set
AH = Error code
Comments:
Esta función se utiliza para bloquear/desbloquear la unidad. Se requiere que esta función sea compatible con cualquier unidad extraíble numerada 80H o superior. Se pueden colocar hasta 255 bloqueos en una unidad y los medios no se desbloquearán físicamente hasta que se hayan eliminado todos los bloqueos.
Si la función tiene éxito, el indicador de acarreo está limpio y el registro AH es 00H; de lo contrario, se establece el indicador de acarreo y AH devuelve el código de error.
Los números de operación para diferentes operaciones de bloqueo/desbloqueo de la unidad se proporcionan en la siguiente tabla:
Valor
|
Función
|
00H
|
Lock media in drive
|
01H
|
Unlock media
|
02H
|
Check lock status
|
INT 13H (0x13)
Function 46H (0x46 or 70) --> Eject Media (IBM/MS INT 13H Extensions)
Call with: AH = 46H
AL = 00H (reserved)
DL = Drive number
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Esta función es para expulsar medios. Si la función tiene éxito, el indicador de acarreo se borra y el registro AH es 00H; de lo contrario, se establece el indicador de acarreo y AH devuelve el código de error.
INT 13H (0x13)
Function 47H (0x47 or 71) --> Extended Seek (IBM/MS INT 13H Extensions)
Call with: AH = 47H
DL = Drive number
DS:SI = Disk address packet
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Esta función es la extensión de la función de búsqueda. Si la función tiene éxito, el indicador de acarreo se borra y el registro AH es 00H; de lo contrario, se establece el indicador de acarreo y AH devuelve el código de error. El campo de recuento de bloques del paquete de direcciones de disco se establece correctamente en el número de bloques.
INT 13H (0x13)
Function 48H (0x48 or 72) --> Get Drive Parameters (IBM/MS INT 13H Extensions)
Call with: AH = 48H
DL = Drive (80H-FFH)
DS:SI = Buffer for drive parameters
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
DS:SI = Buffer filled
If Function Unsuccessful,
Carry Flag = Set
AH = Error code
Comments:
Esta función se utiliza para obtener los parámetros del variador. Si la función tiene éxito, el indicador de acarreo se borra y el registro AH es 00H con DS:SI de búfer lleno; de lo contrario, se establece el indicador de acarreo y AH devuelve el código de error.
INT 13H (0x13)
Function 49H (0x49 or 73) --> Extended Media Change (IBM/MS INT 13H Extensions)
Call with: AH = 49H
DL = Drive number (any drive number, see
Comments)
Return: If media has not been changed,
Carry Flag = Clear
AH = 00H
If media may have been changed,
Carry Flag = Set
AH = 06H (Error code for media change)
Comments:
Esta función es la extensión de la función de cambio de medios. Si la función tiene éxito, el indicador de acarreo se borra y el registro AH es 00H; de lo contrario, se establece el indicador de acarreo y AH devuelve el código de error.
La principal diferencia entre esta función y la función AH = 16H de INT 13H es que podemos especificar cualquier número de unidad, mientras que la función 16H solo permite unidades de unidades 00H a 7FH de disquetes.
INT 13H (0x13)
Function 4AH (0x4A or 74) --> Initiate disk Emulation (Bootable CD-ROM)
Call with: AH = 4AH
AL = 00H
DS:SI = Specification packet (see the Table in comments)
Return: If Function Successful,
Carry Flag = Clear
If Function unsuccessful,
Carry Flag = Set
AX = Status Code
Comments:
Esta función se utiliza para iniciar la emulación de disco. Si la función tiene éxito, la bandera de acarreo está clara; de lo contrario, se establece la bandera de acarreo y el registro AX devuelve el código de estado y la unidad no estará en modo de emulación.
El formato del paquete de especificación de CD-ROM de arranque se proporciona en la siguiente tabla:
Desplazamiento
|
Tamaño
|
Descripción
|
00H
|
BYTE
|
Size of packet in bytes (13H)
|
01H
|
BYTE
|
Boot media type
|
02H
|
BYTE
|
Drive Number
Drive Number
|
Drive Description
|
00H
|
Floppy image
|
80H
|
Bootable hard disk
|
81H to FFH
|
Non bootable or no Emulation
|
|
03H
|
BYTE
|
CD-ROM controller number
|
04H
|
DWORD
|
Logical Block Address of disk image to Emu
|
08H
|
WORD
|
Device Specification
Value
|
Description
|
(IDE) Bit 0
|
Drive is slave instead of master
|
(SCSI) Bits 0 to 7
|
LUN (Logical Unit Number) and PUN (Physical Unit Number)
|
Bits 8 to 15
|
Bus Number
|
|
0AH
|
WORD
|
Segment of 3Kb buffer for caching CD-ROM reads
|
0CH
|
WORD
|
Load segment for initial boot image (if 0000H, load at segment 07C0H)
|
0EH
|
WORD
|
Number of 512-byte virtual sectors to load (only valid for Function 4CH of INT 13H)
|
10H
|
BYTE
|
Low byte of cylinder count (for Function 08H of INT 13H)
|
11H
|
BYTE
|
Sector count, high bits of cylinder count (for Function 08H of INT 13H)
|
12H
|
BYTE
|
Head count (for Function 08H of INT 13H)
|
Los campos de bit para el tipo de medio de arranque del CD-ROM de arranque se proporcionan en la siguiente tabla:
Bit(s)
|
Description
|
3-0
|
Media type
Value
|
Description
|
0000
|
No emulation.
|
0001
|
1.2M diskette.
|
0010
|
1.44M diskette.
|
0011
|
2.88M diskette.
|
0100
|
Hard disk (drive C:)
|
Other
|
Reserved
|
|
5-4
|
Reserved (0)
|
6
|
Image contains ATAPI driver
|
7
|
Image contains SCSI driver(s)
|
INT 13H (0x13)
Function 4B00H (0x4B00) --> Terminate Disk Emulation (Bootable CD-ROM)
Call with: AX = 4B00H
DL = Drive number (or 7FH to terminate
all emulations)
DS:SI = Empty specification packet
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
DS:SI = Specification packet filled
Comments:
Esta función se utiliza para finalizar la emulación de disco. Si desea finalizar todas las emulaciones, llame a la función con DL = 7FH. Si la función tiene éxito, la bandera de acarreo se borra; de lo contrario, se establece la bandera de acarreo y el registro AX devuelve el código de estado y la unidad permanece en modo de emulación.
INT 13H (0x13)
Function 4B01H (0x4B01) --> Get Status (Bootable CD-ROM)
Call with: AX = 4B01H
DL = Drive number
DS:SI = Empty specification packet
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
DS:SI = Specification packet filled
Comments:
La función se utiliza para obtener el estado. Si la función tiene éxito, la bandera de acarreo está clara; de lo contrario, se establece la bandera de acarreo y el registro AX devuelve el código de estado
INT 13H (0x13)
Function 4CH (0x4C or 76) --> Initiate Disk Emulation and Boot (Bootable CD-ROM)
Call with: AH = 4CH
AL = 00H
DS:SI = Specification packet
Return: If Function Successful,
Nothing
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
Comments:
Esta función se utiliza para iniciar la emulación de disco y arrancar el sistema. Si la función tiene éxito, no devuelve nada más, se establece la bandera de acarreo y el registro AX devuelve el código de estado.
INT 13H (0x13)
Function 4D00H (0x4D00) --> Return Boot Catalog (Bootable CD-ROM)
Call with: AX = 4D00H
DS:SI = Command packet (See the Table in
comments)
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
Comments:
Esta función se utiliza para devolver el catálogo de inicio. Si la función tiene éxito, la bandera de acarreo se borra; de lo contrario, se establece la bandera de acarreo y el registro AX devuelve el código de estado. El formato del CD-ROM de inicio de "Obtener catálogo de inicio" paquete de comando se ha dado en la siguiente tabla:
Desplazamiento
|
Tamaño
|
Descripción
|
00H
|
BYTE
|
Size of packet in bytes (08H)
|
01H
|
BYTE
|
Number of sectors of boot catalog to read
|
02H
|
DWORD
|
Buffer for boot catalog
|
06H
|
WORD
|
First sector in boot catalog to transfer
|
INT 13H (0x13)
Function 4EH (0x4E or 78) --> Set Hardware Configuration (IBM/MS INT 13H Extensions v2.1)
Call with: AH = 4EH
AL = Function Number ( See the Table in comments)
DL = Drive number
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
AL = Status
Comments:
Esta función se utiliza para establecer la configuración del hardware. Los números de función para que AL llame a esta función se dan en la siguiente tabla:
Valor
|
Descripción
|
00H
|
Enable prefetch
|
01H
|
Disable prefetch
|
02H
|
Set maximum PIO transfer mode
|
03H
|
Set PIO mode 0
|
04H
|
Set default PIO transfer mode
|
05H
|
Enable INT 13H DMA maximum mode
|
06H
|
Disable INT 13H DMA
|
Los modos DMA y PIO son mutuamente excluyentes, por lo tanto, seleccionar DMA deshabilita PIO para el dispositivo especificado o todos los dispositivos en ese controlador y seleccionar PIO deshabilita DMA
INT 13H (0x13)
Function 5001H (0x5001) --> Send Packet Command (Enhanced Disk Drive Spec v3.0)
Call with: AX = 5001H
DL = Drive number
ES:BX = Command packet (See the Table in
comments)
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Esta función se utiliza para enviar los comandos del paquete. Si la función tiene éxito, el indicador de acarreo se borra y el registro AH es 00H; de lo contrario, se establece el indicador de acarreo y AH devuelve el código de error. El formato del paquete de comando Enhanced Disk Drive Spec v3.0 se proporciona en la siguiente tabla:
Desplazamiento
|
Tamaño
|
Descripción
|
00H
|
WORD
|
Signature B055H
|
02H
|
BYTE
|
Length of packet in bytes
|
03H
|
BYTE
|
Reserved (0)
|
04H
|
N BYTEs
|
Formatted packet data
|
INT 13H (0x13)
Function 5501H (0x5501) --> Inquiry (Seagate ST01/ST02)
Call with: AX = 5501H
DH = Number of bytes to transfer
DL = Drive Number
ES:BX = Buffer for results
Return
ES:BX buffer, filled with the Inquiry results.
Comments:
Esta función se utiliza para enviar consultas. El BIOS ST01/ST02 no devuelve ninguna indicación de éxito o falla para la función, por lo tanto, se debe suponer que todos los comandos fueron exitosos.
El BIOS ST01/ST02 siempre asigna sus unidades después de las unidades BIOS anteriores sin cambiar el número de unidades BIOS en 0040H:0075H. Este comando es idéntico al comando de consulta SCSI
INT 13H (0x13)
Function 5502H (0x5502) --> Reserved (Seagate ST01/ST02)
INT 13H (0x13)
Function 5503H (0x5503) --> Set DTQ (Device Type Qualifier) (Seagate ST01/ST02)
Call with: AX = 5503H
DH = DTQ byte (See the table in
comments)
DL = Drive Number
Return: Nothing
Comments:
Esta función se utiliza para establecer el DTQ (Calificador de tipo de dispositivo). La función no devuelve nada. Los campos de bits para el byte DTQ se muestran en la siguiente tabla:
Bit(s)
|
Descripción
|
0
|
Seagate installation software present
|
1
|
Selected drive has been installed
|
2
|
Host Adapter checks parity on the selected drive
|
3
|
Selected drive is ST225N
|
4
|
Selected drive is paired ST225N/NP
|
5
|
Reserved
|
6
|
SCSI drive attached
|
7
|
Reserved
|
INT 13H (0x13)
Function 5504H (0x5504) --> Return Identification (Seagate ST01/ST02)
Call with: AX = 5504H
DL = Drive Number
Return:
AX = 4321H
BL = selected drive number (00H, 01H)
BH = number of drives attached to Host
Adapter
Comments:
La función se utiliza para devolver la identificación de la(s) unidad(es).
INT 13H (0x13)
Function 5505H (0x5505) --> Park Heads (Seagate ST01/ST02)
Call with: AX = 5505H
DL = Drive Number
DH = Sub function (see the comments)
Return:
Nothing
Comments:
La función se utiliza para aparcar las cabezas del disco. Se usaba en los discos duros antiguos sin embargo los discos duros modernos no necesitan ningún programa externo para aparcar sus cabezas.
La función secundaria 00H detiene las cabezas (comando de parada SCSI) y la función secundaria 01H desestaciona las cabezas (comando de inicio SCSI) del disco.
INT 13H (0x13)
Function 5506H (0x5506) --> SCSI Bus Parity (Seagate ST01/ST02)
Call with: AX = 5506H
DL = Drive Number
DH = Sub function Number (See
Comments)
Return:
AL = Status (00H parity checking
disabled, 01H parity checking enabled)
Comments:
Llame a la función con el siguiente número de subfunción para DH:
Valor
|
Descripción
|
00H
|
Disable parity check
|
01H
|
Enable parity check
|
02H
|
Return current parity setting
|
INT 13H (0x13)
Function 5507H (0x5507) To Function 550DH (0x550D) --> Reserved Functions (Seagate ST01/ST02)
Call with: AX = 5507H to AX = 550DH
Comments:
Estas Funciones han sido catalogadas oficialmente como "Reservadas"
INT 13H (0x13)
Function A0H (0xA0 or 160) --> Get Resident Code Segment (Super PC-Kwik v3.20 and Later)
Call with: AH = A0H
SI = 4358H
Return:
AX = Segment of Resident Code
Comments:
Esta función se utiliza para obtener el segmento de código residente. AX devuelve el segmento de código residente.
INT 13H (0x13)
Function A1H (0xA1 or 161) --> Flush Cache (Super PC-Kwik v3.20 and Later)
Call with: AH = A1H
SI = 4358H
Return:
Carry Flag = Clear
AH = 00H (v5.10)
Comments:
La función se utiliza para vaciar la memoria caché.
INT 13H (0x13)
Function A3H (0xA3 or 163) --> Disable Cache (Super PC- Kwik v3.20 and Later)
Call with: AH = A3H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
La función se utiliza para deshabilitar el caché.
INT 13H (0x13)
Function A4H (0xA4 or 164) --> Enable Cache (Super PC-Kwik v3.20 and Later)
Call with: AH = A4H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
Esta función se utiliza para habilitar la memoria caché.
INT 13H (0x13)
Function EEH (0xEE or 238) --> Set 1024-Cylinder Flag (SWBIOS)
Call with: AH = EEH
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
La función se utiliza para configurar 1024: indicador de cilindro. La bandera se borra con todas las llamadas INT 13H excepto AH=EEH y AH=EFH. Disk Manager también admite estas llamadas. Esta función es equivalente a llamar a la función AH=EFH con CX=0400H para el software que admite esa llamada.
Esta función también es compatible con HyperDisk v4.01 y versiones posteriores, y PC-Cache v5.5 y versiones posteriores, para permitir el almacenamiento en caché de unidades que utilizan SWBIOS para acceder a más de 1024 cilindros.
INT 13H (0x13)
Function EFH (0xEF or 239) --> Set Cylinder Offset (Ontrack Drive Rocket)
Call with: AH = EFH
CX = Cylinder offset for next INT 13H call
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
La función se utiliza para establecer la compensación del cilindro. Para el software que admite esta llamada, la función AH=EEH es equivalente a llamar a esta función con CX=0400H. El desplazamiento del cilindro se restablece a 0 por todos los INT 13H llamados excepto AH=EEH y AH=EFH.
INT 13H (0x13)
Function F9H (0xF9 or 249) --> Installation Check (SWBIOS)
Call with: AH = F9H
DL = Drive Number
Return: If Function Successful,
Carry Flag = Clear
DX = Configuration Word (see comments)
If Function Unsuccessful,
Carry Flag = Set
Comments:
Esta función se utiliza para comprobar la instalación. Si la función tiene éxito, el indicador de acarreo se borra y DX devuelve la palabra de configuración; de lo contrario, se establece el indicador de acarreo.
El bit 15 se establece si hay otras extensiones de SWBIOS disponibles. Disk Manager también admite estas llamadas.
INT 13H (0x13)
Function FEH (0xFE or 254) --> Get Extended Cylinder Count (SWBIOS)
Call with: AH = FEH
DL = Drive Number
Return:
Carry Flag = Clear
DX = Number of Cylinders beyond 1024
on drive
Comments:
Esta función se utiliza para obtener el recuento de cilindros ampliado. La función AH = 08H de INT 13H devolverá un recuento de cilindros truncado a 1024. El BIOS sin esta extensión devolvería el módulo de recuento 1024. Disk Manager también admite estas llamadas
INT 13H (0x13)
Function FFH (0xFF or 255) --> Officially Private Function (IBM SurePath BIOS)
INT 13H (0x13)
Function FFFFH (0xFFFF) --> Set Turbo Mode (UNIQUE UX Turbo Utility)
Call with: AX = FFFFH
BH = AAH
BL = Sub Function Number (See the table
in Comments)
Return: If installed,
AX = 1234H
Comments:
Esta función se utiliza para configurar el Modo Turbo. Los números de subfunción para llamar a la función con BL se proporcionan en la siguiente tabla:
Valor
|
Descripción
|
00H
|
Installation check
|
01H
|
Turn on Turbo mode
|
02H
|
Turn off Turbo mode
|
03H
|
Set Turbo mode according to hardware switch
|
04H
|
Set disk access to Turbo mode
|
05H
|
Set disk access to Normal mode
|
Cómo usar extensiones INT 13H en programación C
Podemos llamar a las funciones de extensión de INT 13H con las mismas funciones de C (int86(), int86x(), etc.) que usamos en los capítulos anteriores. Aprendamos con un ejemplo.
El siguiente ejemplo se enfoca en las tres funciones (Comprobar extensiones presentes, lectura extendida y escritura extendida). Sin embargo, no vamos a utilizar la función de escritura extendida en este capítulo.
El programa primero verifica si las extensiones son compatibles o no, si las extensiones están presentes para INT 13H. Lee el sector absoluto 0 (por lo tanto, MBR) del disco. La codificación del programa procede de la siguiente manera:
/* Programa para acceder a sectores de más de 8,46 GB mediante extensiones de BIOS INT 13 */
#include<stdio.h>
#include<dos.h>
/* Assigns the identifier to the data type */
typedef unsigned char Byte;
typedef unsigned int Word;
typedef unsigned long DWord;
/* disk_packet structure is loaded in DS:SI and command executed */
struct disk_packet
{
Byte size_pack; // Size of packet must be 16 or 16+
Byte reserved1; // Reserved
Byte no_of_blocks;// Number of blocks for transfer
Byte reserved2; // Reserved
/* Address in Segment:Offset format */
Word offset; //offset address
Word segment; //segment address
/* To Support the Disk Even of Capacity of 1152921504.607 GB */
DWord lba1;
DWord lba2;
}
disk_pack;
/* Function to check if the Extensions are supported */
void check_ext_present()
{
union REGS inregs, outregs; /* Input Registers and
Output */
inregs.h.ah=0x41; /* Function to Check
Extension Present */
inregs.x.bx=0x55AA;
inregs.h.dl=0x80; /* Drive No for first Hard Disk */
int86(0x13,&inregs,&outregs); /*Call interrupt */
if(outregs.x.cflag)
{
/* Extension Not Supported */
printf("\nBios extension not supported");
exit(1);
}
if(outregs.x.bx==0xAA55)
if(outregs.x.cx & 0x1)
/* Extension Present */
printf("\nExtended I/O supported");
}
/* Function to read the Sector */
void read_sectors(void *buffer)
{
union REGS inregs, outregs; /* Input and Output
Registers */
struct SREGS segregs; // Segment Registers
disk_pack.size_pack=16; // Set size to 16
disk_pack.no_of_blocks=1; // One block
disk_pack.reserved1=0; // Reserved Word
disk_pack.reserved2=0; // Reserved Word
disk_pack.segment=FP_SEG(buffer);// Segment of buffer
disk_pack.offset=FP_OFF(buffer); // Offset of buffer
/* request for MBR of hard disk 1 */
/* Read Absolute sector 0 */
disk_pack.lba1=0; /* LBA address, Contains first
32 bits */
/* We normally require( drives < 2.1 T.B) to set
only this */
disk_pack.lba2=0; // Last 32 bit address
inregs.h.ah=0x42; // Function to read
inregs.h.dl=0x80; // Drive Number for First Hard Disk inregs.x.si = FP_OFF(&disk_pack); /*Make DS:SI point
to disk_pack */
segregs.ds = FP_SEG(&disk_pack);
/* Call Interrupt */
int86x(0x13,&inregs,&outregs,&segregs);
if(outregs.x.cflag)
printf("\n\nError %d\n",outregs.h.ah);
else
printf("\n\nI hope Everything is all Right");
}
//// Write Sector Function \\\\
void write_sector()
{
/* It will be written in the same way as read_sectors function, except Function Number, which will be 0x43 in this function. We’ll discuss extended write function in next chapters.
Before Using this Function please check and verify what are you going to do. You should have the proper knowledge of what you are going to do. Use of this function in lack of knowledge or carelessly may destroy your data. */
}
/// Main Function \\\\
void main()
{
int i=0;
/* buffer to hold MBR */
Byte mbr[512];
clrscr();
/* check for BIOS extension present */
check_ext_present();
/* read sector */
read_sectors(&mbr);
printf("\n\n Data of MBR \n");
printf("▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n\n\n");
while(i++<512)
{
/* display the MBR buffer */
printf("%c",mbr[i]);
}
}
Comentarios sobre Codificación del programa
typedef Asigna el identificador al tipo de datos tal que typedef unsigned char Byte; asigna el identificador Byte para el tipo de dato char. Del mismo modo, el identificador Word se asigna a int y DWord se asigna a long.
La estructura disk_packet se carga en DS:SI y se ejecuta el comando (como lectura extendida, escritura extendida o verificación, etc.). Consulte las funciones de IBM/MS INT 13H Extensions (Función 41H a Función 49H) proporcionadas anteriormente.
La función check_ext_present() verifica si las extensiones están disponibles/soportadas o no. La función se llama con BX=55AAH (inregs.x.bx=0x55AA;) y si las extensiones son compatibles, el registro BX se establece en AA55H. (Ver Función 41H dada antes)
La función read_sectors se usa para leer el sector absoluto del disco, especificado por disk_pack.lba1. En este programa hemos dado disk_pack.lba1=0, por lo que vamos a leer el sector absoluto 0 (ver la nota a continuación) y así vamos a leer el MBR del disco.
La función write_sector también es la misma que la función read_sectors y se escribirá de la misma manera pero con diferentes opciones de función. Lo utilizaremos en los próximos capítulos.
Nota:
Leemos los sectores del disco de las dos formas siguientes:
- Lectura (o escritura) relativa del sector
- Lectura (o escritura) de sector absoluto
En Relative Sector Read, leemos los sectores del disco de acuerdo con la geometría CHS (Cylinder, Head and Sector) del disco. En sector relativo lea el MBR del disco (Primer Sector del disco) está en Cilindro 0, cabeza 0 y Sector 1.
En la lectura Absoluta de los sectores del disco, no necesitamos especificar los números de Cilindro o Cabeza en nuestro programa. Los sectores absolutos se cuentan a partir del sector absoluto 0.
Por lo tanto, si vamos a leer el MBR del disco (Primer sector del disco), vamos a leer el sector absoluto 0. Es trabajo del BIOS convertir el número de sector absoluto a su correspondiente Cilindro, Cabeza y número de Sector.
Al igual que en la lectura (o escritura) de sectores absolutos, tenemos que calcular solo los sectores absolutos dentro del ciclo en las operaciones como la lectura o escritura de todo el disco, mientras que en el caso de la lectura (o escritura) de sectores relativos, necesitamos ejecute tres bucles a la vez para calcular CHS, por lo tanto, la lectura/escritura del sector absoluto es mucho más rápida que la lectura/escritura del sector relativo.
Por ejemplo, si tenemos cualquier disco duro con 16 cabezales (lados), 12 cilindros y 63 sectores, la tabla que se muestra a continuación muestra el procedimiento y la diferencia de ambos métodos de lectura y, por lo tanto, muestra cómo se aborda el sector absoluto. puede hacer que nuestros programas que toman tiempo (como la lectura/escritura de todo el disco o los programas de borrado de todo el disco, etc.) se ejecuten mucho más rápido:
Lectura de Sectores Relativos
|
Lectura de sector absoluto
|
Cylinder =0, Head =0, Sector = 1
|
Absolute Sector = 0
|
Cylinder =0, Head =0, Sector = 2
|
Absolute Sector = 1
|
Cylinder =0, Head =0, Sector = 3
|
Absolute Sector = 2
|
.
.
.
.
|
.
.
.
.
|
Cylinder =0, Head =0, Sector = 62
|
Absolute Sector = 61
|
Cylinder =0, Head =0, Sector = 63
|
Absolute Sector = 62
|
Cylinder =0, Head =1, Sector = 1
|
Absolute Sector = 63
|
Cylinder =0, Head =1, Sector = 2
|
Absolute Sector = 64
|
Cylinder =0, Head =1, Sector = 3
|
Absolute Sector = 65
|
Cylinder =0, Head =1, Sector = 4
|
Absolute Sector = 66
|
.
.
.
.
|
.
.
.
.
|
Cylinder =0, Head =1, Sector = 63
|
Absolute Sector = 125
|
Cylinder =0, Head =2, Sector = 1
|
Absolute Sector = 126
|
Cylinder =0, Head =2, Sector = 2
|
Absolute Sector = 127
|
Cylinder =0, Head =2, Sector = 3
|
Absolute Sector = 128
|
.
.
.
.
|
.
.
.
.
|
Cylinder =0, Head =15, Sector = 63
|
Absolute Sector = 1007
|
Cylinder =1, Head =0, Sector = 1
|
Absolute Sector = 1008
|
Cylinder =1, Head =0, Sector = 2
|
Absolute Sector = 1009
|
Cylinder =1, Head =0, Sector = 3
|
Absolute Sector = 1010
|
.
.
.
.
|
.
.
.
.
|
Cylinder =1, Head =0, Sector = 63
|
Absolute Sector = 1070
|
Cylinder =1, Head =1, Sector = 1
|
Absolute Sector = 1071
|
Cylinder =1, Head =1, Sector = 2
|
Absolute Sector = 1072
|
Cylinder =1, Head =1, Sector = 3
|
Absolute Sector = 1073
|
.
.
.
.
|
.
.
.
.
|
Cylinder =1, Head =15, Sector = 63
|
Absolute Sector = 2015
|
Cylinder =2, Head =0, Sector = 1
|
Absolute Sector = 2016
|
Cylinder =2, Head =0, Sector = 2
|
Absolute Sector = 2017
|
Cylinder =2, Head =0, Sector = 3
|
Absolute Sector = 2018
|
.
.
.
.
|
.
.
.
.
|
Cylinder =11, Head =15, Sector = 60
|
Absolute Sector = 12092
|
Cylinder =11, Head =15, Sector = 61
|
Absolute Sector = 12093
|
Cylinder =11, Head =15, Sector = 62
|
Absolute Sector = 12094
|
Cylinder =11, Head =15, Sector = 63
|
Absolute Sector = 12095
|
La información de la tabla de particiones de MBR, que se muestra en cualquier herramienta de análisis de MBR de disco, se proporciona a continuación:
En la información anterior, los números de sector relativos para el inicio de ambas particiones son 63 y 11277630 respectivamente, que están libres de particiones y se cuentan de acuerdo con la cantidad de sectores disponibles en el disco.
Página modificada el: 13/01/2022