Home
Home
Anfang Zurück Inhalt Weiter Ende
Anfang - Zurück - Inhalt - Weiter - Ende
English Español Italiano
English - Español - Italiano

Anhang A: Commodore 64 BASIC V2

Dieser Anhang bietet eine kurze Übersicht über die Befehle des Commodore 64 BASIC V2. Er ist nicht als Lehrbuch gedacht, sondern soll dazu dienen lange ungenutztes Wissen wieder aufzufrischen.
Falls Sie ein Lehrbuch für BASIC benötigen, sollten Sie einen Blick auf das original C64 Handbuch werfen. Es ist (in englischer Sprache) als e-Text bei Project64 (http://project64.c64.org), sowie in verschiedenen anderen Sprachen (u.a. Deutsch) bei iDoc (http://www.softwolves.pp.se/idoc/) verfübar.

Im C64 BASIC V2 gibt es nur wenige Datentypen:

Nur die ersten ZWEI Zeichen eines Variablennamen sind signifikant. 'CO', 'COCOS' und 'COLLOSEUM' (nicht aber 'C' und 'CA') sind daher gleichwertige Bezeichnungen für ein und die selbe Variable. Zusätzlich zu den zwei Zeichen wird noch die Typinformation zur Unterscheidung zwischen Variablen herangezogen. Somit sind 'CO', 'CO%' und 'CO$' gleichzeitig und unterscheidbar nutzbar.

Programmfluß

FOR...TO...STEP...NEXT - Der einzige echte Schleifen-Befehl in BASIC
Syntax:
FOR <Var> = <Start> TO <Ende> [STEP <Size>]
<Loop Code>
NEXT [<Var>]
Beispiele:
FOR I=1 TO 5: PRINT I;: NEXT -> 1 2 3 4 5
FOR I=1 TO 5 STEP 2: PRINT I;: NEXT -> 1 3 5
FOR I=5 TO 1 STEP -2: PRINT I;: NEXT I -> 5 3 1
FOR I=3 TO 1: PRINT I;: NEXT -> 3 (!)
IF...THEN - Bedingte Programmausführung
Anmerkung: Es gibt kein ELSE oder ENDIF
Syntax:
IF <Condition> THEN <Statements> oder
IF <Condition> GOTO <LineNr> oder
IF <Condition> THEN <LineNr>
Beispiel:
100 IF A < B THEN MN = A: GOTO 120
110 MN = B
120 ....
GOTO oder GO TO - Unbedingter Sprung
Syntax:
GOTO <LineNr> oder
GO TO <LineNr>
GOSUB - Unbedingter Sprung in ein Unterprogramm
Anmerkung: Es ist nicht möglich formale Parameter an ein Unterprogramm zu übergeben. Alles muß mit globalen Variablen gemacht werden.
Syntax:
GOSUB <LineNr>
Beispiel:
10 PRINT "Hauptprogramm"
20 GOSUB 100
30 PRINT "Wieder Hauptprogramm"
40 GOSUB 100
50 PRINT "Noch einmal Hauptprogramm"
60 END
100 PRINT "Dies ist das Unterprogramm"
110 RETURN
RETURN - Ende des Unterprogramms
Syntax:
RETURN
Beispiel:
Siehe GOSUB
ON...GOTO oder ON...GOSUB - Mehrweg Verzweigung
Syntax:
ON <IntegerExpr> GOTO <LineNr1>, <LineNr2> ... oder
ON <IntegerExpr> GOSUB <LineNr1>, <LineNr2> ...
Beispiel:
ON X GOTO 100, 200, 300
Dies ist gleichwertig zu:
IF X = 1 THEN GOTO 100
IF X = 2 THEN GOTO 200
IF X = 3 THEN GOTO 300
DEF FN- Definition einer BASIC Funktion/Subroutine
Syntax:
DEF FN <Name>(<Param>) = <Single Line Expression>
Beispiel:
DEF FN SI(X) = SIN(X)/X
FN SI(π/3) -> 0.826993343

Ein-/Ausgabe

GET - Liest ein Zeichen vom Standard Input ohne zu warten
Syntax:
GET <VarName>
Beispiel:
100 GET A$: IF A$ = "" THEN GOTO 100 -> Wartet auf eine beliebige Taste
INPUT - Liest Daten vom Standard Input (üblicherweise Tastatur)
Syntax:
INPUT [<Prompt>;] <VarName> [, <VarName> ...]
Beispiele:
INPUT "LOGIN:"; LG$
INPUT "Geben Sie die Werte von A, B und C an"; A, B, C
INPUT A
PRINT - Ausgabe nach Standard Output (üblicherweise Bildschirm)
Syntax:
PRINT <Data> oder
? <Data>
Beispiele:
PRINT "Hallo Welt"
PRINT "Hier", "sind", "Tabs" -> Beachten Sie die ','
PRINT "Erste Zeile"; -> Beachten Sie das ';'
PRINT "Immer noch die selbe Zeile"
PRINT "Power"; 2*32
SPC - Bewege den Cursor um eine bestimmte Anzahl von Zeichen vorwärts
Syntax:
SPC(<Cnt>)
Beispiel:
SPC(6)
TAB - Bewege den Cursor an eine bestimmte Position
Syntax:
TAB(<Pos>)
Beispiel:
TAB(6)
POS - Bestimme die aktuelle Cursor Position
Syntax:
POS(<Dummy>)

Dateien

LOAD - Lädt ein Programm von Diskette oder Band
Syntax:
LOAD <FileName> [, <Device> [, <SecondDev>]]
Beispiele:
LOAD "SuperGame", 8, 1 -> Absolutes Laden from Disk #8
LOAD "*", 9 -> Lädt das erste Programm von Disk #9
LOAD "", 1 -> Lädt das erste Progamm von Band (#1)
SAVE - Speichert ein Programm auf Diskette oder Band
Syntax:
SAVE <FileName> [, <Device> [, <SecondDev>]]
Beispiel:
SAVE "SuperGame", 8 -> Speichern auf Disk #8
Um eine bestehende Datei auf einer Diskette zu überschreiben, muß dem Dateinamen ein '@' vorangestellt werden.
Beispiel:
SAVE "@SuperGame",8 -> Speichern auf Disk #8, die bestehende Datei dieses Namens wird überschrieben.
VERIFY - Prüft ob ein Programm im Speicher und auf Diskette oder Band identisch ist.
Es werden keine Veränderungen durchgeführt.
Syntax:
VERIFY <FileName> [, <Device> [, <SecondDev>]]
Beispiel:
VERIFY "SuperGame", 8 -> Prüft SuperGame auf Disk #8
VERIFY "*", 9 -> Prüft das erste Programm auf Disk #9
VERIFY "", 1 -> Prüft das erste Programm auf Band #1
OPEN - Öffnet eine Datei
Syntax:
OPEN <FileID>, <Device> [, <SecondDev> [, <FNameMode>]] Die <SecondDev> ist eine optionaler Parameter im Bereich 0-15 mit folgender Bedeutung: 0..Reserviert für LOAD, 1..Reserviert für SAVE, 2-14..Frei verfügbar für den Zugriff auf Benutzerdateien, 15..Befehls-/Error Channel.
<FNameMode>
verwendet das Format: "<FileName> [,<FileType> [,<AccessMode>]]" wobei <FileType> entweder P (Program), S (Sequential), L (Relative) oder U (User) ist und <AccessMode> entweder R (Read), W (Write) oder A (Append) oder die Anzahl von Bytes/Record für eine relative Datei ist.
Beispiele:
OPEN 1, 4 -> Öffnet eine Ausgabedatei für Drucker #4
OPEN 1, 8, 2, "My File,P,R" -> Öffnet eine Programmdatei zum Lesen
OPEN 1, 8, 2, "My File,S,W" -> Öffnet eine sequentielle Datei zum Schreiben
OPEN 1, 8, 2, "My File,L,"+CHR$(40) -> Öffnete eine relative Datei mit 40 Bytes/Record
OPEN 1, 8, 15 -> Öffnet den Befehls-/Fehlerkanal von Disk #8
CLOSE - Schließt eine Datei
Syntax:
CLOSE <FileID>
Beispiel:
CLOSE 1
GET# - Liest ein Zeichen aus einer Datei
Syntax:
GET# <FileID>, <VarName>
Beispiel:
GET#1, A$ Beachten Sie, daß zwischen 'GET' und '#' kein Leerzeichen steht.
INPUT# - Liest Daten aus einer Datei
Syntax:
INPUT# <FileID>, <VarName> [, <VarName>...]
Beispiel:
INPUT#1, EN$, ER$, TR$, SC$ Beachten Sie, daß zwischen 'INPUT' und '#' kein Leerzeichen steht.
PRINT# - Schreibt Daten in eine Datei
Syntax:
PRINT# <FileID>, <Data>
Beispiel:
PRINT#1, "Power64"
Beachten Sie, daß zwischen 'PRINT' und '#' kein Leerzeichen steht. Vorsicht: ?# ist NICHT das Gleiche wie PRINT#, auch wenn beide im Listing gleich aussehen.
CMD - Umlenkung von Standard Output (Standard Input ist nicht betroffen)
Syntax:
CMD <FileID> [, <Message>]
Beispiel:
OPEN 1, 4 : REM Öffnet Datei#1 für Drucker #4
CMD 1 : REM Datei#1 wird Standard Output
PRINT "Beliebiger Output"
PRINT "Mehr Output"
PRINT#1 : REM CMD 1 rückgängig machen
CLOSE 1
ST- Device Status (Vordefinierte Variable)
ST = 0 .. Device Ok
Bit 6: 1 .. End of File
Bit 7: 1 .. Device Not Present
READ - Liest statische Daten aus DATA Befehlen im Programm
Syntax:
READ <Var> [, <Var>...]
Beispiel:
10 RESTORE
20 READ X$
30 PRINT X$;
40 S = 0
50 FOR I=1 TO 3
60 READ X
70 S = S + X
80 NEXT I
90 PRINT S
100 DATA "Power", 12, 34, 18
RESTORE - Setzt den Zeiger auf das nächste DATA Element auf das erste DATA Statement im Programm
Syntax:
RESTORE
Beispiel:
Siehe READ
DATA - Speichert statische Daten
Syntax:
DATA <Data> [, <Data>...]
Beispiel:
Siehe READ

Mathematische Funktionen

LET - Zuweisung
Syntax:
LET <Variable> = <Wert>
Beispiel:
LET A = 6.25
Anmerkung: Das Schlüsselwort LET ist nicht erforderlich. <Variable> = <Wert> allein reicht auch. LET macht alles nur langsamer -> Verwenden Sie es nicht!
DIM - Array Deklaration
Syntax:
DIM <Name>(<Size> [, <Size>...])
Beispiel:
DIM A(7) -> Ein Array mit 8(!) Elementen mit Indizen [0..7]
DIM B$(4,5) -> Ein Array mit 30(!) Strings
Zugriff auf die Elemente:
A(3) = 17 : B$(2,3) = "Power64"
+, -, *, /, ^ - Arithmetische Operatoren
Beispiel:
9 + 5 * (15 - 1) / 7 + 2^4 -> 35
<, <=, =, <>, >=, > - Vergleichs-Operatoren
Beispiele:
3 <> 6 -> -1 (TRUE) 3 > 4 -> 0 (FALSE)
SIN - Sinus (Argument in Radians)
Syntax:
SIN(<Value>)
Beispiel:
SIN(π/3) -> 0.866025404
COS - Cosinus (Argument in Radians)
Syntax:
COS(<Value>)
Beispiel:
COS(π/3) -> 0.5
TAN - Tangens (Argument in Radians)
Syntax:
TAN(<Value>)
Beispiel:
TAN(π/3) -> 1.73205081
ATN - Arcus Tangens (Result im Bereich [-π/2 .. π/2])
Syntax:
ATN(<Value>)
Beispiel:
ATN(1) -> 0.785398163 ( = π/4)
EXP - Exponent (ex mit e = 2.71828183...)
Syntax:
EXP(<Value>)
Beispiel:
EXP(6.25) -> 518.012825
LOG - Natürlicher Logarithmus
Syntax:
LOG(<Value>)
Beispiel:
LOG(6.25) -> 1.83258146
SQR - Quadratwurzel
Syntax:
SQR(<Value>)
Beispiel:
SQR(6.25) -> 2.5
ABS - Absolutwert
Syntax:
ABS(<Value>)
Beispiele:
ABS(-6.25) -> 6.25
ABS(0) -> 0
ABS(6.25) -> 6.25
SGN - Sign (Vorzeichen)
Syntax:
SGN(<Value>)
Beispiele:
SGN(-6.25) -> -1
SGN(0) -> 0
SGN(6.25) -> 1
INT - Integer (Runden auf die größte ganze Zahl, kleiner oder gleich dem Argument)
Syntax:
INT(<Value>)
Beispiele:
INT(-6.25) -> -7 (!)
INT(-5) -> -5
INT(0) -> 0
INT(5) -> 5
INT(6.25) -> 6
RND - Zufallszahl im Bereich [0.0 .. 1.0]
Syntax:
RND(<Seed>)
Wenn (<Seed> < 0) wird der Zufallszahlengenerator initialisiert.
Beispiele:
RND(-625) -> 3.85114436E-06
RND(0) -> 0.464844882
RND(0) -> 0.0156260729

Logische & Binäre Operatoren

Wie oben erwähnt werden Boolesche Werte wie folgt dargestellt:
FALSE <--> 0 (0x0000) und TRUE <--> -1 (0xFFFF) oder jeder andere von 0 verschiedene Wert.
AND - Logisches & Binäres AND
Syntax:
<Expr> AND <Expr>
Beispiele:
A>5 AND X<=Y
12 AND 10 -> 8 (%1100 AND %1010 = %1000)
OR - Logisches & Binäres OR
Syntax:
<Expr> OR <Expr>
Beispiele:
A>5 OR X<=Y
12 OR 10 -> 14 (%1100 OR %1010 = %1110)
NOT - Logisches & Binäres NOT
Syntax:
NOT <Expr>
Beispiele:
NOT A>5
NOT 2 -> -3 (NOT $0002 = $FFFD)

Zeichen- & String-Verarbeitung

+ - Strings aneinanderhängen
Beispiel:
"Pow" + "er64" -> "Power64"
<, <=, =, <>, >=, > - Vergleichsoperatoren
Beispiele:
"C64" < "Power64" -> -1 (TRUE)
"Alpha" > "Omega" -> 0 (FALSE)
LEN - Stringlänge
Syntax:
LEN(<String>)
Beispiel:
LEN("Power64") -> 7
LEFT$ - Linker Teilstring
Syntax:
LEFT$(<String>, <Len>)
Beispiel:
LEFT$("Power64", 5) -> "Power"
RIGHT$ - Rechter Teilstring
Syntax:
RIGHT$(<String>, <Len>)
Beispiel:
RIGHT$("Power64", 5) -> "wer64"
MID$ - Teilstring aus der Mitte eines String
Syntax:
MID$(<String>, <Start>, <Len>)
Beispiel:
MID$("Power64 for Macintosh", 13, 3) -> "Mac"
/* -- 123456789012345678901 -- */
STR$ - Wandelt eine Zahl in einen String
Syntax:
STR$(<Value>)
Beispiele:
STR$(6.25) -> " 6.25"
STR$(-6.25) -> "-6.25"
VAL - Wandelt einen String in eine Zahl
Syntax:
VAL(<String>)
Beispiele:
VAL("6.25") -> 6.25
VAL("6xx25") -> 6
VAL("x6x25") -> 0
ASC - ASCII Code des ersten Zeichens eines Strings
Syntax:
ASC(<String>)
Beispiele:
ASC("P") -> 80
ASC("Power64") -> 80
CHR$ - Character zu einem gegebenen ASCII Code
Syntax:
CHR$(<Value>)
Beispiel:
CHR$(80) -> "P"

Speicherzugriff

PEEK - Liest ein Byte as dem Speicher
Syntax:
PEEK(<Addr>)
Beispiel:
PEEK(53280) -> Aktuelle Rahmenfarbe
POKE - Schreibt ein Byte in den Speicher
Syntax:
POKE <Addr>, <Value>
Beispiel:
POKE 53280, 7 -> Gelber Rahmen
WAIT - Wartet bis ein Byte im Speicher einen bestimmten Wert hat
Syntax:
WAIT <Addr>, <Mask> [, <Invert>] WAIT wartet bis ((PEEK(<Addr>) EXOR <Invert>) AND <Mask>) != 0
Wenn <Invert> nicht angegeben ist, wird der Wert 0 angenommen
Beispiel:
WAIT 198, 255 -> Wartet auf eine Taste im Tastaturpuffer

Interface zu Assembler Programmen

SYS - System - Aufruf eines Assembler Programmes
Syntax:
SYS <Addr> [, <Param> ...]
Die Anzahl und Art der Parameter hängt vom gerufenen Programm ab.
USR - User Command
Syntax:
USR(<Param>)
Ähnlich wie SYS, aber die <Addr> ist mit $0310 fixiert und der erste und einzige <Param> ist bereits in FloatAccu1 (FAC1) gespeichert, wenn das Assembler Programm aufgerufen wird. Weniger flexibel als SYS und daher nur wenig genutzt.

Programmausführung

RUN - Startet das BASIC Programm
Syntax:
RUN [<Line>] Wenn keine Zeilennummer <Line> angegeben ist, startet die Progammausführung in der ersten Zeile
Beispiel:
RUN
END - Beendet das BASIC Programm
Syntax:
END
STOP - Hält das BASIC Programm an
Syntax:
STOP
STOP ist ähnlich wie END, gibt aber die Meldung BREAK IN <Line> aus wenn es ausgeführt wird.
CONT - Setzt die Programmausführung fort
Syntax:
CONT
Nachdem die Programmausführung mit STOP, END oder die Run/Stop Taste unterbrochen wurde kann der Befehl CONT genutzt werden um die Programmausführung fortzusetzen.

Sonstiges

REM - Remark - Anmerkung
Syntax:
REM <Text>
Beispiel:
REM Dieser Text ist ein Kommentar. Er endet mit der Zeile
LIST - Zeigt das Listing des aktuellen BASIC programms
Syntax:
LIST [<Line> | <From>- | -<To> | <From>-<To>]
Ohne Argumente wird das gesamte Programm angezeigt.
Beispiele:
LIST
LIST -40
LIST 100-200
NEW - Löscht das aktuelle Programm, und alle Variablen aus dem Speicher
Syntax:
NEW
Wenn Sie den NEW Befehl irrtümlich verwendet haben, kann das gelöschte Programm (nicht aber die Variablen) mit dem NEW Magician gerettet werden (siehe Abschnitt 7.2)
CLR - Löscht alle Variablen
Syntax:
CLR
FRE - Freier Speicher
Syntax:
FRE(<Dummy>)
Beispiel:
FRE(0) -> -26627 (unmittelbar nach dem Anschalten)
Meldet die Anzahl der Bytes, die für ein BASIC Programm verfügbar sind als vorzeichenbehafteten 16 Bit Integer. Wenn mehr als 32 KByte verfügbar sind, so wird eine negative Zahl gemeldet (genauer: der korrekte Wert - 65536). Daher muß der Wert -26627 als 65536-26627 = 38909 gelesen werden.
π - Pi = 3.14159265
TI - Timer Ticks seit dem Anschalten (1 Tick = 1/60 Sekunde)
TI$ - Zeit seit dem Anschalten im Stunden/Minuten/Sekunden Format
TI$ (aber nicht TI) kann auch ein Wert zugewiesen werden!
Die Genauigkeit der Timer ist sehr gering (>1% Drift).

Home Anfang Zurück Inhalt Weiter Ende Top of Page

Quelle: http://www.infinite-loop.at/Power64/Documentation/Power64-LiesMich/AA-C64_BASIC.html
Power64 Homepage: http://www.infinite-loop.at und http://www.salto.at - EMail:
© Roland Lieger, Goethegasse 39, A-2340 Mödling, Österreich
Letzte Änderung: 29. Feb. 2008
Valid HTML 4.01!