BGA-324 · XC7A15T · disegno, non fotografia
Zilog Z80SpecNext (núcleo em FPGA)
2017
Z80N (Spectrum Next)
Uno Z80 fatto di logica programmabile, con istruzioni nuove e quattro velocità, fino a 28 MHz.
Lo Z80N è il processore dello ZX Spectrum Next: non è un chip, è un core descritto in VHDL e caricato in una FPGA. Esegue il codice dello Z80 e aggiunge istruzioni proprie, come la moltiplicazione e le copie con trasparenza, a 3,5, 7, 14 o 28 MHz.
- 8
- 8
- 28
- 64 KB
Uno Z80 senza Z80
Il Next è nato nel 2010 in Brasile, come variante del TK95, un clone dello Spectrum. Nel 2016 Victor Trucco e Fabio Belavenuto presentarono il TBBlue, una scheda per appassionati; con Henrique Olifiers il progetto si è spostato nel Regno Unito e ha coinvolto Rick Dickinson, il designer dei case originali.
L'idea iniziale era usare un vero Z80, ma il progetto è passato a una FPGA Xilinx Spartan-6, per far stare sprite hardware, scroll e altre novità dentro la macchina stessa. Una FPGA è un chip pieno di blocchi logici che si collegano tra loro secondo un file caricato all'avvio: si descrive il circuito, e il chip diventa quel circuito. Non è emulazione software.
Le macchine del primo Kickstarter usano la Spartan-6 XC6SLX16; quelle del secondo una Artix-7 XC7A15T; quelle del terzo una Artix-7 XC7A35T, più grande. Lo Z80N è lo stesso in tutte.
Da dove viene il codice
Lo Z80N parte dal T80, un core compatibile con lo Z80 scritto in VHDL da Daniel Wallner tra il 2001 e il 2002 e pubblicato su OpenCores, usato in molte ricreazioni di computer e cabinati arcade.
L'intestazione del file t80n.vhd, nel codice del Next, dice chi ha fatto cosa: Fabio Belavenuto ha corretto in parte un errore negli stati di attesa, Victor Trucco, Fabio Belavenuto e Garry Lancaster hanno aggiunto le istruzioni nuove, e Charlie Ingley ha corretto del tutto la logica di attesa. Garry Lancaster è anche l'autore di NextZXOS e di NextBASIC.
La descrizione hardware della FPGA è pubblicata su GitLab, con licenza GPL3. Il resto del progetto (schemi, scheda, case) non è aperto.
Le istruzioni nuove
Le istruzioni dello Z80N usano il prefisso ED, in codici che lo Z80 di Zilog non documentava. Alcune fanno quello che i programmatori dello Spectrum hanno passato anni a scrivere a mano: MUL D,E moltiplica due numeri a 8 bit e lascia il risultato a 16 bit in DE (lo Z80 originale non ha la moltiplicazione), SWAPNIB scambia le due metà da 4 bit dell'accumulatore, MIRROR A inverte l'ordine dei bit, ADD HL,A somma l'accumulatore a una coppia di registri, e PUSH nn mette un valore fisso sullo stack.
Altre sono per la grafica. LDIX e LDIRX copiano memoria come LDI e LDIR, ma saltano i byte uguali all'accumulatore: è la trasparenza di uno sprite in una sola istruzione. LDPIRX riempie un'area con un motivo di 8 byte, e LDWS copia in verticale verso lo schermo Layer 2. PIXELAD calcola l'indirizzo di un pixel sullo schermo dello Spectrum a partire dalle coordinate, e PIXELDN scende di una riga; chi ha già fatto quel calcolo sullo schermo interlacciato dello Spectrum sa quanto codice fa risparmiare.
Ci sono poi NEXTREG, che scrive direttamente nei registri di configurazione del Next senza passare dalle porte, OUTINB, TEST, JP (C), e le rotazioni e gli scorrimenti di più bit alla volta (BSLA, BSRA, BSRL, BSRF, BRLC), che esistono solo dalla versione 2 del core.
Quattro velocità
La velocità si sceglie nel registro 0x07 del Next: 3,5, 7, 14 o 28 MHz. I 28 MHz funzionano solo dalla versione 3.0 del core. Dopo un reset il processore torna a 3,5 MHz, la velocità dello Spectrum originale, ed è a quella velocità che il software vecchio, con i suoi trucchi di temporizzazione, si comporta come deve.
I 28 MHz non sono esattamente otto volte più veloci: secondo la documentazione del Next, dal core 3.0.5 ogni lettura di istruzione e di memoria richiede uno stato di attesa in più, e un NOP passa da 4 a 5 cicli. E quando il bus di espansione è attivo, la velocità è limitata a 3,5 MHz, perché le periferiche vecchie continuino a funzionare.
La memoria del Next (1 o 2 MB nelle prime macchine) è molto più grande dei 64 KB che lo Z80N vede alla volta; entra nella finestra del processore in blocchi da 8 KB.
Lo sapevi che…
TBBlue viene dalle iniziali dei creatori, Trucco e Belavenuto, e dal colore blu del solder mask della scheda.
PUSH nn è l'unica istruzione in cui il numero è scritto con il byte più significativo per primo, al contrario di tutte le altre dello Z80.
Il MUL dello Z80N non è compatibile con le moltiplicazioni di altri discendenti dello Z80, come l'R800, lo Z180 o l'eZ80: è solo del Next.
JP (C) legge una porta e salta a uno di 256 blocchi da 64 byte, pensato per eseguire codice che arriva in streaming da un disco.
Le versioni vecchie del core avevano un MIRROR DE, che è stato tolto.
A 28 MHz lo Z80N lavora a otto volte il clock dello Spectrum del 1982.
La FPGA può smettere di essere uno Spectrum: esistono core alternativi, non ufficiali, che la trasformano in altre macchine, come il BBC Micro o il Sinclair QL.
