|
|
|
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.
FOR...TO...STEP...NEXT
- Der einzige echte Schleifen-Befehl in BASICFOR <Var> = <Start> TO <Ende> [STEP <Size>]
<Loop Code>
NEXT [<Var>]
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ührungELSE
oder ENDIF
IF <Condition> THEN <Statements>
oderIF <Condition> GOTO <LineNr>
oderIF <Condition> THEN <LineNr>
100 IF A < B THEN MN = A: GOTO 120
110 MN = B
120 ....
GOTO
oder GO TO
- Unbedingter SprungGOTO <LineNr>
oderGO TO <LineNr>
GOSUB
- Unbedingter Sprung in ein UnterprogrammGOSUB <LineNr>
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 UnterprogrammsRETURN
GOSUB
ON...GOTO
oder ON...GOSUB
- Mehrweg Verzweigung ON <IntegerExpr> GOTO <LineNr1>, <LineNr2>
... oderON <IntegerExpr> GOSUB <LineNr1>, <LineNr2>
...
ON X GOTO 100, 200, 300
IF X = 1 THEN GOTO 100
IF X = 2 THEN GOTO 200
IF X = 3 THEN GOTO 300
DEF FN
- Definition einer BASIC Funktion/SubroutineDEF FN <Name>(<Param>) = <Single Line Expression>
DEF FN SI(X) = SIN(X)/X
FN SI(π/3) -> 0.826993343
GET
- Liest ein Zeichen vom Standard Input ohne zu wartenGET <VarName>
100 GET A$: IF A$ = "" THEN GOTO 100
-> Wartet auf eine beliebige Taste
INPUT
- Liest Daten vom Standard Input (üblicherweise Tastatur)INPUT [<Prompt>;] <VarName> [, <VarName> ...]
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)PRINT <Data>
oder? <Data>
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ärtsSPC(<Cnt>)
SPC(6)
TAB
- Bewege den Cursor an eine bestimmte PositionTAB(<Pos>)
TAB(6)
POS
- Bestimme die aktuelle Cursor PositionPOS(<Dummy>)
LOAD
- Lädt ein Programm von Diskette oder BandLOAD <FileName> [, <Device> [, <SecondDev>]]
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 BandSAVE <FileName> [, <Device> [, <SecondDev>]]
SAVE "SuperGame", 8 -> Speichern auf Disk #8
@
' vorangestellt werden.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.VERIFY <FileName> [, <Device> [, <SecondDev>]]
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 DateiOPEN <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.
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 DateiCLOSE <FileID>
CLOSE 1
GET#
- Liest ein Zeichen aus einer Datei GET# <FileID>, <VarName>
GET#1, A$
Beachten Sie, daß zwischen 'GET
' und '#
' kein Leerzeichen steht.
INPUT#
- Liest Daten aus einer DateiINPUT# <FileID>, <VarName> [, <VarName>...]
INPUT#1, EN$, ER$, TR$, SC$
Beachten Sie, daß zwischen 'INPUT
' und '#
' kein Leerzeichen steht.
PRINT#
- Schreibt Daten in eine DateiPRINT# <FileID>, <Data>
PRINT#1, "Power64"
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)CMD <FileID> [, <Message>]
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)READ
- Liest statische Daten aus DATA Befehlen im ProgrammREAD <Var> [, <Var>...]
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 ProgrammRESTORE
READ
DATA
- Speichert statische DatenDATA <Data> [, <Data>...]
READ
LET
- ZuweisungLET <Variable> = <Wert>
LET A = 6.25
LET
ist nicht erforderlich. <Variable> = <Wert>
allein reicht auch. LET
macht alles nur langsamer -> Verwenden Sie es nicht!
DIM
- Array DeklarationDIM <Name>(<Size> [, <Size>...])
DIM A(7)
-> Ein Array mit 8(!) Elementen mit Indizen [0..7]DIM B$(4,5)
-> Ein Array mit 30(!) Strings
A(3) = 17 : B$(2,3) = "Power64"
+, -, *, /, ^
- Arithmetische Operatoren9 + 5 * (15 - 1) / 7 + 2^4 -> 35
<, <=, =, <>, >=, >
- Vergleichs-Operatoren
3 <> 6 -> -1 (TRUE)
3 > 4 -> 0 (FALSE)
SIN
- Sinus (Argument in Radians)SIN(<Value>)
SIN(π/3) -> 0.866025404
COS
- Cosinus (Argument in Radians)COS(<Value>)
COS(π/3) -> 0.5
TAN
- Tangens (Argument in Radians)TAN(<Value>)
TAN(π/3) -> 1.73205081
ATN
- Arcus Tangens (Result im Bereich [-π/2 .. π/2])ATN(<Value>)
ATN(1) -> 0.785398163 ( = π/4)
EXP
- Exponent (ex mit e = 2.71828183...)EXP(<Value>)
EXP(6.25) -> 518.012825
LOG
- Natürlicher LogarithmusLOG(<Value>)
LOG(6.25) -> 1.83258146
SQR
- QuadratwurzelSQR(<Value>)
SQR(6.25) -> 2.5
ABS
- AbsolutwertABS(<Value>)
ABS(-6.25) -> 6.25
ABS(0) -> 0
ABS(6.25) -> 6.25
SGN
- Sign (Vorzeichen) SGN(<Value>)
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)INT(<Value>)
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]RND(<Seed>)
(<Seed> < 0)
wird der Zufallszahlengenerator initialisiert.
RND(-625) -> 3.85114436E-06
RND(0) -> 0.464844882
RND(0) -> 0.0156260729
FALSE <--> 0 (0x0000) und TRUE <--> -1 (0xFFFF)
oder jeder andere von 0 verschiedene Wert.
AND
- Logisches & Binäres AND<Expr> AND <Expr>
A>5 AND X<=Y
12 AND 10 -> 8 (%1100 AND %1010 = %1000)
OR
- Logisches & Binäres OR<Expr> OR <Expr>
A>5 OR X<=Y
12 OR 10 -> 14 (%1100 OR %1010 = %1110)
NOT
- Logisches & Binäres NOTNOT <Expr>
NOT A>5
NOT 2 -> -3 (NOT $0002 = $FFFD)
"Pow" + "er64" -> "Power64"
<, <=, =, <>, >=, >
- Vergleichsoperatoren
"C64" < "Power64" -> -1 (TRUE)
"Alpha" > "Omega" -> 0 (FALSE)
LEN
- StringlängeLEN(<String>)
LEN("Power64") -> 7
LEFT$
- Linker TeilstringLEFT$(<String>, <Len>)
LEFT$("Power64", 5) -> "Power"
RIGHT$
- Rechter TeilstringRIGHT$(<String>, <Len>)
RIGHT$("Power64", 5) -> "wer64"
MID$
- Teilstring aus der Mitte eines StringMID$(<String>, <Start>, <Len>)
MID$("Power64 for Macintosh", 13, 3) -> "Mac"
/* -- 123456789012345678901 -- */
STR$
- Wandelt eine Zahl in einen StringSTR$(<Value>)
STR$(6.25) -> " 6.25"
STR$(-6.25) -> "-6.25"
VAL
- Wandelt einen String in eine ZahlVAL(<String>)
VAL("6.25") -> 6.25
VAL("6xx25") -> 6
VAL("x6x25") -> 0
ASC
- ASCII Code des ersten Zeichens eines StringsASC(<String>)
ASC("P") -> 80
ASC("Power64") -> 80
CHR$
- Character zu einem gegebenen ASCII CodeCHR$(<Value>)
CHR$(80) -> "P"
PEEK
- Liest ein Byte as dem SpeicherPEEK(<Addr>)
PEEK(53280)
-> Aktuelle Rahmenfarbe
POKE
- Schreibt ein Byte in den SpeicherPOKE <Addr>, <Value>
POKE 53280, 7
-> Gelber Rahmen
WAIT
- Wartet bis ein Byte im Speicher einen bestimmten Wert hatWAIT <Addr>, <Mask> [, <Invert>]
WAIT
wartet bis ((PEEK(<Addr>) EXOR <Invert>) AND <Mask>) != 0
Invert
> nicht angegeben ist, wird der Wert 0 angenommenWAIT 198, 255
-> Wartet auf eine Taste im Tastaturpuffer
SYS
- System - Aufruf eines Assembler ProgrammesSYS <Addr> [, <Param> ...]
USR
- User CommandUSR(<Param>)
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.
RUN
- Startet das BASIC ProgrammRUN [<Line>]
Wenn keine Zeilennummer <Line
> angegeben ist, startet die Progammausführung in der ersten Zeile
RUN
END
- Beendet das BASIC ProgrammEND
STOP
- Hält das BASIC Programm anSTOP
STOP
ist ähnlich wie END
, gibt aber die Meldung BREAK IN <Line>
aus wenn es ausgeführt wird.
CONT
- Setzt die Programmausführung fortCONT
STOP
, END
oder die Run/Stop Taste unterbrochen wurde kann der Befehl CONT genutzt werden um die Programmausführung fortzusetzen.
REM
- Remark - AnmerkungREM <Text>
REM Dieser Text ist ein Kommentar. Er endet mit der Zeile
LIST
- Zeigt das Listing des aktuellen BASIC programms LIST [<Line> | <From>- | -<To> | <From>-<To>]
LIST
LIST -40
LIST 100-200
NEW
- Löscht das aktuelle Programm, und alle Variablen aus dem SpeicherNEW
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 VariablenCLR
FRE
- Freier SpeicherFRE(<Dummy>)
FRE(0)
-> -26627 (unmittelbar nach dem Anschalten)
π
- Pi = 3.14159265
TI
- Timer Ticks seit dem Anschalten (1 Tick = 1/60 Sekunde)
TI$
- Zeit seit dem Anschalten im Stunden/Minuten/Sekunden FormatTI$
(aber nicht TI) kann auch ein Wert zugewiesen werden!
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 |