Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Motorola 68000 - Wikipedia

Motorola 68000

Da Wikipedia, l'enciclopedia libera.

Preversione del Motorola 68000
Ingrandisci
Preversione del Motorola 68000

Il Motorola 68000 è un microprocessore CISC. È il primo membro di una numerosa famiglia di microprocessori sviluppata da Motorola e è stato utilizzato da molti produttori di personal computer. Spesso ci si riferisce all'intera famiglia con il nome di "m68k" o di "68k"

Indice

[modifica] La famiglia 68000

Motorola 68EC000
Motorola 68HC000
Motorola 68008
Motorola 68010
Motorola 68012
Motorola 68020
Motorola 68EC020
Motorola 68030
Motorola 68EC030
Motorola 68040
Motorola 68EC040
Motorola 68LC040
Motorola 68060
Motorola CPU32 (detto anche Motorola 68330)
Motorola Coldfire
Motorola Dragonball

Gli utenti che erano abituati a utilizzare i PDP-11 o i sistemi VAX si adattavano facilmente al 68000. Ad eccezione della divisione dei registri che da generici vennero divisi in registri specializzati per i dati e per le istruzioni, l'architettura del sembrava una versione a 32 bit del PDP-11.

[modifica] Storia

Computer artigianale basato su Motorola 68000
Ingrandisci
Computer artigianale basato su Motorola 68000

Originariamente il MC68000 è stato progettato per essere un processore per usi generici. È stato utilizzato da diversi produttori di personal computer come Amiga, Atari e Apple. Molte console lo hanno utilizzato, per esempio la Sega Genesis/Sega Mega Drive, il NeoGeo e molte macchine da sala giochi. Nel Sega Saturn, il 68000 era dedicato alla gestione del suono e nell'Atari Jaguar era dedicato alla gestione dei dispositivi collegati al computer.

Molti progettisti lo hanno utilizzato e apprezzato e dal loro lavoro sono nati l'Amiga 1000, l'Atari ST, vari modelli di Macintosh, l'originale Sun Microsystems e le macchine UNIX della SGI. Il processore è stato utilizzato anche dai server Apollo/Domain I successori del 68000 sono stati utilizzati per molto tempo dalle macchine Unix dato che la sua architettura era molto simile a quella del Digital PDP-11 e VAX e quindi erano macchine eccellenti per per far funzionare programmi scritti in C. Il 68000 ha avuto anche molto successo come microcontroller, è stato utilizzato da HP, Printronix e Adobe per realizzare stampanti. Da una sua derivazione sono nati i processori CPU32 e Coldfire utilizzati in milioni di sistemi di automazione industriale. È stato utilizzato anche in molte apparecchiature mediche per il suo basso costo e la sua affidabilità. Nel 2001 la sua versione Dragonball è stata utilizzata dalla Palm Computing per realizzare i suoi famosi PDA e anche Handspring lo ha utilizzato per la serie Visor. sebbene le ultime versioni montino processori con nucleo ARM. Il 68000 viene utilizzato dalla Texas Instruments per realizzare le sue calcolatrici grafiche.

La versione iniziale del 68000 è stata presentata nel 1982 per competere coll'Intel 8086 e l'Intel 80286 e i loro successori. La prima versione arrivava fino a 8 MHz che per i tempi era una frequenza molto elevata. Alcune istruzioni richiedevano solo 4 cicli di clock per essere completate, questo era dovuto all'efficiente architettura interna. Motorola ha cessato di produrre il 68000 nel 2000 anche se continua a produrre alcuni suoi derivati come le CPU32. Dal 2001 Hitachi ha ripreso a produrre 68000 grazie a una licenza concessale da Motorola.

[modifica] Architettura

[modifica] Bus indirizzi

Il 68000 era un compromesso intelligente: quando venne presentato i bus a 16 bit erano la soluzione migliore in quanto relativamente veloci e non molto costosi. Motorola, infatti, progettò il 68000 con un bus a 16 bit ma l'architettura interna era quasi totalmente a 32 bit poiché era sicura, a ragione, che il prezzo dei componenti sarebbe sceso rapidamente e quindi la soluzione a 32 bit sarebbe diventata la migliore.

Bisogna sottolineare che sebbene l'ALU del 68000 era a 16 bit, il processore gestiva tutti gli indirizzamenti a 32 bit. Questo era in netto contrasto con l'8086 che utilizzava un indirizzamento della memoria a 20 bit con una gestione degli indirizzi a 16 bit, sempre che non si volessero utilizzare delle istruzioni extra molto lente per indirizzare tutta la memoria. Sebbene il bus della ALU fosse a 16 bit le operazioni sugli indirizzi venivano eseguite a 32 bit ed era prevista fuori dalla ALU un sommatore e sottrattore a 32 bit da utilizzare per le operazioni di post incremento e post decremento sugli indirizzi, senza dover attendere l'ALU e quindi senza riduzioni delle prestazioni.

Come detto, sebbene Motorola avesse rilasciato un processore a 16 bit, le sue istruzioni e la sua architettura erano evidentemente plasmati per essere a 32 bit. Questa scelta venne presa per non dover affrontare problemi di compatibilità (vedi la travagliata estensione della famiglia 80x86) quando l'architettura sarebbe migrata su un bus a 32 bit. L'architettura scelta era flessibile, infatti era già previsto sia il 68008 (processore con bus a 8 bit) che il futuro successore a 32 bit (che poi fu il 68020).

Per venire in contro alle esigenze del mercato Motorola aveva previsto inizialmente tre processori. Il 68000, dotato di un bus a 16 bit per i dati e in grado di indirizzare 24 bit di memoria (corrispondenti a 16 MByte). Il 68008, dotato di un bus a 8 bit per i dati e in grado di indirizzare 18 bit (con possibilità di utilizzare 19 o 20 bit con un trucco hardware) e infine il processore della generazione successiva dotato di un indirizzamento a 32 bit e di un bus dati a 32 bit ( in grado di indirizzare 4 GByte).

[modifica] Registri interni

La CPU ha 8 registri per i dati (D0-D7) e 8 registri per gli indirizzi (A0-A7). I registri sono di uso generico, non c'è un registro speciale dedicato alla moltiplicazione o alla divisione come nei processori precedenti. L'ultimo registro indirizzi è lo stack pointer e viene chiamato A7' o SP. I registri erano in numero adeguato, abbastanza per le operazioni più comuni ma tanti in modo da non rendere l'architettura interna e lenta.

Avere due tipi diversi di registri è una soluzioni intelligente perché permette a un programmatore accorto di realizzare una programmazione parzialmente parallela e nel contempo consente la realizzazione di due cache separate senza complicare inutilmente il processore.

[modifica] Registro di stato

Il 68000 quando esegue comparazioni, operazioni aritmetiche o logiche memorizza nel registro di stato delle condizioni generate dalle operazioni. Questo viene fatto perché il risultato può essere utilizzato per eseguire un salto condizionato e quindi quando esegue l'istruzione successiva deve essere in grado di conoscere il risultato dell'operazione precedente. I bit presenti sono quelli dello "Z"ero il "C"arry (riporto) , e"X"tend (estensione) e il "N"egation (negazione). Il bit eXtend merita una trattazione speciale. Il bit eXtend è separato dal Carry perché permette di tenere separate le operazioni aritmetiche dalle operazioni di controllo di flusso.

[modifica] Set di istruzioni

I progettisti hanno realizzato un set di istruzioni che generasse un assembler ortogonale. Le istruzioni sono divise per operazioni e modi di indirizzamento. Per quasi tutte le istruzioni sono disponibili tutti i modi di indirizzamento. Questa scelta progettuale è apprezzata dalla maggior parte dei programmatori anche se esiste una nutrita schiera di programmatori che non amano gli assembler ortogonali.

Per i programmatori a basso livello l'assembler del 68000 era un assembler molto chiaro, un programmatore accorto era in grado mentre scriveva il programma di comprendere come il processore lo avrebbe interpretato dato che la corrispondenza tra le istruzioni assembler e il microcodice contenuto nel processore era molto stretta.

La dimensione minima dell'istruzione era di 16 bit. Nonostrante molte istruzioni usavano dei bit addizionali per memorizzare gli indirizzi, i metodi di indirizzamento , etc.

Molti progettisti ritengono che l'architettura del 68000 abbia un ottimo compromesso tra costi e benefici. Permette di realizzare programmi compatti ma allo stesso tempo non sacrifica i modi di indirizzamento consentendo al programmatore una buona libertà di scelta durante la programmazione.

Molti sistemi embedded sono progettati tenendo molto in considerazione il costo della memoria. Infatti architetture come quella ARM espressamente nate per i sistemi embedded normalmente sacrificato la varietà di istruzioni e i modi di indirizzamento per poter ottenere del codice più compatto dei normali processori.

[modifica] Modo privilegiato

Questa CPU e le sue evoluzioni sono dotate di due livelli di esecuzione. Il livello utente e il livello supervisore. Durante il livello utente il programma ha accesso a tutti i registri esclusi i registri che gestiscono gli interrupt. L'esecuzione a livello supervisore invece ha accesso a tutti i registri e quindi può gestire gli interrupt. La modalità in esecuzione è legata a un bit memorizzato nel bit di stato.

Un notevole vantaggio di aver due modalità separate è che anche gli stack pointer delle due modalità sono separate e questo permette ai sistemi multitasking di usare stack per i singoli task molto piccoli, dato che non bisogna allocare spazio per la gestione degli interrupt visto che la loro gestione è demandata alla modalità supervisore e quindi al suo stack che è separato degli altri. Avere due modalità separate è comodo anche per il sistema operativo dato che i programmi vengono fatti funzionare in modalità normale mentre il sistema operativo funzionando in modalità supervisore può eseguire operazioni che sono impedite agli altri programmi.

[modifica] Interrupt

La CPU gestisce 8 livelli di interrupt. I livelli vanno dal livello 0 al livello 7 e sono a priorità. Quindi un livello ad alta priorità può sempre interrompere un livello a priorità inferiore. Nel registro di stato una istruzione privilegiata seleziona il livello di interrupt attualmente in esecuzione in modo da ignorare gli eventuali interrupt di livello inferiore. Il livello 7 è non mascherabile mentre il livello 0 non è in grado di bloccare nessun interrupt in esecuzione. I livelli come già detto sono memorizzati nel registro di stato e sono visibili in modo utente.

La tavola delle eccezioni (interrupt vector addresses) è posizionata nelle locazioni di memoria comprese tra 0 e 1023 e permette 256 vettori a 32 bit.Il primo vettore memorizza il punto di partenza dello stack degli indirizzi, il secondo memorizza lo stack delle istruzioni. I vettori tra 3 e 15 sono utilizzati per segnalare gli errori: errore di bus, indirizzo errato, istruzione illegale, divisone per zero, etc. Dal vettore 24 in poi vengono memorizzati gli interrupt, i 15 livelli di TRAP (interruzione software dell'esecuzione dei programmi da parte del processore) e i vettori definiti dall'utente.

Il gestore degli interrupt inizialmente era un chip separato, il 68901, questo chip complicava notevolmente il disegno della piastra e rallentava il processore dato che ogni interrupt doveva essere convertito dal chip. Il 68901 era provvisto anche di una UART molto semplice e di un timer per gli interrupt. Il 68901 aveva molti difetti inclusa una predisposizione a perdere gli interrupt di alto livello se questo e il timer scattavano nello stesso istante. La controparte prodotta dalla Mostek era decisamente migliore.

Durante l'avvio del computer avere i vettori a indirizzi fissi era molto comodo, dato che consentiva di programmare le ROM dei computer senza troppe complicazioni dovute alle allocazioni dinamiche dei vettori. Ma quando il sistema operativo era caricato una gestione fissa dei vettori era una tecnica sconsigliabile dato che limitava il sistema operativo e lo rendeva molto legato al funzionamento del singolo modello di processore. Per risolvere questo problema spesso i produttori avviavano il computer con le ROM residenti a partire da un particolare indirizzo e dopo l'avvio l'indirizzo di partenza veniva modificato e al posto della ROM veniva allocata della RAM che poteva essere modificata senza problemi.

Un ulteriore problema derivava dalla modalità privilegiata. I progettisti l'hanno realizzata pensando a un sistema operativo come Unix che per ragioni di sicurezza attua un netta distinzione tra programmi e sistema operativo. L'idea era buona ma l'implementazione si rivelò lacunosa, vi erano delle dimenticanze che la rendevano non sicura. Questi errori vennero corretti nelle generazioni successive.

Il 68000 non era in grado di gestire correttamente un errore nell'accesso alla memorie e quindi non era in grado di implementare una vera gestione della memoria virtuale, una necessitò vitale per molti sistemi operativi. La memoria virtuale è una semplice tecnica utilizzate per simulare la disponibilità di memoria RAM praticamente infinita. Quando il processore accedeva a una locazione di memoria non esistente attivava un interrupt che provvedeva a selezionare un blocco di RAM, prelevarne il contenuto memorizzandolo su disco rigido e poi manipolava gli indirizzi in modo che gli indirizzi inesistenti puntassero alla zona di memoria appena liberata. Alcuni produttori di sistemi Unix realizzarono macchine basate sul 68000 con il supporto della memoria virtuale. Ci riuscirono utilizzando due processori con il clock sfasato. Quando il primo processore si bloccava per via di un accesso a un indirizzo inesistente la logica di controllo impediva al secondo di fare la stessa fine e attivava l'interrupt di gestione della memoria virtuale che dopo aver liberato la RAM e aver opportunamente manipolato gli indirizzi sbloccava il primo processore che riprendeva l'elaborazione come se non fosse successo niente. Ovviamente era una tecnica molto costosa e inefficiente e appena usci il 68010 i produttori aggiornarono le macchine eliminando il secondo processore.

Un problema meno visibile ma non meno importante del 68000 era che avendo molte istruzioni e molti modi di indirizzamento era difficile da simulare dato che il simulatore doveva tener conto di moltissimi casi con moltissime varianti. Questo è un problema che si presenterà anche in alcune versioni moderne della sua architettura. Nel controllo avionico infatti è stato scelto il processore Intel 80386 per la sua semplicità di simulazione rispetto al corrispettivo processore Motorola.

La revisione successiva del processore, il Motorola 68010 risolse la maggior parte dei problemi del 68000.

[modifica] Dettagli sul set di istruzioni

Le modalita di indirizzamento sopportate sono:

  • Registro diretto
    • data register, e.g. "D0"
    • address register, e.g. "A6"
  • Registro indiretto
    • Simple address, e.g. (A0)
    • Address with post-increment, e.g. (A0)+
    • Address with pre-decrement, e.g. -(A0)
    • Address with a 16-bit signed offset, e.g. 16(A0)
    • Nota: la modalità di incremento e decremento dipende dalla dimensione dell'operazione utilizzata. Una lettura di un byte incrementa di 1, una lettura di una word di 2 e una lettura di una long di 4.
  • Registro indiretto con indice
    • 8-bit signed offset, e.g. 8(A0, D0) or 8(A0, A1)
  • PC (program counter) relativo con spiazzamento
    • 16-bit signed offset, e.g. 16(PC).
    • 8-bit signed offset with index, e.g. 8(PC, D2)
  • Accesso alla memoria di tipo assoluto
    • Either a number, e.g. "$4000", or a symbolic name translated by the assembler
    • Most 68000 assemblers used the "$" symbol for hexadecimal, instead of "0x".
  • Modo immediato
    • Stored in the instruction, e.g. "#400".

In più:accesso al registro di stato e nei modelli successivi a altri registri speciali.

Molte istruzioni hanno un punto davanti alla parola e permettono di definire la dimensione dell'operazione. Quindi 8-bit è (".b"), 16-bit è (".w"), e 32-bit è (".l").

Molte istruzioni supportano il dyadic, cioè quando la sorgente e la destinazione dell'operazione sono la stessa e la destinazione viene modificata. Esempi significativi sono:

  • Aritmentica: ADD, SUB, MULU (unsigned multiply), MULS (signed multiply), DIVU, DIVS, NEG (additive negation), and CMP (a sort of subtract that set the status bits, but did not store the result)
  • Binary Coded Decimal Arithmetic: ABCD, and SBCD
  • Logia: EOR (exclusive or), AND, NOT (logical not)
  • Shifting: (logical, i.e. right shifts put zero in the most significant bit) LSL, LSR, (arithmetic shifts, i.e. sign-extend the most significant bit) ASR, ASL, (Rotates through eXtend and not:) ROXL, ROXR, ROL, ROR
  • Bit manipulation in memory: BSET (to 1), BCLR (to 0), and BTST (set the Zero bit)
  • Controllo dei sistemi Multiprocessore: TAS, test-and-set, Permette l'esecuzione di un operazione non interrompibile sul bus, permette di implementare semafori per la gestione di dispositivi condivisi.
  • Controllo dei flussi: JMP (jump), JSR (jump to subroutine), BSR (relative address jump to subroutine), RTS (return from subroutine), RTE (return from exception, i.e. an interrupt), TRAP (trigger a software exception similar to software interrupt), (CHK a conditional software exception)
  • Decisioni: Bcc (il salto viene deciso da "cc". Questo specifica una delle 16 possibili condizioni di test da verificare sul registro di stato).
  • Decrementa e salta: DBcc (dove "cc" sta per l'istruzione di salto) dove decrementa il registro D e salta alla destinazione se la condizione controllata precedentemente è positiva. Se il risultato della condizione è -1 il processore salta, se è 0 no. Questa particolare convenzione si rivela molto comoda per controllare i loop, si decrementa fino a quando il valore diventa 0 e in quel caso il loop finisce perché il processore non effettua il salto.
Lista dei microprocessori Motorola

6800 | 6809 | 68000 | 68008 | 68010 | 68012 | 68020 | 68EC020 | 68030 | 68EC030 | 68040 | 68EC040 | 68LC040 | 68060 | 88000 | Motorola Dragonball | Coldfire | PowerPC | PowerPC G3 | PowerPC G4 | PowerPC G5

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com