- Int 13h
-
INT 13h es la forma abreviada de la interrupción 0x13. Esta interrupción se encarga de las operaciones típicas de acceso a los discos duros y a los 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 por que 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 esta 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 invalido AH = 0Dh Número invalido 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 esta 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 exedida (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 Diagnostico 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 catalogo 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:
AH 00h DL Unidad (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 = 41h Verificar sectores AL = ?? Numero de sectores ha 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 ha 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
Enlaces externos
Categoría:- Interrupciones
Wikimedia foundation. 2010.