INT 13h

De la Viquipèdia, l'enciclopèdia lliure

INT 13h és l'abreviatura de la crida d'interrupció de la BIOS 13hex, 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).[1]

INT és una instrucció x86 que desencadena una interrupció de programari, i 13hex és el número d'interrupció (com a valor hexadecimal) que es crida.[2]

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.[3]

Visió general[modifica]

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.[4]

Exemple de serveis INT 13h[modifica]

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[modifica]

  1. «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].
  2. «Int 13/AH=02h» (en anglès), 12-08-2016. Arxivat de l'original el 2016-08-12. [Consulta: 10 setembre 2023].
  3. «Int 13/AH=08h» (en anglès), 19-06-2016. Arxivat de l'original el 2016-06-19. [Consulta: 10 setembre 2023].
  4. «Int 13/AH=41h/BX=55AAh» (en anglès), 19-06-2016. Arxivat de l'original el 2016-06-19. [Consulta: 10 setembre 2023].