U883
Der U883 ist ein spezieller Vertreter der U881-Familie der Einchipmikrorechner (EMR) der DDR.
Der U883 ist maskenprogammierter U881, der interne PROM enthält ein einfaches TINY-MPBASIC.
Von Zilog gibt es den Z8671, einen Z8601 mit integriertem TINY-BASIC. Diese Variante entspricht überhaupt nicht dem U883!! Weder die BASIC-Beschreibung noch der PROM-Hexdump entsprechen denen des U883. Damit ist der Z8671 auch kein Ersatz für den U883.
Der U883 wird im Heimcomputer JU+TE TINY genutzt.
Ein Vorläufer des U883 ist der UB881D-004. Dieser maskenprogammierte Einchipmikrorechner enthält die Version 2.0 des Tiny-
MPBASIC. im U883 ist Version 3.0 des Tiny-MPBASIC enthalten.
Zusätzlich zum U883 erschien ein 8K-PROM U2365 BM200 mit Entwicklungstools zum U883 (Basic-Editor, Debugger, Assembler, MC-Monitor).
Downloads
Damit kann man den U883 durch einen U882 + 2K-EPROM ersetzen. Ebenso kann ein moderner Z8-kompatibler Prozessor genutzt werden, wie z.B. Zilog Z86C93 statt U883.
Achtung: Der U883 unterscheidet beim internen ROM nicht das Speichersignal /DM; es wird in jedem Fall auf den internen Speicher zugegriffen. Bei externem ROM sollte daher auch nur ein gemeinsamer 64K-Speicher ohne Trennung in Programm- und Datenspeicher genutzt werden.
Literatur
REIHE AUTOMATISIERUNGSTECHNIK Band 216, Programmieren mit BASIC, Siegmar Müller, 1. Auflage, VEB Verlag Technik, Berlin, 1985 (Abschnitt 7, MPBASIC)
Claßen/Oefler, Wissensspeicher Mikrorechner-Programmierung, VEB Verlag Technik Berlin, 4. Auflage 1989
Achtung in der 2.+3. Auflage wird die Entwicklungsversion UB881D-004 des TINY-MPBASIC beschrieben. Diese weicht in einigen Details von der finalen Version des U883 ab!
Müller, S.: Einchipmikrorechner U883 interpretiert Tiny-MPBASIC. Radio,Ferns. Elektron., Berlin 34(1985) 3, S.143 ff.
TINY-MPBASIC. Kundeninformation, VEB Mikroelektronik Erfurt, 1984
ein paar Hinweise zum TINY-MPBASIC stehen auch in Kieser/Bankel, Einchipmikrorechner, VEB Verlag Technik Berlin, 1986
Mit dem PROM U2365 BM200 gab es einen 8K-ROM mit Entwicklungstools zum U883. Beschrieben wurde dies in der mikroprozessortechnik MP8/1987 S.232 ff. Ein Entwicklungsboard basierend auf diesem ROM wurde 2016 entworfen:
TINY-MPBASIC
Der Einchipmikrorechner U883 enthält in seinem 2 KByte großen internen ROM
einen einfachen BASIC-Interpreter.
Autor des TINY-MPBASIC ist Siegmar Müller, damals Applikations-Ing. im Funkwerk Erfurt (Truppe Meder/Kieser).
Beschreibung s. MPBASIC, MPBASIC2 und beim JU+TE TINY.
JU+TE-Hinweise
nach 0D (Zeilenende) wird das 7. Bit des nachfolgenden Bytes (15. Bit der Zeilennummer) gesetzt. Die höchstmögliche Zeilennummer ist daher 32767.
AND, OR, XOR werden mit $A, $O, $X abgekürzt, vgl. a. Quellform Zeile 1000.
Zeilennummern, die in ihrer Hexadezimaldarstellung %0D (Zeilenende) oder %00 (Programmende) enthalten, sind nicht zulässig (z.B. Zeilennummer 0, 13, 256)
Quellcode
2021 habe ich den Code den U883-Tiny-MP-BASIC komplett reassembliert und dokumentiert.
Erkenntnisse:
Proc-Befehlserweiterungen können zur Laufzeit gesetzt werden (Adresse der Prozedurtabelle in Register 8 und 9).
Es ist sogar möglich, die Tabellen zwischendurch zu wechseln und unterschiedliche Implementierungen für dieselben Prozedurnamen zu programmieren, z.B. für ein Programm, dass auf verschiedenen Systemen laufen soll.
Rückgabeparameter werden mit 0 vorbelegt
TO bei TRAP muss als , übersetzt werden
GOTO sucht passende Zeile oder nächstgrößere; bei Programmende → Ende
REM endet bei „;“, dahinter können normal ausgeführte Anweisungen folgen
„;“ beendet das aktuelle Kommando. Jedes andere Zeichen (nicht nur „,“) wiederholt das aktuelle Kommando. Damit können mehrere gleiche Befehle in eine Zeile geschrieben werden, ohne dass das Schlüsselwort wiederholt werden muss. Ausnahme: PROC.
PROC-Aufrufe können nicht mit , aneinandergereiht werden (Bug im U883)
erfolgt ein END in einem Unterprogramm, ist bei Rückkehr zum Aufrufer der Stackpointer geändert!
Die Suche nach einer Zeile hat einen Fehler: Zeilennummern Hex xx0Dh werden nicht korrekt verarbeitet (Bug im U883). Deshalb keine Zeilen n*256+13 nutzen!
5 LET A=42
10 PROC[A,B]=ABS[-25]
20 PRINT "A="A
30 PRINT "B="B
RUN
A= 00000
B= 00025