C64 BASIC V2.0: Befehle, Schlüsselwörter und Token

Beim Commodore 64 (auch VC-20) werden bei der internen Verarbeitung der BASIC-Befehle (Schlüsselwörter) eines BASIC-Programms für eine schnellere Verarbeitung und Speicherplatzersparnis sogenannte Token (Schlüsselzeichen) statt der Schlüsselwörter verwendet.

Die folgende Tabelle zeigt die BASIC-Schlüsselwörter, den dazugehörigen Token (dezimal / hexadezimal), die ROM-Einsprungadresse (hexadezimal), die Abkürzung und den Typ des Befehls.

Nach der Tabelle erhalten Sie weiterführende Informationen zur Tokenisation der Befehle.

Tabelle C64 Token


BASIC SchlüsselwortToken dezToken hexROM Exec dezROM Exec hexAbk.Typ
END128$8043057$A831eNAnweisung/Befehl
FOR129$8142818$A742fOAnweisung/Befehl
NEXT130$8244318$AD1EnEAnweisung/Befehl
DATA131$8343256$A8F8dAAnweisung/Befehl
INPUT#132$8443941$ABA5iNAnweisung/Befehl
INPUT133$8543967$ABBF-Anweisung/Befehl
DIM134$8645185$B081dIAnweisung/Befehl
READ135$8744038$AC06rEAnweisung/Befehl
LET136$8843429$A9A5lEAnweisung/Befehl
GOTO137$8943168$A8A0gOAnweisung/Befehl
RUN138$8A43121$A871rUAnweisung/Befehl
IF139$8B43304$A928-Anweisung/Befehl
RESTORE140$8C43037$A81DreSAnweisung/Befehl
GOSUB141$8D43139$A883goSAnweisung/Befehl
RETURN142$8E43218$A8D2reTAnweisung/Befehl
REM143$8F43323$A93B-Anweisung/Befehl
STOP144$9043055$A82FsTAnweisung/Befehl
ON145$9143339$A94B-Anweisung/Befehl
WAIT146$9247149$B82DwAAnweisung/Befehl
LOAD147$9357704$E168lOAnweisung/Befehl
SAVE148$9457686$E156sAAnweisung/Befehl
VERIFY149$9557701$E165vEAnweisung/Befehl
DEF150$9646003$B3B3dEAnweisung/Befehl
POKE151$9747140$B824pOAnweisung/Befehl
PRINT#152$9843648$AA80pRAnweisung/Befehl
PRINT153$9943680$AAA0?Anweisung/Befehl
CONT154$9A43095$A857cOAnweisung/Befehl
LIST155$9B42652$A69ClIAnweisung/Befehl
CLR156$9C42590$A65EcLAnweisung/Befehl
CMD157$9D43654$AA86cMAnweisung/Befehl
SYS158$9E57642$E12AsYAnweisung/Befehl
OPEN159$9F57790$E1BEoPAnweisung/Befehl
CLOSE160$A057799$E1C7clOAnweisung/Befehl
GET161$A143899$AB7BgEAnweisung/Befehl
NEW162$A242562$A642-Anweisung/Befehl
TAB(163$A343752$AAE8tAAnweisung/Befehl, Spezial
TO164$A442861$A76D-Anweisung/Befehl, Spezial
FN165$A546068$B3F4-Anweisung/Befehl, Spezial
SPC(166$A643769$AAF9sPAnweisung/Befehl, Spezial
THEN167$A743314$A932tHAnweisung/Befehl, Spezial
NOT168$A844756$AED4nOAnweisung/Befehl, Spezial
STEP169$A942905$A799stEAnweisung/Befehl, Spezial
+170$AA47210$B86A-Operator, numerisch/string
-171$AB47187$B853-Operator, numerisch
*172$AC47659$BA2B-Operator, numerisch
/173$AD47890$BB12-Operator, numerisch
^174$AE49019$BF7B-Operator, numerisch
AND175$AF45033$AFE9aNOperator, logisch
OR176$B045030$AFE6-Operator, logisch
>177$B149076$BFB4-Operator, logisch
=178$B244756$AED4-Operator, logisch
<179$B345078$B016-Operator, logisch
SGN180$B448185$BC39sGFunktion, numerisch
INT181$B548332$BCCC-Funktion, numerisch
ABS182$B648216$BC58abSFunktion, numerisch
USR183$B7784$0310uSFunktion, numerisch/string
FRE184$B845949$B37DfRFunktion, numerisch, Spezial
POS185$B945982$B39E-Funktion, numerisch, Spezial
SQR186$BA49009$BF71sQFunktion, numerisch
RND187$BB57495$E097rNFunktion, numerisch
LOG188$BC45794$B9EA-Funktion, numerisch
EXP189$BD49133$BFEDeXFunktion, numerisch
COS190$BE57956$E264-Funktion, numerisch
SIN191$BF57963$E26BsIFunktion, numerisch
TAN192$C058036$E2B4-Funktion, numerisch
ATN193$C158128$E30EaTFunktion, numerisch
PEEK194$C247117$B80EpEFunktion, numerisch
LEN195$C346972$B77C-Funktion, numerisch
STR$196$C446181$B465stRFunktion, string
VAL197$C547021$B7ADvAFunktion, numerisch
ASC198$C646987$B78BaSFunktion, numerisch
CHR$199$C746828$B6ECcHFunktion, string
LEFT$200$C846848$B700leFFunktion, string
RIGHT$201$C946892$B72CrIFunktion, string
MID$202$CA46903$B737mIFunktion, string
GO203$CB43026$A812-Anweisung/Befehl, Spezial
π255$FF44702$AE9E-Funktion, numerisch, Konstante
ST (STATUS)--65463$FFB7-Systemvariable
TI (TIME)--??-Systemvariable
TI$ (TIME$)--43488$A9E0-Systemvariable


Tokenisation

Hier werden die Schlüsselwörter (Befehle) in ein Single-Byte-Wert (Token) umgewandelt, wenn sie in einem Programm gespeichert sind. Das geschieht entweder durch einen Programmstart mit RUN oder im Direktmodus (Konsole) durch das Drücken der Taste RETURN, wenn dort Kommandos eingegeben worden sind. Der BASIC-Interpreter arbeitet die Token der Reihenfolge nach ab.

De-Tokenisation

Hier werden die Token (Bytes) in lesbare BASIC-Befehle (Schlüsselwörter) umgewandelt, was eigentlich nur für das LIST-Kommando als Ausgabe und für gute menschliche Lesbarkeit zutrifft. Ansonsten wird die De-Tokenisation nicht angewandt.

Single-Byte-Token

Ein Token kann beim Commodore BASIC V2 (ab 4.0) einen Single-Byte-Wert zwischen 128-255 ($80-$FF) haben und belegt nur 1 Byte Arbeitsspeicher. Token-Codes sind immer größer oder gleich 128 ($80); d.h. das höchstwertige Bit in einem Byte, das einen Token repräsentiert, ist immer gesetzt und somit werden keine PETSCII-Zeichen (<128/<$80) als Token-Code benutzt.

Two-Bytes-Token

Ab dem Commodore BASIC 7.0 (C 128) werden wegen des umfangreichen BASIC-Befehlssatzes zwei Bytes für ein Token benötigt.

Ausführen von Token

Jedes Token hat eine sogenannte Ausführungsadresse (EXEC) im ROM, wo dann der entsprechende Code für den jeweiligen Token bzw. BASIC-Befehl ausgeführt wird.

Schlüsselwörter

BASIC V2 enthält 76 Schlüsselwörter, 8 Operatoren, 1 Konstante und 3 Systemvariablen, die in verschiedenen Gruppen gegliedert sind:

  • 128-162 ($80-$A2): Befehle
  • 163-169 ($A3-$A9): „Bywords„, die Teil der Syntax der vorherigen Befehle sind
  • 170-179 ($AA-$B3): Arithmetische und logische Operatoren
  • 180-202 ($B4-$CA): Funktionen
  • 203 ($CB): Befehl – GO (der hier als Ausnahme hinter den Funktionen liegt)
  • 204-254 ($CC-$FE): Ein freier Bereich für 51 zusätzliche Token, z.B. der für BASIC-Erweiterungen von Drittanbietern genutzt wird
  • 255 ($FF): Konstante – Pi
  • Systemvariablen: ST (STATUS), TI (TIME), TI$ (TIME$). Im BASIC V2 ROM werden die Systemvariablen als Ausnahmen in den Routinen zur Behandlung normaler Variablen behandelt.

Abkürzungen

Die meisten BASIC-Schlüsselwörter kann man bei der Eingabe abkürzen. Abgekürzte Schlüsselwörter werden i.d.R. gebildet, indem man die ersten (manchmal bis zu drei) Zeichen eintippt und das nächste Zeichen mit SHIFT eingibt.

Auch hier gibt es wieder einige Ausnahmen. Einige Schlüsselwörter (CLOSE, GOSUB, LEFT$, RESTORE, RETURN, STEP, STR$) benötigen gekürzt 3 statt 2 Zeichen. Der BASIC-Befehl PRINT wird nur mit einem Zeichen, dem ? abgekürzt. Es gibt auch einige BASIC-Befehle (INPUT, COS, FN, TO, IF, INT, LEN, LOG, NEW, ON, OR, POS, REM, TAN) die nicht abkürzbar sind.

Speichern

Es kann schon mal vorkommen, dass eine Programmzeile 80 Zeichen überschreitet, also dafür mehr als 2 Zeilen auf dem Bildschirm angezeigt werden. Dies geschieht dadurch, dass die Ausgabe der Token beim LIST-Befehl eben ungekürzt passiert und somit Programmzeilen mit mehr als 80 Zeichen auftreten können.

Wenn sie eine solche Programmzeile ändern wollen, müssen sie die Abkürzungen erneut eingeben bevor sie das Programm speichern. Achten sie dann darauf, dass sie nicht mehr als 80 Zeichen für eine Programmzeile insgesamt verwenden. Alle zusätzlichen Zeichen danach werden nach dem Drücken von RETURN automatisch abgeschnitten. Beim Speichern eines Programms auf einen Datenträger werden die Token und nicht die Schlüsselwörter benutzt.


Befehle CLOSE, CLR, CMD, CONT, DATA, DEF, DIM, END, FOR, GET, GET#, GOSUB, GOTO, IF, INPUT, INPUT#, LET, LIST, LOAD, NEW, NEXT, ON, OPEN, POKE, PRINT, PRINT#, READ, REM, RESTORE, RETURN, RUN, SAVE, STOP, SYS, VERIFY, WAIT
Befehle Spezial (Bywords) FN, GO, NOT, SPC(, TAB(, THEN, TO, STEP
Arithmetische und logische Operatoren +, , *, /, ^, >, =, <, AND, OR
Funktionen ABS, ASC, ATN, CHR$, COS, EXP, FRE, INT, LEFT$, LEN, LOG, MID$, PEEK, POS, RIGHT$, RND, SGN, SIN, SQR, STR$, TAN, USR, VAL
Konstanten und Systemvariablen Pi, ST, TI, TI$