Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| elektronik:z8671:handbuch [2021/12/09 12:40] – [Mastermind] 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 253: | 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 263: | 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 271: | 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 308: | 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 328: | 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 364: | 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 376: | 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 388: | 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 418: | 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 427: | 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 468: | 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 479: | 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 501: | 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 559: | 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 568: | 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 589: | 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 616: | 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 630: | 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 661: | 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 671: | 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 713: | 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 739: | 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 755: | 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 885: | Zeile 882: | ||
| USR- oder GO@-Anweisung Binärdaten lesen und schreiben. | 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 892: | 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 " | ||
| Zeile 906: | Zeile 903: | ||
| Erläuterungen | Erläuterungen | ||
| * Zeile 20 initialisiert den Zähler T2 für Zufallszahlen | * Zeile 20 initialisiert den Zähler T2 für Zufallszahlen | ||
| - | * Zeile 30 erzeugt 4 Zufasllzahlen. Dazu ist 4x eine beliebige Taste zu drücken (USR(84) = char input) | + | * 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 | * ^10+2 = YY22 Pointer auf Variable A | ||
| * THEN, LET, PRINT vor "", | * THEN, LET, PRINT vor "", | ||
| Zeile 913: | Zeile 910: | ||
| < | < | ||
| 10 REM MASTERMIND | 10 REM MASTERMIND | ||
| - | 20 @243=7: | + | 20 @243=7: |
| - | 40 X=USR(84): | + | 40 X=USR(84): |
| - | 50 "": | + | X=USR(84): |
| - | 100 "GUESS ",:IN E,F,G,H | + | 50 "": |
| + | 100 "GUESS ",:IN E,F,G,H Eingabe 4 Werte (kommagetrennt) | ||
| 110 I=I+1 | 110 I=I+1 | ||
| - | 300 J=^10+2: | + | 300 J=^10+2: |
| - | 301 L=0 | + | 301 L=0 L Zähler 1..4 |
| - | 302 R=0:P=0 | + | 302 R=0:P=0 R Zähler richtige Zahl, P Zähler richtiger Platz |
| - | 310 IF ^J=^K LET P=P+1 | + | 310 IF ^J=^K LET P=P+1 Test auf gleiche Zahl, gleicher Platz |
| - | 320 J=J+2: | + | 320 J=J+2: |
| - | 330 J=^10+2: | + | 330 J=^10+2: |
| - | 331 L=0 | + | 331 L=0 L Zähler 1..4 |
| - | 340 IF ^J=^K LET R=R+1: | + | 340 IF ^J=^K LET R=R+1: |
| - | 341 J=J+2 | + | 341 J=J+2 nächste Plätze |
| - | 350 L=L+1: IF 4>L GOTO 340 | + | 350 L=L+1: IF 4>L GOTO 340 next L |
| - | 351 J=^10+2 | + | 351 J=^10+2 J zeigt auf A |
| - | 352 L=0 | + | 352 L=0 L Zähler |
| - | 360 K=K+2:IF ^10+17>K GOTO 340 | + | 360 K=K+2:IF ^10+17>K GOTO 340 nächster Platz K auf F etc., next |
| - | 363 J=^10+2: | + | 363 J=^10+2: |
| - | 366 IF ^J>9 LET ^J=^J-10 | + | 366 IF ^J>9 LET ^J=^J-10 ggf. wieder 10 abziehen |
| - | 367 J=J+2 | + | 367 J=J+2 nächster Platz |
| - | 368 IF ^10+9>J GOTO 366 | + | 368 IF ^10+9>J GOTO 366 Ende nach D |
| - | 369 Y=1:N=0 | + | 369 Y=1:N=0 Yes/ |
| - | 370 "RIGHT "; | + | 370 "RIGHT "; |
| - | 380 IF 4>P GOTO 100 | + | 380 IF 4>P GOTO 100 wenn weniger als 4 am richtigen Platz, weiter raten |
| - | 390 X=0:Y=1 | + | 390 X=0:Y=1 Yes/ |
| - | 400 "RIGHT IN "; | + | 400 "RIGHT IN "; |
| - | 410 IF X=Y GOTO 10 | + | |
| + | 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 | ||
| + | : | ||
| </ | </ | ||