Obsah
- Přerušení
Int 13h - IO diskú
Int 13h lze použít pouze na malý disky. Velký disky používají LBA.
Reset řadiče disků: ah = 0, int 13h
Kód chyby: ah = 1, int 13h, ErrorCode = ?
- 0: OK
- 1: Špatnej příkaz
- 2: Nenalezená značka sektoru
- 3: Disketa je chráněná proti zápisu
- 4: Sektor nenalezen
- 5: Chyba při resetování řadiče
- 6: Disketa byla vyměněna
- 0Ah = 10: Špatnej sektor (HD)
- 0Bh = 11: Špatná stopa (HD)
- 0Dh = 13: Špatnej počet sektorů při formátování (HD)
- 10h = 16: Chyba CRC
- 20h = 32: Chyba řadiče
- 40h = 64: Chyba při vystavování hlaviček
- 80h = 128: Timeout
Číst sektor: ah = 2, al = počet_sektorů, cl = číslo sektoru, ch =
stopa, dh = povrch, dl = disk, [es:bx] = cíl, int 13h, jc => ErrorCode = ah
- Všechny sektory musej bejt na stejný stopě.
- Sektory se číslujou od 1, povrchy a stopy od 0. Bity 6 a 7 čísla
sektoru jsou horní bity stopy.
- U pevnejch disků nejde o stopy a povrchy, ale o válce a hlavy. Princip
je stejnej.
- Disk: 0 = A:, 1 = B:, 128 = první pevnej disk, 129 = druhej pevnej disk.
- Cíl musí bejt velký 512 * počet_sektorú.
- Pokud je nastavenej příznak CF (jc), došlo k chybě a v ah je kód chyby
(viz výš).
Zapsat sektor: ah = 3, al = počet_sektorů, cl = číslo sektoru, ch =
stopa, dh = povrch, dl = disk, [es:bx] = data, int 13h, jc => ErrorCode = ah
Kontrola CRC: ah = 4, al = počet sektorů, cl = číslo sektoru, ch = stopa,
dh = povrch, dl = disk, int 13h, jc => ErrorCode = ah.
Nastavit typ diskety pro formátování: ah = 17h, al = DiskDriveType, dl =
disk, int 13h, jc => ErrorCode = ah.
- DiskDriveType = 1: Disketa 360 KB v mechanice 360 KB.
- DiskDriveType = 2: Disketa 360 KB v mechanice 1.2 MB.
- DiskDriveType = 3: Disketa 1.2 MB v mechanice 1.2 MB.
- DiskDriveType = 4: Disketa 720 KB v mechanice 720 KB nebo 1.44 MB.
- DiskDriveType = 5: Disketa 1.44 MB v mechanice 1.44 MB.
Formátovat stopu: ah = 5, ch = stopa, dh = povrch, dl = disk, [es:bx] =
TrackDescriptorTable, int 13h, jc => ErrorCode = ah.
- TrackDescriptorTable = {byte stopa, povrch, číslo_sektoru,
typ_velikost_sektoru} * počet_sektorů_na_stopě.
- typ_velikost_sektoru: 0 - 128 B, 1 - 256 B, 2 - 512 B, 3 - 1024 B, obvykle
2.
Parametry disku: ah = 8, dl = disk, int 13h, jc => ErrorCode = ah, FD
=> DriveType = bl, stop = ch, sektorů = cl, povrchů = dh, fyzickejch zařízení
= dl.
- DriveType: 1 - 360 KB, 2 - 1.2 MB, 3 - 720 KB, 4 - 1.44 MB.
Test připravenosti mechaniky: ah = 10h, int 13h, ?
Rekalibrace pevnýho disku: ah = 11h, int 13h, ?
Zistit typ disku: ah = 15h, int 13h, ?
Test otevřenejch dvířek mechaniky: ah = 16h, int 13h, ?