# INT 13h

INT 13h és l'abreviatura de la crida d'interrupció de la BIOS 13$_{hex}$, el 20è vector d'interrupció en un sistema informàtic basat en x86 (descendent de PC IBM). La BIOS normalment configura un controlador d'interrupcions en mode real en aquest vector que proporciona serveis de lectura i escriptura de disc dur i disquet basats en sectors mitjançant l'adreçament del sector de la culata (CHS). Les BIOS de PC modernes també inclouen funcions d'extensió INT 13h, creades per IBM i Microsoft el 1992, que proporcionen aquests mateixos serveis d'accés al disc mitjançant adreçament LBA de 64 bits; amb petites addicions, aquestes van ser quasi estandarditzades per Phoenix Technologies i altres com les extensions de BIOS EDD (Enhanced Disk Drive).
INT és una instrucció x86 que desencadena una interrupció de programari, i 13$_{hex}$ és el número d'interrupció (com a valor hexadecimal) que es crida.
Els ordinadors moderns inclouen tant la funcionalitat BIOS INT 13h com la UEFI que ofereixen els mateixos serveis i més, a excepció de la UEFI Class 3 que elimina completament CSM, per la qual cosa no té INT 13h i altres interrupcions. Normalment, els controladors UEFI utilitzen l'adreça LBA en lloc de l'adreçament CHS.

## Visió general

En sistemes operatius en mode real, com ara DOS, cridar a INT 13h saltaria al codi ROM-BIOS de l'ordinador per a serveis de disc de baix nivell, que duria a terme operacions de lectura o escriptura de disc basades en el sector físic per al programa. A DOS, serveix com a interfície de baix nivell per als controladors de dispositiu de blocs integrats per a discs durs i disquets. Això permet que INT 25h i INT 26h proporcionin funcions absolutes de lectura/escriptura de disc per a sectors lògics al controlador del sistema de fitxers FAT al nucli DOS, que gestiona les sol·licituds relacionades amb fitxers mitjançant les funcions de l'API DOS (INT 21h).
Totes les versions de MS-DOS (incloent MS-DOS 7 i Windows 95) tenen un error que impedeix arrencar unitats de disc amb 256 capçals (valor de registre 0xFF), de manera que moltes BIOS modernes proporcionen mapes de traducció CHS amb com a màxim 255 capçals (0xFE)., reduint així l'espai adreçable total a exactament 8032,5 MiB (uns 7,844 GiB).
Per donar suport a l'adreçament de discs encara més grans, IBM i Microsoft van introduir una interfície coneguda com a INT 13h Extensions, que després van tornar a publicar i una mica ampliada per Phoenix Technologies com a part dels serveis d'unitat de disc millorat (EDD) de la BIOS. Defineix noves funcions dins del servei INT 13h, totes amb números de funció superiors a 40h, que utilitzen l'adreçament de blocs lògics (LBA) de 64 bits, que permet adreçar fins a 8 ZiB. (Una unitat ATA també pot suportar LBA de 28 o 48 bits que permet fins a 128 GiB o 128 PiB, respectivament, suposant una mida de bloc/sector de 512 bytes). Aquesta és una interfície de "paquet", perquè utilitza un punter a un paquet d'informació en lloc de la convenció de crida basada en registre de la interfície INT 13h original. Aquest paquet és una estructura de dades molt senzilla que conté una versió d'interfície, mida de dades i LBA. Per a la compatibilitat enrere del programari, les funcions ampliades s'implementen juntament amb les funcions CHS originals, i les crides a funcions dels dos conjunts es poden barrejar, fins i tot per a la mateixa unitat, amb l'advertència que les funcions CHS no poden superar els primers 8064 MB del programari. disc.

## Exemple de serveis INT 13h

Taula de funcions:
| AH = 00h | | Restableix el sistema de disc |
| AH = 01h | | Obteniu l'estat de l'operació de l'última unitat |
| AH = 02h | | Llegeix Sectors des de Drive |
| AH = 03h | | Escriu sectors per conduir |
| AH = 04h | | Verificar Sectors |
| AH = 05h | | Format de pista |
| AH = 06h | | Pista de format Establir banderes de sector incorrecte |
| AH = 07h | | Formateja la unitat començant a la pista |
| AH = 08h | | Llegeix els paràmetres de la unitat |
| AH = 09h | HD | Inicialitzar el controlador de disc |
| AH = 0Ah | HD | Llegeix Sectors llargs de Drive |
| AH = 0Bh | HD | Escriu sectors llargs per conduir |
| AH = 0Ch | HD | Mou el capçal de la unitat al cilindre |
| AH = 0Dh | HD | Restablir unitats de disc |
| AH = 0Eh | PS/2 | Prova de lectura del controlador |
| AH = 0Fh | PS/2 | Prova d'escriptura del controlador |
| AH = 10h | HD | Proveu si la unitat està a punt |
| AH = 11h | HD | Recalibra la unitat |
| AH = 12h | PS/2 | Prova de memòria RAM del controlador |
| AH = 13h | PS/2 | Prova de conducció |
| AH = 14h | HD | Diagnòstic del controlador |
| AH = 15h | | Llegiu el tipus de unitat |
| AH = 16h | FD | Detecta el canvi de mitjans |
| AH = 17h | FD | Estableix el tipus de suport per al format (utilitzat per les versions de DOS < = 3.1) |
| AH = 18h | FD | Estableix el tipus de suport per al format (utilitzat per les versions de DOS > = 3.2) |
| AH = 19h | | Caps de parc |
| AH = 41h | EXT | Comproveu si hi ha extensions disponibles |
| AH = 42h | EXT | Llegeix Sectors des de Drive |
| AH = 43h | EXT | Escriu sectors per conduir |
| AH = 44h | EXT | Verificar Sectors |
| AH = 45h | EXT | Bloquejar/Desbloquejar la unitat |
| AH = 46h | EXT | Expulsa la unitat |
| AH = 47h | EXT | Mou el capçal de la unitat al sector |
| AH = 48h | EXT | Llegeix els paràmetres de la unitat |
| AH = 49h | EXT | Detecta el canvi de mitjans |
| AH = 4Bh | EXT | Obteniu el tipus d'emulació de la unitat |

## Referències

* ↑ «How to determine BIOS-provided (INT 13h) hard disk geometry, and how to fix the MBR partition table to agree with it?» (en anglès). [Consulta: 10 setembre 2023].
* ↑ «Int 13/AH=02h» (en anglès), 12-08-2016. Arxivat de l'original el 2016-08-12. [Consulta: 10 setembre 2023].
* ↑ «Int 13/AH=08h» (en anglès), 19-06-2016. Arxivat de l'original el 2016-06-19. [Consulta: 10 setembre 2023].
* ↑ «Int 13/AH=41h/BX=55AAh» (en anglès), 19-06-2016. Arxivat de l'original el 2016-06-19. [Consulta: 10 setembre 2023].