Verificarea corectitudinii structurii fișierului tr-dos

Din diverse motive (operațiuni de întrerupere de disc legate de disc, utilizați programe, de lucru cu discul greșit, acțiunile eronate ale utilizatorului atunci când editarea manuală a catalogului, etc.), structura de fișiere a discului TR-DOS poate fi incorectă.







În cazul în care programul funcționează cu discul nu validează structura fișierului (în general, și ea TR-DOS nu face # 151; doar un octet special în sectorul serviciilor este verificat, indicând dreptul de proprietate asupra discului TR-DOS), atunci lucrul cu discul "greșit" poate, în general, să ducă la consecințe imprevizibile. Distrugerea posibilă a programului în memorie și pierderea informațiilor de pe disc. Și dacă, să zicem, în catalog pentru unele fișier incorect specificat dimensiunea sau numărul piesei / sectorul inițial, apoi încercarea de a lucra cu acest fișier ar putea teoretic duce chiar la deteriorarea unității atunci când încearcă să poziționeze o piesă inexistentă.

În mod evident, detectarea în timp util a erorilor în structura fișierelor ar fi foarte utilă. Deci, avem nevoie de o procedură care verifică corectitudinea directorului de discuri. Această procedură poate fi utilizată într-un program special de test drive, și, în general, în orice program care funcționează cu discul: dacă ați citit catalog și verifica valabilitatea acestuia înainte ca operațiunile de disc, acest lucru va ajuta la evitarea oricăror consecințe neplăcute, dar în cazul în care programul efectuează operațiuni legate de înregistrare pe disc, care lucrează direct cu directorul, apelul acestei proceduri vor fi utile înainte de a scrie directorul modificat pe unitatea: în cazul în catalog înregistrat nu este corect din cauza unei erori în program, acesta va fi o sumă CPA zu a observat de asemenea. Programul dvs. se va verifica astfel!







Voi descrie pe scurt formatul discurilor TR-DOS # 151; această informație este utilă pentru înțelegerea logicii programului.

Pe fiecare pistă (numerotate de la 0) există 16 sectoare (și numerotate cu 0). Durata fiecărui sector # 151; 256 (# 100) octeți.

Pentru utilizarea sistemului de cale alocat zero, iar regiunea de la prima pistă până la sfârșitul discului este utilizat pentru a stoca conținutul fișierelor.

În sectoarele 0 # 151; 7 din piesa zero există intrări de directoare care conțin informații despre fișierele înregistrate pe disc. Fiecare element al directorului ocupă 16 octeți, structura acestuia fiind descrisă în Tabelul. 1.

Deplasați-vă de la început

Numele discului (în general, poate ocupa toate cele 11 octeți până la sfârșitul sectorului).

Mai întâi am scris o funcție care verifică corectitudinea directorului în C (utilizând compilatorul Turbo C 2.0) și apoi l-a transferat la asamblatorul Z80. Pe de o parte, acest lucru mi-a făcut mai ușoară testarea și depanarea, iar pe de altă parte # 151; prezența unei funcții C va ajuta pe cei care doresc să adăugați un director verifica corectitudinea programului de a lucra cu discuri TR-DOS (sau fișiere imagine astfel de discuri), nu pe ZX Spectrum, și, de exemplu, pe Amiga sau PC.

În principiu, putem considera al doilea parametru egal cu 40, 80 sau 160 de piste, în funcție de tipul de disc (vezi Tabelul 2), și îl definim în funcția însăși. Decizia de a transfera acest parametru în apelul funcției a fost făcută având în vedere faptul că a fost posibil pentru a verifica discurile formatate pe un număr mai mare de piese decât cea implicată de valorile tipului de disc, precum și RAM-discuri, numărul de piese pe care este determinată de volumul alocat pentru memoria lor.

Funcția returnează o valoare de două octeți, în care octetul cel mai puțin semnificativ # 151; fie 0 dacă nu sunt detectate erori, fie un cod de eroare (vezi Tabelul 3) și octetul înalt # 151; numărul elementului de catalog (numerotat de la 0), atunci când se analizează ce eroare a fost detectată (pentru acele coduri de eroare marcate cu "*" în prima coloană din Tabelul 3). Dacă există mai multe erori în director, valoarea returnată de funcție va corespunde primei erori detectate.







Trimiteți-le prietenilor: