Ditratherm EZ80-DIT

Diesen tollen alten Rechner fand ich 2014 bei einem Besuch des Funk- und Elektrotechnik Flohmarktes in Eggenfelden. Der Verkäufer wollte 25 Euro dafür haben und war froh, ihn los zu sein.

Der EZ80-DIT stammt aus den späten 70ern und wurde laut seinem Wikipedia-Artikel hauptsächlich zur Ausbildung eingesetzt. Der Artikeln verrät verschiedene hilfreiche Details zur Architektur, und dass es sich im Kern um eine veränderte Version des NEC TK-80 handelt. Zu beiden Rechnern fand ich neben diesem außergewöhnlich ausführlichen Artikel leider kaum Informationen im Netz. Darüber hinaus gab der Rechner beim ersten Einschalten erst einmal kein Lebenszeichen von sich.

Nach einem Blick in das Innere stellte sich dieser Defekt zum Glück nur als kaputter Netzfilter heraus, den ich leicht tauschen konnte - und schon funktionierte er wieder, wer weiß nach wie langer Zeit. Leider war kein Handbuch dabei, und auch sonst waren kaum Infos zu bekommen, wie man diese Maschine eigentlich bedient.

Aber wir fanden es heraus. "Wir", das sind meine Freunde, Mef und Michael, und ich, an einem computer-archäologischen Wochenende voller Schmierpapier, Schaltpläne, Hexdumps und Soundfiles. Dazu kam das sehr nützliche Buch Elektronik IV C : Mikrocomputer dessen Inhalt sich - ohne ihn prominent zu nennen - in seinem praktischen Teil auf den Befehlssatz dieses Rechners bezieht, sowie der Software in seinem ROM. Im Folgenden möchte ich notieren, was wir herausgefunden haben.

Das Gehäuse

Das pultförmige Gehäuse besitzt zwei räumlich getrennte Eingabeeinheiten: Ein Schalterfeld aus 15 Kippschaltern zur Binäreingabe, und ein Tastaturfeld aus 25 großflächigen Tasten, wovon 16 zur hexadezimalen Eingabe dienen.


Der EZ80-DIT in all seiner Pracht. Dazu gehört im Original noch eine Abdeckung, die ich leider nicht mit dazu bekommen habe.

Rechts über der Tastatur befindet sich die hexadezimale Ausgabeeinheit in Form von acht rotleuchtenden Siebensegment-Anzeigen, daneben ein paar LEDs, die den Zustand des Flag-Registers anzeigen. Links über der binären Eingabeeinheit befindet sich ein Lautsprecher, der durch einen zuschaltbaren NF-Verstärker über eines der I/O Register (Port C, Bit 1) angesteuert werden kann.

Hinten am Gehäuse befinden sich 3x 8 Mini-Bananenbuchsen für die I/O Ports A, B und C, sowie eine Interrupt-Buchse. Außerdem gibt es eine E/A (I/O) Buchse zum Anschluss eines Kassettenrekorders zur modulierten Ein-/Ausgabe von Speicherinhalten.

Weitere Details zur Hardware finden sich im Wikipedia-Artikel.

Beschriftung und Funktion der Tasten, Schalter und LEDs

Die Beschriftungen sind auf deutsch und aus den späten 70ern. Möglicherweise gab es damals bereits Konventionen für die abgekürzte Benennung der Dinge, aber sie haben sich seither geändert. Deshalb mussten wir gelegentlich raten.

Die Kippschalter


Das Kippschalter-Feld zur Binäreingabe. LÖ ist nicht tastend, sollte es wohl aber sein, denn das Gerät ist nicht benutzbar, während sich LÖ im "ein"-Zustand befindet.

Die binäre Eingabeeinheit besteht aus zwei Reihen an Kippschaltern. Die obere Reihe ist intuitiv ein Byte, bestehend aus 8 Bits. Was mit dem hier eingestellten Byte geschehen soll, regeln die zwei WAHL-Schalter in der unteren Reihe.

WAHL 21WAHL 20
00Byte schreiben und Adresse inkrementieren
01Adresse dekremenrieren
10Adresse inkrementieren
11Adresse setzen

AUSF. ist ein tastender Kippschalter zur Ausführung dieses Befehls.

Die weiteren Kippschalter der zweiten Reihe von links nach rechts: DE bedeutet möglicherweise DatenEingabe und schaltet den NF-Verstärker zu, und damit den Lautsprecher an. Außerdem muss DE aktiviert sei, um modulierte Daten von der E/A Buchse empfangen zu können.

LÖ ist ein Kippschalter, der Registerinhalte löscht, Stackpointer initialisiert und den Adresszeiger auf 0000 zurücksetzt. AT/SCHR dient zur Umschaltung zwischen AuTomatischer Ausführung und SCHRittweiser Ausführung. Der tastende START-Schalter daneben dient entsprechend zum Start eines Programms ab der aktuellen Adresse bzw. zur Ausführung des einzelnen Opcodes an der aktuellen Adresse.

Abgesehen von der modulierten Ein-/Ausgabe über die E/A Buchse kann man mit der Kippschalter-Eingabe den Rechner vollumfänglich programmieren und bedienen, d.h. man braucht das Tastenfeld eigentlich gar nicht. Echte Männer programmieren mit Kippschaltern!

Wem das zu archaisch erscheint darf die Tastatur benutzen.

Die Tastatur


Die Tastatur. Was die Taste ZUR ADDR +1 tut, bleibt vorerst ein Rätsel, leider.

Die Tastatur besteht aus 9 roten Funktionstasten sowie 16 weißen Tasten zur hexadezimalen Eingabe. Die Funktionstasten bewirken Folgendes: START startet das Programm an der aktuellen Adresse. In Abhängigkeit des Kippschalters AT/SCHR wird das Programm entweder vollständig ausgeführt, oder jeweils schrittweise ab der aktuellen Adresse.

Die Funktion der nächsten Taste, ZUR ADR + 1, konnten wir leider noch nicht erschließen - möglicherweise eine Art indirekter Sprung? Falls jemand seine Bedeutung kennt, würde ich mich über einen Kommentar freuen. Vielleicht stößt Gerald, der maßgebliche Autor des Wikipedia-Eintrags zum EZ80-DIT, ja auf diesen Artikel und kann helfen.

Die beiden folgenden Tasten EINL. DAT und AUSL. DAT dienen zum Starten der Ein- bzw. Ausgabe von Speicherinhalt über den E/A Port (mehr dazu unter "Laden und Speichern" weiter unten).

LÖ entspricht der Funktion des LÖ-Kippschalters: die Register werden geleert, Stackpointer zurückgesetzt und die Adresse auf 0000 gesetzt. ADR SETZ setzt den Addresszeiger aus dem Eingaberegister. LIES ADR + 1 inkrementiert den Addresszeiger, LIES ADR - 1 dekrementiert ihn und SPE ADR + 1 speichert den aktuellen Inhalt des Eingaberegisters an die aktuelle Position.

Das Display

Die Anzeigeeinheit, von links nach rechts, startet mit einer einzelnen LED, die mit DE beschriftet ist. DE steht wahrscheinlich für DatenEingabe. Wenn modulierte Daten über die E/A Buchse empfangen werden, leuchtet diese LED für jedes HIGH-Baud, und dient vermutlich zur visuellen Kontrolle.

Darauf folgen vier 7-Segment Elemente, die die aktuelle angelegte Position auf dem Adressbus anzeigen, gefolgt von zwei mal zwei weiteren 7-Segment Elementen, die mit AKKU bzw. FLAG beschriftet sind. Diese Einheiten sind, soweit ich das sehen konnte, multifunktional. Während der schrittweisen Ausführung zeigen sie tatsächlich den Inhalt des Akkumulator-Registers bzw. des Flag-Registers in hexadezimalen Ziffern an. Ansonsten dienen sie in Kombination als 2-bytiger Eingabepuffer für die binäre Eingabe via Kippschalter oder dem Eingabefeld für verschiedene Zwecke: Zur Eingabe von Daten oder Adressen, oder zusammen mit dem Adressfeld zur Eingabe von Start- und End-Adresse für die modulierte Ausgabe über den E/A Port (vgl. "Laden und Speichern" weiter unten).

Zum Abschluss folgen fünf LEDs, die bei meinem Modell mit NE, NU, HÜ, GE und ÜB beschriftet sind. Auf dem Foto bei Wikipedia sieht es so aus als sei die Beschriftung überklebt worden. Dort heißt es S, Z, AC, P und C. Wir mussten raten was hier gemeint sein könnte. Ich denke, es handelt sich um Bits im FLAG-Register, möglicherweise ist NE/S ein Vorzeichen-Flag (NE=Negativ, S = Sign), NU/Z könnte Null-Zustand bedeuten, HÜ/AC steht wahrscheinlich für Hilfsübertrag/Auxiliary-Carry, GE/P für ein Parity-Flag (GE = GErade?), und ÜB mag ein Carry-FLag (Übetrag) sein. Das wären jedenfalls typische ALU-Flags der 8080-Architektur.

Speicheraufteilung

Beim ersten Ausprobieren des Rechners bin ich hier direkt reingefallen. Denn nach dem Einschalten steht im Adressregister 0000, und das ist im ROM-Bereich. Wenn man hier versucht zu Schreiben passiert natürlich nichts. Nach einigem Herumprobieren fanden wir heraus, dass der RAM-Bereich bei diesem Gerät ab Adresse 8000 beginnt. Genauer fand ich es später im Buch Elektronik IV C : Mikrocomputer:

0000 - 07FFROM-Bereich, Systemsoftware, Unterprogramme
8000 - 81FFRAM Erweiterung
8200 - 83C0RAM
83C1 - 83FFReserviert für Monitor

Dieses Buch ist auch überaus nützlich, wenn es ans Programmieren des EZ80-DIT geht, denn es enthält sowohl eine Liste der im ROM verfügbaren Unterprogramme, als auch die notwendigen Opcode-Tabellen im Anhang. Man bekommt es momentan z.B. gebraucht via Amazon.

Der Stack beginnt am oberen Ende des RAM-Bereichs, bei 83C0, und nach unten.

Ein kleines Programm

So, nun, ein erstes Programm! Mef hat es geschrieben. Es spielt eine Melodie auf dem Lautsprecher und verwendet als Eingabe für Tonhöhe und Länge den gesamten Speicher. Es piepst also Bytes.

8000:   MOV H,00    26 00
        MOV L,00    2E 00
8004:   INX H       23
        MOV B, M    46
        INX H       23
        MOV D, M    56
        CALL 8276   CD 76 82
        JMP 8004    C3 04 80
        
8260:   NOP         00
        PUSH B      C5
        PUSH D      D5
        MVI C, 02   0E 02
        SUB A       97
        OUT 02      D3 02
        MOV A, D    7A
        DCR A       3D
        JNZ 8269    C2 69 82
        MVI A, 02   3E 02
        DCR C       0D
        JNZ 8266    C2 66 82
        POP D       D1
        POP B       C1
        RET         C9
        
8276:   PUSH A, F   F5
        PUSH B      C5
        PUSH D      D5
8279:   CALL 8260   CD 60 82
        DCR B       05
        JNZ 8279    C2 79 82
        POP D       D1
        POP B       C1
        POP A, F    F1
        RET         C9

Wir hatten natürlich vorher mit einfacheren, kürzeren Schnipseln herumexperimentiert. Diesen habe ich jetzt fürs Blog gewählt, weil es der Erste war, der den Stack verwendet. Die zerstückelte Anordnung des Programms im Speicher kommt daher, dass es für diverse Experimente herhalten musste. Der Authentizität wegen - und weil das hier möglicherweise sowieso niemand liest außer uns - habe ich es im Original gelassen.


Programmieren auf Papier, wie sehr viel früher. Anfang der 80er gab es zu diesen Lerncomputern oft auch sog. "Programmierbögen", in die jeweils Befehl, Opcode und Kommentar tabellarisch eingetragen werden konnten.

Laden und Speichern

Nach dem Ausschalten hält der EZ80-DIT seinen RAM-Inhalt durch einen Kondensator-Puffer noch für etwa 15 Minuten. Zum langfristigen Sichern von Speicherinhalten gibt es einen E/A Port in Form einer 5 pol. DIN-Rundbuchse auf der Rückseite. Gedacht ist er wohl zum Anschluss eines handelsüblichen Kassettenrecorders oder Tonbandgeräts.


Der DatenEingabe / DatenAusgabe Port von hinten. Beschaltet sind nur die angezeichneten drei Slots.

In Ermangelung eines solchen, verwendeten wir einfach mein Notebook mit einem Programm zur Audioaufzeichnung (in diesem Fall Audacity).

Speichern

Speichern funktioniert folgendermaßen: Man stellt den Adresszeiger auf die Startadresse des Speicherbereiches den man ausgeben möchte und gibt die Endadresse in den 16-Bit Eingabepuffer (beschriftet mit AKKU und FLAG, vgl. oben) ein. Anschließend drückt man die AUSL. DAT Taste auf der Tastatur, während das Aufzeichnungsgerät läuft.

Hier der Start einer solchen Übertragung als Waveform:

Der Modulator erzeugt eine binäre Amplituden-Modulation, also einfach Ton-/kein Ton. Der Bit-Strom entspricht einer selbstsynchronisierenden seriellen Kodierung mit einem Start-Bit (LOW), zwei mal 4 Daten-Bits und drei Stopp-Bits 8 (HIGH), der Idle-Pegel ist HIGH. Die Übertragung startet mit der Start-Adresse gefolgt von der End-Adresse des zu übertragenden Speicherbereiches, gefolgt von den einzelnen Bytes. Das Byte wird am Stück übertragen indem alle Bits nacheinander gesendet werden, beginnend mit dem niederwertigsten Bit.

Hier als Beispiel der Start der Übertragung des obigen Programms:

idle s 0000 0001 stop s 0000 0000 stop s 0100 0001 stop s 0010 0001 stop s 0110 0100 stop s 0000 0000 stop idle
0x80 0x00 0x82 0x84 0x26 0x00

Laden

Um ein Programm über den DE/DA-Port einzuspielen, muss der Kippschalter DE (DatenEingabe) aktiviert sein. Um die Eingabe zu starten, startet man zuerst das Abspielgerät, und sobald der Idle-Ton anliegt, drückt man die EINL. DAT Taste auf dem Tastenfeld. Während der Eingabe leuchtet die DE-LED am Display für jedes gelesene 1-Symbol. Diese LED ist auch nützlich, um den Pegel einzustellen. Unserer Erfahrung nach muss der Pegel relativ hoch sein - mein Notebook musste beim Einspielen auf maximaler Lautstärke stehen und das Soundfile musste ich nacharbeiten, so dass die Waveform voll ausgesteuert ist.

Hier zum Ausprobieren das obige Programm als getestetes WAV File, zum direkten Einspielen: ez80-dit-test.wav

Ausblick

Das war's erstmal, was wir herausgefunden haben. Zusammen mit den Opcode-Tabellen aus dem Buch ließe sich der EZ80-DIT nun verwenden, für... ja, wofür eigentlich. Ich weiß es noch nicht. Es muss etwas Großes sein, oder zumindest etwas mit Sinn. Eine ehrenwerte Aufgabe eben. Bis ich etwas finde, bekommt er einen Ehrenplatz in meinem Keller.

Zum Abschluss noch ein paar Bilder, die ich aus dem Wikipedia Artikel zum Zweck der dezentralen Sicherung kopiert habe, sowie ein Blockschaltbild (hier in groß) des möglicherweise identisch aufgebauten TK-80, das wir während der Recherchen in einem französischen Forum fanden.

Tags: 8080, TK80, EZ80-DIT