di  -  mercoledì 19 novembre 2008

Se il MOS 6502 ha fatto la fortuna di Apple, Commodore, Nintendo e di tantissime altre aziende che hanno prodotto dispositivi elettronici che lo integravano, lo Zilog Z80 (che per anni gli si è contrapposto) non ha certo avuto una sorte meno felice. Anzi, ci troviamo di fronte a un altro microprocessore che è entrato di diritto nella storia dell’informatica e nel cuore di molti appassionati.

Lo Z80 nasce dalla geniale mente di Federico Faggin (padre del primo microprocessore della storia, il 4004, e di altri suoi successori) che, nonostante il grande prestigio e la fama acquisita nella società per la quale lavorava, ebbe il coraggio di abbandonare la Intel per fondare la Zilog e dedicarsi a questo ambizioso quanto fortunato progetto.

Troviamo, infatti, questa CPU a 8 bit impiegata in una miriade di apparecchiature elettroniche, dei più disparati generi: home computer (Sinclair ZX-Spectrum ed MSX in primis), console (SEGA Master System), portatili (Nintendo GameBoy e GameBoy Color, SEGA Game Gear), giochi arcade, ma anche modem, calcolatrici, strumenti musicali, carte di credito, microcontrollori, ecc.

Zilog Z80

Un grande successo (si parla di circa 2 miliardi di pezzi venduti) che trovo legato principalmente a quattro punti:

  • basso costo (rispetto al concorrente principale: l’Intel 8080);
  • compatibilità hardware (a livello di ISA) con l’8080;
  • miglioramento dell’architettura (sempre rispetto all’8080);
  • circuiteria di refresh della memoria DRAM integrata (che ha permesso di ridurre il numero di chip necessari nel sistema).

Il vantaggio di avere la circuiteria di refresh della memoria direttamente integrata era notevole: non soltanto ciò rendeva necessari meno chip, ma anche lo schema delle schede madri risultava semplificato e, dunque, più economico.

A titolo d’esempio, il 6502 (che non aveva nulla del genere) costrinse Commodore a integrare questa funzionalità nel chip grafico dei suoi home computer (il famoso VIC del Vic 20 e VIC-II C64, tanto per citare i più famosi) per ottenere un risultato simile (anche in termini di costi).

Un altro aspetto di fondamentale importanza che, a mio avviso, spalancò le porte del mercato allo Z80 fu la piena compatibilità con l’8080. All’epoca un sistema operativo economico, semplice e molto diffuso era il CP/M della Digital, che “casualmente” girava proprio sull’8080 di Intel (e sul suo successore, l’8085). Dunque già alla sua commercializzazione lo Z80 si ritrovò immediatamente con una ricca libreria di software.

Questo microprocessore però non era soltanto un clone dell’8080 e, infatti, integrava diversi miglioramenti rispetto a quest’ultimo. Agli 8 registri ne affiancava altri 8 che era possibile scambiare velocemente tramite apposite istruzioni (in questo modo si evitava di dover utilizzare la memoria, il cui accesso era decisamente più lento, per conservare e poi ripristinare il valore di un registro).

Ma la modifica più consistente e utile era rappresentata dall’introduzione di due nuovi registri a 16 bit (chiamati IX e IY) che permettevano di indirizzare la memoria indirettamente tramite l’utilizzo di offset a 8 bit (un numero intero compreso fra -128 e +127).

Con l’8080 era presente soltanto il registro HL (anch’esso a 16 bit) allo scopo e non era possibile specificare l’offset, per cui per accedere alle locazioni di memoria vicine si doveva necessariamente ricorrere all’incremento o decremento di questo registro, che era un’operazione abbastanza lenta.

A completare il già ricco quadro contribuivano le nuove istruzioni che erano state aggiunte e che si occupavano di spostamento di blocchi di memoria e di I/O, e di ricerca di dati (che ritroveremo dopo nell’8086 e nell’80186 di Intel), oltre a quelle per la manipolazione di singoli bit (che Intel introdurrà soltanto con l’80386). Infine la gestione degli interrupt era notevolmente più avanzata e flessibile (grazie alla loro “vettorizzazione”).

Lo Z80 si presenta, quindi, come una CPU particolarmente ricca ma complessa, che porta con sé tanta di quella roba che appare fin troppo evidente la sua appartenenza alla famiglia dei processori CISC che ho mensionato nel precedente articolo sul 6502.

Complessità che lascerebbe pensare giustamente a una maggior difficoltà di programmazione e, per contro, una situazione diametralmente opposta per i RISC (sarebbe più facile lavorarci).

Vedremo in futuro che le due cose non sono necessariamente legate e che tutto dipende in ultima istanza dall’architettura nel suo complesso.

21 Commenti »

I commenti inseriti dai lettori di AppuntiDigitali non sono oggetto di moderazione preventiva, ma solo di eventuale filtro antispam. Qualora si ravvisi un contenuto non consono (offensivo o diffamatorio) si prega di contattare l'amministrazione di Appunti Digitali all'indirizzo info@appuntidigitali.it, specificando quale sia il commento in oggetto.

  • # 1
    ech0s
     scrive: 

    Mitica CPU, l’ho appena studiata in elettronica :D

  • # 2
    Vale56
     scrive: 

    Dovresti specificare meglio che si tratta di Digital Research, la mamma del DR-DOS e non di Digital Equipment Corporation la ditta che ha inventato il VMS, e da cui sono fuoruscite le persone che hanno scritto Windows NT
    Come dice anche wikipedia (quella usa vista la scarsa qualità di wikipedia italia) qui: http://en.wikipedia.org/wiki/Digital_Research
    Digital Research should not be confused with Digital Equipment Corporation; the two were not affiliated.

    A parte ciò, lo Z80 è stato un mitico processore, mi ricordo ancora il codice esadecimale di alcune istruzioni a memoria

  • # 3
    Cesare
     scrive: 

    Se guardi bene, alla parola “Digital” corrisponde proprio il link che hai fornito tu. ;)

  • # 4
    Unrealizer
     scrive: 

    il mio professore di sistemi si ostina a farcelo usare al quarto anno, facendoci tradurre i codici mnemonici in linguaggio macchina “a mano” per poi inserirlo tramite un tastierino nel devkit… e pensare che nell’armadio accanto ci sono i devkit per sistemi migliori (AVR e PIC16)… insomma, sarà una CPU storica, ma non è il caso di scrollarsela di dosso?

  • # 5
    Cesare
     scrive: 

    Premesso che utilizzare quelle macchine infernali nel 2008 è puro sadismo, personalmente preferirei di gran lunga programmare lo Z80 piuttosto che uno dei famigerati PIC16, che hanno una delle architetture più brutte che abbia mai visto.

    Prova a comparare l’ISA dello Z80 con quello del PIC16: vedrai che non c’è proprio paragone (a favore del primo). Z80 tutta la vita! :)

  • # 6
    Daniele
     scrive: 

    Bravo Cesare hai pescato dal cilindro la mitica z80, mi dirai: “un bell’esempio in cui la bontà dell’architettura di base non ha garantito il successo delle evoluzioni a 16 e 32 bit” ;)
    Non ho posseduto lo Spectrum, come alcuni miei amici, ma sulla scrivania ho ancora la Ti85 dei tempi dell’università. Vale?
    Bell’articolo.

  • # 7
    SirHaplo
     scrive: 

    Bene finalmente so qualcosa anche io dello Z80.
    Ne ho sempre sentito parlare ma mai provato di persona.

    Per ora ho programmato Pic e AVR (a livello dilettantistico) e tutti e due ti danno tante soddisfazioni.
    Concordo anche io che programmare ora uno Z80 mi sembra un pò anacronistico, ma forse (un forse enorme data la mia ignoranza sull’oggetto) potrebbe essere didattico ?

  • # 8
    Cesare
     scrive: 

    @Daniele: infatti. I successori non hanno goduto dello stesso, immenso, successo.

    Lo Spectrum non l’ho avuto nemmeno io. :-P

    @SirHaplo: PIC e AVR danno soddisfazioni se programmati in C. In assembly trovo che sia una vera tortura, a causa della loro architettura troppo semplice e che ti costringe a fare i salti mortali per fare cose che con uno Z80 risolveresti in poco tempo e con poche istruzioni.

    A mio avviso lo Z80 ha ancora motivo di esistere e di essere usato come microcontroller economico (esattamente come il 6502). ;)

  • # 9
    Vale56
     scrive: 

    Cesare ho visto che Digital punta a “Digital Research” e non a DEC, però da ex programmatore assembler Z80 (del 1977 al 1988) e ex sistemista Digital (DEC), ho dovuto leggere 2 volte e controllare il link.

    Non so se lo Z80 sia ancora utilizzato oggi, ma era un ottimo processore e il suo successore Z8000 era molto meglio del 8088/8086 come architettura, ad esempio utilizzava l’indirizzamento lineare a 16 bit e non la paginazione come il processore intel. Intel ha inserito l’indirizzamento lineare, e la memoria non fa cilecca, con il processore 80286.
    Per SirHaplo si l’architettura dello Z80 è utile dal punto di vista didattico, come lo è il linguaggio Pascal dal punto di vista informatico. Se vuoi dargli un’occhiata: http://www.zilog.com/docs/z80/um0080.pdf

  • # 10
    ka300m
     scrive: 

    Ricordo ancora quando in 5° superiore programmamo due devkit z80 per condividere una ram da 512kb. Due cpu che si cambiavano dati presente nella stessa memoria… a che tempi! :)

  • # 11
    Krakatoa
     scrive: 

    Il mio avatar è uno ZX80 Nuova Rom.
    Chi lo conosce non è più giovane esteriormente.
    Ma dentro ricordo ancora Load’n’Run e tutto quello che ho fatto con il mio Spectrum:
    dai giochi alla programmazione basic fino al linguaggio macchina con cui sproteggevamo i giochi (mitici anni).

  • # 12
    Cesare
     scrive: 

    @Vale56: la prossima volta sarò più chiaro. Scusami. :)

    L’8086 aveva anch’esso un indirizzamento lineare a 16 bit. Forse intendevi parlare della segmentazione, che consentiva di indirizzare la memoria a 20 bit (quindi fino a 1MB).

    Con l’80286 Intel ha introdotto i selettori al posto dei segmenti, che funzionano in maniera diversa dai “banchi” di memoria che era possibile scegliere con lo Z8000 (se non ricordo male).

  • # 13
    vale56
     scrive: 

    Intendevo dire che lo z8000 aveva l’indirizzamento lineare a 32 bit che permetteva di gestire, nel 1986, direttamente 4GB di ram (http://en.wikipedia.org/wiki/Zilog_Z80000), mentre 8086/88 e 80186 Intel no, utilizzava solo 20 Bit di indirizzamento e poi dovevi utilizzare istruzioni particolari per passare da una pagina all’altra
    Tra parentesi questa struttura di memoria era “vecchia”, mi ricorso si averla usata sul primo microprocessore su cui ho lavorato, PPS4 delle Rockwell, processore con 4k di ram e 4 k di rom.

    Cesare con questo articolo mi hai fatto sentire molto più giovane :-)

  • # 14
    vale56
     scrive: 

    In effetti rileggendo il mio commento #9 ho fatto un errore, l’indirizzamento lineare dello z8000 era a 32 bit e non a 16, ma l’ho anche scritto nel post precedente.

  • # 15
    Cesare
     scrive: 

    Non è esattamente come hai riportato. Intanto da quel che leggo anche dal tuo link lo Z8000 aveva due modalità aveva due modalità d’indirizzamento: quello “compatto” (solo 16 bit) e quello “segmentato” (23 bit). Quindi gestiva la memoria a segmenti, in maniera similare a 8086 e 80186.

    Questi comunque avevano l’overlapping dei segmenti, che è un gran porcata; se Intel avesse avuto ingegneri più svegli avrebbe potuto permettere a un 8086 di indirizzare 4GB di memoria coi segmenti, e per giunta… risparmiando pure transistor (non ci sarebbe stato bisogno di utilizzare dei sommatori per calcolare l’indirizzo fisico: sarebbe stato ricavato direttamente dalla combinazione del segmento e dell’offset). Comunque la storia ci ha consegnato questa scemenza e ce la siamo trascinata fino a oggi.

    In parte ha rimediato con l’80286, facendo diventare selettori i segmenti (questo soltanto in modalità protetta), e permettendo di indirizzare fino a 16MB (24 bit) la memoria in maniera simile a quanto avveniva con lo Z8000. Anche qui, non capisco perché abbia limitato gli indirizzi fisici ai soli 24 bit; certe “scelte” che ha fatto Intel per me rimangono inspiegabili.

    Comunque a 8086 & co. non servivano istruzioni particolari per passare da una pagina all’altra. I segmenti venivano utilizzati implicitamente in base al tipo di dato a cui si faceva accesso (codice, stack, dati oppure dati “extra”). Si poteva “forzare” questo schema standard utilizzando chiamate “lontane” a subroutine (le cosidette CALL FAR), utilizzando puntatori “lontani” (a 32 bit; una coppia segmento + offset), oppure utilizzando i “prefissi” (CS:, SS:, DS: ed ES: rispettivamente) nelle istruzioni che accedono ai dati.

    E’ un discorso un po’ complicato, ma ha il suo senso ovviamente.

    Quando ti riferisci all’indirizzamento lineare a 4GB, questo non è stato introdotto con lo Z8000, ma con lo Z80000. Però ti ricordo che anche Intel l’ha introdotto con l’80386, che arrivò nello stesso anno dello Z80000: il 1986.
    Ovviamente preservava il concetto di segmento, ma anche e sorprattutto quello di selettore (la piena compatibilità col passato è stata sempre un pallino fisso di Intel), che permette non soltanto di gestire la memoria in maniera “segmentata” (con puntatori a 48 bit: 16 per il selettore e 32 per l’offset) che ha pure i suoi pregi, ma i privilegi per l’accesso alla memoria e al codice.

    Impressionante, ma molto complesso. Infatti i selettori sono praticamente spariti nell’estensione x86 a 64 bit che ha creato AMD (x86-64 o AMD64).

    Scusami se mi sono dilungato, ma credo che un chiarimento era necessario.

  • # 16
    vale56
     scrive: 

    Cesare hai fatto bene a dilungarti.
    Anche perché per alcune cose sono andato a memoria, e la memoria a volte è fallace :-(

    Tra parentesi le istruzioni “particolari” a cui mi riferivo sono proprio le CALL FAR e JUMP FAR.

    E’ un piacere discutere con persone preparate

  • # 17
    Graziano
     scrive: 

    Ho studiato lo Z80 nei lontani e mitici anni 1980-81-82 programmandolo a manina traducendo il codice mnemonico in codice macchina usando le tabelle.
    Era e rimane un mitico microprocessore.
    ciao a tutti
    Graziano

  • # 18
    Quando i 16 bit stavano stretti: Zilog Z8000 - Appunti Digitali
     scrive: 

    […] microprocessore a 16 bit dell’arcinota Zilog che ha regalato al mondo quel gioiello che è lo Z80, e che con questa nuova CPU riesce a toccare vette altissime nel design di un’ISA che ancora […]

  • # 20
    MSX, il piano di Bill Gates per dominare il mondo HW - Appunti Digitali
     scrive: 

    […] progetto che ne discese fu battezzato MSX: un’architettura hardware 8bit basata sullo Z80 di Zilog  ed altri componenti estremamente economici a presiedere i vari sottosistemi, sviluppato […]

  • # 21
    Il flop Amstrad nel mercato delle console - Appunti Digitali
     scrive: 

    […] Zilog Z80A con clock a […]

Scrivi un commento!

Aggiungi il commento, oppure trackback dal tuo sito.

I commenti inseriti dai lettori di AppuntiDigitali non sono oggetto di moderazione preventiva, ma solo di eventuale filtro antispam. Qualora si ravvisi un contenuto non consono (offensivo o diffamatorio) si prega di contattare l'amministrazione di Appunti Digitali all'indirizzo info@appuntidigitali.it, specificando quale sia il commento in oggetto.