# Commodore DOS

Commodore DOS, detto CBM DOS, era un sistema operativo per il disco utilizzato dai computer a 8 bit della Commodore. Diversamente dagli altri sistemi DOS, il CBM DOS era integrato nella ROM dei drive floppy e dei rari modelli di disco rigido venduti dalla Commodore.

## Versioni del CBM DOS

* 1.0 - presente nei drive 2040 e 3040;
* 2.0 - presente nei drive 4040 e 3040;
* 2.5 - presente nei drive 8050;
* 2.6 - la versione più comune, integrata nei 1540, 1541, nei drive integrati dell'SX-64, nei 1551, nei 2031/2031LP e nei 4031;
* 2.7 - presente nei drive 8050, 8250/8250LP e SFD-1001;
* 3.0 - presente nei drive 1570, 1571 e 8280 (8 pollici) nonché nelle unità a disco rigido 9060 e 9090;
* 3.1 - presente nelle unità 1571 integrate nei computer C128D/C128DCR;
* 10.0 - presente nei drive per floppy da 3½ pollici 1581.

## Caratteristiche tecniche
### Directory e tipi di file

I dischi floppy possono contenere fino a 144 file. I nomi dei file possono essere lunghi fino a 16 caratteri. Non esistono sotto-directory e i nomi di file devono essere univoci; scrivendo direttamente alla tabella dei blocchi, è possibile avere più file con lo stesso nome. Un trucco molto comune utilizzato, ad esempio, da The Final Cartridge III, era quello di aggiungere nomi di file come "----------------" del tipo DEL< alla directory e poi riordinare tra quelle linee i file per formare dei gruppi. Molti sviluppatori di giochi, gruppi di membri di warez e hacker di demoscene utilizzavano trucchi simili.
C'era un altro trucco curioso: i nomi dei file potevano contenere caratteri composti da Shift+spazio, che veniva usato per creare codice come SAVE "PROGRAM(shift+space),8,1:",8,1, che apparirà nella directory come 32 "PROGRAM",8,1: PRG. Quando l'utente muove il cursore all'inizio della linea e scrive LOAD, sovrascrivendo la colonna della dimensione e premeva il tasto enter, il Commodore BASIC interpreta quella riga come LOAD "PROGRAM",8,1.
Nel BASIC, la directory può essere visualizzata con LOAD "$",8, seguita dal comando LIST.
I seguenti tipi di file sono supportati:
SEQ
    File sequenziali, file che possono essere letti byte per byte o in accesso casuale. Molti dei file sono di questo tipo. Nel BASIC, essi possono essere aperti con il comando OPEN.
PRG
    Simile al tipo SEQ, essi hanno il program location header nei primi 2 byte. Tutti i programmi in BASIC e in linguaggio macchina sono salvati come PRG, e possono essere salvati in memoria con il comando LOAD o la chiamata LOAD del KERNAL.
REL
    File relativi sono file con record di dimensione fissa.
USR
    File personalizzati dall'utente (User-specified files). Essi sono simili al tipo SEQ. Viene utilizzato da alcune applicazioni, la più nota delle quali è il GEOS, che salva i file in formato "VLIR", memorizzati come file USR.
DEL
    Tipo di file non documentato, per uso interno. Strutturalmente, è simile al SEQ. I comandi DOS non possono creare file con questo tipo.
I file che contengono un asterisco * (ad esempio, *SEQ) sono file che non sono stati chiusi correttamente. I file con un segno del < (ad esempio PRG<) sono protetti e non possono essere cancellati.

### Accesso ai file

Nel Commodore BASIC per leggere o scrivere un file si utilizza il comando OPEN, che richiede 4 parametri: il numero del descrittore del file, il numero del device, il numero dell'accesso secondario e il nome del file. Per leggere un file normale si utilizza il comando OPEN 2,8,2,"0:EXAMPLE FILE,SEQ,READ". Il numero 8 si riferisce al primo drive floppy. Su sistemi a due drive, il 9 si riferisce al secondo drive. Dopo il nome del file c'è il tipo del file e la modalità d'accesso (READ, WRITE o APPEND). Questi campi possono essere abbreviati alla loro prima lettera (ad esempio OPEN 2,8,2,"0:EXAMPLE FILE,S,R")
I file possono essere caricati e salvati con i comandi LOAD e SAVE. Il comando SAVE "FILE",8,1 salva il programma BASIC con l'estensione PRG e il comando SAVE "0:FILE,SEQ,WRITE",8,1 salva il programma BASIC con l'estensione SEQ.

### Command channel

Per accedere al DOS si utilizza il command channel. Questo canale è come un normale file, ma si utilizza il 15 come numero dell'accesso secondario.
È possibile conoscere lo stato del drive scrivendo i comandi OPEN 15,8,15: INPUT#15,E,E$,T,S: CLOSE 15: PRINT E,E$,T,S. E è il codice d'errore, E$ è il messaggio d'errore, T e S rappresentano la traccia e il settore dove è stato trovato l'errore. Il codice 0,"OK",0,0 indica che non vi è stato alcun errore. All'accensione, il drive restituisce la versione del DOS e il modello del drive: 73,"CBM DOS V2.6 1541",0,0.
I comandi per la gestione del disco si scrivono attraverso il command channel: OPEN 15,8,15,"N0:WIKIPEDIA DOCS,WP":CLOSE 15, questo comando effettuerà una formattazione del disco e lo nominerà come "WIKIPEDIA DOCS" con l'ID "WP".
Alcuni comandi caratteristici sono:
NEW0:DISKNAME,ID o N0:DISKNAME,ID
    Formatta il disco. Il nome del disco può avere un massimo di 16 caratteri e il codice ID 2 caratteri. Il codice ID dovrrebbe essere unico per ogni disco.
SCRATCH0:FILE NAME o S0:FILE NAME
    Elimina il file. I caratteri d'espansione ? e * sono supportati.
RENAME0:NEW NAME=OLD NAME o R0:NEW NAME=OLD NAME
    Rinomina il file.
COPY0:NEW NAME=EXISTING NAME o C0:NEW NAME=EXISTING NAME
    Copia il file.
VALIDATE0 o V0
    Marca come liberi tutti i blocchi non marcati o non utilizzati da nessun file ed elimina tutti i file non chiusi correttamente.
INITIALIZE0 o I0
    Reinizializza il drive e memorizza la tabella d'allocazione dei file (BAM).
Ci sono anche comandi per l'accesso casuale ai file: (BLOCK-READ, BLOCK-WRITE), gestione dei blocchi (BLOCK-ALLOCATE, BLOCK-FREE), gestione della memoria del 1541 ed esecuzione di codice attraverso il processore del 1541 (MEMORY-WRITE, MEMORY-READ, MEMORY-EXECUTE, BLOCK-EXECUTE, BUFFER-POINTER) e funzioni definite dall'utente (USER).