Už je tady další číslo tý hergot-kruci fobie a kdybyste věděli, jakej kartáč jsem dostal za svůj poslední článek, tak už byste se neodvážili ani podepsat, natož si vylepšit reputaci další katastrofou. V můj prospěch mluví akorát poslední školní slohovka na kterou jsem dostal 1* (tímto zdravím i pana Umberta Eca, který mi svou geniální knihou poskytnul jakous-takous látku na slohovku).
Takže dneska se budu zabývat něčím úplně jiným, než Delphama, který nikoho, podle slov našeho šéfredaktora, nezajímají. Vyšel jsem z předpokladu, že Pascal jste se všichni aspoň trochu naučili, a proto jsem se rozhodl, že vás naučím jak si zkontrolovat svoje diskety pětkrát rychleji, než to zvládá DiscDoctor. Bude to primitivní. Vyrobíte si vlastní verifikovací program s několika assemblerovskýma instrukcema. Dodávám, že zdroják bude v textu kompletní a nemusíte se proto obávat nějakých programátorských zákysů. Takže si to rozeberem podrobně:
Pár údajů o disketách: Diskety se skládají z | - povrchů |
- stop | |
- sektorů |
Povrchy jsou u 1.44 M diskety 2, stop je 80 a sektorů na stopu je 18. Jeden sektor má 512 B.
Uses Crt,Dos;
Var
a,b,c,d,e,p,s : byte;
pocpov, pocver, pocstp : byte;
kodchba, povrch, sektor, stopa, mechanika : byte;
label 1,2,3;
begin ClrScr;
asm
mov ah,08 { těmito třemi řádky jsem zavolal funkci na zjištění}
mov dl,00 { parametrů diskety, přitom mov dl,00 znamená jednotku}
int $13 { jednotku A (pokud B tak místo 00 dejte 01) }
mov povrch, dh
mov stopa, ch { do proměnných se umístí max. hodnoty}
mov sektor, cl
end;
p := povrch + 1; { drobná úprava (začínalo se od nuly) }
s := stopa + 1;
GotoXY(1,2); WriteLn(' Disketa ma ',p,' povrchy ') ;
WriteLn(' ',s,' stop a ',sektor, ' sektoru') ;
GotoXY(1,5); WriteLn(' Zacinam verifikovat na 0 stope 0 povrchu' );
GotoXY(1,8);
asm
mov ah,04h
mov dl,00
mov dh,00 { verifikuje se nultá stopa, nultého povrchu (18 sektorů)}
mov ch,00
mov cl,1
mov al,17
int 13h
end;
{Cyklus který snad každý pochopí. Nejdřív nultý a potom první povrch. }
For pocpov := 0 to povrch do begin
For pocstp := 0 to stopa do
begin asm
mov ah,04h
mov dl,00
mov dh,pocpov
mov ch,pocstp
mov cl,1
mov al,sektor
int 13h
mov kodchba,ah
mov pocver,al
mov a,dh
mov b,ch
mov c,al
end ;
{Nasledující řádky zkontrolují platnost provedené operace, a pokud je chyba číslo 128, není v mechanice disketa.}
If kodchba = 128 then begin WriteLn(' Mechanika neni pripravena');
Delay(1000);
Goto 1 ;
end;
{Teď napíše na obrazovku, kolik sektorů na které stopě a povrchu zrovna verifikoval.}
Write(' verifikuji ',c,' sektoru na ',b,' stope ',a,' povrchu ');
{Když je chyba sektoru, napíše "vadny sektor".}
If kodchba > 00 then WriteLn(' vadny sektor') else WriteLn(' O K ');
if keypressed then Halt(1);
end;
end;
1:
end.
Přeju mnoho srandy s verifikováním !!!!
Steve