# Apple DOS

L'Apple DOS, acronimo di Apple Disk Operating System, è stato il sistema operativo per dischi che Apple ha fornito dal 1978 fino al 1983 in abbinamento alle unità a dischi Disk II vendute per i personal computer della serie Apple II. È stato sostituito dal ProDOS.
L'Apple DOS fu distribuito in tre versioni principali: DOS 3.1, DOS 3.2 e DOS 3.3. e ognuna di esse fu seguita da una versione che ne corresse i bug e solo nel caso dell'Apple DOS 3.2 essa ebbe un proprio numero di versione (3.2.1) mentre le altre mantennero il numero originale. La versione più nota e usata fu la 3.3, distribuita nel 1980 e aggiornata successivamente nel 1983 per la correzione di bug.

## Storia

La prima unità a dischi prodotta da Apple fu il Disk II, sviluppata da Steve Wozniak e Randy Wigginton. Quando fu presentata all'inizio del 1978 al Consumer Electronics Show, l'unità era stata ultimata da pochissimo e Wozniak e Rigginton non avevano avuto il tempo di sviluppare anche un sistema operativo a dischi (DOS) per poter gestire in maniera comoda i file ma avevano scritto solo alcuni comandi di base per posizionare la testina in un settore del disco e leggere/scrivere dati da quel settore. Terminata l'esposizione, Jobs contattò la Shepardson Microsystems per scrivere un DOS vero e proprio per il Disk II. A questo lavoro fu assegnato il programmatore Paul Laughton, che lavorò insieme a Wozniak e Wigginton per sviluppare il DOS richiesto. Il contratto fu stilato il 10 aprile per un importo di 13.000 dollari. La consegna della versione finale del DOS era stata fissata per il 15 maggio, lo sviluppo del DOS fu portato a termine in soli 35 giorni. Anche alla Apple gli ingegneri lavorarono alacremente per produrre un numero sufficiente di unità a dischi per l'inizio della commercializzazione. Ciò comportò che non ci fu il tempo materiale per preparare un manuale dell'utente e, per questo motivo, il DOS fu distribuito inizialmente senza una documentazione ufficiale ma solo con alcune note sulle principali caratteristiche e su alcuni comandi. Fu solo con la distribuzione della versione 3.2, avvenuta nel mese di febbraio del 1979, che un manuale degno di questo nome fu reso disponibile agli utenti.
Dopo il 1980 lo sviluppo degli Apple II e dell'Apple DOS subirono un rallentamento dato che Apple concentrò i suoi sforzi sugli Apple III e il relativo sistema operativo Apple SOS. Nel 1983 il DOS 3.3 subì un paio di aggiornamenti, principalmente per correggere alcuni bug del sistema e per migliorare il supporto ai nuovi Apple IIe, distribuiti in quello stesso anno.
Senza estensioni prodotte da terzi, l'Apple DOS poteva leggere solo i dischi da 5"¼ delle unità Disk II e non poteva accedere ad altri tipi di memoria di massa quali dischi rigidi, RAM disk o dischi da 3"½. La struttura del DOS era tale per cui non era possibile gestire più di 400 kB per disco senza riscrivere la maggior parte del suo codice: questo fu il principale motivo per cui Apple abbandonò il DOS nel 1983 sostituendolo con il nuovo ProDOS.
Il ProDOS manteneva il limite a basso livello dei 16 settori per traccia sui dischi da 5"¼ del DOS 3.3 ma introduceva un nuovo formato ad alto livello che era in grado di gestire dispositivi con capacità fino a 32 MB: ciò permise al ProDOS di supportare i nuovi dischi da 3"½. Tutti i computer Apple dall'Apple II Plus in avanti potevano far girare sia il DOS 3.3 che il ProDOS: i primi necessitavano, però, della "Language Card" (l'espansione di memoria) per usare il ProDOS. L'Apple IIe ed i modelli successivi integravano questa scheda nel proprio hardware e potevano perciò usare il ProDOS senza ulteriori modifiche. Il ProDOS includeva un software per copiare i file dai dischi Apple DOS. Nonostante le maggiori funzionalità del ProDOS, molti utenti continuarono ad utilizzare l'Apple DOS ben oltre il 1983.
L'abitudine di Apple di salvare una copia avviabile del sistema operativo su ogni singolo disco permise ai produttori di software commerciale di non preoccuparsi di quale versione del DOS l'utente possedesse. Esisteva anche un programma chiamato DOS.MASTER che permetteva agli utenti di avere diverse partizioni virtuali del DOS 3.3 su un'unità formattata con il ProDOS, con il vantaggio di poter avere molti programmi DOS nati per i dischetti floppy su un unico disco rigido.
Il DOS 3.3 continua ad essere commercializzato da Syndicomm su licenza esclusiva.
Nel 2013 è stato rilasciato il codice sorgente in assembly dell'Apple DOS, liberamente scaricabile per fini non commerciali.

## Versioni
### Versioni di sviluppo e 3.0

Le versioni dalla 0.1 alla 2.8 furono versioni di sviluppo. La versione 2.8 fu terminata nel mese di giugno del 1978 e presentata alla Apple per la fase di verifica. Alla Apple decisero però che il nome DOS 2.8 non era piacevole per cui incrementarono la numerazione della versione fino alla 3.0: questa versione fu considerata come "beta", utilizzata quindi come test. Corretti i bug che l'affliggevano, Apple decise di incrementare ancora la numerazione portando il DOS alla versione 3.1 prima della commercializzazione, per indicare che il codice era cambiato rispetto alla beta.

### Apple DOS 3.1

L'Apple DOS 3.1 fu distribuito nel mese di luglio del 1978 (meno di 1 anno dopo l'introduzione degli Apple II), divenendo il primo sistema operativo basato sui dischi di qualunque computer Apple.
Successivamente fu distribuito un aggiornamento che correggeva alcuni bug che affliggevano il primo DOS. La nuova versione, che manteneva la numerazione 3.1, sistemava il problema del numero di linea in un listato che non poteva essere maggiore di 255, permetteva la presenza di più di un comando DOS per linea di programma, e correggeva la routine usata per creare una copia "master" dell'Apple DOS con il comando MASTER.CREATE, che sulla 3.1 originale funzionava solo quando il controller per i dischi era inserito nella porta di espansione nº 7 dell'Apple II ma, durante la progettazione, in tale porta fu deciso di inserirci la scheda video ed il controller venne spostato sulla porta nº 6 (curiosamente, le schede video venivano inserite nella porta nº 3, lasciando quindi la porta nº 7 vuota). Esisteva anche un altro tipo di disco DOS, il cosiddetto "slave", creato con il comando INIT: rispetto ad un disco "master", la cui copia del DOS si adattava dinamicamente al quantitativo di memoria che trovava sulla macchina su cui era usato, un disco "slave" avviava la sua copia del DOS allocando lo stesso quantitativo di memoria della macchina su cui era stato creato. Se, per esempio, veniva creato un disco "slave" su un Apple II con 16 KB di RAM, se tale disco era usato su un computer con 48 KB di memoria, il sistema ne allocava solo 16. Ecco, quindi, che l'uso di un disco "master" era molto importante ed il bug del comando MASTER.CREATE limitativo.

### Apple DOS 3.2 e 3.2.1

Agli inizi del 1979 Apple presentò l'Apple II Plus, un'evoluzione dell'Apple II: insieme all'hardware fu rinnovato anche il sistema operativo, con la presentazione dell'Apple DOS 3.2. Rispetto agli Apple II, al posto dell'Integer BASIC i modelli Plus integravano nel loro firmware un nuovo BASIC con supporto per i numeri in virgola mobile, l'Applesoft BASIC, ed una nuova funzionalità di autoavvio: se il computer trovava un controller per unità a dischi al momento della sua accensione, avviava il disco eventualmente inserito. Da tale caratteristica il firmware prese il nome di "Autostart ROM". La nuova versione 3.2 aumentava anche il numero di tipi di file gestibili ed introduceva il comando UPDATE 3.2 che convertiva un disco "slave" in un disco "master". Infine, il DOS 3.2 era arricchito di diversi giochi e programmi dimostrativi delle capacità delle nuove macchine. Del DOS 3.2 esistono 2 versioni, entrambe con lo stesso numero di rilascio: l'unica differenza è l'assenza, nella prima versione, dell'Applesoft BASIC.
Nel mese di luglio del 1979 Apple presentò l'Apple DOS 3.2.1, una versione che differiva dalla 3.2 solo per la risoluzione di alcuni piccoli bug, tra cui quello relativo alla temporizzazione che affliggeva il comando COPY, che falliva la copia di un disco quando si usavano 2 unità contemporaneamente. Con questa distribuzione veniva anche introdotto un sistema di numerazione delle versioni che usava una terza cifra ad indicare una modifica minore, un sistema che ha continuato ad essere utilizzato fino ai giorni nostri.

### Apple DOS 3.3

L'Apple DOS 3.3 fu distribuito nel mese di agosto del 1980. Rispetto al DOS 3.2, introduceva diverse migliorie tra cui la capacità di gestire le superiori capacità di memorizzazione offerte dalle nuove PROM P5A/P6A montate sugli ultimi controller che potevano leggere e scrivere i dati ad una densità maggiore: grazie a queste PROM le tracce potevano ora contenere fino a 16 settori (4 kB) contro i precedenti 13 (3,25 kB), facendo aumentare la capacità totale di un dischetto da 113,7 kB a 140 kB per lato. Di questi, 16 kB erano usati dal DOS per il file system e per la copia del DOS 3.3, lasciando 124 kB di spazio per i programmi ed i dati dell'utente.
Il DOS 3.3 non era però retrocompatibile: non poteva leggere o scrivere sui dischetti formattati con una versione precedente del DOS. Per risolvere questo problema Apple rese disponibile un software denominato "MUFFIN" che serviva a copiare i file di un disco ante DOS 3.3 su un disco DOS 3.3. Apple non distribuì mai una versione per l'operazione inversa e la comunità di utenti produsse in proprio una applicazione denominata "NIFFUM" che convertiva un disco DOS 3.3 nel formato compatibile con le precedenti versioni. Esistevano anche delle applicazioni commerciali (come il software "Copy II Plus") che erano in grado di copiare i file tra i due formati (e successivamente anche da e per i dischi formattati con il ProDOS).
La versione 3.3 permetteva anche di passare con più facilità dall'Integer BASIC all'Applesoft BASIC se il computer aveva una scheda di espansione, la "Language Card", o una scheda con un firmware esteso, la "Firmware Card".
Esistono 3 versioni del DOS 3.3. Apple, nel corso della sua commercializzazione, aggiornò 2 volte il sistema operativo senza però cambiare numero di versione:
* la prima versione è quella pubblicata nel mese di agosto del 1980. Si riconosce dal fatto che i file FPBASIC e INTBASIC occupano entrambi 50 settori sul disco.
* la seconda versione compare in concomitanza con l'inizio della commercializzazione dell'Apple IIe, e per questo il sistema operativo è talvolta indicato come "DOS 3.3e". Il sistema introduce la possibilità di disattivare all'avvio la scheda "80-column card" dell'Apple IIe e corregge un bug del comando APPEND (introducendone però un altro). Questa versione è identificabile dal fatto che i programmi FPBASIC e INTBASIC occupano ciascuno 42 settori sul disco.
* la terza versione viene distribuita poco prima del rilascio del ProDOS. L'unica differenza con le precedenti versioni è la risoluzione definitiva del bug del comando APPEND.

## Caratteristiche

I dischetti formattati con il DOS 3.1 utilizzavano 13 settori per traccia, ognuno di 256 byte, con 35 tracce per ogni lato del disco: in totale, lo spazio a disposizione era di 113,75 kB per lato, di cui circa 10 kB erano riservati per memorizzare lo stesso DOS e la directory del disco, lasciando all'utente finale 100 kB di spazio utile. Le unità dischi potevano accedere ad un solo lato per volta, obbligando l'utente a girare il dischetto per operare sul lato inferiore. I nomi dei file potevano contenere fino a 30 caratteri, inclusi gli spazi ed i caratteri di controllo: l'MS-DOS, per confronto, continuò fino al 1995 a supportare nomi lunghi solo 11 caratteri, di cui 8 per il nome vero e proprio e 3 per l'estensione.
Se comparato con sistemi operativi più moderni, l'Apple DOS era abbastanza primitivo. Il primo livello del sistema era chiamato "RWTS" (Read/Write Track Sector): esso consisteva delle routine per la ricerca delle tracce, la lettura e la scrittura dei settori e la formattazione del disco. Questo livello fu scritto da Wozniak e da Wigginton. I successivi livelli furono scritti da Laughton. Il primo di essi era denominato "File Manager": era essenzialmente un'API costruita sull'RWTS che implementava le funzioni per aprire, chiudere, leggere, scrivere, cancellare, bloccare (ossia proteggere da scrittura), sbloccare (rendere riscrivibile), rinominare e verificare l'integrità strutturale dei file. Dopo il File Manager c'era un livello denominato "Main DOS Routines", che conteneva le routine che permettevano al BASIC di interfacciarsi con il DOS, intercettando i comandi inseriti dall'utente o direttamente al prompt dei comandi oppure nei propri programmi BASIC. I comandi messi a disposizione dell'utente erano, ad esempio, BLOAD, BSAVE e BRUN per caricare, salvare ed eseguire file binari oppure i corrispondenti LOAD, RUN e SAVE per i programmi in BASIC; EXEC eseguiva invece dei file batch composti da comandi BASIC e/o DOS. Sopra a questi c'era l'ultimo livello, che non era una vera e propria area di memoria contenente particolari routine, bensì una zona di buffer che il sistema operativo utilizzava per la memorizzazione temporanea dei dati in transito da e per ognuno dei file aperti.
La prima versione dell'Apple DOS supportava 4 tipi di file, identificati dalle seguenti lettere:
* "I": programmi per l'Integer BASIC (salvati in un particolare formato compatto e non testuale).
* "A": programmi per l'Applesoft BASIC (salvati anch'essi in un formato compatto).
* "B": per i file binari, ossia programmi in linguaggio macchina oppure file di dati.
* "T": file di testo in formato ASCII (ad esempio file batch non compressi).
Con il DOS 3.2 furono introdotti altri 4 tipi di file, contrassegnati dalle lettere "R", "S", un'altra "A" ed un'altra "B", ma di questi, solo il tipo "R" (che indicava un codice oggetto ricollocabile generato da un assembler) fu usato da Apple.
Il DOS distingueva questi tipi solo nella visualizzazione dell'elenco dei file presenti in una cartella ma non metteva a disposizione nessuno strumento per poter manipolare direttamente i tipi di file. Il tipo "R" trovava qualche uso nell'identificazione dei file binari eseguibili ricollocabili. Alcuni programmi supportavano il tipo "S" per indicare i file di dati.

### Software ricollocabile

Molti dei programmi scritti in linguaggio macchina per i computer Apple II non si preoccupavano della ricollocazione del codice dato che l'Apple II, a differenza dei computer più moderni, non eseguiva più programmi contemporaneamente. I programmi erano generalmente scritti affinché essi si aspettassero di trovare il proprio codice macchina nelle stesse locazioni di memoria ogni volta che venivano eseguiti. Il codice pienamente ricollocabile era più complicato da scrivere e difficile da implementare.
L'Apple DOS, però, doveva essere in grado di gestire un quantitativo di memoria installato nella macchina su cui girava che non aveva un valore fisso: esso poteva andare da 16 fino a 48 kB. Il DOS si caricava nella porzione più alta possibile per poter tenere libera la parte più bassa della memoria per i programmi in BASIC e per la gestione della grafica. Negli Apple II con 48 o più kB di memoria, il DOS occupava la zona compresa fra gli indirizzi $9600 e $BF00 (corrispondenti a 3 buffer per i file più 10 kB per il suo codice) ma poteva anche caricarsi in una zona di memoria inferiore se la macchina aveva meno RAM (per confronto, il ProDOS si caricava sempre nella RAM della "language card", e ciò comportava di avere almeno 64 kB di RAM sulla macchina).
Una tabella di vettori di chiamata allocata nella zona di memoria compresa fra $03D0 e $03FF permetteva ai programmi di accedere al DOS ovunque esso si fosse caricato in memoria. Ad esempio, se le funzioni di chiamata del DOS integrate nell'interfaccia a riga di comando del BASIC cessavano di funzionare, l'utente poteva reinizializzare il DOS eseguendo la funzione puntata dalla locazione di memoria $03D0 (976): da qui il tradizionale comando "3D0G" per tornare al BASIC dal monitor di sistema.

### Il processo di avvio

Il processo di caricamento dell'Apple DOS coinvolgeva una serie di piccoli programmi, ognuno dei quali faceva avanzare il processo di avvio di pochi passi prima di passare il controllo al programma successivo della sequenza.
* In origine, la ROM dell'Apple II non supportava l'avvio dei dischi: all'accensione, il computer visualizzava il prompt del monitor di sistema. A questo punto, l'utente doveva digitare il numero della porta di espansione seguita dal carattere generato premendo CTRL-P ed infine battendo "RETURN".
* Quando fu introdotto, l'Apple II Plus integrava una routine che esaminava tutte le porte di espansione (dalla nº 7 indietro fino alla 1) alla ricerca della ROM di una "expansion card": se la trovava, eseguiva il codice in essa contenuto.
* La ROM dell'"expansion card" tentava di avviare il sistema dal disco 1 del controller muovendo la testina fino alla traccia 0 e cercando di leggere i primi 256 byte di tale traccia, il cosiddetto "settore 0": se non c'era nessun disco nell'alloggiamento, l'unità continuava a tentare la lettura fino a quando l'utente non ne inseriva uno e non chiudeva lo sportellino.
* Il settore 0 conteneva una piccola porzione di codice che istruiva il computer su come leggere i settori dallo 0 al 9 della traccia 0 (veniva quindi riletto anche il settore 0 durante questo processo).
* Il programma contenuto nei settori 1-9 della traccia 0 includeva il codice completo del livello RWTS. Letta questa traccia, il processo leggeva le tracce 1 e 2, che contenevano il resto del DOS. In un disco di sistema di tipo "master" era incluso anche il codice che riallocava il DOS nella porzione più alta possibile della memoria del sistema (fino all'indirizzo $BFFF in un computer con 48 kB di RAM).
* Una volta che il DOS era caricato in memoria, esso cercava di leggere ed eseguire un programma di avvio indicato all'interno del codice del DOS stesso: questo programma era di solito un semplice programma in BASIC chiamato "HELLO" (o con un nome simile) che visualizzava sul video un messaggio di benvenuto (il DOS poteva però essere modificato per far eseguire all'avvio altri tipi di programmi, anche file binari eseguibili). Il prompt del terminale indicava quale interprete BASIC veniva caricato: se esso era il simbolo della parentesi quadra chiusa ( ] ) allora l'utente sapeva che stava per essere caricato un programma di avvio scritto in Applesoft BASIC mentre se compariva il segno di "maggiore di" ( > ) allora stava per essere caricato un programma scritto in Integer BASIC.
* Stabilito l'interprete, il programma veniva eseguito e la procedura di avvio aveva termine.

### Supporto per l'Integer BASIC e l'Applesoft BASIC

L'Apple II fu inizialmente distribuito con un semplice interprete BASIC noto come Apple BASIC che fu poi rinominato Integer BASIC. Esso poteva gestire solo i numeri interi con un intervallo da -32768 a 32767 e supportava solo una grafica in bassa risoluzione. Essendo però il primo BASIC disponibile per l'Apple II, fu l'interprete con cui furono scritti i programmi per il computer.
In seguito alle numerose richieste di un interprete capace di gestire i numeri in virgola mobile, Apple si rivolse a Microsoft chiedendo un BASIC con tali caratteristiche. Microsoft propose lo stesso linguaggio che già aveva sviluppato per l'Altair 8800, che Apple distribuì come Applesoft BASIC. Nonostante le maggiori capacità, l'Applesoft BASIC non era compatibile con l'Integer BASIC per cui i programmi scritti per questo interprete non giravano su quello nuovo.
L'Applesoft BASIC fu distribuito inizialmente su cassetta a nastro: veniva caricato in memoria come un normale programma, occupando 10 kB di RAM. Con l'uscita degli Apple II Plus, l'Applesoft BASIC venne integrato nella ROM dei nuovi computer.
Quando fu distribuito il nuovo DOS 3.3, nell'agosto del 1980, gli Apple II Plus erano in vendita da più di anno: Apple decise quindi di integrare nel DOS la possibilità di passare con facilità da un interprete BASIC all'altro grazie al fatto che essi furono inseriti nel disco "master" come file binari permettendo così agli utenti di poter caricare in RAM la versione non presente nella ROM della propria macchina (ammesso di aver sufficiente memoria per farlo). Per scegliere l'interprete da usare l'utente doveva semplicemente digitare al prompt del sistema i comandi FP (abbreviazione di "F"loating "P"oint) per l'Applesoft BASIC o INT (per "INT"eger) per l'Integer BASIC. Inoltre, quando l'utente apriva un programma salvato, il DOS sceglieva automaticamente l'interprete adatto in base al tipo di file, se l'Applesoft BASIC in caso il tipo fosse stato "A" o l'Integer BASIC nel caso del tipo "I".

## Altre versioni

Uno dei limiti del DOS era il fatto che i dati letti o scritti dai dischi dovevano attraversare tutti e tre i buffer del sistema operativo. Questo modo di operare rendeva le operazioni di accesso al disco particolarmente lento dato che molto del tempo era speso per copiare i dati all'interno della memoria del computer. Per questo motivo comparvero alcune versioni modificate del DOS denominate Pronto-DOS, Diversi-DOS e Davi-DOS, che risolvevano il problema alterando le routine del livello "File Manager" del sistema in modo che usasse l'RWTS per leggere o scrivere i settori direttamente da o verso la memoria centrale senza usare i buffer.