Turbo-BASIC XL Referenz über diese Referenz Diese Turbo-BASIC-Referenz versteht sich als Ergänzung zur ATARI-BASIC-Referenz. Sie behandelt ausschließlich Befehle, die unter ATARI-BASIC nicht verfügbar sind. Diese Referenz wurde unter Zuhilfenahme des 1. Happy-Computer ATARI-Sonderheftes erstellt. über Turbo-BASIC XL Turbo-BASIC XL wurde 1985 von Frank Ostrowski geschrieben und in der Happy-Computer im selben Jahr als Listing zum Abtippen veröffentlicht. Es ist zu 99% kompatibel zum ATARI-BASIC. Programme, die in ATARI-BASIC geschrieben wurden können meist problemlos unter Turbo-BASIC XL ausgeführt werden und werden dabei erheblich beschleuningt. Da Turbo-BASIC XL aber nicht ATARI-BASIC ist, können Probleme bei folgenden Programmen auftreten: Programme, die sich fest auf den ATARI-BASIC-Speicherplan verlassen Programme, die sich fest auf die (langsame) Geschwindigkeit des ATARI-BASIC verlassen Solche Programme sollten entweder an ATARI-Standards oder gleich an Turbo-BASIC XL angepasst werden. Index Strukturen IF ... ELSE ... ENDIF REPEAT ... UNTIL WHILE ... WEND DO ... LOOP EXIT *F+ PROC EXEC ON ... EXEC #, GO # ... POP -- *L+ Programmierung DEL RENUM DUMP TRACE+ *B+ Befehle DPOKE MOVE -MOVE BPUT BGET %PUT %GET FILLTO FCOLOR CLS PUT GET DIM INPUT TEXT CIRCLE PAINT TIME$= PAUSE DSOUND ... SOUND, DSOUND CLOSE Funktionen DPEEK INKEY$ INSTR UINSTR ERR ERL TIME TIME$ FRAC TRUNC RND RAND HEX$ DEC $xx & ! EXOR DIV MOD %0, %1, %2, %3 "" DOS-Befehle DIR RENAME DELETE LOCK UNLOCK BLOAD BRUN Autostart Befehle zur strukturierten Programmierung IF logischer_ausdruck:ENDIF IF logischer_ausdruck:ELSE:ENDIF Eine solche Strukturierung ist unter Turbo-BASIC XL möglich. Wird die Bedingung logischer_ausdruck erfüllt, so werden alle Befehle bis zum ELSE oder ENDIF ausgeführt. Ist die Bedingung logischer_ausdruck nicht erfüllt, so werden alle Befehle zwischen ELSE und ENDIF ausgeführt. Auf ELSE kann verzichtet werden, ENDIF muss gesetzt werden. Beispiel: IF STRIG(0)=0 ? "Feuertaste gedrueckt" ELSE ? "Feuertaste nicht gedrueckt" ENDIF -------------------------------------------------------------------------------- REPEAT: UNTIL logischer_ausdruck Dies ist eine Schleife, die so lange ausgeführt wird, bis die Bedingung logischer_ausdruck erfüllt ist. Die Schleife wird mindestens einmal ausgefuhrt, weil die Bedingung erst am Ende der Schleife geprüft wird. Beispiel: REPEAT ? "Feuertaste druecken" UNTIL STRIG(0)=0 -------------------------------------------------------------------------------- WHILE logischer_ausdruck: WEND Dies ist eine Schleife, die ausgeführt wird, so lange die Bedingung logischer_ausdruck erfüllt ist. Ist die Bedingung bereits zu Beginn der Schleife nicht erfüllt, so wird die Schleife gar nicht ausgeführt. Beispiel: WHILE STRIG(0)=1 ? "Feuertaste druecken" WEND -------------------------------------------------------------------------------- DO: LOOP Eine bedingungslose Endlosschleife. Alle Befehle zwischen DO und LOOP werden so lange ausgeführt, bis diese Schleife verlassen wird. Dies sollte mit dem Befehl EXIT geschehen. Beispiel: DO ? "Es gibt kein Entkommen!" LOOP -------------------------------------------------------------------------------- EXIT Mit diesem Befehl werden Schleifen sauber verlassen. Beispiel: DO IF INKEY$="X" THEN EXIT LOOP -------------------------------------------------------------------------------- *F+ *F Nach diesem Befehl sind >>FOR ... NEXT<<-Schleifen abweisend. Es wird also vor dem ersten Durchlauf der Schleife geprüft, ob der Zähler schon den Endwert erreicht hat. Ausgeschaltet wird diese Funktion mit *F-. Beispiel: *F+ FOR X=2 TO 1 ? X NEXT X Da X bereits größer als der Endwert 1 ist, wird nach einem *F+-Befehl die Schleife nicht einmal durchlaufen. -------------------------------------------------------------------------------- PROC unterprogramm_name: ENDPROC Zwischen diesen beiden Marken befindet sich ein Unterprogramm mit dem Namen unterprogramm_name. Beispiel: PROC unterprogramm_name ?"Dieses Unterprogramm wird nur ausgeführt, wenn es mit EXEC unterprogramm_name aufgerufen wird!" ENDPROC -------------------------------------------------------------------------------- EXEC unterprogramm_name Dies ist das Gegenstück zu PROC. Mit diesem Befehl wird das Unterprogramm aufgerufen. Beispiel: EXEC unterprogramm_name ?"Diese Zeile wird erst ausgegeben, wenn das Unterprogramm mit ENDPROC verlassen wurde!" -------------------------------------------------------------------------------- ON zahlen_wert EXEC unterprogramm_name_1,unterprogramm_name_2,unterprogramm_name_3 Je nach dem Wert in der Variablen zahlen_wert wird das erste, zweite oder dritte (oder weitere) Unterprogramm aufgerufen. Beispiel: ? "1. Addieren" ? "2. Subtraieren" ? "3. Multiplizieren" ? "4. Dividieren" INPUT ZAHL ON ZAHL EXEC ADDITION,SUBTRAKTION,MULTIPLIKATION,DIVISION ?"Diese Zeile wird erst ausgegeben, wenn das Unterprogramm mit ENDPROC verlassen wurde!" -------------------------------------------------------------------------------- #zeilen_name GO #zeilen_name ON zahlen_wert GO #zeilen_name TRAP #zeilen_name RESTORE #zeilen_name Labeldefinition, das # entpricht dem PROC. In Turbo-BASIC XL lässt sich der unstrukturierte Sprungbefehl GOTO wenigstens dadurch lesbarer machen, dass >>GOTO zeilen_nummer<< durch >>GO #zeilen_name<< ersetzt wird. Auch bei TRAP und RESTORE können diese Marken verwendet werden. Beispiel: 100 RESTORE #AUTOMARKEN 200 #AUTOMARKEN 210 DATA Ford,Volkswagen,Opel,SEAT,Wartburg -------------------------------------------------------------------------------- POP POP gilt für Unterprogramme mit GOSUB und EXEC ebenso wie für die Schleifen >>FOR ... NEXT<<, >>REPEAT ... UNTIL<<, >>WHILE ... WEND<< und >>DO ... LOOP<<. Beispiel: 100 PROC unterprogramm_name 110 POP :GOTO 200 120 ENDPROC 200 ?"Weiter im Programm..." -------------------------------------------------------------------------------- -- Eine besondere Form des REM-Befehls. Zeilen mit dieser -- Anweisung werden nicht beachtet. Wird eine solche Zeile mit LIST ausgegeben, so werden anstatt zwei ganze 30 Minuszeichen ausgegeben. Beispiel: 100 -- LIST 100 ------------------------------ -------------------------------------------------------------------------------- *L- In Turbo-BASIC XL werden Listungs formatiert ausgegeben, d.h. dass Unterprogramme (PROC ... ENDPROC) oder Schleifen (FOR ... NEXT, REPEAT ... UNTIL) jeweils um zwei Zeichen eingerückt werden. *L- schaltet diese Formatierung aus. Mit *L oder *L+ kann diese Formatierung wieder eingeschaltet werden. Beispiel: *L- LIST 100 -- *L+ LIST 100 ------------------------------ neue Fehlermeldungen ERROR - 22 ?NEST Schachtelungsfehler, tritt auf, wenn das zu einem WHILE gehörende WEND nicht gefunden wird, oder das ENDIF zu einem IF, oder auch, nach >>*F+<<, das NEXT zu einem FOR. Beim Verlassen von Unterprogrammen (durch RETURN oder ENDPROC) werden Schleifen abgebrochen. Dies gilt sowohl - wie gewohnt - für die >>FOR ... NEXT<<-Schleife, wie auch für die anderen, unter Turbo-BASIC XL zur Verfügung stehenden Schleifen. -------------------------------------------------------------------------------- ERROR - 16 ?GOSUB Zu einem RETURN fehlt GOSUB. -------------------------------------------------------------------------------- ERROR - 13 ?FOR Zu einem NEXT fehlt FOR. -------------------------------------------------------------------------------- ERROR - 23 ?WHILE Zu einem WEND fehlt WHILE -------------------------------------------------------------------------------- ERROR - 24 ?REPEAT Zu einem UNTIL fehlt REPEAT. -------------------------------------------------------------------------------- ERROR - 25 ?DO Zu einem LOOP fehlt DO. -------------------------------------------------------------------------------- ERROR - 28 ?EXEC Zu einem ENDPROC fehlt EXEC. -------------------------------------------------------------------------------- ERROR - 29 ?GOSUB Eine unbekannte Prozedur wurde aufgerufen. -------------------------------------------------------------------------------- ERROR - 30 ?# Eine unbekannte Marke wurde verwendet. -------------------------------------------------------------------------------- ERROR - 27 ?XPROC (Executing PROC). Diese Fehlermeldung tritt auf, wenn eine PROC-Anweisung ausgeführt wird. Prozeduren dürfen nur von EXEC aufgerufen werden. -------------------------------------------------------------------------------- ERROR - 26 ?EXIT EXIT ohne Schleife. -------------------------------------------------------------------------------- ERROR - 15 ?DEL Das GOSUB zu einem RETURN, NEXT zu einem FOR, REPEAT zu einem UNTIL ... wurde gelöscht. In Atari- und in Turbo-BASIC XL lassen sich Progranne editieren, ohne Variablenwerte oder den Stapel zu zerstören. Wenn dann bei Rückkehr aus einem Unterprogramm (Schleife) die die entsprechende Zeile gelöscht oder verändert wurde, kann dieser Fehler passieren. Dies tritt auch auf, wenn ein in ein Programm eingebautes DEL sich selbst löscht. Alle Fehlernummern, die ATARI-BASIC ohne irgendwelche Texte ausgibt, werden in Turbo-BASIC XL grundsätzlich mit einem kurzen Text ergänzt (beispielsweise >>138 TIMEOUT<<, >>29 ?PROC<< etc.).Ausführliche erläuterungen können dem ATARI-BASIC Referenz Manual oder der DOS-Anleitung entnommen werden. Längere Texte würden, bei den insgesamt 60 zur Verfügung stehenden Fehlern, den Platzbedarf des Interpreters noch wesentlich erhöhen. Befehle zur Programmbearbeitung DEL von_zeile,bis_zeile Löscht alle Programmzeilen von von_zeile bis bis_zeile. -------------------------------------------------------------------------------- RENUM alt_zeile,neu_zeile,schritt Nummeriert alle BASIC-Zeilen ab alt_zeile in neu_zeile um. schritt ist die Schrittweite, um die die jeweils nächste Zeile erhöht wird. -------------------------------------------------------------------------------- DUMP DUMP datei_name$ Gibt alle verwendeten Variablennamen und Unterprogrammnamen eines Programms auf dem Bildschirm aus. Die Ausgabe kann auch auf den Drucker (datei_name$="P:") oder in eine Datei umgeleitet werden. -------------------------------------------------------------------------------- TRACE TRACE+ Schaltet die TRACE-Funktion ein, d.h. die Nummer jeder ausgeführten Zeile wird auf dem Bildschirm ausgegeben. Mit TRACE- wird diese Funktion wieder ausgeschaltet. -------------------------------------------------------------------------------- *B *B+ Nach diesem Befehl wird das Drücken der BREAK-Taste wie ein Fehler behandelt, der mit TRAP abgefangen werden kann. Mit *B- wird dieser Befehl wieder aufgehoben. Nach RUN ist *B immer ausgeschaltet. neue Befehle DPOKE speicher_adresse,zahlen_wert Doppel-Byte-POKE Speichert den 16-Bit-Wert (zwei Byte) zahlen_wert in die Speicherzellen speicher_adresse und speicher_adresse+1. In ATARI-BASIC musste für die gleiche Funktion folgender Umweg gegangen werden: POKE speicher_adresse,zahlen_wert-256*INT(zahlen_wert/256):POKE speicher_adresse+1,INT(zahlen_wert/256) -------------------------------------------------------------------------------- MOVE quell_speicher_adresse,ziel_speicher_adresse,groesse_speicher_block Blocktransfer Kopiert groesse_speicher_block Bytes von quell_speicher_adresse nach ziel_speicher_adresse. -------------------------------------------------------------------------------- -MOVE quell_speicher_adresse,ziel_speicher_adresse,groesse_speicher_block Blocktransfer, Rückwärts ausgeführt Kopiert groesse_speicher_block Bytes von quell_speicher_adresse nach ziel_speicher_adresse. Jetzt wird allerdings erst das letzte zu verschiebene Byte kopiert um bei Überlappungen die Zerstörung des zu verschiebenen Inhalts zu verhindern. -------------------------------------------------------------------------------- BPUT #datei_nummer,quell_speicher_adresse,groesse_speicher_block Blockschreiben Speichert groesse_speicher_block Bytes ab Adresse quell_speicher_adresse auf Diskette ab. -------------------------------------------------------------------------------- BGET #datei_nummer,ziel_speicher_adresse,groesse_speicher_block Blocklesen Liest groesse_speicher_block Bytes in Adresse quell_speicher_adresse von Diskette ein. -------------------------------------------------------------------------------- %PUT zahlen_wert Dieser Befehl speichert eine 6 Byte große Zahl auf Diskette ab. -------------------------------------------------------------------------------- %GET zahlen_wert Zum Lesen von mit %PUT gespeicherten Zahlen. -------------------------------------------------------------------------------- FILLTO x,y Kurzschreibweise, schneller und übersichtlicher als >>POSITION x,y:XIO 18,#6,0,0,"S:"<< -------------------------------------------------------------------------------- FCOLOR n Wählen der Farbe für FILLTO. In ATARI-Basic heißt dieser Befehl >>POKE 765,n<<. -------------------------------------------------------------------------------- CLS CLS #6 Bildschirmlöschen Mit diesem Befehl wird der Bildschirm gelöscht. Mit CLS #6 kann auch der Grafikbildschirm (bei GRAPHICS n, n>0) gelöscht werden. Entpricht dem drücken der Tastenkombination CONTROL-CLEAR bzw. ? CHR$(125) (oder ? #6;CHR$(125)). -------------------------------------------------------------------------------- PUT zahlen_wert Gibt das Zeichen mit dem ASCII-Wert zahlen_wert auf dem Bildschirm aus. Entspricht dem Befehl ? CHR$(n). -------------------------------------------------------------------------------- GET zahlen_wert Wartet auf einen Tastendruck. Der ASCII-Wert der gedrückten Taste wird an zahlen_wert zurückgegeben. Für die gleiche Funktion musste in ATARI-BASIC erst ein Kanal für das Gerät "K:" (Keyboard, Tastatur) geöffnet werden. -------------------------------------------------------------------------------- DIM variablen Im Gegensatz zu ATARI-BASIC werden alle Variablen gelöscht, die mit dem DIM-Befehl dimensioniert werden. -------------------------------------------------------------------------------- INPUT "text";variable INPUT "text",variable Ein Text nach dem INPUT-Befehl erspart sonst nötige PRINT-Befehle. Folgt auf "text" ein Komma anstatt eines Simikolons, wird das manchmal störende Fragezeichen nicht mehr ausgegeben. -------------------------------------------------------------------------------- TEXT x,y,variable Druckt einen Text auf einem Grafikbildschirm aus. x und y bilden dabei die Position auf dem Bildschirm. Die Variable variable darf ein Zahlenwert oder eine String-Variable sein. Es ist nicht möglich, mehrere, durch Komma oder Semikolon getrennte Variablen zu verwenden. -------------------------------------------------------------------------------- CIRCLE x,y,r CIRCLE x,y,xr,yr Zeichnet einen Kreis mit einem Radius von r Pixeln um den Punkt x,y. Wahlweise können auch Elipsen gezeichnet werden, dann müssen zwei Radien xr und xy angegeben werden. -------------------------------------------------------------------------------- PAINT x,y Füllt eine geschlossene Fläche mit der aktuellen Farbe. Dieser Befehl benötigt mitunter mehrere hundert Bytes, so dass es unter Umständen zur Fehlermeldung ERROR - 2 MEM kommen kann. -------------------------------------------------------------------------------- TIME$=string_variable$ Setzt die interne Uhr des ATARI auf den Wert string_variable. Die Variable string_variable muss das Format HHMMSS (HH=Stunden, MM=Minuten, SS=Sekunden) beinhalten. -------------------------------------------------------------------------------- PAUSE zahlen_wert Dieser Befehl hält die Ausführung des Programms für zahlen_wert/50 Sekunden an. -------------------------------------------------------------------------------- DSOUND stimmen,frequenz,verzerrung,lautstaerke Ähnlich dem normalen SOUND-Befehl. Der ATARI kann jeweils zwei seiner vier Stimmen zu einer Zusammenfassen. Dann stehen ihm 65536 verschiedene Frequenzen (16bit Auflösung) zur Verfügung. Der Variable frequenz können also 65536 verschiedene Werte (0 bis 65535) zugeordnet werden. -------------------------------------------------------------------------------- SOUND DSOUND Dieser Befehl ohne irgendwelche Werte schaltet alle Soundkanäle aus. -------------------------------------------------------------------------------- CLOSE Der CLOSE-Befehl ohne Werte schließt alle I/O-Kanäle von #1 bis #7. Achtung! Es wird in den Grafik-Modi (3-15) auch der Kanal #6 geschlossen, so dass danach keine PLOT, DRAWTO oder CIRCLE Befehle mehr funktionieren. Der TEXT-Befehl funktioniert noch, da er nicht über IO neue Rechenfunktionen und spezielle Variablen DPEEK(speicher_adresse) Doppel-Byte-PEEK Gibt den 16-Bit-Wert der Speicheradressen speicher_adresse und speicher_adresse+1 zurück. -------------------------------------------------------------------------------- INKEY$ Enthält den Wert der gerade gedrückten Taste. Wird keine Taste gedrückt, so ist INKEY$="", ist also leer. -------------------------------------------------------------------------------- INSTR(string_variable$,such_string_variable$) INSTR(string_variable$,such_string_variable$,zahlen_wert) Ermittelt die Position des Suchtextes such_string_variable$ innerhalb des Textes string_variable$. Auf Wunsch wird der Text string_variable$ erst ab Position zahlen_wert durchsucht. -------------------------------------------------------------------------------- UINSTR(string_variable$,such_string_variable$) UINSTR(string_variable$,such_string_variable$,zahlen_wert) Wie INSTR, nur werden jetzt Groß- und Kleinschreibung ignoriert. -------------------------------------------------------------------------------- ERR Gibt den Code des zuletzt aufgetretenen Fehlers wieder, entspricht PEEK(195). -------------------------------------------------------------------------------- ERL Gibt die Zeilennummer wieder, in der der letzte Fehler aufgetreten ist. Entspricht DPEEK(186), bzw. PEEK(186)+PEEK(187)*256 in ATARI-BASIC. -------------------------------------------------------------------------------- TIME Enthält die Zeit in 50stel Sekunden und kann nicht direkt geändert werden (TIME=n ist nicht möglich). -------------------------------------------------------------------------------- TIME$ Enthält die Uhrzeit, die mit TIME$="HHMMSS" eingestellt wurde. -------------------------------------------------------------------------------- FRAC(zahlen_wert) Ermittelt den Nachkommaanteil einer positiven oder negativen Zahl. während -0.3-INT(-0.3)=0.7 ist, ist FRAC(-0.3)=-0.3 -------------------------------------------------------------------------------- TRUNC(zahlen_wert) Ermittelt den ganzzahligen Anteil einer positiven oder negativen Zahl. während INT(-0.3)=1 ist, ist TRUNC(-0.3)=0 -------------------------------------------------------------------------------- RND Die Random-Funktion kann in Turbo-BASIC XL abgekürzt werden (in ATARI-BASIC: RND(0)). -------------------------------------------------------------------------------- RAND(zahlen_wert) Ermittelt eine Zufallszahl zwischen einschließlich 0 und ausschließlich zahlen_wert. Dabei kann der Wert zahlen_wert auch negativ sein. -------------------------------------------------------------------------------- HEX$(zahlen_wert) Wandelt die Dezimalzahl zahlen_wert in eine Hexadezimalzahl um. Die Zahl ist als zwei- (0-255) oder vierstellige (256-65535) Zahl formatiert. -------------------------------------------------------------------------------- DEC(hex_zahl$) Wandelt die hexadezimale Zahl hex_zahl$ in eine Dezimalzahl um. Beinhaltet hex_zahl$ keine gültige Zahl, so ergibt das 0. -------------------------------------------------------------------------------- $0-$FFFF Die Zahlen 0-65535 in hexadezimaler Schreibweise. -------------------------------------------------------------------------------- & binäres UND -------------------------------------------------------------------------------- ! binäres ODER -------------------------------------------------------------------------------- EXOR binäres Exklusiv-ODER -------------------------------------------------------------------------------- zahlen_wert_1 DIV zahlen_wert_2 Division ohne Rest. Ist nicht immer gleich INT(zahlen_wert_1/zahlen_wert_2), ist aber immer gleich TRUNC(zahlen_wert_1/zahlen_wert_2) -------------------------------------------------------------------------------- zahlen_wert_1 MOD zahlen_wert_2 Bestimmung des Divisionsrestes, entspricht zahlen_wert_1-zahlen_wert_2*TRUNC(zahlen_wert_1/zahlen_wert_2). -------------------------------------------------------------------------------- %0, %1, %2, %3 Die Zahlen 0 bis 3 in fest vordefinierten Konztanten. Diese nehmen weniger Speicherplatz ein, als die Zahlen 0 bis 3 (ein Byte statt 7 Bytes). -------------------------------------------------------------------------------- "" In Stringvariablen oder in mit PRINT oder TEXT ausgegebenen Texten können Anführungszeichen platziert werden, in dem die Anführungszeichen während der Zuweisung zweimal hintereinander geschrieben werden. Beispiel: ? "Auf dem Schild stand ""Beladen verboten!""!" ergibt Auf dem Schild stand "Beladen verboten!"! DOS-Befehle DIR DIR pfad$ Gibt das Inhaltsverzeichnis einer Diskette aus, auf Wunsch wird das Laufwerk (und der Pfad) in pfad$ berücksichtigt. Wird pfad$ nicht angegeben, so wird das Verzeichis von "D:*.*" ausgegeben. -------------------------------------------------------------------------------- RENAME datei_name$ Benennt eine Datei um. datei_name$ muss folgende gültige Werte besitzen: "alter_dateiname,neuer_dateiname". -------------------------------------------------------------------------------- DELETE datei_name$ Löscht die Datei datei_name$. -------------------------------------------------------------------------------- LOCK datei_name$ Schützt die Datei datei_name$ vor dem Überschreiben. -------------------------------------------------------------------------------- UNLOCK datei_name$ Hebt den Schreibschutz der Datei datei_name$ wieder auf. -------------------------------------------------------------------------------- BLOAD datei_name$ Lädt eine Maschinenroutine in den Speicher. -------------------------------------------------------------------------------- BRUN datei_name$ Lädt eine Maschinenroutine in den Speicher und startet diese, wenn eine RUN-Adresse in der Datei enthalten ist. -------------------------------------------------------------------------------- Autostart Mit Turbo-BASIC XL ist es möglich, nach dem Einschalten des Computers ein BASIC-Programm automatisch zu laden und zu starten. Dazu benennen Sie Ihr BASIC-Programm einfach in AUTORUN.BAS um. Vergessen Sie dabei nicht, dass das eigentliche Turbo-BASIC XL mit dem Namen AUTORUN.SYS auf der Diskette vorliegen muss.