Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
elektronik:z8671:handbuch [2021/12/09 07:36] – angelegt volkerpelektronik: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/Debug-Anweisungen. Zur guten Lesbarkeit (und weil ES1988 nur +gültige Basic/Debug-Anweisungen. Zur guten Lesbarkeit  
-GRoßbuchstaben kennt), wird hier alles in GRoßbuchstaben geschrieben.+wird hier alles in Großbuchstaben geschrieben.
  
 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 gibt PRINT 40000/3 -8512 zurück, weil die+Dagegen gibt PRINT 40000/3 -8512 zurück, weil die
 Ganzzahl mit Vorzeichen für 40000 ist -25536. Ganzzahl mit Vorzeichen für 40000 ist -25536.
  
-Weil es die Dividende als sechzehn Bit positiv behandelt +Weil hier der Dividende als positive sechzehn Bit-Zahl behandelt wird,  
-Zahl, kann der Backslash eine logische Rechtsverschiebung auf durchführen +kann der Backslash eine logische Rechtsverschiebung auf Bitmuster durchführen:
-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. so wird dieser mit folgender Anweisung komplett ausgegeben:+Druckbereichs, so wird dieser mit folgender Anweisung komplett ausgegeben:
   
  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/Debug genutzt werden, sind:
-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 zu steuern 
-Geräte oder greifen Sie auf einen beliebigen Speicherort zu.+oder zum Zugriff auf einen beliebigen Speicherplatz.
  
-Sechzehn-Bit-Wörter werden mit einer vorangestellten Adresse referenziert +Sechzehn-Bit-Wörter werden durch das Wortsignalzeichen "^",  
-durch das Wortsignalzeichen "$"Dies greift am meisten zu +gefolgt von der Adresse,  referenziert
-signifikantes Byte an der angegebenen Adresse plus das kleinste +Damit wird das höherwertige Byte an der angegebenen Adresse plus das  
-signifikantes Byte an der nächsthöheren Adresse. Modifikation von +niederwertige Byte an der nächsthöheren Adresse referenziert. 
-Zeigerregisterwerte erfordern eine Wortreferenz.+Modifikation von Zeigerregisterwerten erfordern eine Wortreferenz.
  
 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/Debug kann die Berechnung durchführen:+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 fogendes dem ODER von A und B:+entspricht folgendes dem ODER von A und B:
  
 +<code>
  -1-AND(-1-A, -1-B)  -1-AND(-1-A, -1-B)
 +</code>
   
 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 Programm oder Stack). 
  
-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 zu beenden.
  
 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 zu übergeben. Im Gegensatz zur USR-Funktion wird der Inhalt von R18-19 
 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 zurück zum ersten +des zweiten Unterprogramms kehrt nach Ausführung zum ersten 
-Unterprogramm. Auf diese Weise können Unterprogramme verschachtelt werden.+Unterprogramm zurück. Auf diese Weise können Unterprogramme verschachtelt werden.
  
  
Zeile 362: Zeile 362:
 Der IF/THEN-Befehl wird für bedingte Operationen und Verzweigungen verwendet. Der IF/THEN-Befehl wird für bedingte Operationen und Verzweigungen verwendet.
 statement kann eine andere Anweisung sein oder eine Zeilennummer, oder eine  statement kann eine andere Anweisung sein oder eine Zeilennummer, oder eine 
-Liste von durch Doppelpunkte getrennten Anweisungen. +Liste von durch Doppelpunkten getrennte Anweisungen. 
-Jede dieser Aussagen kann ein anderes IF sein. +Jede dieser Anweisungen kann ein anderes IF sein. 
 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, in denen das Schlüsselwort THEN Es gibt nur zwei Situationen, in denen das Schlüsselwort THEN
-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 verbleiben+vom Nutzer an. IN verwendet erst alle Werte, die im Puffer verblieben sind, 
 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,C*5 als gültige Eingabe verarbeiten.+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:
  
 +<code>
  ? %123,A,ND(56) (hex 123, Variablen A,N,D, dezimal 56)  ? %123,A,ND(56) (hex 123, Variablen A,N,D, dezimal 56)
  ? %12 3AND(56) (hex 123A, Variablen N, D, dezimal 56)  ? %12 3AND(56) (hex 123A, Variablen N, D, dezimal 56)
  ? %123,AND(56) (hex 123, Wert von 56 mit sich selbst UND-verknüpft)  ? %123,AND(56) (hex 123, Wert von 56 mit sich selbst UND-verknüpft)
 +</code>
  
 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 zu helfen, die richtige Anzahl und Art von +Um dem Nutzer zu helfen, die richtige Anzahl und Art von 
-Werten einzugeben, wirs IN und INPUT normalerweise eine PRINT-Anweisung vorangestellt,+Werten einzugeben, wird IN und INPUT normalerweise eine PRINT-Anweisung vorangestellt,
 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 "VERSTEHEN SIE";+ 120 PRINT "VERSTEHEN SIE";
  130 INPUT N  130 INPUT N
  140 IF N=J THEN PRINT "GUT!"  140 IF N=J THEN PRINT "GUT!"
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
-Speicherortoder 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, um das Programm  Fünf Zeilen dieses Programms sind eingerückt, um das Programm 
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; die anderen sind für Strich wird benötigt, um Zeile 1000 einzurücken; die anderen sind für
-Konsistenz enthalten. zusammenfassend: Verwenden Sie einen Doppelpunkt, um +Konsistenz enthalten. Zusammenfassend: Verwenden Sie einen Doppelpunkt, um 
 eine Anweisung einzurücken, weil Basic/Debug es als Anweisungsbegrenzer erkennt und eine Anweisung einzurücken, weil Basic/Debug es als Anweisungsbegrenzer erkennt und
 verwenden Sie den vertikalen Strich, um Textzeilen einzurücken, da dies das verwenden Sie den vertikalen Strich, um Textzeilen einzurücken, da dies das
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 '\' ist weiter oben dargestellt.+vorzeichenlosen Werten mittels '\' ist weiter oben dargestellt.
  
-Um einen Hexadezimalwert zu DRUCKEN, verwenden Sie die Syntax:+Um einen Hexadezimalwert auszugeben, verwenden Sie die Syntax:
  
  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 "+" oder "-" vorangestellt ist. Ausdruck weggelassen werden, wenn dem Ausdruck ein "+" oder "-" vorangestellt ist.
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 kann nur in Anführungszeichen eingeschlossene +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 erleichtern das Lesen und+Anmerkungen in einem Programm erleichtert das Lesen und
 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 sind. RUN wird nur im
 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, yy=FF 
 + 
 +Wenn nur ROM vorhanden istso 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.
   
 <code> <code>
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 Zeichenein-Ausgabe =====+===== Direkte Zeichen-Ein-Ausgabe =====
  
 Basic/Debug-Programme können durch Basic/Debug-Programme können durch
-Direktes Aufrufen der direkten Ein-/Ausgabetreiber via +Aufrufen der direkten Ein-/Ausgabetreiber via 
-USR- oder GO@-Anweisung Binärdaten Binärdaten lesen und schreiben.+USR- oder GO@-Anweisung Binärdaten lesen und schreiben.
  
-  input %8053 (ES1988, orig Z8671  %54) +  input orig Z8671  %54 
-  output %8058 (ES1988, orig Z8671  %61)+  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 "Y".  80 REM %59 IS AN ASCII "Y".
  
 +====== 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 "", GOTO vor Zahl nach IF, Leerzeichen können entfallen,\\ Für Tempo und Lesbarkeit sollten sie stehen.
 +  * "Y/N":INPUT X - Eingabe von Variablen ist zulässig, "Y" wird als Variable ausgewertet\\ Die nachfolgende Zeile vergleicht X mit dem Wert Y. Gute Idee!
 +
 +<code>
 +10 REM MASTERMIND
 +20 @243=7:@242=10:@241=14 Init Timer
 +40 X=USR(84):A=@242-1:X=USR(84):B=@242-1: jeweils Warten auf Tastendruck, A..D=Zufallszahl 0..9
 +   X=USR(84):C=@242-1:X=USR(84):D=@242-1
 +50 "":I=0 I=Anzahl Versuche
 +100 "GUESS ",:IN E,F,G,H Eingabe 4 Werte (kommagetrennt)
 +110 I=I+1
 +300 J=^10+2:K=J+8 J zeigt auf A, K zeigt auf E
 +301 L=0 L Zähler 1..4
 +302 R=0:P=0 R Zähler richtige Zahl, P Zähler richtiger Platz
 +310 IF ^J=^K LET P=P+1 Test auf gleiche Zahl, gleicher Platz
 +320 J=J+2:K=K+2:L=L+1:IF 4>L GOTO 310 nächste Plätze (J zeigt auf B , K auf F etc.), next L
 +330 J=^10+2:K=J+8 J zeigt auf A, K zeigt auf E
 +331 L=0 L Zähler 1..4
 +340 IF ^J=^K LET R=R+1:^J=^J+10:L=3 Wenn A=E, dann Zähler richtige Zahl +1, A=A+10 setzen (ausblenden),L auf Ende
 +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:K=J+8 J zeigt auf A, K zeigt auf E
 +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:N=0 Yes/No-Abfrage init.
 +370 "RIGHT ";R;" PLACE ";P Anzeige Auswertung
 +380 IF 4>P GOTO 100 wenn weniger als 4 am richtigen Platz, weiter raten
 +390 X=0:Y=1 Yes/No-Abfrage vorbereiten
 +400 "RIGHT IN ";I;" GUESSES;";"PLAY ANOTHER Y/N": Anzeige Anzahl Versuche
 +    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;PLAY ANOTHER Y/N
 +? N
 +:
 +</code>
  
  • elektronik/z8671/handbuch.1639035381.txt.gz
  • Zuletzt geändert: 2021/12/09 07:36
  • von volkerp