Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| elektronik:z8671:handbuch [2021/12/09 07:36] – angelegt volkerp | elektronik:z8671:handbuch [2024/02/14 11:13] (aktuell) – [Mastermind] volkerp | ||
|---|---|---|---|
| Zeile 20: | Zeile 20: | ||
| Basic/Debug ignoriert die Unterscheidung zwischen Groß- und | Basic/Debug ignoriert die Unterscheidung zwischen Groß- und | ||
| Kleinbuchstaben. Daher sind PRINT, PrInT und print alles | Kleinbuchstaben. Daher sind PRINT, PrInT und print alles | ||
| - | gültige Basic/ | + | gültige Basic/ |
| - | GRoßbuchstaben kennt), | + | wird hier alles in Großbuchstaben |
| Beispiele: | Beispiele: | ||
| Zeile 119: | Zeile 119: | ||
| als vorzeichenlose ganze Zahl im Bereich von 0 - 65535 behandelt. | als vorzeichenlose ganze Zahl im Bereich von 0 - 65535 behandelt. | ||
| Beispiel: Die Anweisung PRINT 40000\3 gibt den korrekten Wert 13333 zurück | Beispiel: Die Anweisung PRINT 40000\3 gibt den korrekten Wert 13333 zurück | ||
| - | Dagwegen | + | Dagegen |
| Ganzzahl mit Vorzeichen für 40000 ist -25536. | Ganzzahl mit Vorzeichen für 40000 ist -25536. | ||
| - | Weil es die Dividende als sechzehn Bit positiv | + | Weil hier der Dividende als positive |
| - | Zahl, kann der Backslash eine logische Rechtsverschiebung auf a durchführen | + | kann der Backslash eine logische Rechtsverschiebung auf Bitmuster |
| - | Bitmuster, wie unten gezeigt: | + | |
| (-2)/2 = -1 | (-2)/2 = -1 | ||
| (-2)\2 = 32767 | (-2)\2 = 32767 | ||
| - | Ein Versuch, mit dem Backslash durch eine negative Zahl zu dividieren | + | Ein Versuch, mit dem Backslash durch eine negative Zahl zu dividieren, |
| liefert undefinierte Ergebnisse. | liefert undefinierte Ergebnisse. | ||
| Der Backslash-Operator kann auch zum Drucken von Werten | Der Backslash-Operator kann auch zum Drucken von Werten | ||
| größer als +32767 verwendet werden. Angenommen, N ist ein Wert außerhalb des normalen | größer als +32767 verwendet werden. Angenommen, N ist ein Wert außerhalb des normalen | ||
| - | Druckbereich. | + | Druckbereichs, |
| PRINT N\10; N-N\10*10 | PRINT N\10; N-N\10*10 | ||
| Relationale Operatoren spezifizieren bedingte Beziehungen in | Relationale Operatoren spezifizieren bedingte Beziehungen in | ||
| - | eine IF-Anweisung. Die sechs relationalen Operatoren, die von erkannt werden | + | eine IF-Anweisung. Die sechs relationalen Operatoren, die in Basic/ |
| - | Basic/Debug sind: | + | |
| = gleich | = gleich | ||
| Zeile 152: | Zeile 150: | ||
| ===== Speicherreferenzen ===== | ===== Speicherreferenzen ===== | ||
| - | BasiC/Debug kann die internen Z8671-Register direkt ansprechen | + | Basic/Debug kann die internen Z8671-Register direkt ansprechen |
| - | und alle externen Speicher (> 100h). Der Inhalt einer beliebigen Adresse | + | sowie den externen Speicher (> 100h). Der Inhalt einer beliebigen Adresse |
| kann untersucht und RAM geändert werden. | kann untersucht und RAM geändert werden. | ||
| Zeile 168: | Zeile 166: | ||
| Das ist die erste Zeilennummer) | Das ist die erste Zeilennummer) | ||
| - | Byte-Referenzen werden verwendet, um ein einzelnes Register in der CPU zu ändern, E/A zu steuern | + | Byte-Referenzen werden verwendet, um ein einzelnes Register in der CPU zu ändern, E/A-Geräte |
| - | Geräte | + | oder zum Zugriff |
| - | Sechzehn-Bit-Wörter werden | + | Sechzehn-Bit-Wörter werden durch das Wortsignalzeichen "^", |
| - | durch das Wortsignalzeichen "$" | + | gefolgt von der Adresse, |
| - | signifikantes | + | Damit wird das höherwertige |
| - | signifikantes | + | niederwertige |
| - | Zeigerregisterwerte | + | Modifikation von Zeigerregisterwerten |
| Der Adresswert kann eine Variable, eine Konstante, ein Hex-Wert sein, | Der Adresswert kann eine Variable, eine Konstante, ein Hex-Wert sein, | ||
| Zeile 184: | Zeile 182: | ||
| Beispiel: Wenn beispielsweise die benötigte Adresse vom Wert von C abhängt, | Beispiel: Wenn beispielsweise die benötigte Adresse vom Wert von C abhängt, | ||
| - | Basic/ | + | kann Basic/Debug die Berechnung durchführen: |
| 145 LET @(C*100) = A | 145 LET @(C*100) = A | ||
| - | Indirekte Adressierung kann Basic/Debug durch mehrere | + | Indirekte Adressierung kann in Basic/Debug durch mehrere |
| Adressen erfolgen, um die erforderlichen Info zu erhalten: | Adressen erfolgen, um die erforderlichen Info zu erhalten: | ||
| Zeile 230: | Zeile 228: | ||
| Für logisches ODER ergänzen Sie die AND-Funktion um das | Für logisches ODER ergänzen Sie die AND-Funktion um das | ||
| Subtrahieren jedes Elements von -1. Zum Beispiel | Subtrahieren jedes Elements von -1. Zum Beispiel | ||
| - | entspricht | + | entspricht |
| + | < | ||
| -1-AND(-1-A, | -1-AND(-1-A, | ||
| + | </ | ||
| Die arithmetische Summe kann auch für das logische ODER verwendet werden | Die arithmetische Summe kann auch für das logische ODER verwendet werden | ||
| Zeile 251: | Zeile 251: | ||
| Nachdem das Unterprogramm für die Maschinensprache zusammengestellt wurde, | Nachdem das Unterprogramm für die Maschinensprache zusammengestellt wurde, | ||
| speichern Sie es im Speicher, der sonst nicht von Basic/Debug belegt wird | speichern Sie es im Speicher, der sonst nicht von Basic/Debug belegt wird | ||
| - | (Programm oder Stack). | + | (außerhalb |
| - | Verwenden Sie die Adresse der ersten Anweisung des Unterprogramms als erste | + | Verwenden Sie die Adresse der ersten Anweisung des Unterprogramms als erstes |
| Argument der USR-Funktion wie folgt: | Argument der USR-Funktion wie folgt: | ||
| Zeile 261: | Zeile 261: | ||
| es keine Maschinensprachroutine am Standort gibt, | es keine Maschinensprachroutine am Standort gibt, | ||
| ist das Ergebnis undefiniert. | ist das Ergebnis undefiniert. | ||
| - | Auf die Adresse können ein oder zwei Werte folgen, die | + | Auf die Adresse können ein oder zwei Werte folgen, die |
| vom Unterprogramm verarbeitet werden können. Zum Beispiel: | vom Unterprogramm verarbeitet werden können. Zum Beispiel: | ||
| Zeile 269: | Zeile 269: | ||
| Basic/Debug übergibt die Werte an das Unterprogramm in | Basic/Debug übergibt die Werte an das Unterprogramm in | ||
| den Registern 18-19 und 20-21 und erwartet den resultierenden Wert in | den Registern 18-19 und 20-21 und erwartet den resultierenden Wert in | ||
| - | 18-19 zurück. Dieser resultierende Wert wird verwendet, um zu beenden | + | 18-19 zurück. Dieser resultierende Wert wird verwendet, um |
| - | die Auswertung des Ausdrucks. | + | die Auswertung des Ausdrucks |
| Die Register, in denen die Argumente übergeben werden, hängen von | Die Register, in denen die Argumente übergeben werden, hängen von | ||
| Zeile 306: | Zeile 306: | ||
| Er darf nur verwendet werden, wenn das Unterprogramm keinen Wert zurückgibt. | Er darf nur verwendet werden, wenn das Unterprogramm keinen Wert zurückgibt. | ||
| Das erste Argument ist die Adresse des ersten Bytes des | Das erste Argument ist die Adresse des ersten Bytes des | ||
| - | Subroutine. Die letzten beiden optionalen Argumente werden verwendet, um zu übergeben | + | Subroutine. Die letzten beiden optionalen Argumente werden verwendet, um |
| - | Werte an das Unterprogramm. Im Gegensatz zur USR-Funktion wird der Inhalt von R18-19 | + | Werte an das Unterprogramm |
| verworfen und es wird kein Wert zurückgegeben. Ansonsten übergibt GO@ Argumente an die | verworfen und es wird kein Wert zurückgegeben. Ansonsten übergibt GO@ Argumente an die | ||
| Unterprogramm auf die gleiche Weise wie USR (d.h. in Registier 18-19 und 20-21, s.o.). | Unterprogramm auf die gleiche Weise wie USR (d.h. in Registier 18-19 und 20-21, s.o.). | ||
| Zeile 326: | Zeile 326: | ||
| Programm an dieser Zeile fort. GOSUB muss der letzte Befehl in seiner Zeile | Programm an dieser Zeile fort. GOSUB muss der letzte Befehl in seiner Zeile | ||
| sein. Ein Unterprogramm kann ein anderes aufrufen. Die RETURN-Anweisung am Ende | sein. Ein Unterprogramm kann ein anderes aufrufen. Die RETURN-Anweisung am Ende | ||
| - | des zweiten Unterprogramms kehrt nach Ausführung | + | des zweiten Unterprogramms kehrt nach Ausführung zum ersten |
| - | Unterprogramm. Auf diese Weise können Unterprogramme verschachtelt werden. | + | Unterprogramm |
| Zeile 362: | Zeile 362: | ||
| Der IF/ | Der IF/ | ||
| statement kann eine andere Anweisung sein oder eine Zeilennummer, | statement kann eine andere Anweisung sein oder eine Zeilennummer, | ||
| - | Liste von durch Doppelpunkte getrennten | + | Liste von durch Doppelpunkten getrennte |
| - | Jede dieser | + | Jede dieser |
| Das Schlüsselwort THEN kann weggelassen werden, um Speicherplatz zu sparen. | Das Schlüsselwort THEN kann weggelassen werden, um Speicherplatz zu sparen. | ||
| Ebenso darf GOTO vor einer Zeilennummer entfallen. | Ebenso darf GOTO vor einer Zeilennummer entfallen. | ||
| Zeile 374: | Zeile 374: | ||
| Es gibt nur zwei Situationen, | Es gibt nur zwei Situationen, | ||
| - | nicht weggelassen werden darf: Es darf nicht weggelassen werden, wenn der zweite | + | nicht weggelassen werden darf: Zum einen darf es nicht weggelassen werden, wenn der zweite |
| Ausdruck mit einer dezimalen oder hexadezimalen Konstante endet und eine | Ausdruck mit einer dezimalen oder hexadezimalen Konstante endet und eine | ||
| Zeilennummer statt einer Anweisung verwendet wird. Zum Beispiel: | Zeilennummer statt einer Anweisung verwendet wird. Zum Beispiel: | ||
| Zeile 386: | Zeile 386: | ||
| IF 1 > X 1000 | IF 1 > X 1000 | ||
| - | Die zweite Situation, bei der THEN nicht weggelassen werden darf, ist | + | Die zweite Situation, bei der THEN nicht weggelassen werden darf, ist, |
| wenn der zweite Ausdruck mit einer hexadezimalen Konstante endet, | wenn der zweite Ausdruck mit einer hexadezimalen Konstante endet, | ||
| und der Anweisungsteil eine LET-Anweisung ist, in der das Schlüsselwort | und der Anweisungsteil eine LET-Anweisung ist, in der das Schlüsselwort | ||
| Zeile 416: | Zeile 416: | ||
| INPUT verwirft alle im Puffer verbleibenden Werte von | INPUT verwirft alle im Puffer verbleibenden Werte von | ||
| - | vorherige IN-, INPUT- oder RUN-Anweisungen und fordert neue Daten an | + | vorherige IN-, INPUT- oder RUN-Anweisungen und fordert neue Daten |
| - | vom Betreiber. IN verwendet alle Werte, die im Puffer | + | vom Nutzer an. IN verwendet |
| und fordert dann neue Daten an. | und fordert dann neue Daten an. | ||
| Zeile 425: | Zeile 425: | ||
| Wert am Anfang der Liste zugewiesen bekam, kann verwendet werden, um später | Wert am Anfang der Liste zugewiesen bekam, kann verwendet werden, um später | ||
| eine weitere Variable in der Liste zu definieren. | eine weitere Variable in der Liste zu definieren. | ||
| - | Beispielsweise kann die Anweisung INPUT C,A | + | Beispielsweise kann die Anweisung INPUT C,A als gültige Eingabe |
| - | 10, | + | 10,C*5 verarbeiten. |
| Wenn ein Programm vom Bediener die Eingabe einer Liste von | Wenn ein Programm vom Bediener die Eingabe einer Liste von | ||
| Zeile 434: | Zeile 434: | ||
| verwendet werden, um die Interpretation von Eingabewerten zu ändern: | verwendet werden, um die Interpretation von Eingabewerten zu ändern: | ||
| + | < | ||
| ? %123, | ? %123, | ||
| ? %12 3AND(56) (hex 123A, Variablen N, D, dezimal 56) | ? %12 3AND(56) (hex 123A, Variablen N, D, dezimal 56) | ||
| ? %123, | ? %123, | ||
| + | </ | ||
| Da Basic/Debug nur einen Eingabezeilenpuffer hat, werden INPUT | Da Basic/Debug nur einen Eingabezeilenpuffer hat, werden INPUT | ||
| Zeile 464: | Zeile 466: | ||
| Werte zuzuweisen. | Werte zuzuweisen. | ||
| - | Um dem Bediener | + | Um dem Nutzer |
| - | Werten einzugeben, | + | Werten einzugeben, |
| um die Anforderungen zu beschreiben. Wenn die PRINT-Anweisung mit einem Semikolon | um die Anforderungen zu beschreiben. Wenn die PRINT-Anweisung mit einem Semikolon | ||
| abgeschlossen ist, wird der INPUT-Prompt "?" | abgeschlossen ist, wird der INPUT-Prompt "?" | ||
| Zeile 475: | Zeile 477: | ||
| 100 PRINT "BITTE JA ODER NEIN EINGEBEN" | 100 PRINT "BITTE JA ODER NEIN EINGEBEN" | ||
| 110 LET N=J-1 | 110 LET N=J-1 | ||
| - | 120 DRUCK " | + | 120 PRINT " |
| 130 INPUT N | 130 INPUT N | ||
| 140 IF N=J THEN PRINT " | 140 IF N=J THEN PRINT " | ||
| Zeile 497: | Zeile 499: | ||
| alphabetisches Zeichen A-Z sein, eine Speicherreferenz oder eine Register-Referenz. | alphabetisches Zeichen A-Z sein, eine Speicherreferenz oder eine Register-Referenz. | ||
| Der Wert des Ausdrucks wird entweder im | Der Wert des Ausdrucks wird entweder im | ||
| - | Speicherort, oder in den Speicherort der Variablen gelegt, | + | Speicherort oder in den Speicherort der Variablen gelegt, |
| und kann bei jedem späteren Auftreten der Variablen verwendet werden. | und kann bei jedem späteren Auftreten der Variablen verwendet werden. | ||
| Da das Gleichheitszeichen die Syntax dieses Befehls eindeutig macht, | Da das Gleichheitszeichen die Syntax dieses Befehls eindeutig macht, | ||
| Zeile 555: | Zeile 557: | ||
| 1060| (Signed) | 1060| (Signed) | ||
| 1070| | 1070| | ||
| - | |||
| Fünf Zeilen dieses Programms sind eingerückt, | Fünf Zeilen dieses Programms sind eingerückt, | ||
| Zeile 564: | Zeile 565: | ||
| einschließlich der vertikalen Striche am linken Rand. Der vertikale | einschließlich der vertikalen Striche am linken Rand. Der vertikale | ||
| Strich wird benötigt, um Zeile 1000 einzurücken; | Strich wird benötigt, um Zeile 1000 einzurücken; | ||
| - | Konsistenz enthalten. | + | Konsistenz enthalten. |
| eine Anweisung einzurücken, | eine Anweisung einzurücken, | ||
| verwenden Sie den vertikalen Strich, um Textzeilen einzurücken, | verwenden Sie den vertikalen Strich, um Textzeilen einzurücken, | ||
| Zeile 585: | Zeile 586: | ||
| kein Speicher-Überlaufschutz mehr vorhanden, und das Programm kann zerstört werden. | kein Speicher-Überlaufschutz mehr vorhanden, und das Programm kann zerstört werden. | ||
| - | -> vp: es muss zusätzlich Register 4-5 auf 20h Byte nach Programmende (oder höher) | + | -> vp: Es muss zusätzlich Register 4-5 auf 20h Byte nach Programmende (oder höher) |
| gesetzt werden, dann ist alles korrekt, z.B.: | gesetzt werden, dann ist alles korrekt, z.B.: | ||
| - | $4=%89FF | + | ^4=%89FF |
| Zeile 612: | Zeile 613: | ||
| und weitere Anweisung folgen. | und weitere Anweisung folgen. | ||
| - | Wenn ein Ausdruck als Argument für PRINT eingegeben wird | + | Wenn ein Ausdruck als Argument für PRINT eingegeben wird, |
| wertet Basic/Debug ihn aus und listet seinen Dezimalwert auf dem Bildschirm. | wertet Basic/Debug ihn aus und listet seinen Dezimalwert auf dem Bildschirm. | ||
| Nur die signifikanten Stellen werden gedruckt, führende Nullen und Divisionsreste nicht. | Nur die signifikanten Stellen werden gedruckt, führende Nullen und Divisionsreste nicht. | ||
| PRINT gibt Zahlen als ganze Zahlen mit Vorzeichen aus. Eine Methode zum Drucken von | PRINT gibt Zahlen als ganze Zahlen mit Vorzeichen aus. Eine Methode zum Drucken von | ||
| - | unsignierten Werte mittels ' | + | vorzeichenlosen Werten |
| - | Um einen Hexadezimalwert | + | Um einen Hexadezimalwert |
| PRINT HEX (Ausdruck) | PRINT HEX (Ausdruck) | ||
| Zeile 626: | Zeile 627: | ||
| Im Gegensatz zu Zeichenketten muss der HEX-Funktion das Schlüsselwort PRINT vorangestellt werden, | Im Gegensatz zu Zeichenketten muss der HEX-Funktion das Schlüsselwort PRINT vorangestellt werden, | ||
| - | ebenso wie jeden Ausdruck, der mit einer Variablen beginnt. | + | ebenso wie jedem Ausdruck, der mit einer Variablen beginnt. |
| Das Schlüsselwort kann jedoch vor einem | Das Schlüsselwort kann jedoch vor einem | ||
| Ausdruck weggelassen werden, wenn dem Ausdruck ein " | Ausdruck weggelassen werden, wenn dem Ausdruck ein " | ||
| Zeile 657: | Zeile 658: | ||
| Um rechtsbündig ausgerichtete Spalten zu drucken, müssen führende Leerzeichen | Um rechtsbündig ausgerichtete Spalten zu drucken, müssen führende Leerzeichen | ||
| - | hinzugefügt werden. Basic/Debugging | + | hinzugefügt werden. Basic/Debug kann nur in Anführungszeichen eingeschlossene |
| Leerzeichen drucken. Das folgendes Beispielprogramm fügt führende Leerzeichen zu N hinzu: | Leerzeichen drucken. Das folgendes Beispielprogramm fügt führende Leerzeichen zu N hinzu: | ||
| Zeile 667: | Zeile 668: | ||
| - | Basic/Debug kann die meisten Steuerzeichen drucken, wie z.B. bell, wenn | + | Basic/Debug kann die meisten Steuerzeichen drucken, wie z.B. den Signalton (bell, ^G), wenn |
| sie in einer Zeichenkette in Anführungszeichen enthalten sind. Die | sie in einer Zeichenkette in Anführungszeichen enthalten sind. Die | ||
| folgende Steuerzeichen können nicht gedruckt werden: | folgende Steuerzeichen können nicht gedruckt werden: | ||
| Zeile 709: | Zeile 710: | ||
| alles, was dem REM-Schlüsselwort folgt, daher muss REM und sein | alles, was dem REM-Schlüsselwort folgt, daher muss REM und sein | ||
| Kommentar der letzte Befehl in einer Zeile sein. Der gemäßigte Gebrauch von | Kommentar der letzte Befehl in einer Zeile sein. Der gemäßigte Gebrauch von | ||
| - | Anmerkungen in einem Programm | + | Anmerkungen in einem Programm |
| Pflegen. Bemerkungen nehmen jedoch Platz im Speicher ein und sollten | Pflegen. Bemerkungen nehmen jedoch Platz im Speicher ein und sollten | ||
| für maximale Platzausnutzung weggelassen werden. | für maximale Platzausnutzung weggelassen werden. | ||
| Zeile 735: | Zeile 736: | ||
| Dieser Befehl initiiert die sequentielle Ausführung aller | Dieser Befehl initiiert die sequentielle Ausführung aller | ||
| - | Anweisungen im Speicher abgelegt. RUN wird nur im | + | Anweisungen, die im Speicher abgelegt |
| Sofortmodus genutzt. Datenwerte für den ersten IN-Befehl können | Sofortmodus genutzt. Datenwerte für den ersten IN-Befehl können | ||
| durch Kommas getrennt dem Schlüsselwort RUN folgen: | durch Kommas getrennt dem Schlüsselwort RUN folgen: | ||
| Zeile 751: | Zeile 752: | ||
| Die Programmausführung wird oft durch einen Fehler abrupt beendet. | Die Programmausführung wird oft durch einen Fehler abrupt beendet. | ||
| - | Nach dem Ändern der fehlerhaften Anweisung im Direktmodus kann der Benutzer | + | Nach dem Ändern der fehlerhaften Anweisung im Direktmodus kann der Nutzer |
| den Lauf neu starten, indem er GOTO mit den entsprechenden Zeilennummer nutzt, | den Lauf neu starten, indem er GOTO mit den entsprechenden Zeilennummer nutzt, | ||
| oder Sie setzen das Programm mit einem STOP-Befehl zurück, und starten | oder Sie setzen das Programm mit einem STOP-Befehl zurück, und starten | ||
| Zeile 807: | Zeile 808: | ||
| ===== Speichernutzung ===== | ===== Speichernutzung ===== | ||
| - | Standard: 1020 (Basic-Programm) bis FFDF (Arbeitspeicher) | + | Standard: 1020 (Basic-Programm) bis FFEF (Arbeitspeicher) |
| - | yy=FF, xx=10 | + | xx=10, |
| + | |||
| + | Wenn nur ROM vorhanden ist, so ist xx=0 und yy=0. Dann werden nur interne Register genutzt. | ||
| + | In diesem Fall sind nur die Variablen A..L sicher nutzbar. M..Z wird vom Gosub-Stack mitgenutzt. | ||
| < | < | ||
| Zeile 817: | Zeile 821: | ||
| ; yy68 - yyF0 Input line buffer, used for editing in immediate mode and | ; yy68 - yyF0 Input line buffer, used for editing in immediate mode and | ||
| ; user response to IN or INPUT request in run mode. | ; user response to IN or INPUT request in run mode. | ||
| + | ; Reg. 68-7F im ROM-Mode Input-Buffer sowie Expression Evaluation stack. | ||
| + | ; Expression Evaluation stack grows from 7F (hex) down, and the line | ||
| + | ; buffer grows from 68 (hex) up. | ||
| ; yy56 - yy67 Unused. | ; yy56 - yy67 Unused. | ||
| ; yy54 - yy55 Storage for variable z. | ; yy54 - yy55 Storage for variable z. | ||
| Zeile 824: | Zeile 831: | ||
| ; yy20 Base of GOSUB stack. Stack grows down to lower memory addresses, | ; yy20 Base of GOSUB stack. Stack grows down to lower memory addresses, | ||
| ; and may extend until it reaches the top of the user's Basic/Debug program. | ; and may extend until it reaches the top of the user's Basic/Debug program. | ||
| + | ; Reg. 40-67 im ROM-Mode GOSUB-Stack | ||
| ; Register | ; Register | ||
| Zeile 868: | Zeile 876: | ||
| - | ===== Direkte | + | ===== Direkte |
| Basic/ | Basic/ | ||
| - | Direktes | + | Aufrufen der direkten Ein-/ |
| - | USR- oder GO@-Anweisung | + | USR- oder GO@-Anweisung Binärdaten lesen und schreiben. |
| - | input %8053 (ES1988, | + | input orig Z8671 %54 |
| - | output %8058 (ES1988, | + | output orig Z8671 %61 |
| Das folgende Beispielprogramm druckt das Hex-Äquivalent | Das folgende Beispielprogramm druckt das Hex-Äquivalent | ||
| Zeile 881: | Zeile 889: | ||
| 10 PRINT "INPUT A CHARACTER, PLEASE"; | 10 PRINT "INPUT A CHARACTER, PLEASE"; | ||
| - | 20 C = USER (%8053) | + | 20 C = USER (%54) |
| 30 PRINT" THE HEX VALUE OF "; | 30 PRINT" THE HEX VALUE OF "; | ||
| - | 40 GO@ %8058, C | + | 40 GO@ %61, C |
| 50 PRINT" IS "; HEX (C);". SHALL WE DO ANOTHER?"; | 50 PRINT" IS "; HEX (C);". SHALL WE DO ANOTHER?"; | ||
| - | 60 Q = USER (%8053) | + | 60 Q = USER (%54) |
| 70 PRINT : IF Q = %59 GOTO 10 | 70 PRINT : IF Q = %59 GOTO 10 | ||
| 80 REM %59 IS AN ASCII " | 80 REM %59 IS AN ASCII " | ||
| + | ====== Mastermind ====== | ||
| + | |||
| + | Beispielprogramm nach "Zilog z8671-7-chip-computer" | ||
| + | |||
| + | Erläuterungen | ||
| + | * Zeile 20 initialisiert den Zähler T2 für Zufallszahlen | ||
| + | * Zeile 30 erzeugt 4 Zufallszahlen. Dazu ist 4x eine beliebige Taste zu drücken (USR(84) = char input) | ||
| + | * ^10+2 = YY22 Pointer auf Variable A | ||
| + | * THEN, LET, PRINT vor "", | ||
| + | * " | ||
| + | |||
| + | < | ||
| + | 10 REM MASTERMIND | ||
| + | 20 @243=7: | ||
| + | 40 X=USR(84): | ||
| + | | ||
| + | 50 "": | ||
| + | 100 "GUESS ",:IN E, | ||
| + | 110 I=I+1 | ||
| + | 300 J=^10+2: | ||
| + | 301 L=0 L Zähler 1..4 | ||
| + | 302 R=0: | ||
| + | 310 IF ^J=^K LET P=P+1 Test auf gleiche Zahl, gleicher Platz | ||
| + | 320 J=J+2: | ||
| + | 330 J=^10+2: | ||
| + | 331 L=0 L Zähler 1..4 | ||
| + | 340 IF ^J=^K LET R=R+1: | ||
| + | 341 J=J+2 nächste Plätze | ||
| + | 350 L=L+1: IF 4>L GOTO 340 next L | ||
| + | 351 J=^10+2 J zeigt auf A | ||
| + | 352 L=0 L Zähler | ||
| + | 360 K=K+2:IF ^10+17>K GOTO 340 nächster Platz K auf F etc., next | ||
| + | 363 J=^10+2: | ||
| + | 366 IF ^J>9 LET ^J=^J-10 ggf. wieder 10 abziehen | ||
| + | 367 J=J+2 nächster Platz | ||
| + | 368 IF ^10+9>J GOTO 366 Ende nach D | ||
| + | 369 Y=1: | ||
| + | 370 "RIGHT "; | ||
| + | 380 IF 4>P GOTO 100 wenn weniger als 4 am richtigen Platz, weiter raten | ||
| + | 390 X=0: | ||
| + | 400 "RIGHT IN "; | ||
| + | INPUT X Eingabe Variablenname Y oder N | ||
| + | 410 IF X=Y GOTO 10 Wenn Eingabe == 1 (Wert von Y), dann neues Spiel | ||
| + | |||
| + | :RUN | ||
| + | 1111 Zufallszahlen init | ||
| + | GUESS ? 1,2,3,4 | ||
| + | RIGHT 2 PLACE 0 | ||
| + | ... | ||
| + | GUESS ? 3,7,1,0 | ||
| + | RIGHT 4 PLACE 4 | ||
| + | RIGHT IN 15 GUESSES; | ||
| + | ? N | ||
| + | : | ||
| + | </ | ||