BGA-324 · XC7A15T · dessin, pas une photo
Zilog Z80SpecNext (núcleo em FPGA)
2017
Z80N (Spectrum Next)
Un Z80 fait de logique programmable, avec de nouvelles instructions et quatre vitesses, jusqu'à 28 MHz.
Le Z80N est le processeur du ZX Spectrum Next : ce n'est pas une puce, c'est un cœur décrit en VHDL et chargé dans un FPGA. Il exécute le code du Z80 et ajoute ses propres instructions, comme la multiplication et des copies avec transparence, à 3,5, 7, 14 ou 28 MHz.
- 8
- 8
- 28
- 64 KB
Un Z80 sans Z80
Le Next commença en 2010 au Brésil, comme variante du TK95, un clone du Spectrum. En 2016, Victor Trucco et Fabio Belavenuto présentèrent le TBBlue, une carte pour passionnés ; avec Henrique Olifiers, le projet partit au Royaume-Uni et rallia Rick Dickinson, le designer des boîtiers d'origine.
L'idée initiale était d'utiliser un vrai Z80, mais la conception passa sur un FPGA Xilinx Spartan-6, pour faire tenir des sprites matériels, du défilement et d'autres nouveautés dans la machine elle-même. Un FPGA est une puce remplie de blocs logiques qui se relient entre eux selon un fichier chargé au démarrage : on décrit le circuit, et la puce devient ce circuit. Ce n'est pas de l'émulation logicielle.
Les machines du premier Kickstarter utilisent le Spartan-6 XC6SLX16 ; celles du deuxième, un Artix-7 XC7A15T ; celles du troisième, un Artix-7 XC7A35T, plus grand. Le Z80N est le même sur toutes.
D'où vient le code
Le Z80N part du T80, un cœur compatible Z80 écrit en VHDL par Daniel Wallner entre 2001 et 2002 et publié sur OpenCores, utilisé dans de nombreuses recréations d'ordinateurs et de bornes d'arcade.
L'en-tête du fichier t80n.vhd, dans le code du Next, dit qui a fait quoi : Fabio Belavenuto corrigea une partie d'un bug dans les états d'attente, Victor Trucco, Fabio Belavenuto et Garry Lancaster ajoutèrent les nouvelles instructions, et Charlie Ingley corrigea entièrement la logique d'attente. Garry Lancaster est aussi l'auteur de NextZXOS et de NextBASIC.
La description matérielle du FPGA est publiée sur GitLab, sous licence GPL3. Le reste du projet (schémas, carte, boîtier) n'est pas ouvert.
Les nouvelles instructions
Les instructions du Z80N utilisent le préfixe ED, sur des codes que le Z80 de Zilog ne documentait pas. Certaines font ce que les programmeurs Spectrum ont passé des années à écrire à la main : MUL D,E multiplie deux nombres de 8 bits et laisse le résultat de 16 bits dans DE (le Z80 d'origine n'a pas de multiplication), SWAPNIB échange les deux moitiés de 4 bits de l'accumulateur, MIRROR A inverse l'ordre des bits, ADD HL,A ajoute l'accumulateur à une paire de registres, et PUSH nn place une valeur fixe sur la pile.
D'autres servent au graphisme. LDIX et LDIRX copient la mémoire comme LDI et LDIR, mais sautent les octets égaux à l'accumulateur : c'est la transparence d'un sprite en une seule instruction. LDPIRX remplit une zone avec un motif de 8 octets, et LDWS copie à la verticale vers l'écran Layer 2. PIXELAD calcule l'adresse d'un pixel sur l'écran du Spectrum à partir des coordonnées, et PIXELDN descend d'une ligne ; quiconque a déjà fait ce calcul sur l'écran entrelacé du Spectrum sait combien de code cela économise.
Il y a encore NEXTREG, qui écrit directement dans les registres de configuration du Next sans passer par les ports, OUTINB, TEST, JP (C), et les rotations et décalages de plusieurs bits d'un coup (BSLA, BSRA, BSRL, BSRF, BRLC), qui n'existent qu'à partir de la version 2 du cœur.
Quatre vitesses
La vitesse se choisit dans le registre 0x07 du Next : 3,5, 7, 14 ou 28 MHz. Les 28 MHz ne fonctionnent qu'à partir de la version 3.0 du cœur. Après un reset, le processeur revient à 3,5 MHz, la vitesse du Spectrum d'origine, et c'est à cette vitesse que les anciens logiciels, avec leurs astuces de synchronisation, se comportent comme il faut.
Les 28 MHz ne sont pas exactement huit fois plus rapides : selon la documentation du Next, à partir du cœur 3.0.5 chaque lecture d'instruction et de mémoire prend un état d'attente supplémentaire, et un NOP passe de 4 à 5 cycles. Et quand le bus d'extension est actif, la vitesse est limitée à 3,5 MHz, pour que les anciens périphériques continuent de fonctionner.
La mémoire du Next (1 ou 2 Mo sur les premières machines) est bien plus grande que les 64 Ko que le Z80N voit à la fois ; elle entre dans la fenêtre du processeur par blocs de 8 Ko.
Le saviez-vous…
TBBlue vient des initiales des créateurs, Trucco et Belavenuto, et de la couleur bleue du vernis épargne de la carte.
PUSH nn est la seule instruction où le nombre est écrit octet de poids fort en premier, contrairement à toutes les autres du Z80.
Le MUL du Z80N n'est pas compatible avec les multiplications d'autres descendants du Z80, comme le R800, le Z180 ou l'eZ80 : il est propre au Next.
JP (C) lit un port et saute vers l'un de 256 blocs de 64 octets, pensé pour exécuter du code qui arrive en flux depuis un disque.
D'anciennes versions du cœur avaient un MIRROR DE, qui a été retiré.
À 28 MHz, le Z80N travaille à huit fois l'horloge du Spectrum de 1982.
Le FPGA peut cesser d'être un Spectrum : il existe des cœurs alternatifs, non officiels, qui le transforment en d'autres machines, comme le BBC Micro ou le Sinclair QL.
