BGA-324 · XC7A15T · Zeichnung, kein Foto
Zilog Z80SpecNext (núcleo em FPGA)
2017
Z80N (Spectrum Next)
Ein Z80 aus programmierbarer Logik, mit neuen Befehlen und vier Geschwindigkeiten bis 28 MHz.
Der Z80N ist der Prozessor des ZX Spectrum Next: kein Chip, sondern ein in VHDL beschriebener Kern, der in ein FPGA geladen wird. Er führt Z80-Code aus und bringt eigene Befehle mit, etwa Multiplikation und Kopien mit Transparenz, bei 3,5, 7, 14 oder 28 MHz.
- 8
- 8
- 28
- 64 KB
Ein Z80 ohne Z80
Der Next begann 2010 in Brasilien als Variante des TK95, eines Spectrum-Klons. 2016 stellten Victor Trucco und Fabio Belavenuto das TBBlue vor, eine Platine für Bastler; mit Henrique Olifiers kam das Projekt nach Großbritannien und gewann Rick Dickinson dazu, den Designer der Originalgehäuse.
Anfangs sollte ein echter Z80 verwendet werden, aber der Entwurf wanderte in ein FPGA Xilinx Spartan-6, damit Hardware-Sprites, Scrolling und andere Neuerungen in den Rechner selbst passten. Ein FPGA ist ein Chip voller Logikblöcke, die sich nach einer beim Start geladenen Datei miteinander verbinden: Man beschreibt die Schaltung, und der Chip wird zu dieser Schaltung. Das ist keine Software-Emulation.
Die Geräte aus dem ersten Kickstarter nutzen das Spartan-6 XC6SLX16, die aus dem zweiten ein Artix-7 XC7A15T, die aus dem dritten ein größeres Artix-7 XC7A35T. Der Z80N ist in allen derselbe.
Woher der Code kommt
Der Z80N geht auf den T80 zurück, einen Z80-kompatiblen Kern, den Daniel Wallner 2001 und 2002 in VHDL schrieb und auf OpenCores veröffentlichte und der in vielen Nachbauten von Rechnern und Arcade-Automaten steckt.
Der Kopf der Datei t80n.vhd im Next-Code sagt, wer was gemacht hat: Fabio Belavenuto behob einen Teil eines Fehlers bei den Wartezuständen, Victor Trucco, Fabio Belavenuto und Garry Lancaster fügten die neuen Befehle hinzu, und Charlie Ingley korrigierte die Wartelogik vollständig. Garry Lancaster ist auch der Autor von NextZXOS und NextBASIC.
Die Hardwarebeschreibung für das FPGA ist auf GitLab veröffentlicht, unter der Lizenz GPL3. Der Rest des Projekts (Schaltpläne, Platine, Gehäuse) ist nicht offen.
Die neuen Befehle
Die Befehle des Z80N nutzen das Präfix ED, mit Codes, die der Zilog-Z80 nicht dokumentierte. Manche erledigen, was Spectrum-Programmierer jahrelang von Hand geschrieben haben: MUL D,E multipliziert zwei 8-Bit-Zahlen und legt das 16-Bit-Ergebnis in DE ab (der ursprüngliche Z80 kann nicht multiplizieren), SWAPNIB vertauscht die beiden 4-Bit-Hälften des Akkumulators, MIRROR A kehrt die Reihenfolge der Bits um, ADD HL,A addiert den Akkumulator zu einem Registerpaar, und PUSH nn legt einen festen Wert auf den Stapel.
Andere sind für Grafik. LDIX und LDIRX kopieren Speicher wie LDI und LDIR, überspringen aber Bytes, die dem Akkumulator gleichen: Sprite-Transparenz in einem einzigen Befehl. LDPIRX füllt einen Bereich mit einem 8-Byte-Muster, und LDWS kopiert senkrecht in den Layer-2-Bildschirm. PIXELAD berechnet aus den Koordinaten die Adresse eines Pixels auf dem Spectrum-Bildschirm, und PIXELDN geht eine Zeile nach unten; wer diese Rechnung schon einmal auf dem verschachtelten Spectrum-Bildschirm gemacht hat, weiß, wie viel Code das spart.
Dazu kommen NEXTREG, das direkt in die Konfigurationsregister des Next schreibt, ohne über die Ports zu gehen, OUTINB, TEST, JP (C) sowie Rotationen und Verschiebungen um mehrere Bits auf einmal (BSLA, BSRA, BSRL, BSRF, BRLC), die es erst ab Version 2 des Kerns gibt.
Vier Geschwindigkeiten
Die Geschwindigkeit wählst du im Register 0x07 des Next: 3,5, 7, 14 oder 28 MHz. Die 28 MHz funktionieren erst ab Version 3.0 des Kerns. Nach einem Reset kehrt der Prozessor zu 3,5 MHz zurück, der Geschwindigkeit des ursprünglichen Spectrum, und bei diesem Tempo verhält sich alte Software mit ihren Timing-Tricks so, wie sie soll.
Die 28 MHz sind nicht genau achtmal so schnell: Laut Next-Dokumentation braucht ab Kern 3.0.5 jedes Befehls- und Speicherlesen einen zusätzlichen Wartezustand, und ein NOP steigt von 4 auf 5 Zyklen. Und wenn der Erweiterungsbus aktiv ist, bleibt die Geschwindigkeit auf 3,5 MHz begrenzt, damit alte Peripherie weiter funktioniert.
Der Speicher des Next (1 oder 2 MB bei den ersten Geräten) ist viel größer als die 64 KB, die der Z80N auf einmal sieht; er wird in Blöcken zu 8 KB in das Fenster des Prozessors eingeblendet.
Wusstest du…
TBBlue kommt von den Initialen der Schöpfer, Trucco und Belavenuto, und von der blauen Farbe des Lötstopplacks der Platine.
PUSH nn ist der einzige Befehl, bei dem die Zahl mit dem höchstwertigen Byte zuerst geschrieben wird, anders als bei allen anderen Befehlen des Z80.
Das MUL des Z80N ist nicht kompatibel zu den Multiplikationen anderer Z80-Nachfahren wie R800, Z180 oder eZ80: Es gibt es nur beim Next.
JP (C) liest einen Port und springt in einen von 256 Blöcken zu 64 Bytes, gedacht, um Code auszuführen, der als Datenstrom von einem Laufwerk kommt.
Alte Versionen des Kerns hatten ein MIRROR DE, das entfernt wurde.
Bei 28 MHz arbeitet der Z80N mit dem Achtfachen des Takts des Spectrum von 1982.
Das FPGA kann auch aufhören, ein Spectrum zu sein: Es gibt alternative, inoffizielle Kerne, die es in andere Rechner verwandeln, etwa den BBC Micro oder den Sinclair QL.
