# Commodore 16

Il Commodore 16 è un modello di home computer presentato da Commodore nel 1984 come erede del VIC-20 e alternativa a più basso costo al Commodore 64.
Faceva parte della serie Commodore 264, che comprende il Commodore Plus/4 e il Commodore 116.

## Storia

Agli inizi degli anni ottanta la Commodore aveva in listino il VIC-20, presentato nel 1981 e destinato alla fascia bassa di mercato, e il più costoso Commodore 64, dotato di prestazioni superiori e messo in commercio nel 1982. In mezzo ad essi si posizionavano, offerti a prezzi che si aggiravano intorno ai 100 dollari, diversi prodotti delle concorrenti Timex Corporation, Mattel e, soprattutto, il TI-99/4A prodotto dalla Texas Instruments.
L'allora presidente della Commodore, Jack Tramiel, decise quindi di completare l'offerta delle sue macchine realizzando un home computer che si posizionasse in quella fascia; inoltre, Tramiel temeva che alcuni costruttori giapponesi avrebbero prima o poi realizzato degli home computer di fascia medio-bassa, facendo crollare i prezzi, previsione che si rivelò infondata perché questi si dedicarono al settore delle console da gioco. Inoltre, Timex Corporation, Mattel e Texas Instruments si ritirarono dal mercato prima dell'arrivo dei nuovi prodotti.
Gli ingegneri Commodore nel 1984 si misero quindi al lavoro e progettarono la Commodore 264, una nuova famiglia di computer che comprendeva: il Commodore Plus/4, come modello di punta; il Commodore 16, come modello intermedio; il Commodore 116 (una versione del C-16 con case di ridotte dimensioni e tastini in gomma destinato al solo mercato europeo), come modello economico.
Il C-16 non ebbe il successo sperato e non riuscì a dominare il mercato dei computer a basso costo. La competizione fu difficile, in particolare con lo ZX Spectrum che era al suo apice e il cui prezzo scese presto al di sotto di quello del C-16; anche lo stesso Commodore 64 ebbe forti riduzioni di prezzo, rendendo l'alternativa economica del C-16 meno interessante. Il C-16 venne tolto dal mercato nel giro di un anno negli USA, ma ebbe una discreta diffusione in Europa. Un mercato notevole si formò in particolare in Ungheria. La Commodore cessò la produzione entro il 1988 e svendette il suo inventario, generando un'ultima ondata di nuovi utenti.
In tutto i C-16 prodotti furono 1.200.000.

## Caratteristiche hardware
### Design

Il C-16 fu il secondo computer della serie Commodore 264 ad essere presentato ma, a differenza del Plus/4, furono riprese le forme del VIC-20 e del C-64: il case rotondeggiante era di colore nero con i 66 tasti grigio chiari e l'alimentatore esterno a 9 Volt. Le similitudini finivano qui: infatti il Commodore 16 era una versione depotenziata del Commodore Plus/4, montando lo stesso processore e lo stesso coprocessore, adottando gli stessi connettori di quest'ultimo) per le periferiche base, ossia joystick e registratore, anche se esistevano comunque in commercio dei cavi convertitori per usare le periferiche del C-64 sul C-16 e viceversa) ed integrando il Commodore BASIC in versione 3.5. Il connettore seriale, pur essendo in grado di gestire una velocità maggiore del transfer rate rispetto a VIC-20 e C-64 (con periferiche specifiche), era invece pienamente compatibile con le periferiche del C-64 e VIC-20.
Ad un BASIC 3.5 ricco di comandi avanzati, ad un'ottimale gestione della memoria, ad un ricco set di colori si contrapponevano l'assenza del SID e, soprattutto, hardware dedicato agli sprite che, unitamente ai 16 kb di RAM, alla necessità di utilizzare periferiche con connettori specifici e all'incompatibilità della macchina con gli altri modelli Commodore più diffusi ne decretarono lo scarso successo.

### MOS 7501/8501

Il Commodore 16 era basato su una nuova CPU siglata MOS 7501/8501, evoluzione del 6510 che muoveva il C-64. Rispetto a quest'ultimo il 7501/8501 lavorava a 0,89/1,78 MHz di frequenza, e aveva un canale I/O bidirezionale a 7 bit con cui, in collaborazione con il TED, gestiva il bank switching (tecnologia poi ripresa anche nel Commodore 128) che permetteva di gestire dinamicamente i banchi di memoria visibili alla CPU: si poteva cioè avere più di un banco con lo stesso indirizzo, ad esempio uno ROM ed uno RAM, e selezionare di volta in volta quello attivo su cui operare. In questa maniera, dei 16 kB di memoria RAM totali disponibili sul computer, l'utente ne poteva utilizzare da BASIC circa 12 (il messaggio "12277 bytes free" che appariva all'accensione della macchina): anche se questa quantità era di per sé poca, relativamente parlando era una buona percentuale se si pensa che dei 64 kB di RAM del C-64 l'utente ne poteva usare solo 38 da BASIC, mentre il resto era comunque disponibile a patto di lavorare in linguaggio macchina e disattivando il banco ROM contenente il BASIC.
L'interazione del 7501/8501 con il TED causava ovviamente dei rallentamenti che comunque si potevano evitare se si disattivava l'output video del TED manipolando i suoi registri: in questa modalità il clock della CPU raddoppiava (da 0,89 a 1,78 MHz). Questa modalità era utile, ad esempio, per eseguire calcoli particolarmente gravosi: eliminando il video, si riduceva del 30% il tempo di elaborazione. Terminato il processo, bastava riattivare l'output e visualizzare a schermo i risultati.

### Chip TED 7360

Affiancato alla CPU c'era un nuovo chip per la gestione della grafica e del suono, il TED 7360 (acronimo di Text Editing Device): con il TED il C-16 riprendeva l'architettura del VIC-20, dove un unico coprocessore (il VIC) integrava sia l'unità grafica che quella audio mentre sul C-64 queste erano separate (la parte grafica era gestita infatti dal VIC-II, mentre il suono era controllato dal SID).
Il TED era capace di 5 modalità video:
* modalità Text mode con 40x25 caratteri: caratteri di 8x8 pixel con 2 colori, uno per il testo ed uno per lo sfondo;
* modalità Multicolor text: i colori per carattere divenivano 4, di cui 3 comuni a tutti i caratteri dello schermo e 1 specifico per il carattere, ma la risoluzione orizzontale veniva dimezzata (4x8 pixel per carattere);
* modalità Extended background color mode: qui i caratteri (di 8×8 pixel) potevano avere colori di sfondo differenti l'uno dall'altro;
* modalità Multicolor Graphics: modalità grafica con risoluzione schermo di 160×200 pixel e 4 colori;
* modalità Hi-Res Graphics: modalità grafica con risoluzione di 320×200 pixel e 2 colori.
Le ultime due modalità permettevano anche una modalità mista in cui si aveva nella parte alta una finestra grafica di 160 pixel di altezza e nella parte bassa una finestra alta 40 pixel in modalità testo con 5 righe di caratteri visualizzabili. L'accesso alla modalità grafica riduceva però la RAM disponibile all'utente di 10 kB (necessari a memorizzare i dati dell'immagine), rendendo di fatto impossibile scrivere programmi grafici di una certa complessità. I colori disponibili erano ben 121 (una rarità per i computer dell'epoca) contro i 16 del C-64, grazie al fatto che il TED poteva gestire la luminanza del colore: in questo modo si avevano 8 tonalità per ognuno dei 15 colori di base (15x8=120) più il nero (120+1=121), mancava tuttavia il supporto per gli sprite.
A livello audio il TED integrava solo 2 generatori sonori contro i 3 del VIC e del SID. Inoltre, i generatori del TED erano capaci di generare solo onde quadre o rumore bianco (2 onde quadre oppure 1 onda quadra ed 1 rumore bianco), dato che erano stati studiati più per un impiego in applicazioni da ufficio che per i giochi: non va dimenticato infatti che il Plus/4, da cui deriva il C-16, era nato come tale offrendo in ROM quattro programmi tipicamente da ufficio, come un editor di testo ed un foglio elettronico.

### Memoria

Il C-16 era dotato di 16 kB di memoria RAM e 32 kB di memoria ROM. La RAM era la memoria volatile destinata a contenere i programmi inseriti o caricati ma, come detto, di questa solo 12 kB erano utilizzabili effettivamente dall'utente: i primi 4 kB erano infatti occupati dal sistema per i registri mappati in memoria, i puntatori a varie funzioni, i buffer di I/O e lo stack (2 kB), e dalla memoria video per la modalità testuale (2 kB, di cui 1 per i caratteri da visualizzare sullo schermo ed 1 per i loro attributi). La RAM utile scendeva a 2 kB se si attivava la modalità grafica perché il TED mappava nella RAM utente il buffer grafico, togliendo altri 10 kB.
Nei 32 kB di ROM erano stipati tutti i dati necessari al funzionamento del computer: questi erano prevalentemente occupati dal KERNAL (circa 8 kB), dall'interprete BASIC e dall'editor di schermo (circa 16 kB), dai font (2 kB), dal monitor in linguaggio macchina e da tutte le routine accessorie. Qui di seguito l'allocazione della memoria del Commodore 16:
| Indirizzo | Indirizzo | Uso |
| Hex | Dec | Uso |
| $0000-$07FF | 0000-2.047 | Memoria usata come RAM di sistema. Contiene anche la "Pagina zero", i primi 256 byte di memoria che possono essere indirizzati in maniera veloce dalla CPU |
| $0800-$0C00 | 2.048-3.071 | Color RAM, usata per conservare i colori delle celle video in modalità testo |
| $0C01-$1000 | 3.072-4.095 | Video RAM, usata per memorizzare i caratteri presenti nelle singole celle video in modalità testo |
| $1000-$3FFF | 4.096-16.383 | RAM dedicata al BASIC (programma + variabili) - in modalità grafica quest'area viene ridotta alla sezione $1000-$17FF / 4.096-6.143 (vedi sotto) |
| $1800-$1BFF | 6.144-7.167 | In modalità grafica quest'area contiene la luminanza dei pixel |
| $1C00-$1FFF | 7.168-8.191 | In modalità grafica quest'area contiene i colori dei pixel (Color RAM) |
| $2000-$3FFF | 8.192-16.383 | In modalità grafica quest'area è usata come buffer grafico (Video RAM) |
| $4000-$7FFF | 16.384-32.767 | Indirizzi non mappati, sono lasciati liberi per eventuali espansioni di memoria |
| $8000-$BFFF | 32.768-49.151 | ROM contenente il BASIC V3.5 |
| $C000-$CFFF | 49.152-53.247 | Indirizzi non mappati, sono lasciati liberi per eventuali espansioni del BASIC |
| $D000-$D7FF | 53.248-55.295 | ROM contenente la mappa dei caratteri |
| $D800-$FBFF | 55.296-64.511 | ROM contenente le routine del KERNAL |
| $FC00-$FCFF | 64.512-64.767 | Routine per la gestione del bank switching |
| $FD00-$FEFF | 64.768-65.279 | Registri di I/O |
| $FF81-$FFF9 | 65.409-65.529 | "Jump table" alle funzioni del KERNAL |
| $FFFA-$FFFB | 65.530-65.531 | Vettore per l'interrupt NMI |
| $FFFC-$FFFD | 65.532-65.533 | Vettore per la routine di reset |
| $FFFE-$FFFF | 65.534-65.535 | Routine per l'interrupt IRQ |

### Caratteri

Il set di caratteri era residente in ROM e derivava dal set PETSCII già usato da Commodore sui precedenti modelli VIC-20, C-64 e PET. Rispetto ai set in standard ASCII, il PETSCII comprendeva caratteri alfanumerici e semigrafici. Era costituito da due mappature differenti: una per la modalità maiuscola (quella standard), costituita da lettere maiuscole, numeri e caratteri grafici, ed una per la modalità minuscola, costituita da lettere minuscole e maiuscole e da altri caratteri grafici. I font potevano essere modificati semplicemente copiando i dati in memoria RAM, alterando i caratteri da cambiare e poi variando i puntatori alla mappa dei caratteri in modo che il sistema leggesse i nuovi fonts

## Caratteristiche software
### Il sistema operativo

Il sistema operativo del C-16 era costituito, come per il VIC-20 ed il C-64, da 4 parti indipendenti e integrate:
* il KERNAL;
* l'interprete BASIC;
* l'editor di schermo;
* Il sistema monitor (TEDMON).

### KERNAL

Il kernel del sistema operativo del C-16 era il KERNAL nato per i PET e poi utilizzato su tutti i computer Commodore ad 8 bit fino al C-128. Il KERNAL risiedeva in 8 kB di ROM ed era composto da tutte le routine di basso livello per il controllo dell'hardware del computer come l'I/O, lo schermo, le periferiche. Le routine potevano essere richiamate dall'utente utilizzando una jump table standard per tutti i computer Commodore così da rendere un programma in linguaggio macchina il più portabile possibile.

### BASIC

Il livello software superiore al KERNAL era costituito dall'interprete del Commodore BASIC, in versione 3.5, che si occupava di eseguire i comandi impartiti dall'utente richiamando le routine del KERNAL necessarie al compito da svolgere. La nuova versione offriva diversi comandi in più rispetto al BASIC 2.0 del VIC-20 e del C-64, tra i quali i più importanti erano quelli per:
* la gestione della grafica e del suono (CIRCLE, DRAW, SOUND, ecc.);
* il controllo della porta joystick (JOY);
* la conversione decimale/esadecimale (DEC, HEX$);
* i cicli strutturati (DO, LOOP, WHILE, UNTIL, EXIT);
* l'assegnamento ai tasti funzione (KEY);
* il supporto all'editing dei programmi (AUTO, DELETE, RENUMBER);
* il debugging (TRON, TROFF);
* la chiamata del monitor in linguaggio macchina (MONITOR).

### Editor di schermo

Lo schermo era in realtà gestito come un editor, mediante il quale l'utente poteva comandare direttamente il computer: esso assolveva ai compiti di interfaccia a riga di comando. Alla pressione del tasto "RETURN", il testo scritto sulla riga dove era presente il cursore veniva interpretato dall'editor di schermo: se veniva riconosciuto un comando, questo veniva eseguito immediatamente dall'interprete BASIC. Se la riga iniziava con un numero, l'editor di schermo la interpretava come una riga di "listato" e la memorizzava in un'apposita area di memoria dove risiedeva il programma dell'utente.

### Monitor in linguaggio macchina

Il monitor in linguaggio macchina TEDMON (contrazione di crasi di TExt EDitor MONitor) era un vero e proprio assemblatore/disassemblatore fornito di una dozzina di comandi grazie ai quali si potevano scrivere programmi direttamente in assembly, modificare i contenuti delle locazioni di memoria, salvare su nastro o caricare da esso porzioni di memoria. Al monitor si poteva accedere anche premendo contemporaneamente il tasto RUN-STOP e il tastino di reset. Lo stesso monitor veniva utilizzato anche su Commodore Plus/4, Commodore 128 e 128D (la versione per Commodore 128 aveva tuttavia qualche differenza).

## Periferiche

La linea Commodore 264 presenta diversi connettori specifici, così che quasi nessuna delle numerose periferiche in circolazione per il VIC-20 e il C-64 poteva essere utilizzata con la nuova macchina. Tra le periferiche specifiche per C-16 (tutte di colore nero e quasi tutte prodotte dalla Commodore perché i vari costruttori, visto lo scarso successo commerciale del C-16, snobbarono questo computer) ricordiamo il registratore a cassette Datasette 1531 e il joystick CBM T-1341. Venne creata anche una specifica unità a floppy, il Commodore 1551, mediamente più veloce del 1541 perché sfrutta 4 fili del connettore seriale invece dei 2 usati sul C-64: a differenza di altri, questo connettore è lo stesso di quello presente su Commodore VIC-20 e Commodore 64 e, quindi, è perfettamente compatibile con drive, stampanti e periferiche seriali creati per questi computer.
Il C-16 è privo della porta utente (usata da altre macchine Commodore per il collegamento di periferiche poco comuni) e non ha il chip UART del Plus/4, per cui non può usare un modem.
Furono prodotte anche delle espansioni di memoria, ma ebbero poca diffusione perché erano rare, costose e presentavano problemi di compatibilità.

## Software

La scarsa dotazione di memoria, l'assenza degli sprite e la presenza di un audio di basso livello non facilitarono lo sviluppo di software: gli applicativi di una certa rilevanza furono pochi, mentre i giochi, creati in discreta quantità, qualitativamente erano di livello inferiore a quelli del C-64.
Nonostante le forti limitazioni hardware, molti dei programmatori si ingegnarono per riuscire a far stare il software che scrivevano (soprattutto videogiochi) nei pochi kB disponibili; di fatto, la quasi totalità del software commerciale prodotto per la serie 264 si accontenta dei 12 kB del C-16. Questo contribuì all'insuccesso del più costoso Plus/4, essendo assai scarsa la diffusione di software specifico per quest'ultima macchina (che inoltre presenta alcuni -sia pur rari- problemi di compatibilità col software prodotto per il C-16).
Il software venne pubblicato principalmente su cassetta, mentre i prodotti su floppy furono decisamente in minoranza. Ci furono inoltre pochissime pubblicazioni di applicativi e videogiochi su cartuccia.

### Videogiochi

I videogiochi degni di nota furono probabilmente intorno ai 700; Plus/4 World (il più esauriente sito sulla serie 264) elenca oltre 6000 titoli, ma contando anche varianti dello stesso gioco, raccolte, e giochi freeware che venivano e tuttora vengono sviluppati da appassionati.
La divisione software della Commodore stessa supportò inizialmente il sistema pubblicando diversi giochi. I produttori che si fecero notare maggiormente per la qualità furono Mastertronic, Gremlin Graphics, Anirog e Kingsoft. In Ungheria la Novotrade produsse una duratura serie di titoli.
Secondo una selezione fatta dalla rivista Retro Gamer, dieci dei più grandi giochi per Commodore 16 sono Tom Thumb, Bongo, Tutti Frutti, Bandits at Zero, Harvey Headbanger, Auf Wiedersehen Monty, Kikstart, Trailblazer, Winter Events, Voidrunner.

## Pubblicazioni

Le pubblicazioni periodiche dedicate specificamente al Commodore 16 furono rare; generalmente il sistema veniva trattato secondariamente all'interno di altre pubblicazioni dedicate ai computer Commodore o all'informatica in generale. Tra le poche riviste dedicate si ricordano la britannica C16 Plus/4 Handbook, la serie di speciali P4 C16 116 della tedesca Commodore Welt e il corso italiano a puntate Video BASIC del Gruppo Editoriale Jackson. Più numerose furono le pubblicazioni non periodiche, libri di approfondimento e manuali di programmazione dedicati espressamente a questo computer, soprattutto in inglese, tedesco, italiano e ungherese. Anche le raccolte periodiche su nastro di programmi e giochi per C16 uscivano spesso in abbinamento a software per altri computer, tipicamente C-64 o VIC-20, ma non mancarono i casi di abbinamento a giochi per macchine non Commodore, come C16/MSX con giochi per C16 e MSX.

## Cloni

Una variante argentina era assemblata localmente, avvantaggiandosi della legislazione in vigore all'epoca, dalla società Drean. Essa si distingue per una differente placca di identificazione riportante il logo Drean prima di quello Commodore.