Int 13h
![]() | Este artículo o sección necesita referencias que aparezcan en una publicación acreditada. Busca fuentes: «Int 13h» – noticias · libros · académico · imágenes Este aviso fue puesto el 1 de noviembre de 2015. |
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:[1]
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:[1]
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:[1]
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 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
- IBM PC ROM BIOS
- Controlador de disquete
- Unidad de disquete
- disquete
Referencias
- ↑ a b c Bose, Sanjay K. (1996). Hardware and Software of Personal Computers (en inglés). New Age International. p. 84.
Enlaces externos
- Lista completa y explicada de la interrupción 13h (en inglés)
Datos: Q4272362