MOS 6502

Da Wikipedia, l'enciclopedia libera.
MOS 6502
Central processing unit
MOS 6502AD 4585 top.jpg
Il processore MOS 6502 in un contenitore DIL-40 plastico.
Prodotto 1975
Progettato da MOS Technology
Frequenza CPU MHz / 2 MHz
Microarchitettura 8 bit
Package DIP40
Applicazioni home computer, arcade

Il MOS 6502 è un microprocessore a 8 bit presentato da MOS Technology nel settembre del 1975. Quando il MOS 6502 fu messo in vendita, il prezzo partiva dai 20 ai 30 dollari per arrivare fino ai 40,[1] era la più economica CPU disponibile sul mercato, costando meno di un sesto dei modelli concorrenti: ad esempio, il Motorola 6800 era venduto a 175$.[2] Nonostante ciò, era più veloce della maggior parte di essi, ed assieme allo Zilog Z80 venne usato in molti prodotti commercializzati tra la fine degli anni settanta ed i primi anni ottanta, come giochi arcade e console domestiche, personal ed home computer, quali l'Apple II ed il Commodore VIC-20.[3]

Il MOS 6502 venne prodotto, su licenza, anche da altre ditte fra cui Rockwell International e Synertek ed in seguito fu concesso in licenza ad altre ditte ancora. Oggi è ancora prodotto da Western Design Center, una società fondata da Bill Mensch, uno dei progettisti del chip, come processore per sistemi embedded.

Il MOS 6502 fu venduto anche in alcune varianti, tra cui si annoverano il MOS 6507, usato nella console Atari 2600, ed il MOS 6509, usato nella linea di computer Commodore CBM. L'evoluzione del 6502 fu il famoso MOS 6510, utilizzato come CPU del Commodore 64.

Storia[modifica | modifica sorgente]

Origini in Motorola[modifica | modifica sorgente]

Il MOS 6502 fu progettato dallo stesso gruppo che aveva sviluppato il MOS 6501 e che comprendeva diversi degli ingegneri che avevano lavorato sul Motorola 6800, tra cui Chuck Peddle e Bill Mensch, usciti in massa da Motorola nel 1974.[4]

Peddle aveva promosso commercialmente il 6800 ed aveva visitato molti potenziali clienti per presentare il microprocessore, pensato per un impiego in sistemi embedded. Nonostante le favorevoli impressioni, il processore non vendeva come previsto perché il prezzo di lancio, superiore ai 300$, era considerato eccessivamente alto: molti clienti consideravano equo un prezzo di 25$ a chip. Peddle propose perciò a Motorola di sviluppare una versione depotenziata del 6800 da poter vendere a quel prezzo, ma la dirigenza non accolse il suo suggerimento.[5][6][7]

Nonostante il disinteresse dei vertici societari, Peddle iniziò per proprio conto a lavorare a quell'idea. Il nuovo processore era simile al 6800 ma usava meno registri ed aveva un solo accumulatore. Il progetto, inoltre, correggeva uno dei più grossi limiti del 6800, permettendo di utilizzare l'accumulatore ed i registri indice insieme come input ed offset. Il nuovo chip era inoltre capace di eseguire calcoli in aritmetica BCD (Binary-coded decimal) ed aveva un generatore di clock interno.

Nonostante la disapprovazione dei vertici di Motorola, il gruppo guidato da Peddle continuava a lavorare sul progetto, cominciando a maturare nel contempo malcontento per l'assenza di supporto che ricevevano. Alla fine, la dirigenza decise di fermare lo sviluppo del nuovo chip: come risposta, Peddle e molti dei suoi colleghi lasciarono Motorola alla ricerca di una società che fosse stata interessata a produrre tale chip.[6]

Gli sviluppatori del 6800 passano in MOS Technology[modifica | modifica sorgente]

Peddle prese contatti con MOS Technology, all'epoca un piccola azienda produttrice di circuiti integrati, fondata da Allen-Bradley per produrre processori per calcolatrici elettroniche per conto di Texas Instruments, ma che si era poi dedicata anche alla produzione di altri tipi di chip quando quest'ultima, per ridurre i costi dei suoi prodotti, aveva iniziato a prodursi in proprio gli integrati. Uno dei prodotti più diffusi di MOS Technology era una replica su un singolo chip del popolare gioco Pong. Nel mese di agosto del 1974 Peddle ed altri 7 ingegneri Motorola entrarono a lavorare presso MOS Technology: Harry Bawcum, Ray Hirt, Terry Holdt, Mike James, Will Mathis, Bill Mensch e Rod Orgill.[4]

Peddle ed il suo gruppo terminarono lo sviluppo della loro idea che prese corpo in 2 nuovi microprocessori che erano compatibili con i chip periferici di Motorola: il MOS 6501, progettato da Rod Orgill, che poteva essere inserito negli zoccoli del 6800 perché compatibile a livello di piedinatura con quest'ultimo, ed il MOS 6502, progettato da Bill Mensch, simile al precedente ma con una piedinatura differente ed un circuito generatore di clock integrato. Questi chip non potevano eseguire i programmi scritti per il 6800 perché avevano un'architettura ed un insieme di istruzioni differenti.

I nuovi processori furono largamente pubblicizzati su diverse riviste del settore: un annuncio apparve sul numero di luglio di Electronics[8], un altro su quello di agosto di EE Times,[9]; seguirono poi altri annunci su EDN (20/09/1975), Electronic News (03/11/1975) e Byte (novembre 1975). Annunci del 6501 apparvero in diverse pubblicazioni durante il mese di agosto del 1975: MOS Technology annunciava la presentazione del chip alla fiera dell'elettronica WESCON di San Francisco, che si sarebbe tenuta dal 16 al 19 settembre del 1975, dove sarebbe stato possibile acquistare il microprocessore a 25$.[10] Nel mese di settembre gli annunci riguardavano anche il 6502, che veniva annunciato disponibile sempre durante il WESCON a 25$ mentre il 6501 veniva riprezzato a 20$.[1]

Motorola fa causa a MOS Technology[modifica | modifica sorgente]

Motorola rispose abbassando subito il prezzo del 6800, che già era venduto a 175$, portandolo a 69$[2] e citando MOS Technology nel mese di novembre del 1975:[11] essa affermava infatti che i suoi 8 ex-dipendenti avevano utilizzato informazioni tecniche sviluppate presso i propri uffici per progettare i microprocessori 6501 e 6502. Ricevuta la citazione il finanziatore di MOS Technology, Allen-Bradley, considerando anche che l'altro settore di interesse di MOS Technology, i chip per calcolatrici, non andava bene a causa di una guerra dei prezzi intentata da Texas Instruments contro gli altri produttori, decise di limitare le possibili perdite e cedette le proprie quote ai fondatori della società.[4]

La causa si risolse nel mese di maggio del 1976 con MOS Technology che decise di eliminare il chip 6501 che poteva essere montato negli zoccoli del 6800 e di acquistare le licenze dei chip periferici di Motorola.[12][13]

La presentazione del 6502[modifica | modifica sorgente]

Pubblicità dei MOS 6501 e 6502.

Al WESCON il 6502 fu prezzato a 25$. MOS Technology aveva uno stand con un grosso contenitore pieno di chip. Dato che non era riuscita a portare un numero sufficiente di esemplari funzionanti, decise di riempire il contenitore con i chip difettosi e mettere quelli funzionanti in cima, dando così l'impressione che i propri stabilimenti fossero già in grado di reggere una produzione in quantitativi industriali.[14] Nella stessa fiera il 6800 e l'Intel 8080 erano in vendita a 179$.[15] All'inizio le persone pensarono che il prezzo del 6502 fosse sbagliato o ci fosse dietro un imbroglio ma durante lo svolgimento della fiera esse videro che sia Motorola che Intel abbassarono il prezzo dei loro chip a 69$.[2][16] Questa riduzione dei prezzi legittimò il 6502, che cominciò ad essere venduto a centinaia di unità.[14]

Il MOS KIM-1[modifica | modifica sorgente]

Il MOS KIM-1(1975).

Sistemate le questioni legali ed ottenuto un buon riscontro al WESCON, MOS doveva pensare a come spingere gli sviluppatori a provare il loro nuovo processore 6502. Peddle sviluppò quindi un minicomputer denominato MDT-650 (da "Microcomputer Development Terminal") mentre un altro gruppo progettò il KIM-1. Il KIM-1 fu messo in commercio e, con stupore dei suoi progettisti, fu acquistato non solo da ingegneri ed addetti ai lavori ma anche da molti hobbisti. Anche altri sistemi simili, come l'AIM 65 di Rockwell ed il SYM-1 di Synertek (che producevano entrambe il 6502 su licenza), riscossero lo stesso buon successo commerciale.

Gli impieghi del 6502[modifica | modifica sorgente]

Uno dei primi impieghi del nuovo processore fu come CPU del computer Apple I presentato nel 1976 dalla neonata Apple, una società fondata da Steve Jobs e Steve Wozniak. Il 6502 fu poi utilizzato nel Commodore PET e nell'Apple II del 1977, ed in diversi altri computer ad 8 bit tra cui la famiglia di computer Atari ad 8 bit, la serie BBC Micro, il Commodore VIC-20 ed i computer di Ohio Scientific e Oric. Il Commodore 64 usava il successore del 6502, il MOS 6510, ma la sua unità a dischi modello 1541 usava un 6502 per eseguire il codice del DOS integrato nell'unità stessa.

Un altro impiego importante del 6502 e dei suoi derivati fu negli apparati videoludici. Il primo di tali apparecchi che usò un chip della famiglia 6502 fu la console Atari 2600: essa utilizzava il MOS 6507, una versione depotenziata del 6502 con un bus indirizzi ridotto ed un risultante package con soli 28 piedini. A causa di tale limitazione, il 6507 poteva indirizzare solo 8 KB di memoria, ma il package ridotto ne riduceva le dimensioni ed il costo. Nonostante ciò, l'Atari 2600 è stata venduta in 30 milioni di esemplari, ognuna con un 6507 al suo interno.

Un'altra console basata su un chip derivato dal 6502 fu la popolare Nintendo Famicon, presentata da Nintendo nel 1983 in Giappone e venduta un paio di anni più tardi in tutto il mondo come Nintendo Entertainment System, o NES. Il NES usava una versione del chip prodotta da Ricoh che, rispetto al 6502, non gestiva l'artimetica BCD ma offriva 22 registri aggiuntivi (mappati in memoria) per la gestione del suono, la lettura dei gamepad e l'accesso diretto alla memoria per gli sprite. Tale chip, chiamato 2A03 nei sistemi NTSC e 2A07 in quelli PAL (la differenza risiedeva nel diverso divisore interno del clock usato generare l'immagine ed il suono a causa della differente frequenza delle immagini PAL e NTSC), fu prodotto esclusivamente per Nintendo.

Descrizione[modifica | modifica sorgente]

Piedinatura del MOS 6502 (DIP40)

Il 6502 è un processore ad 8 bit con un bus indirizzi a 16 bit, capace quindi di indirizzare direttamente fino a 64 KB di memoria. Internamente lavora alla stessa velocità impostata dal clock esterno, tipicamente da 1 a 2 MHz: ad esempio, lo Zilog Z80 divide internamente il clock esterno per 4. Nonostante il clock inferiore le sue prestazioni sono equiparabili a quelle di altre CPU con frequenze maggiori: ciò è dovuto alla particolare architettura interna adottata, basata su una pipeline statica e sul fatto che opera con un ciclo a 2 fasi e non contando i cicli di clock. Come molte altre CPU dell'epoca, la logica NMOS del 6502 non è sequenziata da microcodice residente in ROM ma usa per la decodifica e la sequenziazione delle istruzioni un PLA (che occupa circa il 15% della superficie del chip). Come altri microprocessori ad 8 bit, il 6502 esegue una limitata sovrapposizione delle operazioni di fetch ed esecuzione delle istruzioni.

La bassa frequenza di clock riduceva i vincoli sulle velocità delle periferiche collegate alla CPU, dato che solo il 50% del ciclo di clock era disponibile per l'accesso alla memoria (a causa del progetto asincrono della CPU, questa percentuale varia molto tra le diverse versioni del chip). Ciò era importante in un periodo in cui le memorie affidabili avevano tempi di accesso nell'ordine dei 450-250 ns. Il 6502 era stato progettato per essere infatti semplice ed economico, ed abbassare i costi dell'intero sistema era un fattore molto importante per concorrere nei mercati degli home computer e delle console per videogiochi.

Come il suo precursore, il Motorola 6800, il 6502 aveva pochi registri: all'epoca in cui il 6502 fu progettato i transistor contenuti in un integrato influivano molto sul suo costo e mantenerne il loro numero basso contribuiva a contenere i costi. Inoltre la RAM esterna era più veloce di una CPU, quindi era sensato ottimizzare l'architettura per l'accesso alla memoria piuttosto che incrementare il numero dei registri del chip. Il 6502 fu progettato con l'obiettivo di essere molto economico: perciò furono usati circa 4.000 transistor contro i circa 2.300 dell'Intel 4004 ed i circa 8.500 dello Z80.[17]

I registri del 6502 includono:

Lo stack è mappato in memoria sulla pagina 1 (indirizzi da $0100 a $01FF, 256-511). Il software accede allo stack tramite 4 istruzioni che permettono di inserire (PUSH) o recuperare (PULL) il valore dell'accumulatore o del registro di stato. Lo stesso stack è usato dalle istruzioni di gestione delle sub-routine JSR (Jump to SubRoutine) e RTS (ReTurn from Subroutine) nonché dalle routine di gestione degli interrupt.

Il 6502 usa il registro di stack e quelli indice con diverse modalità di indirizzamento, inclusa una veloce modalità detta "pagina diretta" o "pagina zero", simile a quella del PDP-8, che permette di accedere alle locazioni di memoria della pagina zero (indirizzi $0000-$00FF, 0-255) con l'uso di un indirizzo composto da solo 8 bit, risparmiando il ciclo normalmente richiesto per caricare il byte alto dell'indirizzo nel registro indice. Molto del codice scritto per il 6502 sfrutta spesso tale particolarità ed usa tali locazioni di memoria alla stregua di come sulle altre CPU vengono usati i registri interni. Su alcuni computer basati sul 6502, come il Commodore VIC-20, il sistema operativo usava quasi tutte le locazioni della pagina zero, lasciandone poche libere all'utente.[18]

Le modalità di indirizzamento sono inoltre "sottintese", concorrendo per 1 byte alla dimensione dell'istruzione. Esse sono (tra parentesi l'occupazione totale di memoria):

  • absolute, "assoluta" (3 byte)
  • indexed absolute, "indicizzata assoluta" (3 byte)
  • indexed zero-page, "indicizzata su pagina zero" (2 byte)
  • relative, "relativa" (2 byte)
  • accumulator, "accumulatore (1 byte)
  • indirect,x, "indiretta,x", e indirect,y, "indiretta,y" (2 byte)
  • immediate, "immediata" (2 byte)

La modalità assoluta è una modalità di uso generico: le istruzioni di salto usano un indirizzo ad 8 bit con segno nell'intervallo -128 / +127, indicando quindi un indirizzo fino a 128 byte prima o 127 byte dopo l'istruzione di indirizzamento (che si traduce nell'intervallo -126 / +129 rispetto alla cella di inizio dell'istruzione di salto). La modalità accumulatore usa invece l'accumulatore come un indirizzo effettivo e non richiede nessun dato come operando. La modalità immediata usa un operando letterale ad 8 bit.

Le modalità indirette sono utili per iterazioni e per processare array di dati. Con la modalità "(indirect),y" a 5/6 cicli, il registro Y ad 8 bit viene sommato ad un indirizzo a 16 bit nella pagina zero indicato da 1 solo byte seguito dall'opcode. Il registro Y è per questo un registro "indice" nel senso che viene usato per memorizzare l'attuale "indice", a differenza del registro X del 6800 dove un indirizzo base è immagazzinato direttamente ed a cui un offset può accedere direttamente). Per incrementare il registro indice e scorrere l'array byte per byte vengono impiegati solo 2 cicli in più. Nella poco frequente modalità "(indirect),x" l'indirizzo effettivo per l'operazione viene trovato in pagina zero all'indirizzo composto aggiungendo il secondo byte dell'istruzione al contenuto del registro X. Usando le modalità indicizzate, la pagina zero opera proprio come un insieme di 128 registri indice aggiuntivi.

Il 6502 è capace di eseguire operazioni di addizione e sottrazione sia binarie che BCD. Ponendo la CPU in modalità BCD con l'istruzione SED i risultati delle operazioni vengono espressi in formato decimale: ad esempio, la somma $99 + $01 restituisce $00 con il flag del resto che viene impostato a 1, mentre in modalità binaria (istruzione CLD) la stessa operazione restituisce $9A con il flag del resto che viene impostato a 0. A parte l'Atari BASIC, tale modalità fu usata molto raramente negli home computer.

Il 6502 è stato anche indicato come uno dei primi processori RISC",[19][20] per via del suo set di istruzioni efficiente, semplice e quasi ortogonale (molte istruzioni possono operare con differenti modalità di indirizzamento) nonché per i suoi 256 "registri" in pagina zero. Il 6502 tecnicamente non è comunque un processore RISC dato che le operazioni matematiche possono leggere qualunque cella di memoria (non solo quelle in pagina zero) e diverse istruzioni (come INC, ROL, ecc...) modificano anche la memoria, contrariamente alla filosofia RISC del "load/store". Inoltre l'ortogonalità delle istruzioni è altrettanto spesso associata a "CISC". In termini di prestazioni il 6502 si comportava comunque bene, se paragonato ad altre CPU dell'epoca come lo Z80, che usava un clock molto più alto (tipicamente 3,5-4 MHz) ed il 6502 è accreditato di essere l'ispiratore di processori RISC come gli ARM,[20] anche se tale ispirazione era circoscritta alla semplice implementazione piuttosto che all'architettura, che è molto diversa rispetto a quella degli ARM.

Esempio di codice[modifica | modifica sorgente]

Quello che segue è il classico programma Hello world scritto in codice assembly 6502 per i computer con KERNAL Commodore:

 A_CR  = $0D              ;ritorno a capo
 BSOUT = $FFD2            ;routine in ROM del Kernal ROM che scrive sul disposito di output
 ;
         LDX #$00         ;inizializza l'indice nel registro X
 ; 
 LOOP    LDA MSG,X        ;legge il messaggio testuale
         BEQ LOOPEND      ;fine del messaggio
 ;
         JSR BSOUT        ;stampa un carattere
         INX
         BNE LOOP         ;ripete
 ;
 LOOPEND RTS              ;esce dalla subroutine
 ;
 MSG     .BYT 'Hello, world!',A_CR,$00

Interfacce dedicate[modifica | modifica sorgente]

Ad esclusione del MOS 6522 e di pochi altri componenti, MOS Technology usò chip periferici derivati da quelli della famiglia 6800:

  • MOS 6520 PIA (Parallel Interface Adapter) - quasi clone del Motorola 6821 Motorola: ha 2 porte ad 8 bit con direzionalità indirizzabile al bit
  • MOS 6522 VIA (Versatile Interface Adapter) - è il 6520 con l'aggiunta di porte seriali, timer ed altri notevoli miglioramenti. All'epoca costava circa ¼ del Motorola 6821
  • MOS 6526 CIA (Complex Interface Adapter)- evoluzione del 6522, fu usato sul Commodore 64 per le interfacce esterne e per gestire la tastiera
  • MOS 6545 CRTC (CRT Controller)- porta video con lievissime estensioni rispetto al Motorola 6845 (come sempre per motivi legali)
  • MOS 6551 ACIA (Asynchronous Communications Interface Adapter) - derivato dal Motorola 6850, espleta i servizi di UART e gestisce il protocollo RS-232

Varianti e derivati[modifica | modifica sorgente]

Del 6502 furono prodotte diversi varianti e chip derivati:

  • MOS 6507: presentava un bus indirizzi ridotto capace di indirizzare solo 8 KB. Questo chip fu usato solo nella console Atari 2600.
  • MOS 6509: il bus indirizzi fu esteso a 20 bit. Con l'integrazione sul chip della circuiteria per la gestione del bank switching, il 6509 poteva indirizzare fino ad 1 MB di memoria. Fu usato solo sui Commodore CBM.
  • MOS 6510: fu usato come CPU del popolare Commodore 64. Rispetto al 6502 presentava una porta I/O aggiuntiva ed un pin per l'uscita del segnale di clock.
  • WDC 65C02: fabbricato da Western Design Center, era un 6502 in tecnologia CMOS con più opcode ed alcuni bug del progetto originale corretti (come ad esempio alcuni flag che non venivano, contrariamente alla documentazione, aggiornati dopo determinate operazioni).
  • Ricoh 2A03: variante del 6502 senza la modalità BCD, usata esclusivamente nella console Nintendo Entertainment System.

MOS 6512[modifica | modifica sorgente]

Il MOS 6512 è una variante che lavora con un clock esterno: il 6502 originale utilizza, infatti, un generatore interno per creare i segnali di clock "Phase 1" (Φ1) e "Phase 2" (Φ2). Fu usato nel BBC Micro B+64, dove l'utilizzo del clock esterno permetteva di far lavorare normalmente la CPU a 2 MHz, per portarla ad 1 MHz quando doveva accedere a periferiche lente quali il bus di espansione, l'ADC (Analog to Digital Converter) ed il VIA.[21]

Derivati a 16 bit[modifica | modifica sorgente]

Western Design Center progettò anche una versione a 16 bit bit del 65C02, il WDC 65C816, nonché il WDC 68C082, una versione ibrida basata su un core 65C816 capace di indirizzare 64 KB di memoria e con una piedinatura compatibile con quella del 6502/65C02: esso poteva sostituire quest'ultimo e funzionava come un normale 65C02 ma poteva anche essere configurato via software per funzionare con i registri interni "A" e "X" a 16 bit. Il 65C802 non ha avuto molta diffusione e non è più in produzione. Il 65C816 è stato usato nella console Super Nintendo Entertainment System e nell'Apple IIGS ed è ancora in produzione.[22]

Mitsubishi realizzò il 65816, un microcontrollore con un'architettura simile a quella del 65C816, anche se non compatibile al 100% con essa.

Synertek pubblicò la scheda tecnica dell'SY6516, una versione a 16 bit del 6502 che però non fu mai messa in commercio.[23]

Problemi nel progetto[modifica | modifica sorgente]

Il progetto originale del 6502 ed i suoi derivati sono noti per avere un certo numero di istruzioni non documentate, che variano molto da un chip all'altro a seconda del produttore. Nel 6502 la decodifica delle istruzioni è implementata in una logica programmabile (simile ad un PLA) che definisce solo 151 dei 256 possibili opcode: i restanti 105 causano strani ed imprevedibili effetti (ad esempio il blocco immediato del processore, l'esecuzione di diverse operazioni valide contemporaneamente) oppure semplicemente non eseguono nulla. Eastern House Software sviluppò il "Trap65", un dispositivo che poteva essere inserito fra il processore ed il suo zoccolo per catturare questi opcode non documentati e convertirli in istruzioni BRK (che generano un interrupt software). Alcuni programmatori utilizzarono questa caratteristica per estendere il set di istruzioni del 6502 scrivendo delle routine per gli opcode non documentati che erano eseguite intercettando i vettori dell'istruzione BRK, posti all'indirizzo $FFFE. Western Design Center sostituì invece nel suo 65C02 tutti gli opcode illegali con istruzioni NOP, anche se con tempi di esecuzione ed occupazione in byte differenti.

L'istruzione di salto indiretto JMP (byte basso dell'indirizzo) non funziona del tutto. Se byte basso dell'indirizzo contiene il valore $FF (quindi ogni indirizzo nel formato $xxFF), il processore non eseguirà l'istruzione all'indirizzo memorizzato in $xxFF/$xxFF+1 ma a quello memorizzato in $xxFF/$xx00. Questo bug affligge tutti chip in versione NMOS ma non i 6502 ed i suoi derivati realizzati in logica CMOS.[24]

La modalità di indirizzamento indiretta basata sul registro Y ((Ind),Y) è parzialmente difettosa. Se l'indirizzo in pagina zero è $FF (ossia l'ultima locazione di memoria della pagina zero) il processore non esegue i dati dall'indirizzo puntato da $00FF e $0100 + Y ma invece da $00FF e $0000 + Y. Tutti i chip in logica NMOS sono affetti da questo bug, che è stato corretto in molti di quelli in logica CMOS, tranne il 65C02.

La modalità di indirizzamento indiretta basata sul registro X ((Ind),X) è anch'essa difettosa se l'indirizzo in pagina zero è $FF: il problema è identico al precedente caso.

La modalità di indirizzamento indicizzata delle versioni NMOS del 6502 presentano tutte un problema nel caso di indirizzi ai margini delle pagine: in questo caso viene effettuata una lettura supplementare di un indirizzo non valido. Questo bug può causare dei problemi nel caso in cui si acceda ad hardware che opera durante una lettura (ad esempio azzerando un timer o i flag di IRQ, inviando un segnale di sincronizzazione su una linea I/O, ecc...). Questo bug è stato corretto nelle versioni CMOS, in cui il processore esegue una lettura supplementare del byte dell'ultima istruzione.

Le istruzioni di lettura/modifica/scrittura ad un particolare indirizzo eseguono 1 ciclo di lettura e 2 di scrittura. Ciò può causare problemi durante il secondo ciclo di scrittura nel caso si acceda ad hardware che opera durante la scrittura. Questo difetto è stato risolto nella versione CMOS del 6502, in cui il processore esegue 2 cicli di lettura ed 1 di scrittura.

I flag di stato "N" (risultato negativo), "V" (segnalazione di overflow) e "Z" (risultato pari a zero) non sono validi quando il processore esegue operazioni aritmetiche in modalità BCD, dato che questi flag riflettono lo stato delle operazioni in modalità binaria e non in quella BCD. Questa limitazione è stata rimossa nelle versioni CMOS. Questo bug è stato in passato utilizzato come test per verificare se la CPU fosse in logica NMOS oppure CMOS.[25]

Quando il processore si trova in modalità BCD mentre viene eseguito un interrupt hardware, esso non torna in modalità binaria. Questo difetto può generare nel codice delle routine di interrupt dei bug difficili da scovare se esse non deselezionano la modalità BCD prima di eseguire qualunque operazione aritmetica. Un sistema operativo affetto da questo problema era il KERNAL del Commodore 64, che non gestiva correttamente questo difetto del processore. Anch'esso fu risolto nelle versioni CMOS.

Il pin "SO" (Set Overflow) era stato concepito per essere usato nei driver per dispositivi ad alta velocità: quando veniva applicata una tensione (segnale "HIGH") il flag di overflow "V" del processore veniva impostato immediatamente a 1. Se tale caratteristica avesse funzionato bene, essa avrebbe eliminato un'istruzione di caricamento dal driver del dispositivo, riducendo il numero di istruzioni in un ciclo di trasferimento dati del 25%, controllando ovviamente molto accuratamente il progetto del sistema per evitare di non alterare il processo di calcolo. In pratica, però, tale caratteristica non fu praticamente mai usata.

Il set di istruzioni del 6502 include BRK) (opcode $00), che tecnicamente è un interrupt software (simile all'istruzione SWI del Motorola 6800 e dei processori ARM). BRK è spesso usata per interrompere l'esecuzione di un programma ed avviare un editor in linguaggio macchina per il test ed il debugging durante lo sviluppo del software. Può essere anche usata per instradare l'esecuzione del programma usando una semplice tabella di salto (similmente a come l'Intel 8088 ed i suoi derivati gestiscono gli interrupt software tramite un numero). Sfortunatamente, se si verifica un interrupt hardware mentre il processore sta eseguendo un'istruzione BRK allora il 6502 ignora quest'ultima ed esegue direttamente il primo. Questo difetto è stato corretto nelle versioni CMOS del processore.

Anche se non sono propriamente un bug, i comportamenti delle istruzioni JSR (Jump to SubRoutine) e RTS (ReTurn from Subroutine) possono sorprendere. L'indirizzo del punto da cui si esegue il salto inserito nello stack da JSR e recuperato poi da RTS per riprendere l'esecuzione è quello dell'ultimo byte della stessa istruzione JSR e non quello dell'indirizzo dell'istruzione successiva. Ciò accade perché la copia del valore (dal registro "PC" allo stack e viceversa) viene eseguito prima che sia incrementato automaticamente il registro puntatore di programma "PC", operazione che viene eseguita al termine di ogni istruzione. Questo modo di operare non inficia però la corretta esecuzione del salto perché l'indirizzo memorizzato in anticipo nello stack viene poi aggiornato con un incremento di 1 al termine dell'istruzione RTS.[26] Questa caratteristica non viene solitamente notata a meno che non si estragga l'indirizzo di rientro per prelevare dei parametri nel flusso del codice (una pratica comune nella programmazione del 6502). Tutti i derivati del 6502 presentano questo comportamento.

Una limitazione dello stack è il fatto che il suo puntatore "S" è ad 8 bit, per cui lo stack può contenere solo 256 valori.

Acceleratori[modifica | modifica sorgente]

La velocità iniziale del 6502, 1 MHz, non era molto elevata e diversi utenti iniziarono a cercare il modo per velocizzare i propri computer. Siccome il 6502 era un processore che prelevava il clock esternamente, aumentare la velocità era più semplice che ricercare un chip più veloce che fosse compatibile con il 6502 ed il suo zoccolo. Molti costruttori iniziarono a fabbricare diversi dispositivi "acceleratori" composti da un piccolo quantitativo di RAM ad alta velocità e dalla circuiteria necessaria a sincronizzare la superiore velocità del 6502 con la RAM e le periferiche originali dei computer. Ad esempio, il floppy disk drive dell'Apple II aveva tempi di accesso molto precisi, sincronizzati tramite la gestione dei registri di I/O effettuata dal software: per questo motivo gli acceleratori per l'Apple II scalavano la frequenza della CPU al valore originale di 1 MHz durante le operazioni di accesso ai dischi.

I primi acceleratori furono realizzati come schede aggiuntive ma diversi acceleratori che comparvero in seguito integrarono in un package delle dimensioni del chip originale non solo il 6502 ma anche tutta la circuiteria accessoria. Un esempio di questo tipo di acceleratori è lo Zip Chip per l'Apple II, che in un unico package inseribile nello zoccolo per i 6502 in formato DIP40 integrava la CPU e 350 circuiti accessori. Lo Zip Chip elevava la frequenza del 6502 a 4 od 8 MHz, a seconda dei modelli.[27][28]

Il 6502 nella cultura di massa[modifica | modifica sorgente]

Nel film di fantascienza Terminator (1984) ad un certo punto viene proiettato sullo schermo ciò che il robot T-800 vede attraverso i suoi occhi artificiali: all'immagine appare sovrapposto del codice assembly del 6502, che proviene da alcuni programmi per l'Apple II, di cui uno comparso su una rivista per computer denominata Nibble.[29]

Nella sitcom animata Futurama il co-protagonista Bender, un robot androide del 4° millennio, afferma in una puntata di possedere un 6502 come "cervello". David X. Cohen, produttore televisivo e principale autore della serie ha affermato che lui ed i suoi amici David Borden e David Schiminovich scrissero durante il periodo scolastico un compilatore in assembly 6502 per un linguaggio di loro creazione (chiamato "FLEET") per l'Apple II Plus, e ciò lo ha portato ad inserire detta citazione nella sitcom.[30]

Note[modifica | modifica sorgente]

  1. ^ a b MOS 6502 the second of a low cost high performance microprocessor family in Computer, vol. 8, nº 9, IEEE Computer Society, settembre 1975, pp. pagg. 38–39, DOI 10.1109/C-M.1975.219074.
  2. ^ a b c Motorola, All this and unbundled $69 microprocessor in Electronics, vol. 48, nº 22, McGraw-Hill, 30/10/1975, pp. pag. 11.
  3. ^ Longley, Shain, op. cit., p. 147.
    (EN)
    « Until recently 8 bit machines were dominated by two microprocessors — the Z80 and the 6502 »
    (IT)
    « Fino a poco tempo fa le macchine ad 8 bit furono dominate da 2 microprocessori: lo Z80 ed il 6502. »
  4. ^ a b c Brian Bagnall, 1 e 2 in On the Edge: The Spectacular Rise And Fall of Commodore, Winnipeg, Manitoba, Variant Press, 2006, pp. 9–12, ISBN 0-9738649-0-7.
  5. ^ "Motorola 6800 Oral History", ComputerHistory.org, 2008, pp. pag.18.
  6. ^ a b Ian Matthews, "The Rise of MOS Technology & The 6502", 26/06/2006.
  7. ^ Robert Sugarman, "Does the Country Need A Good $20 Microprocessor?" in Electronic Engineering Times, 25/08/1975, pp. pag. 25.
  8. ^ Microprocessor line offers 4, 8,16 bits in Electronics, vol. 48, nº 15, New York, McGraw-Hill, 24/07/1975, pp. pag. 118.
  9. ^ Robert Sugarman, Does the Country Need A Good $20 Microprocessor? in EE Times, Manhasset, New York, CMP Publications, 25/08/1975, pp. pag. 25.
  10. ^ MOS 6501 Microprocessor beats 'em all in Electronics, vol. 48, nº 16, New York, McGraw-Hill, 07/08/1975, pp. 60–61.
  11. ^ Motorola Sues MOS Technology in Microcomputer Digest, vol. 2, nº 6, Cupertino CA, Microcomputer Associates, dicembre 1975, pp. pag. 11.
  12. ^ MOS Technology Drops 6501 in Microcomputer Digest, vol. 2, nº 11, Cupertino CA, Microcomputer Associates, maggio 1976, pp. pag. 4.
  13. ^ Mike Teener, Politics and Intrigue in SCCS Interface, vol. 1, nº 6, Los Angeles, Southern California Computer Society, maggio 1976, pp. pag. 58.
    (EN)
    « So Motorola sued and just recently won an out-of-court settlement that has MOS Technology paying $200,000 and stopping production on the 6501. »
    (IT)
    « Così Motorola ha citato ed ha recentemente vinto una causa senza passare dai tribunali che ha visto MOS Technology pagare 200.000$ e terminare la produzione del 6501. »
  14. ^ a b Brian Bagnall, "On the Edge: The Spectacular Rise and Fall of Commodore", Variant Press, 2005, pag. 24.
  15. ^ James, "James Advertisement" in Popular Electronics, vol. 8, nº 3, settembre 1975, pp. pag. 107.
    (EN)
    « James is now Jameco Electronics. The 8080 CPU was $149.95, the 8008 CPU was 29.95. A 2102 1K bit static RAM was $4.95. Their price for a 8080A CPU was 37.95 in the June 1976 issue. »
    (IT)
    « James è adesso Jameco Electronics. La CPU 8080 era a 149,95$, la CPU 8008 era a 29,95$. Un chip di RAM statica 2102 da 1 Kbit era a 4.95$. Il loro prezzo per l'8080A era 37,95$ nel numero di giugno del 1976. »
  16. ^ Digi-Key, Pubblicità di Digi-Key in Popular Electronics, vol. 8, nº 6, dicembre 1975, pp. pag. 124.
    (EN)
    « The 8080A CPU was $69.50. A 2102 1K bit static RAM was $3.50. Digi-Key's price for a 8080A was $34.95 in the June 1976 issue. »
    (IT)
    « La CPU 8080A era a 69,50$. Un chip di RAM statica 2102 da 1 Kbit era a 3,50$. Il prezzo di Digi-Key per un 8080A era di 34,95$ nel numero di giugno del 1976. »
  17. ^ "How many transistors in the 6502 processor?", 05/05/2001. URL consultato il 07/02/2011.
  18. ^ Mappa della memoria del Commodore VIC-20. URL consultato il 06/02/2011.
  19. ^ "Chip archeology", Compukit-101, 18/02/2009. URL consultato il 07/02/2011.
  20. ^ a b Richard Murray, Risc Vs Cisc RISC vs CISC, 2002. URL consultato il 07/02/2011.
  21. ^ The BBC and Master Computer Public Domain Library - Inside The BBC B+, 8-Bit Software. URL consultato il 07/02/2011.
  22. ^ Specifiche del WDC 65C816, Western Design Center. URL consultato il 07/02/2011.
  23. ^ "Syntertek SY6516 - The chip that never existed", Apple II Things. URL consultato il 07/02/2011.
  24. ^ MOS 6502, Free Online Dictionary of Computing. URL consultato il 25/06/2014.
  25. ^ Test di verifica CMOS/NMOS per i 6502, Pagina su Web.Archive.org. URL consultato il 07/02/2011.
  26. ^ Mark Andrews, 6 in "Atari Roots - A Guide to Atari Assembly Language", DATAMOST, Inc., 1984, ISBN 0-88190-171-7.
    (EN)
    « RTS ("pull the return address off the stack and put it in the PC and increment it by one." This will cause execution to continue where it left off.) »
    (IT)
    « RTS ("estrae dallo stack l'indirizzo di rientro, lo inserisce nel PC e lo incrementa di 1." Questo comporterà che l'esecuzione riprenderà da dove era stata sospesa. »
  27. ^ Manuale utente dello Zip Chip, ZIP Technology. URL consultato il 07/02/2011.
  28. ^ Foto dello Zip Chip e della sua confezione. URL consultato il 07/02/2011.
  29. ^ "The 6502 in 'The Terminator'", pagetable.com. URL consultato il 07/02/2011.
  30. ^ "The Truth About Bender's Brain", IEEE, 05/2009. URL consultato il 07/02/2011.

Bibliografia[modifica | modifica sorgente]

Altri progetti[modifica | modifica sorgente]

Collegamenti esterni[modifica | modifica sorgente]

Informazioni generali:

Caratteristiche del set di istruzioni:

Emulatori e simulatori:

Primi computer basati sul 6502:

Acceleratori hardware:

Hardware:

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica