Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
elektronik:u883 [2017/12/18 15:44] – volkerp | elektronik:u883 [2022/08/04 06:51] – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== U883 ====== | ====== U883 ====== | ||
- | Der U883 ist ein spezieller Vertreter der [[tiny: | + | Der U883 ist ein spezieller Vertreter der [[elektronik: |
Der U883 ist maskenprogammierter U881, der interne PROM enthält ein einfaches TINY-MPBASIC. | Der U883 ist maskenprogammierter U881, der interne PROM enthält ein einfaches TINY-MPBASIC. | ||
Zeile 10: | Zeile 10: | ||
Der U883 wird im Heimcomputer [[:tiny|]] genutzt. | Der U883 wird im Heimcomputer [[: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, | ||
===== Downloads ===== | ===== Downloads ===== | ||
- | * {{: | + | * {{: |
Damit kann man den U883 durch einen U882 + 2K-EPROM ersetzen. Ebenso kann ein moderner Z8-kompatibler Prozessor genutzt werden, wie z.B. [[tiny: | Damit kann man den U883 durch einen U882 + 2K-EPROM ersetzen. Ebenso kann ein moderner Z8-kompatibler Prozessor genutzt werden, wie z.B. [[tiny: | ||
+ | |||
+ | **Achtung**: | ||
===== Literatur ===== | ===== Literatur ===== | ||
- | * Claßen/ | + | |
- | * rfe 3/1985, s. xxx | + | |
+ | * Müller, S.: Einchipmikrorechner U883 interpretiert Tiny-MPBASIC. Radio, | ||
* TINY-MPBASIC. Kundeninformation, | * TINY-MPBASIC. Kundeninformation, | ||
* ein paar Hinweise zum TINY-MPBASIC stehen auch in Kieser/ | * ein paar Hinweise zum TINY-MPBASIC stehen auch in Kieser/ | ||
+ | Mit dem PROM U2365 **BM200** gab es einen 8K-ROM mit Entwicklungstools zum U883. Beschrieben wurde dies in der [[elektronik: | ||
+ | |||
+ | * https:// | ||
+ | * http:// | ||
===== TINY-MPBASIC ===== | ===== TINY-MPBASIC ===== | ||
Zeile 34: | Zeile 45: | ||
Autor des TINY-MPBASIC ist Siegmar Müller, damals Applikations-Ing. im Funkwerk Erfurt (Truppe Meder/ | Autor des TINY-MPBASIC ist Siegmar Müller, damals Applikations-Ing. im Funkwerk Erfurt (Truppe Meder/ | ||
- | ... | + | Beschreibung s. [[elektronik: |
- | Beschreibung s.a. TINY | ||
- | Auszug aus Claßen/ | + | ===== JU+TE-Hinweise ===== |
- | **8. U883 TINY-MPBASIC** | + | |
+ | | ||
+ | | ||
- | Der Einchipmikrorechner U883 enthält in seinem 2K Byte großen internen ROM | + | ===== Quellcode ===== |
- | einen einfachen BASIC-Interpreter. Daneben existiert ein dazugehöriger Editor- | + | |
- | / | + | |
- | Programmentwicklung notwendig sind, enthält. Diese Komponenten liegen entweder | + | |
- | im externen ROM, sie können nach vollendeter Entwicklungsarbeit entfallen, oder sie existieren | + | |
- | auf einem Wirtsrechner. | + | |
- | Damit wird vielen potentiellen Anwendern des Einchipmikrorechners, | + | 2021 habe ich den Code den U883-Tiny-MP-BASIC komplett reassembliert |
- | keine Entwicklungstechnik verfügen, eine Möglichkeit gegeben, Programme zu | + | |
- | entwickeln (z.B.: für Steuerungs- oder Regelungsaufgaben im | + | |
- | Rationalisierungsmittelbau). Der Anwender kann somit seine Programme im | + | |
- | Zusammenspiel mit der von ihm erstellten Hardware austesten. Nach der Erprobung | + | |
- | ist das fertige Programm in einen EPROM zu laden, | + | |
- | werden. | + | |
- | Da die Problemlösung in Form von BASIC-Programmen erarbeitet wird, ist ein | + | Erkenntnisse: |
- | schnelles Erstellen und Modifizieren der Anwendersoftware möglich, ohne daß ein | + | * Proc-Befehlserweiterungen können zur Laufzeit gesetzt werden |
- | großer Aufwand für die sonst notwendige Entwicklungstechnik auftritt. | + | * Rückgabeparameter werden |
- | + | * TO bei TRAP muss als , übersetzt | |
- | **8.1. Sprachkonzept und Anwendung** | + | * GOTO sucht passende Zeile oder nächstgrößere; |
- | + | * REM endet bei ";", dahinter können normal ausgeführte Anweisungen folgen | |
- | Das in TINY-MPBASIC geschriebene Anwenderprogramm wird vom im internen ROM- | + | |
- | Bereich des U883 befindlichen BASIC-Interpreters abgearbeitet. | + | * PROC-Aufrufe |
- | + | | |
- | Neben dem BASIC-Programm sind Initialisierungsteile und, falls notwendig, die | + | |
- | Prozeduren GET_CHAR | + | |
- | zu erstellen. Diese sehr stark vom Einsatzfall abhängigen Teile sind in | + | |
- | Assemblersprache zu realisieren. | + | |
- | + | ||
- | Nach durchgeführter Initialisierung kann das BASIC-Anwenderprogramm aufgerufen | + | |
- | werden. Dies erfolgt durch einen CALL-Befehl zur Adresse | + | |
- | Register 6 der höherwertige Teil und in Register | + | |
- | Startadresse zu laden. Der Anwender kann für seine Problemlösung zusätzlich noch | + | |
- | externe Prozeduren und Funktionen in Assemblersprache realisieren, | + | |
- | aus aufrufbar sind. Das Vorhandensein externer Prozeduren und Funktionen wird | + | |
- | dem Interpreter dadurch bekannt gemacht, daß in den Registern | + | |
- | Adresse einer Prozedurnamentabelle übergeben wird. Falls keine externen | + | |
- | Prozeduren verwendet werden, so sind die Register 8 und 9 vor Aufruf des BASIC- | + | |
- | Interpreters Null zu setzen. Das Setzen der Register 6 bis 9 erfolgt mit dem Registerpointerwert %00. | + | |
- | + | ||
- | Das BASIC-Anwenderprogramm muß syntaktisch fehlerfrei sein. Es wird in | + | |
- | verdichteter Form abgespeichert. Die Erstellung eines syntaktisch fehlerfreien | + | |
- | Programms und der abarbeitbaren verdichteten Form erfolgt | + | |
- | des Editor/ | + | |
- | + | ||
- | Der TINY-MPBASIC-Interpreter verarbeitet intern 16 Bit breite Daten, die als | + | |
- | Integergrößen (Zweierkomplementdarstellung: | + | |
- | Bytewerte (niederwertige 8 Bit) interpretiert | + | |
- | in Dezimal- | + | |
- | gekennzeichnet: | + | |
- | Klammern gesetzt werden, damit das Vorzeichen nicht als Operator wirkt. Für | + | |
- | Variablenbezeichnungen sind die Buchstaben A bis Z verwendbar. (Sie belegen im | + | |
- | Registersatz die Adressen ab %20.) | + | |
- | + | ||
- | + | ||
- | Bild 8.1. Zusammenspiel des U883-BASIC-Interpreters mit Anwenderteilen | + | |
- | + | ||
- | Ausdrücke werden durch Verknüpfung von Konstanten, Variablen- oder | + | |
- | Funktionswerten durch logische und arithmetische Operatoren gebildet. | + | |
- | + | ||
- | ^ Operatoren ^ ^ Abkürzung ^ ASCII-Kode ^ | + | |
- | | + | Addition | + | 2B | | + | |
- | | - | Subtraktion | - | 2D | | + | |
- | | * | Multiplikation | * | 2A | | + | |
- | | / | Division | / | 2F | | + | |
- | | $MOD | Modulo | $M | 24 4D | | + | |
- | | $AND | logisches UND (bitweise) | $A | 24 41 | | + | |
- | | $OR | logisches ODER " | + | |
- | | $XOR | exklusives ODER " | + | |
- | + | ||
- | Ausdrücke werden von links nach rechts ausgewertet. Es besteht die Möglichkeit | + | |
- | der Klammerung. Die Verschachtelungstiefe hängt dabei von der verfügbaren | + | |
- | Stackgröße ab. | + | |
- | + | ||
- | Eine Prozedur ist ein in Assemblersprache geschriebenes Programm, das | + | |
- | einen Satz von BASIC übergebenen Eingabeparametern verarbeitet und | + | |
- | Ausgabeparameter an den BASIC-Interpreter zurückgibt. Die | + | |
- | Parameterübergabe erfolgt im Stackbereich. Der Aufruf erfolgt über | + | |
- | Prozedurnamen. | + | |
- | + | ||
- | Bild 8.2. Parameterübergabeschema für externe Prozeduren | + | |
- | + | ||
- | Funktionen sind Prozeduren, die genau einen Wert an den Interpreter übergeben. | + | |
- | Sie können | + | |
- | + | ||
- | Neben einer Reihe von fest integrierten Standardprozeduren und -funktionen | + | |
- | hat der Anwender die Möglichlkeit, | + | |
- | angepaßte Prozeduren oder Funktionen hinzuzufügen. Die Verbindung zu | + | |
- | TINY-MPBASIC erfolgt über die schon erwähnte Prozedurnamentabelle. | + | |
- | + | ||
- | Bild 8.3. Aufbau der externen Prozedurnamentabelle | + | |
- | + | ||
- | Das BASIC-Anwenderprogramm ist zeilenorientiert. Jede Zeile beginnt mit einer | + | |
- | Nummer. Pro Zeile muß wenigstens | + | |
- | Anweisungen auf einer Zeile sind möglich, wenn sie durch Semikolons getrennt | + | |
- | sind. | + | |
- | Soll eine Anweisung mehrmals hintereinander mit verschiedenen Argumenten ausgeführt | + | |
- | werden, | + | |
- | durch Kommas zu trennen. | + | |
- | Die Programmzeilen müssen in aufsteigender Folge markiert sein. Die | + | |
- | Anweisungsnamen | + | |
- | Speicherplatz zu belegen. Leerzeichen werden außer in Kommentaren und Texten | + | |
- | entfernt. Die Sortierung und das Herstellen der verdichteten Form übernimmt | + | |
- | normalerweise der Editorteil. | + | |
- | + | ||
- | **8.2. Anweisungen** | + | |
- | + | ||
- | Die Wertzuweisung für eine Variable ist die LET-Anweisung. | + | |
- | + | ||
- | LET Variablenname = Ausdruck | + | |
- | + | ||
- | Zur Programmverzweigung dient die GOTO-Anweisung. | + | |
- | + | ||
- | GOTO Ausdruck | + | |
- | + | ||
- | Unterprogramme | + | |
- | eines Unterprogramms wird durch die RETURN-Anweisung markiert. Sie bewirkt die | + | |
- | Programmfortsetzung bei der nach GOSUB folgenden Anweisung. | + | |
- | + | ||
- | GOSUB Ausdruck | + | |
- | RETURN | + | |
- | + | ||
- | Unterprogramme können weitere Unterprogramme aufrufen. Die | + | |
- | Verschachtelungstiefe wurde zu Verhinderung eines Stacküberlaufs | + | |
- | auf 15 beschränkt. | + | |
- | + | ||
- | Programmverzweigungen werden mit der IF/ | + | |
- | folgende Form: | + | |
- | + | ||
- | IF Ausdruck Vergleichsoperator Ausdruck THEN Anweisung | + | |
- | ELSE Anweisung | + | |
- | + | ||
- | Für Vergleichsoperator kann dabei stehen: | + | |
- | + | ||
- | = , < , > , <= , >= oder <> (für ungleich) | + | |
- | + | ||
- | Falls die nach IF folgende Bedingung wahr ist. so wird die folgende Anweisung | + | |
- | ausgeführt und der Rest übersprungen. Andernfalls wird mit die mit ELSE | + | |
- | beginnende Zeile abgearbeitet. | + | |
- | + | ||
- | Mit der PROC-Anweisung kann innerhalb des BASIC-Programms eine externe | + | |
- | Prozedur aufgerufen | + | |
- | + | ||
- | PROC [Variablenliste] = Prozedurname [Parameterliste] | + | |
- | + | ||
- | Die Variablen innerhalb der optionalen Variablenliste | + | |
- | und die Parameter innerhalb der ebenfalls optionalen Parameterliste | + | |
- | (Eingabeparameter) sind durch Kommas zu trennen. Als Parameter sind | + | |
- | Variablen und Konstanten zulässig. | + | |
- | + | ||
- | Zur Ein-/ | + | |
- | Festlegung, über welche Geräte die Ein-/ | + | |
- | Programme GET_CHAR und PUT_CHAR. Dies kann je nach Anwendungsfall sehr | + | |
- | unterschiedliche Hardware sein (z.B.: Terminal, Fernschreiber, | + | |
- | Anzeigen und verschiedene Tastaturen o.ä.). | + | |
- | + | ||
- | PRINT [" | + | |
- | PRINTHEX [" | + | |
- | + | ||
- | Die PRINT-Anweisungen geben einen Zahlenwert (bei PRINT: dezimal und bei | + | |
- | PRINTHEX: hexadezimal) aus. Diesem Wert kann eine beliebige Textkette | + | |
- | vorangestellt sein. Falls sowohl der Text als auch der Ausdruck fehlen, so | + | |
- | wird lediglich | + | |
- | (bzw. PRINTHEX) mit einem Komma abgeschlossen, unterbleibt die Ausgabe des | + | |
- | Zeilenvorschubs (%0D). | + | |
- | + | ||
- | INPUT [" | + | |
- | + | ||
- | Die INPUT-Anweisung gibt, falls vorhanden, erst den angegebenen Text aus | + | |
- | und weist den eingegebenen Wert der spezifizierten Variable zu. Die Eingabe | + | |
- | kann sowohl dezimal als auch hexadezimal (% vor dem Wert) erfolgen. | + | |
- | Bei fehlerhafter Eingabe wird ein Fragezeichen ausgegeben und eine neue | + | |
- | Eingabe erwartet. INPUT ist auch als Funktion verfügbar. | + | |
- | + | ||
- | Zur Programmsteuerung dienen die STOP- und END-Anweisung. | + | |
- | + | ||
- | STOP | + | |
- | END | + | |
- | + | ||
- | Die Programmzeile, | + | |
- | der Interpreter verlassen. Sie dient in Verbindung mit dem Debuggerteil | + | |
- | zum Programmtest (Setzen von Unterbrechungspunkten). Durch Aufruf des | + | |
- | Interpreters mit dem Eintrittspunkt %7FA kann der Programmablauf fortgesetzt | + | |
- | werden. | + | |
- | Die END-Anweisung kennzeichnet das Programmende. Sie bewirkt ebenfalls das | + | |
- | Verlassen des BASIC-Interpreters. | + | |
- | + | ||
- | Zur Kommentierung der Programme dient die REM-Anweisung. | + | |
- | + | ||
- | REM [Kommentartext] | + | |
- | + | ||
- | Bei der Anwendung dieser Anweisung sollte der zur Verfügung stehende | + | |
- | Gesamtspeicherplatz für das Anwenderprogramm bedacht werden. | + | |
- | + | ||
- | Zur Erzeugung von Warteschleifen kann die WAIT-Anweisung verwendet werden. | + | |
- | + | ||
- | WAIT Ausdruck | + | |
- | + | ||
- | Sie bewirkt das Durchlaufen | + | |
- | spezifiziert dabei die Anzahl der Durchläufe. Beim Wert 1 wird die Schleife | + | |
- | einmal und beim Wert -1 (entspricht %FFFF) 65536-mal durchlaufen. Bei einer Taktfrequenz von 8 | + | |
- | MHz dauert ein Durchlauf eine Millisekunde. Die Zeitangabe ist nicht ganz exakt, da für | + | |
- | den Aufruf der Zeitschleife eine gewisse Zeit benötigt wird. | + | |
- | + | ||
- | Mit Hilfe der CALL-Anweisung kann ein in Assemblersprache geschriebenes Programm | + | |
- | aufgerufen werden, ohne daß Parameter übermittelt werden. | + | |
- | + | ||
- | CALL Ausdruck | + | |
- | + | ||
- | Der Ausdruckswert ist die Programmadresse. Das Maschinenprogramm muß mit einem | + | |
- | RET-Befehl enden. | + | |
- | + | ||
- | Mit Hilfe der TRAP-Anweisung kann laufend das Erfülltsein einer Bedingung | + | |
- | getestet werden. | + | |
- | + | ||
- | TRAP Bedingung TO Ausdruck | + | |
- | + | ||
- | Nach dieser Anweisung prüft der Interpreter vor der Abarbeitung jeder neuen | + | |
- | Zeile, ob die angegebene Bedingung erfüllt ist. Im positiven Fall | + | |
- | wird zur TRAP-Routine verzweigt, deren Anfangsadresse durch Ausdruck | + | |
- | bestimmt wird. Eine TRAP-Routine ist ein Unterprogramm, | + | |
- | endet. Sobald eine TRAP-Bedingung eingeschaltet ist, verlangsamt sich die | + | |
- | weitere Programmabarbeitung. Durch die Anweisung | + | |
- | + | ||
- | CLTRP | + | |
- | + | ||
- | wird eine aktive TRAP-Bedingung gelöscht. | + | |
- | + | ||
- | Fest integriert im TINY-MPBASIC-Interpreter sind folgende Standard-Prozeduren und -Funktionen: | + | |
- | + | ||
- | | ABS [Parameter] | + | |
- | | NOT [Parameter] | + | |
- | | GTC | Zeichen mittels GET_CHAR holen | | + | |
- | | INPUT | Zahl mittels GET_CHAR holen | | + | |
- | | PTC [Parameter] | + | |
- | | RL [Parameter] | + | |
- | | RR [Parameter] | + | |
- | | GETR [Register] | + | |
- | | GETRR [Register] | liefert den Inhalt des spezifizierten Registers (höherwertige 8 Bit) und des nachfolgenden Registers (niederwertige 8 Bit) | | + | |
- | | GETEB [Adresse] | + | |
- | | GETEW [Adresse] | + | |
- | + | ||
- | Analog können auch Register und Bytes (bzw. Wörter) | + | |
- | Datenspeicher gesetzt werden: | + | |
- | + | ||
- | | SETR [Register, | + | |
- | | SETRR [Register, | + | |
- | | SETEB [Adresse, | + | |
- | | SETEW [Adresse, | + | |
- | + | ||
- | Innerhalb der verdichteten Form des BASIC-Programms werden | + | |
- | für die Anweisungen folgende Abkürzungen verwendet: | + | |
- | + | ||
- | ^ Anweisung ^ Abkürzung ^ ASCII-Code ^ | + | |
- | | LET | L | 4C | | + | |
- | | GOTO | G | 47 | | + | |
- | | GOSUB | S | 53 | | + | |
- | | RETURN | R | 52 | | + | |
- | | IF..THEN | F.... | 46...2C | | + | |
- | | ELSE... | ... ; | ...3E 3B | | + | |
- | | PROC | O | 4F | | + | |
- | | INPUT | I | 49 | | + | |
- | | PRINT | P | 50 | | + | |
- | | PRINTHEX | H | 48 | | + | |
- | | STOP | T | 54 | | + | |
- | | END | E | 45 | | + | |
- | | REM | M | 4D | | + | |
- | | WAIT | W | 57 | | + | |
- | | CALL | C | 43 | | + | |
- | | TRAP...TO | !..., |21...2C | | + | |
- | | CLRTRP | / | 2F | | + | |
- | + | ||
- | Der restliche Programmtext wird ohne Leerzeichen in ASCII-Zeichen (die | + | |
- | Zeilennummer als 2 Byte große Hexadezimalzahl) abgespeichert. Das | + | |
- | Zeilenende wird durch %0D und das Programmende durch %00 gekennzeichnet. | + | |
- | + | ||
- | ===== Beispiel ===== | + | |
- | + | ||
- | **Hinweis: der nachfolgende Text beschreibt vermutlich nicht die endgültige Version des TINY-MPBASIC. Die Zeilennummernkodierung ist z.B. abweichend. Die finale Beschreibung ist in rfe 3/1985 und in der Doku zum JU+TE zu finden** | + | |
- | + | ||
- | Auszug aus Claßen/ | + | |
- | + | ||
- | **8.3. Programmbeispiel** | + | |
- | + | ||
- | Das folgende Demonstrationsbeispiel zur Anwendung von TINY-MPBASIC wurde aus | + | |
- | /46/ übernommen. Das Bild 8.4. zeigt das zur Initialisierung und Programmstart | + | |
- | notwendige Assemblerprogramm. | + | |
- | + | ||
- | Die Bilder 8.5. und 8.6. zeigen ein BASIC-Demonstrationsprogramm in | + | |
- | Quellform und in der verdichteten Form. | + | |
< | < | ||
- | 01 U883TEST MODULE | + | 5 LET A=42 |
- | 02 | + | 10 PROC[A,B]=ABS[-25] |
- | 03 ! MOEGLICHES ANWENDERPROGRAMM IM EXT. SPEICHER ! | + | 20 PRINT " |
- | 04 INTERNAL | + | 30 PRINT " |
- | 05 | + | |
- | 06 | + | |
- | P 0812 07 $ABS %812 ! EINTRITTSPUNKTE ! | + | |
- | P 0812 8D 081B 08 JP BEGIN | + | |
- | P 0815 8D 0841 09 JP GET_CHAR | + | |
- | P 0818 8D 0851 10 JP PUT_CHAR | + | |
- | 11 END EINTRITT | + | |
- | 12 | + | |
- | 13 ! INITIALISIERUNG UND AUFRUF DES INTERPRETERS ! | + | |
- | 14 | + | |
- | P 081B 15 BEGIN PROCEDURE | + | |
- | 16 | + | |
- | P 081B 8C 96 | + | |
- | P 081D E6 FF 80 | + | |
- | P 0820 E6 F4 40 | + | |
- | P 0823 E6 F7 49 | + | |
- | P 0826 E6 F5 0D | + | |
- | P 0829 E6 F1 43 | + | |
- | P 082C B0 FB | + | |
- | P 082E 9F | + | |
- | P 082F E6 06 08 | + | |
- | P 0832 E6 07 69 | + | |
- | P 0835 B0 08 | + | |
- | P 0837 B0 09 | + | |
- | P 0839 E6 F0 23 | + | |
- | P 083C D6 07FD | + | |
- | P 083F 8B DA | + | |
- | P 0841 32 END BEGIN | + | |
- | 33 | + | |
- | 34 ! ZEICHEN HOLEN BZW. SENDEN | + | |
- | 35 | + | |
- | 36 | + | |
- | P 0841 37 | + | |
- | 38 | + | |
- | P 0841 56 FA F7 | + | |
- | P 0844 76 FA 08 40 GTC10: | + | |
- | P 0847 6B FB | + | |
- | P 0849 56 FA F7 42 AND IRQ,# | + | |
- | P 084C 88 F0 | + | |
- | P 084E 56 E8 7F | + | |
- | P 0851 45 END GET_CHAR | + | |
- | 46 | + | |
- | P 0851 47 | + | |
- | 48 | + | |
- | P 0851 76 FA | + | |
- | P 0854 6B FB | + | |
- | P 0856 56 FA EF | + | |
- | P 0859 89 F0 | + | |
- | P 085B A6 E8 0D | + | |
- | P 085E 6B 01 | + | |
- | P 0860 AF | + | |
- | P 0861 8C 0A 56 PTC10: | + | |
- | P 0863 D6 0851 | + | |
- | P 0866 8C 0D | + | |
- | P 0868 AF | + | |
- | P 0869 60 END PUT_CHAR | + | |
- | 61 | + | |
- | 62 $SECTION PROGRAM | + | |
- | 63 | + | |
- | 64 ! BEGINN DES BASICPROGRAMMS ! | + | |
- | P 0869 65 | + | |
- | 66 END U883TEST | + | |
- | </ | + | |
- | Bild 8.4. Assemblerprogramm für TINY-MPBASIC | + | RUN |
- | + | A= 00000 | |
- | <code gwbasic> | + | B= 00025 |
- | 0 REM BASIC DEMONSTRATION | + | |
- | 10 PRINT " | + | |
- | 20 PRINT | + | |
- | 30 PRINT "1 PRIMFAKTORZERLEGUNG" | + | |
- | 40 PRINT "2 UMRECHNUNG HEX-DEZIMAL" | + | |
- | 50 PRINT "3 UMRECHNUNG DEZIMAL-HEX" | + | |
- | 60 PRINT "4 REGISTERINHALT MODIFIZIEREN" | + | |
- | 70 PRINT "5 LANGSAM ALPHABET DRUCKEN" | + | |
- | 80 PRINT "6 NEU BEGINNEN" | + | |
- | 90 PRINT | + | |
- | 100 INPUT " | + | |
- | 110 GOTO 150*A | + | |
- | 150 REM PRIMFAKTORZERLEGUNG | + | |
- | 160 INPUT " ZAHL=? " A | + | |
- | 170 LET | + | |
- | 180 IF A < 2, GOTO 240 | + | |
- | 190 LET C = A/B*B | + | |
- | 200 IF C <> A, LET B = B+1; GOTO 190 | + | |
- | 220 PRINT B | + | |
- | 230 LET A = A/B; GOTO 180 | + | |
- | 240 PRINT " | + | |
- | 250 GOTO 100 | + | |
- | 300 REM UMRECHNUNGEN | + | |
- | 310 INPUT " | + | |
- | 320 PRINT " | + | |
- | 330 GOTO 100 | + | |
- | 450 INPUT " | + | |
- | 460 PRINTHEX "HEX = " A | + | |
- | 470 GOTO 100 | + | |
- | 600 REM REGISTERINH. MODIFIZ. | + | |
- | 610 INPUT " | + | |
- | 620 PRINTHEX " | + | |
- | 630 INPUT "NEUER INHALT: " B | + | |
- | 640 PROC SETR[A,B] | + | |
- | 650 GOTO 100 | + | |
- | 750 REM ALPHABET DRUCKEN | + | |
- | 760 INPUT " | + | |
- | 770 LET B = 26; LET C = %41 | + | |
- | 780 LET Z = C; GOSUB 1000 | + | |
- | 790 LET Z = %20; GOSUB 1000; REM SPACE DAZWISCHEN | + | |
- | 800 WAIT A | + | |
- | 810 LET C = C+1; LET B = B-1 | + | |
- | 820 IF B <> 0, GOTO 780 | + | |
- | 830 LET Z = %D; GOSUB 1000; REM CR & LF ANHAENGEN | + | |
- | 840 LET Z = %A; GOSUB 1000 | + | |
- | 850 GOTO 100 | + | |
- | 900 REM PROGRAMM VERLASSEN | + | |
- | 910 END | + | |
- | 1000 IF GETR[%FA] $A %10 <> %10 GOTO 1000 | + | |
- | 1010 PROC SETR[%FA, | + | |
- | 1020 PROC SETR[%F0, | + | |
- | 1030 RETURN | + | |
- | 2000 ENDE | + | |
</ | </ | ||
- | |||
- | Bild 8.5. TINY-MPBASIC-Programm (Quellform) | ||
- | |||
- | < | ||
- | 0000h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ | ||
- | 0010h: FF FF 8D 08 1B 8D 08 41 8D 08 51 8C 96 E6 FF 80 ; ÿÿ...A.QŒ–æÿ€ | ||
- | 0020h: E6 F4 40 E6 F7 41 E6 F5 0D E6 F1 43 B0 FB 9F E6 ; æô@æ÷Aæõ.æñC°ûŸæ | ||
- | 0030h: 06 08 E6 07 69 B0 08 B0 09 E6 F0 23 D6 07 FD 8B ; ..æ.i°.°.æð# | ||
- | 0040h: DA 56 FA F7 76 FA 08 6B FB 56 FA F7 88 F0 56 E8 ; ÚVú÷vú.kûVú÷ˆðVè | ||
- | 0050h: 7F 76 FA 10 6B FB 56 FA EF 89 F0 A6 E8 0D 6B 01 ; vú.kûVúï‰ð¦è.k. | ||
- | 0060h: AF 8C 0A D6 08 51 8C 0D AF 00 00 4D 42 41 53 49 ; ¯Œ.Ö.QŒ.¯..MBASI | ||
- | 0070h: 43 44 45 4D 4F 4E 53 54 52 41 54 49 4F 4E 0D 00 ; CDEMONSTRATION.. | ||
- | 0080h: 0A 50 22 57 41 45 48 4C 45 4E 20 53 49 45 20 42 ; .P" | ||
- | 0090h: 49 54 54 45 20 45 49 4E 20 50 52 4F 47 52 41 4D ; ITTE EIN PROGRAM | ||
- | 00a0h: 4D 42 45 49 53 50 49 45 4C 20 21 22 0D 00 14 50 ; MBEISPIEL !"...P | ||
- | 00b0h: 0D 00 1E 50 22 31 20 50 52 49 4D 46 41 4B 54 4F ; ...P"1 PRIMFAKTO | ||
- | 00c0h: 52 5A 45 52 4C 45 47 55 4E 47 22 0D 00 28 50 22 ; RZERLEGUNG" | ||
- | 00d0h: 32 20 55 4D 52 45 43 48 4E 55 4E 47 20 48 45 58 ; 2 UMRECHNUNG HEX | ||
- | 00e0h: 2D 44 45 5A 49 4D 41 4C 22 0D 00 32 50 22 33 20 ; -DEZIMAL" | ||
- | 00f0h: 55 4D 52 45 43 48 4E 55 4E 47 20 44 45 5A 49 4D ; UMRECHNUNG DEZIM | ||
- | 0100h: 41 4C 2D 48 45 58 22 0D 00 3C 50 22 34 20 52 45 ; AL-HEX" | ||
- | 0110h: 47 49 53 54 45 52 49 4E 48 41 4C 54 20 4D 4F 44 ; GISTERINHALT MOD | ||
- | 0120h: 49 46 49 5A 49 45 52 45 4E 22 0D 00 46 50 22 35 ; IFIZIEREN" | ||
- | 0130h: 20 4C 41 4E 47 53 41 4D 20 41 4C 50 48 41 42 45 ; LANGSAM ALPHABE | ||
- | 0140h: 54 20 44 52 55 43 4B 45 4E 22 0D 00 50 50 22 36 ; T DRUCKEN" | ||
- | 0150h: 20 4E 45 55 20 42 45 47 49 4E 4E 45 4E 22 0D 00 ; NEU BEGINNEN" | ||
- | 0160h: 5A 50 0D 00 64 49 22 50 52 4F 47 52 41 4D 4D 20 ; ZP..dI" | ||
- | 0170h: 4E 52 20 3F 3A 20 22 41 0D 00 6E 47 31 35 30 2A ; NR ?: " | ||
- | 0180h: 41 0D 00 96 4D 50 52 49 4D 46 41 4B 54 4F 52 5A ; A..–MPRIMFAKTORZ | ||
- | 0190h: 45 52 4C 45 47 55 4E 47 0D 00 A0 49 22 5A 41 48 ; ERLEGUNG.. I" | ||
- | 01a0h: 4C 3D 3F 20 22 41 0D 00 AA 4C 42 3D 32 0D 00 B4 ; L=? " | ||
- | 01b0h: 46 41 3C 32 3B 47 32 34 30 0D 00 BE 4C 43 3D 41 ; FA< | ||
- | 01c0h: 2F 42 2A 42 0D 00 C8 46 43 3C 3E 41 3B 4C 42 3D ; / | ||
- | 01d0h: 42 2B 31 3B 47 31 39 30 0D 00 DC 50 42 0D 00 E6 ; B+1; | ||
- | 01e0h: 4C 41 3D 41 2F 42 3B 47 31 38 30 0D 00 F0 50 22 ; LA=A/ | ||
- | 01f0h: 46 45 52 54 49 47 22 0D 00 FA 47 31 30 30 0D 01 ; FERTIG" | ||
- | 0200h: 2C 4D 55 4D 52 45 43 48 4E 55 4E 47 45 4E 0D 01 ; , | ||
- | 0210h: 36 49 22 48 45 58 5A 41 48 4C 3D 3F 20 22 41 0D ; 6I" | ||
- | 0220h: 01 40 50 22 44 45 5A 49 4D 41 4C 20 3D 20 22 41 ; .@P" | ||
- | 0230h: 0D 01 4A 47 31 30 30 0D 01 C2 49 22 44 45 5A 49 ; ..JG100..ÂI" | ||
- | 0240h: 4D 41 4C 5A 41 48 4C 3D 3F 20 22 41 0D 01 CC 48 ; MALZAHL=? " | ||
- | 0250h: 22 48 45 58 20 3D 20 22 41 0D 01 D6 47 31 30 30 ; "HEX = " | ||
- | 0260h: 0D 02 58 4D 52 45 47 49 53 54 45 52 49 4E 48 2E ; ..XMREGISTERINH. | ||
- | 0270h: 20 4D 4F 44 49 46 49 5A 2E 0D 02 62 49 22 52 45 ; MODIFIZ...bI" | ||
- | 0280h: 47 49 53 54 45 52 20 4E 52 2E 3A 20 22 41 0D 02 ; GISTER NR.: "A.. | ||
- | 0290h: 6C 48 22 49 4E 48 41 4C 54 20 3D 20 22 47 45 54 ; lH" | ||
- | 02a0h: 52 5B 41 5D 0D 02 76 49 22 4E 45 55 45 52 20 49 ; R[A]..vI" | ||
- | 02b0h: 4E 48 41 4C 54 3A 20 22 42 0D 02 00 4F 53 45 54 ; NHALT: " | ||
- | 02c0h: 52 5B 41 2C 42 5D 0D 02 8A 47 31 30 30 0D 02 EE ; R[A, | ||
- | 02d0h: 4D 41 4C 50 48 41 42 45 54 20 44 52 55 43 4B 45 ; MALPHABET DRUCKE | ||
- | 02e0h: 4E 0D 02 F8 49 22 57 41 52 54 45 5A 45 49 54 20 ; N..øI" | ||
- | 02f0h: 5A 57 49 53 43 48 45 4E 20 5A 57 45 49 20 42 55 ; ZWISCHEN ZWEI BU | ||
- | 0300h: 43 48 53 54 41 42 45 4E 20 5B 4D 53 45 43 5D 3A ; CHSTABEN [MSEC]: | ||
- | 0310h: 22 41 0D 03 02 4C 42 3D 32 36 3B 4C 43 3D 25 34 ; " | ||
- | 0320h: 31 0D 03 0C 4C 5A 3D 43 3B 53 31 30 30 30 0D 03 ; 1...LZ=C; | ||
- | 0330h: 16 4C 5A 3D 25 32 30 3B 53 31 30 30 30 3B 4D 53 ; .LZ=%20; | ||
- | 0340h: 50 41 43 45 20 44 41 5A 57 49 53 43 48 45 4E 0D ; PACE DAZWISCHEN. | ||
- | 0350h: 03 20 57 41 0D 03 2A 4C 43 3D 43 2B 31 3B 4C 42 ; . WA..*LC=C+1; | ||
- | 0360h: 3D 42 2D 31 0D 03 34 46 42 3C 3E 30 3B 47 37 38 ; =B-1..4FB<> | ||
- | 0370h: 30 0D 83 3E 4C 5A 3D 25 44 3B 53 31 30 30 30 3B ; 0.ƒ> | ||
- | 0380h: 4D 43 52 20 26 20 4C 46 20 41 4E 48 41 45 4E 47 ; MCR & LF ANHAENG | ||
- | 0390h: 45 4E 0D 03 48 4C 5A 3D 25 41 3B 53 31 30 30 30 ; EN..HLZ=%A; | ||
- | 03a0h: 0D 83 52 47 31 30 30 0D 03 84 4D 50 52 4F 47 52 ; .ƒRG100..„MPROGR | ||
- | 03b0h: 41 4D 4D 20 56 45 52 4C 41 53 53 45 4E 0D 03 8E ; AMM VERLASSEN..Ž | ||
- | 03c0h: 45 0D 03 E8 46 47 45 54 52 5B 25 46 41 5D 24 41 ; E..èFGETR[%FA]$A | ||
- | 03d0h: 25 31 30 3C 3E 25 31 30 3B 47 31 30 30 30 0D 03 ; %10<> | ||
- | 03e0h: F2 4F 53 45 54 52 5B 25 46 41 2C 30 5D 3B 4D 52 ; òOSETR[%FA, | ||
- | 03f0h: 45 51 55 45 53 54 20 52 55 45 43 4B 53 45 54 5A ; EQUEST RUECKSETZ | ||
- | 0400h: 45 4E 0D 03 FC 4F 53 45 54 52 5B 25 46 30 2C 5A ; EN..üOSETR[%F0, | ||
- | 0410h: 5D 0D 04 06 52 0D 07 D0 45 0D FF FF FF FF FF FF ; ]...R..ÐE.ÿÿÿÿÿÿ | ||
- | </ | ||
- | |||
- | Bild 8.6. TINY-MPBASIC-Programm (verdichtete Form) | ||
- | |||
- | |||
- | * {{ : | ||
- | |||
- | ===== JU+TE-Hinweise ===== | ||
- | |||
- | Entgegen dem obigen Beispiel aus dem Buch kodiert der JU+TE ein wenig anders: | ||
- | |||
- | * nach 0D (Zeilenende) wird das 7. Bit des nachfolgenden Bytes (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, | ||
- |