Motorola MC6800 – microprocessore 8 bit della famiglia 6800, con bus indirizzi a 16 bit e architettura orientata a sistemi embedded
Il Motorola MC6800 è un microprocessore 8 bit della prima generazione di CPU “general purpose” destinate a essere integrate in sistemi con RAM/ROM e periferiche esterne su bus. È uno dei capostipiti della famiglia 6800, progettato per applicazioni industriali, controllo e calcolo embedded, con un modello di programmazione relativamente lineare e una piattaforma hardware tipica basata su decodifica indirizzi, memoria mappata e I/O.
In termini pratici, il MC6800 è una CPU che favorisce progetti “a componenti discreti”: ROM per firmware, RAM per dati, periferiche su bus (timer, porte parallele/seriali, interrupt controller), con logica di glue e segnali di controllo chiari per l’integrazione su schede.

Architettura di base: 8 bit con indirizzamento a 16 bit
Core 8 bit
La CPU opera nativamente su dati a 8 bit (byte) e fornisce le istruzioni fondamentali per logica, aritmetica e controllo di flusso tipiche dei microprocessori dell’epoca.
Bus indirizzi a 16 bit
Il MC6800 utilizza un indirizzamento a 16 bit, quindi può accedere direttamente fino a 64 KB di spazio di memoria. Operativamente, questo impone una mappa memoria in cui ROM, RAM e periferiche vengono collocate in finestre dell’intervallo 0x0000–0xFFFF mediante decodifica.
Registri e modello di programmazione
Il set registri è essenziale e orientato a codice compatto:
Accumulatore A e accumulatore B (8 bit)
Due accumulatori separati sono utili per operazioni aritmetiche/logiche e per ridurre accessi in RAM durante routine ripetitive.
Index register (16 bit)
Un registro indice a 16 bit facilita l’accesso a tabelle, buffer e strutture dati, rendendo più efficienti loop e addressing indicizzato.
Stack pointer (16 bit)
Lo stack pointer permette gestione di subroutine e interrupt con una disciplina di stack più ordinata rispetto a CPU più “minimaliste”.
Program counter e condition codes
Il program counter gestisce il flusso istruzioni e i flag (condition codes) permettono salti condizionati e controllo di stato (zero, carry, negative, overflow a seconda delle operazioni).
Istruzioni e modalità di indirizzamento: impatto pratico
Il MC6800 offre un set istruzioni orientato a:
Operazioni su byte (add/sub/and/or/xor, shift/rotate)
Gestione di salti e chiamate (branch, jump, subroutine)
Gestione stack e interrupt (push/pull, return)
Le modalità di indirizzamento tipiche includono immediato, diretto, esteso e indicizzato. In pratica, la combinazione “diretto + indicizzato” è spesso la base per firmware embedded efficienti: diretto per variabili “vicine” e indicizzato per buffer e tabelle.
Bus di sistema e integrazione con memoria e periferiche
Il MC6800 è pensato per un bus “classico” con:
Linee indirizzi (16 bit)
Linee dati (8 bit)
Segnali di controllo per lettura/scrittura e sincronizzazione
In pratica, la qualità del progetto dipende da tre elementi: mappa memoria, decodifica degli indirizzi e temporizzazione (wait-state, compatibilità con RAM/ROM e periferiche). Questo rende il MC6800 adatto a sistemi industriali dove si controllano direttamente timing e periferiche su bus.
Interrupt e affidabilità operativa
Il supporto agli interrupt consente di gestire eventi asincroni (timer, I/O, fault, comunicazioni). Operativamente, la presenza di stack e istruzioni di ritorno/gestione stato permette firmware più robusti: si possono costruire loop principali deterministici e demandare eventi esterni a ISR (interrupt service routines).
Impieghi tipici e contesto storico
Il MC6800 è stato ampiamente usato in:
Controllo industriale e automazione
Strumentazione e sistemi di misura
Terminali, sistemi embedded e schede di controllo con periferiche memory-mapped
Nel suo contesto competitivo storico, viene spesso considerato in contrapposizione concettuale con le piattaforme derivate da Intel 8080, pur con differenze di ecosistema e scelte di integrazione.
Schizzo dei collegamenti più importanti
bus indirizzi 16 bit + bus dati 8 bit + controllo ┌──────────────────────────────────────────────────────────┐ │ logica di sistema / decoding │ │ ROM (firmware), RAM (dati), I/O (periferiche), interrupt │ └───────────────────────────────┬──────────────────────────┘ │ ▼ ┌─────────────────────────────┐ │ Motorola MC6800 │ │ CPU 8 bit, addr 16 bit │ │ A/B accumulators, index 16 │ │ stack + interrupt support │ └─────────────┬───────────────┘ │ ├────────► ROM (programma) ├────────► RAM (variabili/stack/buffer) └────────► I/O (timer, porte, interfacce)
Tabella 1 – Dati di identificazione e specifiche
| Caratteristica | Valore indicativo |
|---|---|
| Dispositivo | Motorola MC6800 |
| Produttore | Motorola |
| Classe | CPU 8 bit |
| Bus indirizzi | 16 bit |
| Spazio indirizzabile | 64 KB |
| Bus dati | 8 bit |
| Registri chiave | Accumulatori A/B (8 bit), index (16 bit), stack pointer (16 bit) |
| Integrazione tipica | ROM + RAM + periferiche su bus con decodifica indirizzi |
| Ambito d’uso | Embedded/industriale, sistemi a bus parallelo |
Tabella 2 – Aspetti operativi e progettuali
| Aspetto | Significato pratico |
|---|---|
| 16 bit di indirizzamento | Mappa memoria fino a 64 KB: fondamentale la decodifica tra ROM/RAM/I-O |
| Registri A/B + index | Buon compromesso per loop e routine su buffer, con meno accessi in RAM |
| Stack pointer 16 bit | Subroutine e interrupt più ordinati, firmware più manutenibile |
| Modalità di indirizzamento | Diretto/esteso/indicizzato: ottimizzazioni semplici per codice embedded |
| Bus esterno “classico” | Progetto dipendente da timing, componenti memoria e logica di glue |
| Interrupt | Gestione eventi asincroni e periferiche senza polling continuo |