*************************************************************** * * * Tdl-BASIC High precision extended version * * * *************************************************************** Diese Beschreibung stellt eine Kurzbeschreibung aller Befehle, Anweisungen und Besonderheiten dar, die bei z.B dem Tiny-BASIC nicht auftreten. Die Kenntnis der wichtigsten BASIC-Grundbefehle wird voraussgesetzt. Lage im Speicher: 300H - 3380H Start: 300H Restart: 303H >ASAVE< ------- Bei Ausfuerung des Befehls wird das im Speicher vorhandene BASIC-Programm in ASCII-lesbarer Form ueber den Tonbandausgang ausgegeben. >ALOAD,ALOADC,AMERGE,AMERGEC< ----------------------------- Zum Laden von Programmen, die in ASCII geschrieben sind, also nicht in maschineninterner Form. Jede Zeile muss mit einer Zeilennummer beginnen und mit einem CR beendet sein.Das Einlesen wird entweder durch ein CTRL-Z im Eingabetext oder durch ein EOF des lese-Unterprogramms beendet. ALOAD loescht ein zuvor vorhandenes Programm , MERGE mischt die ankommenden Zeilen mit dem vorhandenen Pro- gramm. Der Unterschied zwischen "A..." und "A...C" Befehlen liegt in der Art der Leserbehandlung. "A...C" setzen einen steuerbaren Leser voraus, und nach der Eingabe einer jeden Zeile wird diese in das Internformat uebersetzt. "A..." Befehle lesen bis zum Ende und konvertieren erst, nachdem das ganze Programm eingelesen wurde. Dadurch wird fuer Programme kurzzeitig mehr Speicherplatz benoetigt. Steuerzeichen: -------------- Komma , zur naechsten TAB-Position oder Trennzeichen Semicolon ; nicht fortschreiten Colon : fuer mehrere Anweisungen in einer Zeile Rubout 7FH Loeschen des eingegebenen Zeichens in "\\" *CTRL-S* Anhalten der Ausgabe von Daten *CTRL-Q* Fortfahren bei der Ausgabe *CTRL-C* Beenden der Ausfuerung des BASIC-Programms *CTRL-U* Loeschen der gerade eingegebenen Zeile *CTRL-X* zum Monitorprogramm zurueck *CTRL-O* Unterdruecken der Konsolausgabe *CTRL-R* Ausgabe der aktuellen Zeile ohne Loeschzeichen *CTRL-T* waerend des Programmablaufs kann dadurch die gerade abgearbeitete Zeilennummer ausgegeben werden. OPERATOREN ---------- Sie sind in der Reihenfolge ihrer Bearbeitung (hierarchisch) ge- ordnet () Klammer ^ Exponentialoperator - Negation und Subtraktion * Multiplikation / Division + Addition = Gleichheit <> Ungleichheit < kleiner als > groesser als <= kleiner/gleich >= groesser/gleich NOT logisches nicht AND und OR oder >AUTO< ------ Mit dem Befehl >AUTO< wird die automatische Erzeugung von Zeilennummern veranlasst.Dabei kann noch eine Startzeile und die Schrittweite eingegeben werden. z.B. AUTO100 oder AUTO200,1 >CLEAR< ------- Alle Variablen werden geloescht.Wird zusaetzlich eine Zahl ange- geben, wird der Stringplatz auf diesen Wert gesetzt. CLEAR200 loescht alle Variablen und setzt den Verfuegbaren Platz fuer Strings auf 200. >CONTINUE< ---------- Wurde der Programmablauf mit CTRL-C gestoppt,so kann mit diesem Befehl die Ausfuehrung fortgesetzt werden,wenn keine Veraen- derungen am Programm vorgenommen wurden. >DELETE< -------- Ein Bereich von Zeilen kann geloescht werden. DELETE100-135 loescht alle Zeilen von 100 bis einschliesslich 135. >KILL< ------ Damit kann nicht verwendeter Speicherplatz von Matrizen zurueck- gewonnen werden. KILL A,B entfernt den Speicherplatz,den die Matrizen A und B ver- braucht haben. >LOAD< ------ Laedt ein Programm vom Leser.Es wird dabei zuvor "NEW" durchge- fuehrt. LOAD P laedt ein Programm,das mit "SAVE P" abgespeichert wurde. Dabei ist nur ein Buchstabe als Name zulaessig. LOAD?P fuehrt ein Prueflesen durch. >LOADGO< -------- Wie LOAD,aber mit Starten des Programms. LOADGO P,1 laedt das Programm und startet es auf 1 . >NEW< ----- loescht den gesamten Arbeitsspeicher,d.h.das BASIC-Programm und alle Variablen. >PRECISION< ----------- Voreingestellt sind 11 Digits Rechengenauigkeit. PRECISION 4 z.B.veranlasst,dass Zahlen vor der Ausgabe auf 4 Stellen gerundet werden.Intern wird dabei weiterhin mit 11 Digits gerechnet. >RENUMBER< ---------- Neunumerierung: Es werden alle Referenzen,Spruenge usw. automa- tisch umgestellt. RENUMBER numeriert von 10 beginnend in 10-erschritten alle Zeilen. RENUMBER 110 beginnt bei 110 RENUMBER 30,2 numeriert beginnend mit 30 in 2er Schritten. RENUMBER 500,5,300 beginnt erst bei der Zeile 300 mit einer Neu- numerierung,die dann ab 500 in 5erschritten laeuft.Damit koennen Luecken eingebaut werden. >RUN< ----- Loescht alle Variablen und startet die Programmausfuehrung.Eine angegebene Zeilennummer bewirkt, den Start von da ab. >SAVE< ------ Abspeichern eines BASIC-Programmes ueber den Tonbandausgang. SAVE C speichert ein vorhandenes BASIC-Programm unter dem Namen "C". Nur ein Buchstabe ist als Programmname zulaessig. Der >EDIT<-Befehl ----------------- EDIT dient zur Korrektur von Programmzeilen. Mit "EDIT 10" kann Zeile 10 korrigiert werden.Nach Eingabe von EDIT(ZNR) erscheint auf dem Bildschirm die Zeilennummer. Folgende Eingaben sind moeg- lich: >A< laedt den EDIT-Buffer vom Programmspeicher neu. >nD< n Zeichen werden geloescht >E< beende EDIT und ersetze >nFx< finde das n-te Zeichen x im Buffer und halte den Poin- ter direkt davor an >H< loesche alles rechts des Pointers und gehe in den Insert-Modus. >I< fuege alle folgenden Zeichen ein, bis CR oder ESC ein- gegeben wird. >nKx< loesche Zeichen vom Pointer zum (n-1)ten Zeichen x >L< Ausgabe der Zeile (LIST) >Q< verlasse EDIT ohne Ersetzung >nR< ersetze die folgenden n Zeichen durch n vorhandene (replace) >X< Pointer ans Zeilenende und Insert >SPACE< Pointer nach rechts >RUBOUT< -"- -"- links >cr< (RETURN) Ende EDIT mit Ersetzung >ESCAPE< Ende Insert --------------------------------------------------------------- >LIST< ------ Ausgabe eines Programmes LIST 10-100 gibt alle Zeilen von 10-100 , LIST 20 gibt nur Zeile 20 aus. >NEW< ----- Das aktuelle BASIC-Programm wird geloescht. >LVAR< ------ Ausgabe aller aktuellen Variablen und deren Belegung. >NULL< ------ Fuer Langsame Konsolen : NULL 3,255 sorgt dafuer,dass nach jedem CR LF drei ASCII-Zeichen FFH (RUBOUT) gesendet werden >POS< ----- Die aktuelle Position der Konsoldruckstelle wird uebergeben,z.B. A=POS(B) B ist ein"Dummy"-Wert. >PRINT< ------- Ausgabebefehl. Beispiel: PRINT123,A,"TEST";B;C Bei Angabe eines Kommas wird alle 14 Spalten positioniert,bei Strichpunkten werden zwei Leer- zeichen gelassen.Steht am Schluss ein Komma oder ein Strichpunkt ,so wird kein CR/LF ausgegeben >PRINT USING< ------------- formatierte Ausgabe >SPC< ----- Damit kann eine Zahl von Leerzeichen ausgegeben werden.Durch PRINTA,SPC(5),B werden 5 Leerzeichen zwischen A und B gedruckt >SWITCH< -------- Damit kann die Konsolzuweisung geeandert werden.Dazu erhaelt SWITCH ein Argument zwischen 0 und 3 . 0=TTY 1=CPT 2=BATCH USE 3=USER DEFINED >TAB< ----- Damit kann direkt eine bestimmte Druckposition erreicht werden. PRINT A;TAB(30);B B wird beginnend bei der Position 30 ausgege- ben. >TRACE< ------- TRACE1 schaltet den Trace-Modus ein, TRACE0 schaltet ihn aus. Anstelle der Zahl kann auch ein arithmetischer Ausdruck stehen. Ist dieser ungleich 0, so wird eingeschaltet. Es werden dann alle ausgefuehrten Zeilennummern in "<>" ausgegeben. >WIDTH< ------- Damit kann die Ausgabelaenge angegeben werden,bei der automa- tisch ein CRLF eingefuegt wird. WIDTH 80 stellt die Laenge auf 80 Zeichen pro Zeile ein; Minimum ist 15,Maximum 255 >LET< ----- - wie 3K-BASIC >DATA< ------ Konstantenablage,die durch READ geholt werden kann. z.B. 10 DATA 5,8,123,-64,33 >READ< ------ Holen der Konstanten,die in DATA angegeben sind. z.B. 20 READ A beim ersten mal erhaelt A den Wert 5 dann 8 usw. bis 33 ,danach fuehrt ein erneuter Aufruf zum Fehler (gilt fuehr obiges Beispiel) >RESTORE< --------- Damit kann der Lesezeiger von READ auf den Anfang gesetzt werden.Zusaetzlich kann durch Angabe einer Zeilennummer der Zeiger auf eine bestimmte Zeile gesetzt werden z.B. 200 RESTORE 30 >LINE INPUT< ------------ Damit kann eine ganze Zeile in eine Stringvariable eingelesen werden. allg Form: LINE INPUT "PROMT STRING";eingabeliste PROMT STRING ist optional. >INPUT< ------- - wie 3k-BASIC >INP< ----- Lesen eines Z80-Ports z.B.A=INP(0) A erhaelt den Wert des Kanals 0 (A-Kanal des PIO) >OUT< ----- OUT1,7 gibt den Wert 7 an den Kanal 1 >DIM< ----- Reservieren von Speicherplatz fuer Matrizen (1 bis 255 Dimen- sionen) z.B. 10 DIM O(100) 20 DIM B$(221),DIM C(I) >POKE< ------ - wie 3K-BASIC >PEEK< ------ - wie 3K-BASIC >WAIT< ------ automatische Warteschleife fuer Ports. WAIT A,B,C der Wert am Port A wird mit C Exklusiv-ODER ver- knuepft sowie mit B UND-verknuepft.Erst wenn das Ergebnis nicht mehr Null ist wird das BASIC-Programm fortgesetzt. >COPY< ------ Damit koennen Teile des BASIC-Programms verschoben und dupli- ziert werden. COPY neue zeile,increment=Zeilenbereich /die im Zeilenbereich angegebenen Zeilen werden auf den neuen Bereich kopiert und dabei umnumeriert. >EXCHANGE< ---------- Schneller Austausch von Variablen-Werten. z.B.EXCHANGE A$,B$ EXCHANGE C,D(A,J) Im Falle von Strings Pointertausch. >GOTO/GOSUB/RETURN/FOR|TO|STEP|NEXT< ------------------------------------ -wie 3K-BASIC >ON x GOTO / ON x GOSUB< ------------------------ Es wird auf die x-te Zeilennummer gesprungen 10 ON A GOTO 100,130,50 Ist A=1,so wird auf 100 gesprungen. Falls A=0 oder A ist groesser als die Anzahl der angegebenen Zeilennummern,so wird die naechste Zeile ausgefuehrt. >IF,THEN,ELSE< -------------- Bedingte Anweisung 10 IF B=4 THEN 50 ELSE 30 bedeutet, ist B=4 Sprung zu 50,ist B ungleich 4 Sprung zu 30. ebenfalls:20 IF B$="JA" GOTO100 40 IF(A=0) OR NOT(B=4) THEN C=5 >ATN< ----- Ermitteln des Arcustangens z.B.A=ATN(0.45)/ Ergebnis wird im Bogenmass angegeben. >COS< ----- Berechnung des Cosinus >SIN< ----- Sinus-Ermittlung C=SIN(3) >TAN< ----- Tangens eines Winkels >ABS< ----- Absolutbetrag : ABS(-4.5) ergibt 4.5 >DEF FN< -------- Damit kann der Benutzer eigene Funktionen definieren.Eine Funk- tion muss dabei mit FN beginnen,gefolgt von einem Variablenna- men z.B.FNA,FNB6 und einem in Klammern stehenden Parameter Beispiel:40 FNQ(X)=X*B/3 B ist dabei eine Variable,die im BASIC-Programm global verwendet wird. X ist lokal auf die De- finition beschraenkt und stellt nur den Parameter dar. Beispiel: 10 DEF FNA(X)=X*X 100 A=FNA(3):PRINT A es wird der Wert 9 ausgegeben. Es ist moeglich, die DEF-Anweisung ueber mehrere Zeilen er- strecken zu lassen; ausserdem koennen rekursive Funktionen defi- niert werden.Die allgemeine Form : DEF FN name (parameter,...,parameter) Funktionskoerper FNEND funktionswert es wird im Gegensatz zur Standartdefinition das Gleichheitszei- chen weggelassen. Die Definition wird durch FNEND abgeschlossen, wobei dort der Funktionswert angegeben wird. Die Funktion kann auch vorzeitig abgebrochen werden,indem mit FNRETURN funktions- wert eine Rueckkehr veranlasst wird. 100 DEF FNF AC(I) 200 IF I=0 THEN FNRETURNI 300 FNEND FNFAC(I-1)*I >EXP< ----- Exponentialfunktion EXP(1) ergibt 2.7182 >FRE< ----- Damit laesst sich der Restspeicher fuer Variable und Programm, falls als Dummypartner eine Variable angegeben wird und der Rest- speicher fuer Strings ermitteln,falls eine Stringvariable als Parameter verwendet wird. FRE(X) gibt den Variablen- und Programmrestspeicher aus, FRE(X$)den Restspeicher fuer $. >INT< ----- Ermitteln des ganzzahligen Anteils von Zahlen. A=INT(4.56) A erhaelt den Wert 4 . >LOG< ----- Ermitteln des natuerlichen Logarithmus (d.h.zur Basis e=2.71...) einer Zahl. LOG(EXP(1)) ergibt deshalb den Wert 1 . >SGN< ----- Ergibt +1,falls das Argument groesser als 0 ist; Null,falls es gleich 0 ist und -1,falls das Argument kleiner als 0 ist. SGN(56.6) ergibt +1\SGN(-4)=-1 >SQR< ----- Berechnen der Quadratwurzel.Argument muss >=Null sein !!! SQR(2) ergibt 1.4142 >RND< ----- Erzeugen einer Pseudozufallszahl zwischen 0 und 1.Dazu benoetigt RND einen Dummy-Parameter. Ist der Wert kleiner 0, wird die RND-Sequenz initialisiert. Ist das Argument 0,so wird der vor- hergehende Wert uebermittelt. Ein Argument groesser als 0 lie- fert den naechsten RND-Wert in der Sequenz. 10 S=RND(1) in S steht eine Zahl zwischen Null und 1 >RANDOMIZE< ----------- Dies ist keine Funktion, vielmehr kann damit ein zufaelliger Startpunkt einer Pseudo-Zufallszahlenfolge eingestellt werden. 100 RANDOMIZE >> S T R I N G ($)-Verarbeitung << ---------------------------------- >ASC< ----- Der Dezimalwert eines ersten Zeichens in einem String wird ueber- geben. 20 A=ASC(D$) Mit D$="B" erhaelt A den Wert 66 >CHR$< ------ Hier wird gerade umgekehrt das Zeichen uebergeben,dass durch den dezimalen Wert des Arguments dargestellt wird. Die Codierung er- folgt hierbei in ASCII. 210 A$=CHR$(67) A$ beinhaltet das Zeichen B . PRINT CHR$(12) loescht den gesamten Bildschirm. >LEFT$< ------- erhaelt zwei Parameter. Der erste ist ein String. Der zweite Parameter gibt die Anzahl der Zeichen an, die vom linken Rand des Strings an gezaelt, uebergeben werden sollen. z.B. 10 B$=LEFT$("STRING",2) B$ erhaelt die Zeichenfolge "ST". >LEN< ----- Damit kann die Laenge eines Strings ermittelt werden. z.B.40 X=LEN(S$) In X steht die Anzahl Bytes, die S$ enthaelt. >MID$< ------ benoetigt drei Parameter.Der erste gibt den String an, der zwei- te bestimmt die Startposition, der dritte die Anzahl Zeichen, die von da an verwendet werden. z.B. 50 A$=MID$(B$,5,6) A$ erhaelt Zeichen, beginnend beim 5-ten Zeichen des String B$. MID$ darf auch auf der linken Seite verwendet werden. >RIGHT$< -------- funktioniert wie LEFT$, nur werden die Zeichen vom rechten Rand verwendet. >STR$< ------ Es wird der String uebergeben, dessen numerischer Wert in Klam- mern steht. 10 C$=STR$(7.8) C$ erhaelt den String "7.8" . >VAL< ----- Gegenteil von STR$. Es wird der numerische Wert eines Strings uebergeben. 20 A=VAL("3.4") A erhaelt den Wert 3.4. In BASIC-Programmen koennen auch sedezimale Konstanten (Hex-Zahlen) verwendet wer- den. Sie werden angegeben, indem das Zeichen vorangestellt wird. 20 B=&>400 B erhaelt den Wert 1024. >INSTR< ------- Dient zum Suchen von Strings. Dazu wird als erster Parameter der String angegeben, als zweites der String, der gesucht werden soll. Zusaetzlich koennen noch eine Startposition und eine Laenge angegeben werden. Beisp.: INSTR("123456789","456") ergibt 4 INSTR("123456789","654") ergibt 0 INSTR("1234512345","34") ergibt 3 INSTR("1234512345","34",6) ergibt 8 INSTR("1234512345","34",6,2) ergibt 0 >END< ----- beendet den Programmablauf und kann irgendwo innerhalb eines BASIC-Programms stehen. >REM< ----- kennzeichnet, dass die Zeile eine Kommentarzeile ist. Fuer REM kann auch das Zeichen "'" verwendet werden. 10 REM KOMMENTAR 20 A=B:'A WIRD GLEICH B >STOP< ------ Wie END, nur das hierbei "BREAK @ LINE ..." ausgegeben wird. (dient damit der Fehlersuche) >USR< ----- Erlaubt ein Maschinenunterprogramm aufzurufen. Es wird das Pro- gramm ueber die Sprungadresse bei "USR:" aufgerufen. Um den Para- meter zu erhalten, muss das Unterprogramm auf Adresse 300H+27H gerufen werden. Die Adresse des Parameters steht dann im Registerpaar DE. Um die Information zurueck zu uebertragen wird das Unterprogramm auf Adresse 300H+2AH aufgerufen. Das nieder- wertige Byte des Ergebnisses wird dazu im Register B uebergeben und das hoeherwertige im Register A. Zur Rueckkehr ins BASIC- System wird ein RET-Befehl ausgefuehrt. 10 A=USR(B) 20 PRINT A >CALL< ------ Aufruf von Maschinenprogrammen ohne Parameter. 10 CALL&>5000 ------------------------------------------------------------ letzter Bearbeiter: Jens Moeckel Kontaktadresse Softwaretausch: J. Moeckel, 8400 Riesa, Magde- burger Str. 1b Hinweis:Diese Beschreibung entstand unter Verwendung der Origi- nalbeschreibung des Interpreters, die nur als Thermo- kopie vorlag. Die Quelle ist daher unbekannt. Der BASIC-Interpreter ist dem in Kramer:"Praktische Mikrocomputertechnik" (Militaerverlag der DDR, 1.Aufla- ge 1987, Seiten 41-51) verwendeten Interpreter sehr aehnlich.