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.
Z8671 Replacement Board, Joe Rovito, circa 2001, Bild von http://www.ntrd.com/joe/z8671.htm
s.a. BASIC/DEBUG
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.
%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)
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)