Kompatibel
SB an TSB anpassen
SB an TSB anpassen

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 mit dem aktuellen TSB anschauen möchte, ohne alle diese Kommandos von Hand umstellen zu wollen, schaut >auf dieser Seite< nach, wie das geht.)
PRINT AT(spalte,zeile)x$ ⇒ PRINT AT(zeile,spalte)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 Fehlermeldung BAD MODE ERROR. Die Zielvariable bei FETCH muss 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)
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 bei MOB OFF In TSB wird das SB-OFF nicht angezeigt (es gehört nicht mehr zum Schlüsselwort), man kann es aber ausdrücklich setzen. Der Grund für die Änderung des Schlüsselworts ist, dass jetzt mit MOB ON ein Sprite eingeschaltet werden kann.
MOB [OFF] 1 ⇒ MOB OFF 1;
ON KEY 1. Fehlermeldung SYNTAX ERROR
In SB muss nach dem Kontrollstring ein Komma folgen. Da es keinerlei Funktion ausübt, wurde es in TSB weggelassen.
ON KEY "abc",: GOTO 1000 ⇒ ON KEY "abc": GOTO 1000
2. Falsche Werte bei Abfrage des Zwischenspeichers für das zuletzt gedrückte Zeichen 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.
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.
PAUSE x ⇒ PAUSE "", x (oder:)
PAUSE x ⇒ PAUSE 0 + x
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.
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.
USE "###",STR$(x): PRINT ⇒ USE "###",x
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) ⇒ USE "###",x; (hiermit keine neue Zeile)

Weitere Simons-Basic-Befehle, die in TSB zu Irritationen führen würden, sind nicht bekannt. Mehr dazu im C64-Wiki.


Portierungen

Beispiele für eine gelungene Anpassung von SB-Programmen an TSB (eine Portierung) sind diese Programme:

· Sosy ("Unser Sonnensystem")
· Sternenhimmel
· TSB-Testbild
· North Sea Oil
· Reactor 64

<nach oben>