INT 13h es la forma abreviada para la llamada de interrupción del BIOS 13hex, el cual es el vector de interrupción 20º en un sistema de arquitecturas de computadoras basada en x86. Esta interrupción se encarga de las operaciones típicas de acceso a las unidades de almacenamiento tales como discos duros y disquetes.

Características Los sistemas operativos de modo real como MS-DOS llaman a esta interrupción para operaciones de disco y de disquete. Las aplicaciones de MS-DOS llaman a la interrupción int 21h para acceso al disco en vez de la interrupción INT 13h.

Los nuevos sistemas operativos como Microsoft Windows NT y sus derivados (ej. NT 4.0, XP y server 2003) o linux interceptan la llamada a esta interrupción y se la pasan a sus mecanismos nativos de acceso al disco o disquete. Windows 9x y Windows 3.x también hacen esto cuando utilizan el modo de acceso a archivos de 32 bits.

La rutina original de la interrupción soporta discos de 504 MB o más grandes hasta un límite de 8 GiB porque utiliza el modo de acceso CHS, para romper esta barrera, se crearon las extensiones de la INT 13h que utilizan el modo LBA (direcciones de 64-bits) para acceder al disco, soportando así hasta 8 ZiB de espacio (También se puede usar modos LBA de 32-bits o 48-bits que soportan 2 TiB o 128 PiB respectivamente).

Lista de servicios de la INT 13h

Tabla de unidades

DL = 00h Primera disquetera (Unidad "A:") DL = 01h Segunda disquetera (Unidad "B:") DL = 80h Primer disco duro DL = 81h Segundo disco duro DL = FFh Último disco duro soportado por la BIOS

Tabla de estado

AH = 00h La operación finalizó sin problemas AH = 01h Función invalida en AH o parámetro no válido AH = 02h Marca de dirección no encontrada AH = 03h El disco está protegido contra la escritura AH = 04h Sector no encontrado o error de lectura AH = 05h Los datos no se verificaron correctamente AH = 06h Disco cambiado (Disquetera) AH = 07h Actividad de parámetros de disco fallada (disco duro) AH = 08h Desborde de DMA AH = 09h Error de límite de datos (Se intentó DMA sobrepasando los 64 KB) AH = 0Ah Detectado sector dañado AH = 0Bh Detectado cilindro dañado AH = 0Ch Cilindro insoportado o medio inválido AH = 0Dh Número inválido de sectores en formateo (disco duro PS/2) AH = 0Eh Control de marca de datos detectado AH = 0Fh Nivel de arbitración de DMA fuera de rango AH = 10h Error incorregible de CRC o ECC AH = 11h Datos ECC coregidos AH = 20h Error de controlador AH = 31h No hay medio en unidad AH = 32h Tipo de unidad incorrecta guardada en CMOS (Compaq) AH = 40h Fallo seek AH = 80h Fuera de tiempo (no está listo) AH = AAh Unidad no preparada AH = B0h Volumen no bloqueado en unidad (INT 13h EXT) AH = B1h Volumen bloqueado en unidad (INT 13h EXT) AH = B2h Volumen no eliminable (INT 13h EXT) AH = B3h Volumen en uso (INT 13h EXT) AH = B4h Cuenta de bloqueo excedida (INT 13h EXT) AH = B5h Petición de expulsión valida fallida (INT 13h EXT) AH = B6h Volumen presente pero protegido contra escritura (INT 13h EXT) AH = BBh Error indefinido AH = CCh Escritura fallida AH = E0h Error de estado de registro AH = FFh Operación sense fallida

Servicios

AH = 00h TODOS Reiniciar controlador de disco AH = 01h TODOS Comprobar estado de la unidad AH = 02h TODOS Leer sectores AH = 03h TODOS Escribir sectores AH = 04h TODOS Verificar sectores AH = 05h TODOS Formatear cilindro (formateo a bajo nivel) AH = 08h TODOS Leer parámetros de unidad AH = 09h HD Iniciar controlador de disco AH = 0Ah HD Leer sectores largos AH = 0Bh HD Escribir sectores largos AH = 0Ch HD Mover cabeza a cilindro AH = 0Dh HD Reiniciar unidades AH = 0Eh PS/2 Test de lectura del controlador AH = 0Fh PS/2 Test de escritura del controlador AH = 10h HD Probar si la unidad está lista AH = 11h HD Recalibrar unidad AH = 12h PS/2 Test de la RAM del controlador AH = 13h PS/2 Test de la unidad AH = 14h HD Diagnóstico del controlador AH = 15h TODOS Leer tipo de unidad AH = 16h FD Detectar cambio de medios AH = 17h FD Selecionar tipo de medio a formatear (Usado por la versión de DOS <= 3.1) AH = 18h FD Selecionar tipo de medio a formatear (Usado por la versión de DOS >= 3.2) AH = 41h, BX = 55AAh EXT Comprobar si la extensiones están instaladas AH = 42h EXT Leer sectores AH = 43h EXT Escribir sectores AH = 44h EXT Verificar sectores AH = 45h EXT Bloquear/Desbloquear unidad AH = 46h EXT Expulsar unidad AH = 47h EXT Mover cabeza a sector AH = 48h EXT Leer parámetros de la unidad AH = 49h EXT Detectar cambio de tipo de unidad AH = 4Ah CD-ROM arrancable Iniciar emulación de disco AX = 4B00h CD-ROM arrancable Terminar emulación de disco AX = 4B01h CD-ROM arrancable Ver estado AH = 4Eh CD-ROM arrancable Iniciar emulación de disco y bootear AX = 4D00h CD-ROM arrancable Retornar catálogo de booteo TODOS: Puede ser utilizado para disco duro y disquete HD: Solo puede ser utilizado por el disco duro FD: Solo puede ser utilizado por el disquete PS/2: Solo para discos duros de equipos PS/2 EXT: Extensiones de la INT 13h

INT 13h AH=00h - Reiniciar controlador de disco Parámetros: AH00hDLUnidad (ej: 80h - Primer disco duro) Ejemplo: MOV AH,00h MOV DL,00h ;Primera disquetera INT 13h

INT 13h AH=02h - Leer sectores Parámetros: AH = 02h Leer sectores AL = ?? Número de sectores a leer (tiene que ser mayor que 0) CH = ?? 8 bit bajos del número de cilindro CL = ?? Número de sector (bits 0-5), 2 bits altos de número de cilindro (bits 6-7, solo disco duro) DH = ?? Número de cabeza DL = ?? Número de unidad ES:BX Buffer de datos Retorna: CF Activada en error, limpia si no hay error AH = ?? Estado AL = ?? Número de sectores transferidos Ejemplo: MOV AH,02h MOV AL,10 ;10 sectores a leer MOV CH,02 ;Cilindro 2 MOV CL,01 ;Empezamos desde el primer sector MOV DH,01 ;Cabeza 1 MOV DL,00h ;Primera disquetera MOV BX,0800h ;ES:BX - 0000:0800 INT 13h JMP 0000h:0800h ;Saltamos a la direccion que acaba de leer

INT 13h AH=04h - Verificar sectores

Parámetros: AH = 04h Verificar sectores AL = ?? Número de sectores a verificar (tiene que ser mayor de 0) CH = ?? 8 bits bajos del número del cilindro CL = ?? Número de sector (Bits 0-5), 2 bits altos del número del cilindro (Sólo disco duro) DH = ?? Número de cabeza DL = ?? Número de unidad ES:BX Buffer de datos

Retorna: CF Activada en error, limpia si no hay error AH = ?? Estado AL = ?? Número de sectores verificados

Ejemplo: MOV AH,04h MOV AL,18 ;18 sectores a comprobar MOV CH,3 ;Cilindro 3 MOV CL,1 ;Sector 1 MOV DH,00 ;Cabeza 0 MOV DL,00 ;Primera disquetera MOV BX,00 ;Ponemos el buffer en 0000:0800 MOV ES,BX MOV BX,0800h INT 13h JC sector_malo_o_error ;Si viene aquí los sectores están bien sector_malo_o_error: ;Si viene aquí hay un sector dañado o ha habido otro tipo de error

INT 13h AH=41h - Comprobar si las extensiones están instaladas Parámetros: AH = 41h Comprobar extensiones BX = 55AAh Comprobar extensiones DL = ?? Número de unidad Retorna: CF Activada en error (no hay extensiones), limpia si no hay error AH = ?? Número de la versión mayor de las extensiones (01h = 1.x, 20h = 2.0 / EDD-1.0, 21h = 2.1 / EDD-1.1, 30h = EDD-3.0) AL = ?? Uso Interno BX = 55AAh Devuelve 55AAh si están instaladas CX = ?? Lista de bits de las extensiones instaladas (Bit 0-15) DH = ?? Versión de las extensiones (v2.0+ ??? -- no presente en 1.x) Ejemplo: MOV AH,41h MOV BX,55AAh MOV DL,80h ;Primer disco duro INT 13h JC no_hay_extensiones ;Si viene aquí las extensiones están instaladas no_hay_extensiones: ;Si viene aquí las extensiones no están instaladas

Véase también

IBM PC ROM BIOS Controlador de disquete Unidad de disquete disquete

Referencias

Enlaces externos Lista completa y explicada de la interrupción 13h (en inglés)

Categoría:Interrupciones