Z80 CPU Tester als Arduino-Shield

Vor ein paar Wochen stolperte ich über Goran Devics Website. Goran beschriebt dort eine Möglichkeit mit einem Arduino eine Z80 CPU zu steuern. Die Idee fand ich so interessant, dass ich ein Arduino-Shield für den Mega 2560 entwarf, seine Software entsprechend anpasste und um einige Funktionen erweiterte, z.B. kann die Länge des Taktzyklus eingestellt werden und vorgegebene Testprogramme können geladen werden. Damit auch ein Betrieb ohne serielle Konsole möglich ist, kann zusätzlich ein LCD Display angeschlossen werden.

Das folgende Video zeigt, wie die CPU ein kleines Programm schrittweise abarbeitet (200msec pro Taktzyklus).

Z80 CPU Tester

Wer den Z80 CPU NOP-Generator nachbauen möchte findet am Ende des Beitrags die Gerber-Daten und den Quellcode zum Download. Benötigt werden nur ein paar wenige Bauteile:

Ref Qnty Value Bemerkung
C1 1 100uF
D1 1 LED 3mm
J1 1 1×16 Socket
J2 1 40 Pin ZIF oder alternativ ein Präzisionssockel
P1,P2,P5,P6,P7 3 1×08 Header P3 nicht bestückt
P4 1 2×18 Header oder alternativ zwei 1×18 Header
Q1 1 BC548 oder alternativer NPN Transistor
R1 1 220 Ω
R2 1 4.7 kΩ
R3,R4,R6-R9 6 10 kΩ
RV1 1 10 kΩ Potentiometer RM-065
SW1-SW3 3 Switch 6mm

Das Display wird aktuell noch nicht verwendet. Anstelle eines teuren ZIF-Sockels kann auch ein Präzisionssockel verwendet werden. Die Bauteilkosten liegen jeweils bei ca. 5-6 EUR zzgl. Platine. Sofern ich noch Platinen übrig habe, gebe ich die gerne zum Selbstkostenpreis ab. Über eine Rückmeldung würde ich mich sehr freuen. Auch Verbesserungsvorschläge sind sehr willkommen.

Quellcode des Arduino-Sketches. Die ursprüngliche Software wurde bisher um folgende Features erweitert:

  • Die Länge eines Taktzyklus lässt sich über die Variable 13 festlegen (in msec jeweils gültig für H-Pegel und L-Pegel).
  • Mit „l #num“ lässt sich ein Programm in den RAM laden (aktuell sind zwei Beispielprogramme vorhanden).

Der Sketch funktioniert nicht mehr mit dem im Original beschriebenen Aufbau!

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.