Attenzione: le seguenti informazioni sono state scritte molti anni fa...
Il primo settore del disco (sett. 1, traccia 0, faccia 0) è il boot sector; sui floppy occupa quindi 512 bytes. Contiene le informazioni relative al tipo di formattazione e le istruzioni necessarie per il caricamento del DOS (se il disco è stato formattato con l'opzione /S).
Il boot sector termina con il codice ASCII 55 (AAH).Negli Hard disk si trova all'inizio di ciascuna partizione bootabile.
| HEX | OFFSET | LUNGHEZZA | DESCRIZIONE | NOTE |
|---|---|---|---|---|
| 00H | 0 | 3 byte | inizio programma di caricamento | E9 xx xx oppure EB xx 90 |
| 03H | 3 | 8 byte | identificativo del sistema | (MSDOS5.0) |
| 0BH | 11 | 1 parola | numero di bytes per settore | < BPB (512) |
| 0DH | 13 | 1 byte | numero di settori per cluster | < Bios Parameters block (8) |
| 0EH | 14 | 1 parola | numero di settori riservati all'inizio | < " (1) |
| 10H | 16 | 1 byte | numero di copie della FAT | < " (2) |
| 11H | 17 | 1 parola | numero di voci della directory radice | < " (512) |
| 13H | 19 | 1 parola | numero totale dei settori sul disco | < " (non usato) |
| 15H | 21 | 1 byte | ID del formato del dischetto | < " (vedi tabella) |
| 16H | 22 | 1 parola | numero di settori assegnati alla FAT | < " (.. |
| 18H | 24 | 1 parola | numero di settori per traccia | (bios) |
| 1AH | 26 | 1 parola | numero di lati / testine | (bios) |
| 1CH | 28 | 1 parola | numero di settori speciali riservati | (bios) |
| 20H | 32 | 5 byte | N. totale settori | (=Partition Table) |
| 24H | 36 | 2 byte | n. drive fisico | (su HD = 128) |
| 26H | 38 | 1 byte | ID record avviamento | (su HD = 29H |
| 27H | 39 | 4 byte | n. di serie asseganto alla formattazione | - |
| 2BH | 43 | 11 byte | etichetta volume | (comando label) |
| 36H | 54 | 8 byte | ID file system | (FAT16) |
| 3EH | 62 | -- | resto del programma di caricamento | - |
| capacitá | codice esadecimale | descrizione |
|---|---|---|
| 360 Kb | FDH | 9 settori 40 tracce 512 bytes per settore |
| 720 Kb | F9H | 9 settori 80 tracce 512 bytes per settore |
| 1.2 Mb | F9H | 15 settori 80 tracce 512 bytes per settore |
| 1.44 Mb | F0H | 18 settori 80 tracce 512 bytes per settore |
| ---- | F8H | disco fisso |
Nei dischi fissi il primo settore fisico si chiama Master Boot Record (MBR) e vi si trova la PARTITION TABLE, che contiene le informazioni necessarie per la identificazione delle dimensioni logiche dei dischi (o partizioni) ed un programma di boot capace di ricercare una partizione bootabile, di leggervi il boot sector e di trasferirgli il controllo. (Il boot sector vero e proprio, ovvero il programma di caricamento del sistema operativo, si trova all'inizio di ogni partizione bootabile).
La partition table può contenere al massimo quattro voci.
| offset | dimensioni | descrizione | |
|---|---|---|---|
| 01BEH | 16 bytes | partizione n.4 | |
| 01CEH | 16 bytes | partizione n.3 | |
| 01DEH | 16 bytes | partizione n.2 | |
| 01EEH | 16 bytes | partizione n.1 | |
| 01FEH | 16 bytes | sigla AA55H (fine della tavola di partizione) |
Le partizioni sono disposte in ordine inverso.
Ogni voce della tabella precedente contiene queste informazioni:
| n | offset dalla prima voce | dimensioni | descrizione | |
|---|---|---|---|---|
| 1 | 00H | 1 byte | indicatore del boot | |
| 2 | 01H | 1 byte | testina iniziale 1 | |
| 3 | 02H | 1 byte | settore iniziale 0 | |
| 4 | 03H | 1 byte | cilindro iniziale 1 | |
| 5 | 04H | 1 byte | indicatore del sistema | |
| 6 | 05H | 1 byte | testina finale valore bios -1 | |
| 7 | 06H | 1 byte | settore finale valore bios | |
| 8 | 07H | 1 byte | cilindro finale valore bios -2 | |
| 9 | 08H | 4 bytes | settore iniziale (rispetto all'inizio del disco) valore bios | |
| 10 | 0CH | 4 bytes | numero di settori della partizione (*) | |
| (*) (n. faccia finale+1 * n. cilindro finale+1 * n. settori)-n. settori relativi | ||||
l'indicatore del boot è 00H in una partizione non bootabile e 80H in una partizione bootabile attiva. (Per attivare o disattivare una partizione si usa FDISK)
| HEX | descrizione |
|---|---|
| 00H | non noto |
| 01H | MS-DOS, FAT a 12 bit |
| 02H | MS-DOS, FAT a 16 bit |
| (*) (n. faccia finale+1 * n. cilindro finale+1 * n. settori)-n. settori relativi | |
Nel secondo settore, il numero 1 si trova la FAT che inizia con il codice di identificazione del formato del disco (visto prima).
La voce successiva varia a seconda del tipo di FAT utilizzato, a 12 od a 16 bit.
Si troveranno i bytes FF FF nella seconda e terza posizione di una FAT a 12 bit; si troveranno o bytes FF FF FF nella seconda, terza e quarta posizione di una FAT a 16 bit.
La FAT occupa più settori ed in genere ne esiste una copia di riserva che viene continuamente aggiornata ma che non ha un uso pratico da parte del DOS, a parte il controllo delle corrispondenze dei dati tra le varie copie.
Per il suo uso in caso di danneggiamento della prima copia della FAT sono necessarie cognizioni avanzate o programmi specializzati.
La FAT contiene la mappa delle posizioni dei files all'interno del disco indicando quali cluster sono assegnati a ciascun file ed in quale ordine.
Per fare ciò nella directory, fra le informazioni relative a ciascun file, c'è l'indicazione del primo cluster dedicato a quel file.
Nella FAT c'è una corrispondenza 1 a 1 tra posizione nella FAT e numero di cluster.
In pratica vi è una tavola con una voce per ogni cluster dell'area dati del disco.
Il numero contenuto in ciascuna voce indica che il cluster corrispondente è libero od è occupato od è contrassegnato come difettoso.
Se il cluster è occupato, viene registrato il numero del cluster successivo appartenente al file e così via fino alla fine del file contrassegnato da un cluster con il codice FFFH oppure FFFFH a secondo del tipo di FAT.
Quando il file viene cancellato, le voci della FAT che contengono la catena dei cluster vengono portate a 0.
Il programma CHKDSK del DOS controlla l'integrità di queste catene (chain cluster).
| Valore HEX | Descrizione | |
|---|---|---|
| AAH 55 | fine boot record (il byte successivo è il primo della FAT, corrisponde allo ID del formato) | |
| FFFH | fine file per FAT a 12 bit | |
| FFFFH | fine file per FAT a 16 bit | |
| FF7H | cluster danneggiato per FAT a 12 bit | |
| FFF7H | cluster danneggiato per FAT a 16 bit | |
| FF0H-FF6H | riservato per FAT a 12 bit | |
| FFF0H-FFF6H | riservato per FAT a 16 bit | |
| 001H | codice non utilizzato | |
| 00H | cluster non utilizzato | |
La numerazione dei cluster nella FAT a 12 bit viene fatta utilizzando 1 byte e mezzo. Questo comporta una leggera complicazione per quanto riguarda l'esame della FAT.
In pratica, ricordando che le parole (ovvero 2 bit) si leggono in ordine inverso, e che prendiamo in esame solo 3/4 delle cifre che compongono la parola, leggeremo prima il secondo byte scartando la prima cifra, poi leggeremo il primo byte. Il nibble (mezzo byte) scartato verrà letto come parte del numero di cluster seguente, sempre seguendo il principio di leggere prima il secondi byte e poi il primo.
| F9 | FF FF | 03 | 04 | 00 | FF | 0F | 00 |
| F9 | FF FF FF | 03 00 04 00 | FF FF | 00 00 |
| ID | Tipo di fat 16 bit | cluster occupati | ultimo cluster | libero |
Le dimensioni dei cluster possono creare qualche inconveniente. Siccome ogni cluster può essere adibito ad un solo file, se ho un file di 100 bytes ed una dimensione di cluster di 4096 bytes, io avrò uno spreco di 3996 bytes inutilizzati. Questo avviene anche se il cluster finale di un file non viene riempito completamente.
La mancanza di alimentazione su un computer può causare dei danni alla FAT od alla directory. Ecco una lista di possibili errori che possono causare anche gravi problemi nell'uso del PC.
| mancanza di una voce della directory che rimandi ad una catena di cluster nella FAT. Questo può avvenire se il file non viene chiuso correttamente. |
| discordanza tra la lunghezza del file dichiarata dalla directory e l'effettiva lunghezza calcolata dalla catena dei cluster nella FAT. |
| una parte di una catena dei cluster è dichiarata fare parte contemporaneamente di due file (cross linked). |
| la catena dei cluster termina con un cluster libero e non con il codice di fine del file. |
| in un link viene riportato un numero di cluster al di fuori dei limiti. |
La root directory, o directory principale, contiene l'elenco dei files registrati sul supporto magnetico. Per ogni files vengono usati 32 bytes che contengono nome, estensione, data ed ora dell'ultima modifica, lunghezza, cluster iniziale, attributi.
Questa struttura è stata ereditata dal CP/M, il sistema operativo da cui ha tratto spunto MS-DOS.
Ogni posizione all'interno di questi 32 byte ha un preciso significato. Inoltre alcuni campi possono contenere dei valori particolari, mentre altri campi sono codificati per ottimizzare l'occupazione dello spazio.
| campo | offset | descrizione | dimensioni | formato |
|---|---|---|---|---|
| 1 | 0 | nome del file | 8 | caratteri ASCII |
| 2 | 8 | estensione | 3 | caratteri ASCI |
| 3 | 11 | attributo | 1 | codifica binaria |
| 4 | 12 | riservato | 10 | contiene il valore 0 |
| 5 | 22 | ora | 2 | parola, codificato |
| 6 | 24 | data | 2 | parola, codificato |
| 7 | 26 | voce iniziale FAT | 2 | parola |
| 8 | 28 | dimensioni | 4 | intero |
Il campo 1 contiene il nome dl file, di 8 caratteri. Se il nome è più corto, vengono aggiunti degli spazi (carattere ASCII 32). Il nome viene scritto in maiuscolo, perché le minuscole non vengono riconosciute. Solo un parte del set di caratteri a disposizione può essere utilizzato nel nome del file. Non possono essere inseriti spazi all'interno del nome del file, anche se con opportuni accorgimenti è possibile utilizzare sia le minuscole che caratteri speciali ( ad esempio in BASIC). Nel primo byte del campo del nome possono trovarsi 3 codici:
| valore | descrizione |
|---|---|
| 0 | Voce di directory nulla. E' l'ultima voce della directory ed indica di non procedere nella ricerca |
| 0E5H | File cancellato |
| 02EH | Non è un file, ma una directory. Se anche il secondo byte è 02EH si tratta della directory di origine del presente indirizzario |
Quando il file viene cancellato, il primo carattere del nome viene sostituito con il codice 0E5H e nella FATviene azzerata la catena dei cluster che lo compongono. Il DOS, quando crea un nuovo file, ricicla la prima voce cancellata che trova nella directory.
Il campo 2 contiene il suffisso del nome, di tre caratteri. Può contenere anche solo spazi. Quando la voce contiene il nome dell'etichetta del disco, i campi nome ed estensione vengono visti come un unico campo di 11 caratteri che può contenere anche spazi e lettere minuscole.
Il campo 3 contiene la codifica degli attributi del file. Convertendo il byte esadecimale in binario, ogni bit ad 1 identifica una caratteristica del file secondo la tabella
| bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | significato | note |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | solo lettura | se settato impedisce le modifiche del file | |
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | file nascosto | non permette di vedere il file con DIR, etc. | |
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | file di sistema | identifica i files di sistema ma non ha un uso particolare | |
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | etichetta volume | se settato indica che si tratta dell'etichetta del disco | |
| 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | sub directory | indica che si tratta di una subdirectory | |
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | archiviazione | se a 1 indica che il file è stato modificato dopo l'ultimo backup. S è a 0 non ha subito modifiche | |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | non usato | ||
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | non usato |
Il campo 4 è di 10 bytes a zero, riservati per usi futuri
I campi 5 e 6 contengono l'ora e la data di creazione del file o della sua modifica.
Il metodo per il calcolo dell'ora è il seguente:
-Prendere la parola che contiene l'ora. es. 43 4E
-Invertire i due byte. es. 4E 43
-Trasformare ciascun nibble in binario. es. 0100 1110 0100 0011
-Prendere le cifre in binario in gruppi, a partire da destra, rispettivamente di 5, 6, 5 bit. (es. 01001 110010 00011)
-Trasformare ciascun gruppo in decimale. es. 9 50 3
- Moltiplicate per 2 l'ultimo gruppo. es. 09: 50: 06
- Si sono ottenute l'ora, i minuti ed i secondi con una approssimazione di 2 secondi.
La formula inversa è:
ORA=SECONDI/2+32*MINUTI+2048*ORE
trasformare il risultato in esadecimale ed invertire i byte per ottenere la parola.
Il metodo per il calcolo del giorno è il seguente:
-Prendere la parola che contiene i giorno. es. 65 08:
-Invertire i due byte. es. 08 65:
-Trasformare ciascun nibble in binario. es. 0000 1000 0110 0101 :
-Prendere le cifre in binario in gruppi, a partire da destra, rispettivamente di 7, 4, 5 bit.:
es. 0000100 0011 00101:
-Trasformare ciascun gruppo in decimale. es. 4 3 5:
- Aggiungere 1980 alla prima cifra . es. 1980+4 3 5 = 5 marzo 1984:
- Si sono ottenute l'anno, il mese ed il giorno.:
La formula inversa è:
-Prendere l'anno e sottrarre 1980
-Trasformarlo in binario ed aggiungere davanti tanti 0 quanti ne occorrono per avere un gruppo di 7 bit.
- Prendere il mese e trasformarlo in binario
- Prendere il giorno e trasformarlo in binario
- Leggere le cifre a gruppi di 4 bit e trasformarle in esadecimale
- Invertire le prime due cifre con le seconde due per ottenere la parola
:
[***formula da rivedere: (DATA=GIORNO+32*MESE+512*(ANNO-1980))***]
Il campo 7 contiene il numero di cluster iniziale del file, e serve per indirizzare l'inizio della catena di cluster nella FAT. Se il file ha lunghezza nulla e per etichette di volume contiene il valore 0:
.
Per la voce '.' (punto, cioè la stessa directory) questo campo contiene il numero di cluster iniziale della directory stessa. Per la voce ' ..' (puntopunto, cioè la directory padre della stessa directory) contiene il valore 0 se si tratta della root directory, il numero di cluster iniziale se si tratta di una sottodirectory.
Formula per la trasformazione della numerazione sequenziale DOS in coordinate tridimensionali del ROM-BIOS
SETTORE.BIOS=1+NUMERO.DI.SETTORE.DOS MOD SETTORI.PER.LATO:
LATO.BIOS=(NUMERO.DI.SETTORE.DOS / SETTORI.PER.LATO) MOD LATI.PER.DISCO:
TRACCIA.BIOS=NUMERO.DI.SETTORE.DOS / (SETTORI.PER.LATO * LATI.PER.DISCO):