5 
 
Introduzione 
 
L‘obiettivo del presente elaborato è di ―raccontare‖ il percorso storico che ha portato, in 
seguito allo sviluppo tecnologico (soprattutto relativo all‘implementazione di nuove 
soluzioni architetturali dei processori), dal processore MC68000 dell‘azienda statunitense 
Motorola, comparso sul mercato alla fine degli anni ‘70, ai microcontrollori della famiglia 
ColdFire della Freescale Semiconductor (società subentrata a Motorola). 
Nel primo capitolo saranno fatti alcuni cenni storici sulla famiglia MC680X0 (famiglia di 
processori della Motorola), relativi all‘evoluzione dal capostipite (il processore MC68000) 
fino al processore MC68060 (l‘ultimo membro della famiglia a essere commercializzato 
come processore per uso generico). 
Nel secondo capitolo ci sarà una breve presentazione della famiglia di microcontrollori 
683XX della Motorola, relativa soprattutto alle caratteristiche architetturali comuni dei 
membri di tale famiglia. Poi verrà esaminato, in particolare, il microcontrollore MC68332, il 
membro più interessante della famiglia MC683XX. 
Il terzo capitolo conterrà brevi cenni storici riguardanti la famiglia ColdFire della Freescale 
Semiconductor e saranno velocemente presentati i suoi principali membri. 
Il quarto e ultimo capitolo sarà dedicato all‘esame delle principali differenze (soprattutto a 
livello di architettura) tra un microcontrollore Motorola ed uno della famiglia ColdFire.
6 
 
Capitolo  1 
 
Storia della famiglia di processori MC680X0 
Nel capitolo verranno fatti alcuni cenni storici riguardanti la famiglia di processori 
MC680X0 della Motorola. 
I suddetti cenni inizieranno con una presentazione concisa del processore MC68000 della 
Motorola, proseguiranno con una breve presentazione dei principali membri della famiglia 
680X0 di processori della Motorola (per la precisione, dei processori MC68020, MC68030, 
MC68040, MC68060), e si concluderanno con un riepilogo delle loro principali differenze. 
 
1.1  Il processore MC68000 
Il processore MC68000 della Motorola è stato posto sul mercato nel 1979 ed è il capostipite 
di due famiglie di processori prodotti da Motorola negli anni ‘80 e ‗90. 
Inoltre, è stato il primo processore a 32 bit di Motorola capace di eseguire due milioni di 
calcoli al secondo. 
Esso è basato su un‘architettura a registri generali, quasi ortogonale. 
Il modello di programmazione del processore MC68000 è costituito da otto registri di dato 
(denotati con D0, D1, …, D7), da otto registri di indirizzo (denotati con A0, A1, …, A7). Il 
registro di indirizzo A7 svolge il ruolo di stack pointer nel modo utente (USP); in realtà, 
esiste anche un registro di indirizzo A7‘ che svolge il ruolo di stack pointer nel modo di 
sistema (SSP). A completare il suddetto modello ci sono, poi, il registro PC (Program 
counter) e il registro di stato, SR, il cui byte meno significativo è detto registro dei codici di 
condizione (CCR). 
I registri di dato, quelli di indirizzo e il registro PC sono tutti di 32 bit mentre il registro di 
stato è di 16 bit.
7 
 
Da un punto di vista esterno, il processore MC68000 ha una lunghezza di parola uguale a 
16 bit, in quanto il chip che lo ospita ha 16 piedini per il collegamento alla memoria. Invece, 
internamente al processore, i dati vengono elaborati a 32 bit. 
Essendo uguale a 24 bit il parallelismo del bus indirizzi ed uguale a 32 bit la dimensione dei 
registri di indirizzo e del registro PC, nel processore MC68000 si ha che lo spazio di 
indirizzamento fisico è diverso dallo spazio di indirizzamento logico (16 MB  vs  4 GB). Da 
ciò può generarsi il fenomeno denominato aliasing degli indirizzi: due indirizzi contenuti in 
un registro di indirizzo o nel registro PC, che differiscano solo per gli otto bit più 
significativi, attivano la stessa locazione fisica di memoria. 
L‘unità di memoria collegabile al processore MC68000 è indirizzabile a byte, cioè, in essa, 
la più piccola quantità di memoria singolarmente indirizzabile è il byte. 
Il processore MC68000 possiede istruzioni macchina la cui lunghezza può variare da un 
minimo di una a un massimo di cinque parole. Nella prima sono contenuti, in sostanza, il 
codice operativo e il modo di indirizzamento mentre nelle successive parole sono contenuti, 
in base al modo di indirizzamento, l‘operando in modo immediato e/o gli indirizzi di 
operandi indirizzati in modo diretto di memoria. 
I modi di indirizzamento del processore MC68000 sono i seguenti: 
 Modo diretto di registro di dato; 
 Modo diretto di registro di indirizzo; 
 Modo indiretto attraverso registro di indirizzo; 
 Modo indiretto con postincremento; 
 Modo indiretto con predecremento; 
 Modo indiretto con displacement (detto anche based); 
 Modo indiretto con displacement e indice; 
 Modo diretto di memoria (detto anche assoluto)
8 
 
 Modo relativo a PC; 
 Modo relativo a PC con indice; 
 Modo immediato. 
Il linguaggio assemblativo del processore MC68000 è sinteticamente indicato con ASM68K 
ed è valido per l‘intera famiglia di processori MC680X0 della Motorola. L‘ASM68K è 
simile ad un linguaggio assemblativo generico (cioè relativo a un processore astratto); 
questo è il motivo per cui è spesso utilizzato nell‘ambito didattico. 
Tra gli aspetti più importanti dell‘ASM68K ci sono i seguenti: 
1. Le istruzioni assembler di salto incondizionato possono essere sia assolute sia 
relative (esse hanno, rispettivamente, codice mnemonico JMP e BRA), quelle di 
salto condizionato si basano solo sull‘analisi dei flags del CCR e  possono essere 
solo relative (il loro codice mnemonico è del tipo Bcc, dove cc specifica il valore 
del CCR, è espresso da una sigla che richiama il significato della condizione da 
testare e viene posizionato di solito da un‘istruzione assembler di comparazione, 
CMP, che precede quella di salto); 
2. La questione dello scambio (o passaggio) dei parametri tra programma chiamante e 
sottoprogramma chiamato, forse la più importante del collegamento tra 
sottoprogrammi, è gestita (oltre che mediante i registri generali) mediante l‘utilizzo 
dello stack di sistema. In tale tecnica, è previsto l‘utilizzo di un‘area di memoria 
allocata dinamicamente e in cui vengono, sostanzialmente, memorizzati il valore 
del registro PC che permette il ritorno da sottoprogramma, i parametri effettivi e  le 
variabili  locali  del sottoprogramma. Tale area di memoria è detta record di 
attivazione. Tale record è una sorta di spazio di lavoro privato del sottoprogramma 
chiamato, che è creato all‘attivazione del sottoprogramma e che viene eliminato 
quando quest‘ultimo termina. Esso viene memorizzato nello stack di sistema, in 
maniera tale che la sua ―cima‖ sia coincidente con quella dello stack. I diversi 
campi del record di attivazione vengono indirizzati con opportuni spiazzamenti 
costanti rispetto al registro FP (frame pointer, puntatore al record di attivazione), il 
quale è un registro del processore in cui viene memorizzato l‘indirizzo della cima
9 
 
dello stack di sistema nell‘istante in cui entra in uso (nonostante non sia ancora del 
tutto costruito) il record di attivazione del sottoprogramma chiamato. Si noti che il 
registro FP ha contenuto costante per tutta la durata dell‘esecuzione del 
sottoprogramma. L‘ASM68K possiede due apposite istruzioni assembler che 
agevolano la gestione del record di attivazione sullo stack di sistema: LINK e 
UNLK. 
Nel processore MC68000 il meccanismo di gestione delle interruzioni (nel senso di 
interruzioni hardware) è basato sul concetto di priorità.  
In generale, ad ogni richiesta di interruzione di un dispositivo si associa un livello di 
priorità; fatto ciò, quando il processore ha in corso il servizio di una richiesta di 
interruzione, esso accetta e serve subito una richiesta di interruzione appena arrivata solo 
se questa ha un livello di priorità superiore. Il livello di priorità dell‘interruzione 
correntemente in esecuzione è detto livello di priorità corrente. Esiste, inoltre, un livello 
di priorità non mascherabile, cioè avente precedenza assoluta su tutti gli altri livelli di 
priorità. 
Il processore MC68000 ammette otto livelli di priorità, da 0 a 7; il livello di priorità 
corrente è codificato da tre bit di SR (i bit nelle posizioni 8, 9, 10 di SR), il livello 7 è 
quello di priorità non mascherabile. Il processore MC68000 risolve il problema 
dell‘identificazione del dispositivo richiedente interruzione con due soluzioni: 
  Meccanismo di interruzione vettorizzata; 
  Meccanismo di interruzione autovettorizzata. 
Ambedue fanno uso della tabella delle interruzioni. Quest‘ultima è una tabella, residente 
in memoria, costituita da una sequenza di elementi detti vettori di interruzione (ciascuno 
di essi rappresenta l‘indirizzo iniziale di una ISR – tale acronimo sta per sottoprogramma 
di servizio di un‘interruzione). 
Nel meccanismo di interruzione vettorizzata del 68000, un dispositivo richiedente 
interruzione manda al processore un codice identificativo di 8 bit in risposta al segnale di