Inhaltsverzeichnis

Zilog Z8671

Der Zilog Z8671 ist ein Einchip-Mikrorechner von Zilog. Er gehört zu Z8-Reihe. Im internen ROM ist ein BASIC-Interpreter enthalten.

Von Zilog gibt es neben den Z8-Datenbüchern auch ein zusätzliches Dokument „Z8671 Single-chip Interpreter, BASIC/DEBUG Software, Reference Manual, Zilog, Incorporated, 1988 (BASIC/Debug Software Reference Manual #03-3149-02)“.

Der Z8671 wurde auch von SGS-Thomson und von ST Microelectronics produziert.

Der in der DDR produzierte Z8-Clone U883 mit integriertem BASIC ist nicht zum Z8671 kompatibel; er enthält ein völlig anderes (eigenständig entwickeltes) BASIC.

Literatur

Z8671 Replacement Board, Joe Rovito, circa 2001, http://www.ntrd.com/joe/z8671.htm
Z8671 Replacement Board, Joe Rovito, circa 2001, Bild von http://www.ntrd.com/joe/z8671.htm

Downloads

BASIC/DEBUG

s.a. BASIC/DEBUG

Initialisierung

Wenn der Reset-Eingang des Z8671 auf L-Pegel geht, so stoppt er alle Aktivitäten. Beim Wiederanstieg dieses Signals beginnt der Z8, das Maschinenprogramm im internen Festwertspeicher ab Adresse %000C auszuführen; dieses bewirkt einen Betriebsprogramm-Neustart. In dessen Verlauf werden alle Programm-Unterbrechungen abgeschaltet und einige Register vorbesetzt. Dabei wird auch die Benutzung der Ports 0 bis 3, also der Prozessor-Ports festgelegt.

Danach wird die Übertragungsrate zum PC festgelegt, indem die Wert von Adresse %FFFD eingelesen wird. Dabei spielen nur die niedrigstwertigen drei Bits eine Rolle. Die höheren Bits sind beliebig und können für andere Zwecke verwendet werden.

Wert auf %FFFD Baudrate
x x x x x 0 0 0 150
x x x x x 0 0 1 19200
x x x x x 0 1 0 9600
x x x x x 0 1 1 4800
x x x x x 1 0 0 2400
x x x x x 1 0 1 1200
x x x x x 1 1 0 110
x x x x x 1 1 1 300

In der Reset-Routine folgt dann das Überprüfen der Speicher-Bestückung. Je nach RAM-Ausbau wird den Variablen ihr Platz zugewiesen und der Stapelzeiger für Rücksprungadressen der Unterprogramme gesetzt; außerdem werden Zeiger auf Anfang und Ende des nutzbaren BASIC-Speichers gesetzt.

Wichtig ist bei der Reset-Routine jedoch auch das Prüfen des Speichers bei niedrigen Adressen. Insbesondere interessiert sich das Betriebssystem für den Inhalt des Speicherzellen-Paares %1020 und %1021. Sollte sich hier RAM befinden, dann nimmt der Z8671 über BASIC/DEBUG den Dialog mit dem Benutzer auf, indem er den Doppelpunkt sendet. Ist an %1020 Festwertspeicher, kommt es darauf an, ob an dieser Stelle eine Zahl steht, deren höherwertiges Byte gelöscht ist. Mit anderen Worten: die Zahl muß positiv und kleiner als 256 sein. Ist dies nicht der Fall, so wird ebenfalls der Dialog aufgenommen.

Wenn die Bedingung jedoch erfüllt ist, nimmt BASIC/DEBUG die in %1020 und %1021 stehende Zahl als die erste Zeilennummer eines BASIC/DEBUG-Programms und beginnt sofort mit der Ausführung desselben.

Register

%FF Stapelzeiger low
%FE Stapelzeiger high
%FD Registerblock-Zeiger
%FC Flaggenregister
%FB Programmunterbrechung Maskenregister
%FA Programmunterbrechung Anforderungsregister
%F9 Programmunterbrechung Prioritätsregister
%F8 Betriebsartenregister P0 und P1 (Daten- und Adreßbus)
%F7 Betriebsartenregister P3
%F6 Datenrichtungsregister P2
%F5 Vorteilerregister 0
%F4 Zähler-/Zeitgeberregister 0
%F3 Vorteilerregister 1
%F2 Zähler-/Zeitgeberregister 1
%F1 Betriebsartenregister Zähler/Zeitgeber
%F0 Terminal Datenregister

%EF-%80 unbelegt

%7F Arithmetik-Stapelspeicher
%6B Arithmetik-Stapelspeicher
...
%1F Zeiger Arithmetik-Stapelspeicher (BASIC/DEBUG)
%1E BASIC/DEBUG-Arbeitsregister
%16 BASIC/DEBUG-Arbeitsregister
%15 USR-Funktion 2. Argument low
%14 -"- high
%13 USR-Funktion 3. Argument low
%12 -"- high
%11 BASIC/DEBUG-Arbeitsregister
%10 -"- 
%0F BASIC/DEBUG-Entnahmezeiger in Eingabespeicher low
%0E -"- high
%0D BASIC/DEBUG Aufnahmezeiger in Eingabespeicher low
%0C -"- high
%0B BASIC/DEBUG Obergrenze nutzbares RAM low
%0A -"- RAM high
%09 BASIC/DEBUG-Zeiger auf Programmanfang low
%08 -"- high
%07 BASIC/DEBUG-Zeiger Unterprogramm Stapelspeicher low
%06 -"- high
%05 BASIC/DEBUG-Zeiger auf Programmende low
%04 -"- high
%03 P3
%02 P2
%01 P1 = Daten-/Adreßbus (DAO bis DA7)
%00 P0 = Adreßbus (A8 bis A15)

Aufbau

2021:

Der orig. Quellcode war nicht aufzufinden.

Der Basic-Interpreter wird intern durch eine eigene IL (interpreter language) abgearbeitet, nur so passt alles in 2K ROM :-)

Der IL-Code erinnert sehr an die Implementierung von Tom Pittman. In seiner Bibliographie schreibt Pittman auch von einer Implementierung für den Z8 („…1976 Implemented Tiny Basic (6800/6502/1802/Z8)…“). Ob er der Autor dieses BASICs ist, ist allerdings nicht bekannt.

11/2021: Tom Pittman hat mir bestätigt, dass er dieses BASIC im Auftrag von Zilog programmiert hat.

s.a. http://www.ittybittycomputers.com/IttyBitty/TinyBasic/

* z8671-basic_debug_src.zip meine reassemblierten und kommentierte Quellen (Z8 source, IL soure, IL Decompiler)