Vývoj operačného systému/Bootloader po druhé - práca s diskovými jednotkami: Rozdiel medzi revíziami

Smazaný obsah Přidaný obsah
Riadok 73:
| Cylindre || 10 || 1023 || 1024
|-
| Sektory || 6 || 63 || 63 <ref name="stupid-floppy-sectors">Kým pri ostatných častiach adresy sa označujú prvky od 0 (ako je to zvykom), pri sektoroch začína 1. Preto je maximálnemaximálna hodnota zároveň limitom počtu prvkov. Pri práci so zariadeniami ATA(IDE) je možné vybraťzískať limity vo formáte CHS rovnako ako v LBA. Môže sa však stať, že zariadenie bude rátať s existenciou nultého sektoru. Preto sa viac oplatí používať adresovanie LBA, kde taktiež netreba zabudnúť na nultý sektor.</ref>
|-
| Veľkosť jedného sektoru || - || - || 512
Riadok 80:
|}
<references />
Tieto hodnoty pre adresovanie samozrejme nestačili pokryť rýchly vývoj v oblasti úložných zariadení, a tak sa do BIOSu pridali nové funkcie (známe aj ako rozšírenia prerušenia 19 - ''INT 13h Extensions''). Rozšírené funkcie používajú adresovanie LBA, čím sa značne navýšili viaceré limity zariadení.
 
Úložné zariadenia majú v celom BIOSe jednoduché (a zároveň momentálne ťažko prakticky využiteľné) označenie, ktoré sa ukladá do jedného 8-bitového čísla (ktoré sa často/zvyčajne nachádza v registri DL). V dnešnej dobe je ťažké doplniť doň nové druhy zariadení, a preto sa tento formát v dnešných operačných systémoch nepoužíva.
Riadok 166:
<references />
==Použitie funkcii==
===Funkcie 00 a 01===
Kedže je reštartovanie disku jednou z jeho funkcií (00), je možné overiť si úspech tejto operácie použitím funkcie 01. Zároveň sa odporúča overiť (reálne<ref name="real_device_vs_virtual_device">Na virtuálnych zariadeniach sa tento problém pochopiteľne veľmi nevyskytuje</ref>) zariadenie niekoľkokrát (asi 3x).
<syntaxhighlight lang="asm">
BITS 16
xor cl, cl ;počítadlo = 0
xor dl, dl ;zariadenie = 0 = prvá disketa ('A:')
 
.again:
inc cl ;počítadlo+1
cmp cl, 5 ;ak počítadlo 3+1
jz .fatal ;disketa naozaj nefunguje
xor ah, ah ;funkcia 00: reštartovanie zariadenia
int 0x13 ;prerušenie 0x13: práca s úložnými zariadeniami
mov ah, 01 ;funkcia 01: získanie stavu poslednej operácie
int 0x13 ;rerušenie 0x13
test ah, ah ;ak AH=0 (stav = 0, úspech)
jnz .again ;pokračuj, inak vyskúšaj overenie zariadenia ešte raz
.fatal: ;informuj o výskyte chyby
</syntaxhighlight>
===Funkcie 02 a 03===
Úložné zariadenia ani BIOS neposkytujú možnosť kopírovania sektorov z jedného miesta na druhé<ref name="its_not_really_possible">Vo všeobecnosti taká operácia v oblasti pamäte nie je možná vôbec (teda ak nerátame rôzne čipy schopné podržať informácie kým sa spracujú)</ref>. Preto je nutné využiť na tento účel funkcie ktoré poskytujú (čítanie 02 a zápis 03) a dáta dočasne ukladať v pamäti RAM.
 
V nasledujúcom kóde sú informácie o zdroji a cieli kopírovania uložené v pamäti a do funkcie sa dodáva len ich adresa (+ počet sektorov na kopírovanie, rátajúc s tým že jeden sektor má 512 bajtov). Štruktúra zdroja a cieľa v pamäti pre tento prípad vyzerá asi takto:
<references />
 
=Podrobné zdroje=