Es gibt nur einige wenige Simons'-Basic-Befehle, die in TSB durch ihre Syntax Probleme bereiten. Wenn SB-Programme unter TSB Fehlermeldungen hervorrufen oder unerwartet reagieren, liegt es an diesen Befehlen.
Diese Befehle lauten (in alphabetischer Reihenfolge):
TSB-Befehl | Fehlersymptom | Abhilfe |
PRINT AT() | Fehlermeldung ILLEGAL QUANTITY ERROR. Die Positionierung der Screen-Ausgaben sieht chaotisch aus. |
Die beiden Argumente der Funktion AT sind in v2.40.131 ausgetauscht worden, um sie an die anderen 13 Screen-Befehle in TSB anzupassen. (Wer sich ein altes TSB- oder gar ein SB-Programm mit vielen "PRINT AT"-Kommandos anschauen möchte, ohne alle diese Kommandos auf die aktuelle Situation umstellen zu müssen, schaut >hier< nach.) |
⇒ | PRINT AT(sp,zl)x$ ⇒ PRINT AT(zl,sp)x$ | |
CHECK | Fehlermeldung SYNTAX ERROR. | Das Befehlswort CHECK kann in Simons' Basic sowohl als Funktion als auch als Anweisung verwendet werden. Als Anweisung ist es synonym zum Befehl DETECT, der die Abfrage von Sprite-Kollisionen vorbereitet. In TSB hat CHECK eine völlig andere Aufgabe, die nichts mit Sprites zu tun hat. |
⇒ |
In einem Programm, das unter SB CHECK als Anweisung verwendet, muss diese Anweisung durch den Befehl DETECT ersetzt werden. Beispiel: CHECK 0: k1=CHECK(1,4) ⇒ DETECT 0: k1=CHECK(1,4) |
|
FETCH | Völlig falsche Zahlenwerte in numerischen Variablen nach <Return>, dadurch u.U. ein ILLEGAL QUANTITY ERROR | Die Variablen bei FETCH müssen in TSB vom Typ String sein. Ein numerischer Wert wird dann mit VAL(String) erzeugt. |
⇒ | FETCH "0123456789",n,x ⇒ FETCH "0123456789",n,x$: x=VAL(x$) |
|
INSERT und INST | Fehlermeldung ILLEGAL QUANTITY ERROR. Die Einfügung/Überschreibung findet eine Stelle zu früh statt. |
Der Positionswert (drittes Argument der Funktion) beginnt jetzt mit 1 als Zähler (früher: 0), daher führt der Wert 0 zu einem Error. Aus dem gleichen Grund müssen die Positionsangaben für INSERT und INST alle um 1 erhöht werden. |
⇒ | p=0:x$=INST(e$,x$,p) ⇒ x$=INST(e$,x$,p+1) p=0:x$=INSERT(e$,x$,p) ⇒ x$=INSERT(e$,x$,p+1) |
|
⇒ | PRINT JOY;"text" ⇒ j=JOY: PRINT j;"text" | |
MEM | Nach MEM erscheinen die geänderten Zeichen nicht, stattdessen Kleinbuchstaben | In SB kann man nach MEM den Zeichensatz nicht mit CSET umschalten. Daher werden hier (wenn man auf weitere POKEs verzichtet) nur Großbuchstaben angezeigt. TSBs Voreinstellung ist aber der andere Zeichensatz, der Groß-Klein-Modus (CSET 1). |
⇒ |
In einem SB-Programm, das unter TSB laufen soll, muss daher nach dem Befehl MEM ausdrücklich CSET 0 gesetzt werden: MEM: CSET 0 |
|
MOB OFF | Beim LISTen fehlt das OFF hinter MOB | In TSB wird das SB-OFF nicht angezeigt, man kann es aber ausdrücklich setzen: |
⇒ | MOB [OFF] 1 ⇒ MOB OFF 1; | |
ON KEY | 1. Fehlermeldung SYNTAX ERROR 2. Falsche Werte bei Abfrage des Zwischenspeichers für das zuletzt gedrückte Zeichen |
In SB muss nach dem Kontrollstring ein Komma folgen. Da es keinerlei Funktion ausübt, wurde es in TSB weggelassen. In SB wird die gedrückte Taste in der Systemvariablen ST abgelegt, TSB verwendet dafür jedoch (um keine Systemfunktion zu stören) die Speicherstelle $C5EC. |
⇒ ⇒ |
ON KEY "abc",: GOTO 1000 ⇒ ON KEY "abc": GOTO 1000 IF st=65 THEN ... ⇒ IF PEEK($c5ec)=65 THEN ... |
|
PAUSE | 1. Fehlermeldung TYPE MISMATCH ERROR | Die Zahlenangabe hinter PAUSE beginnt nicht mit einer Ziffer (besteht z.B. aus einer Variablen oder beginnt mit einem Vorzeichen oder Dezimalpunkt). In diesem Fall muss ein Leerstring oder ein mit einer literalen Null beginnender Ausdruck vor die Zeitangabe gesetzt werden. |
2. PAUSE bricht bei jedem Tastendruck ab | In SB ist nur <Return> als Abbruchtaste erlaubt, in TSB aber jede Taste. Ein POKE stellt den SB-Zustand wieder her. | ⇒ ⇒ |
PAUSE x ⇒ PAUSE "", x (oder:) PAUSE x ⇒ PAUSE 0 + x POKE $b90e,$24 (rückgängig mit dem Wert $D0) |
USE | 1. Fehlermeldung TYPE MISMATCH ERROR | Die Variablen bei USE müssen in TSB numerisch sein, also alle STR$ entfernen. |
2. Zahlen erscheinen untereinander statt nebeneinander | In SB wird bei USE kein Zeilenvorschub gesendet, bei TSB muss ein solcher mit einem Semikolon ausdrücklich verhindert werden: | |
⇒ ⇒ |
USE "###",STR$(x): PRINT ⇒ USE "###",x (kein PRINT) USE "###",STR$(x) ⇒ USE "###",x; |
|
Weitere Simons-Basic-Befehle, die in TSB zu Irritationen führen würden, sind nicht bekannt. Mehr dazu im C64-Wiki.