TSB Update History
Update History
Update History

TSB ist eine Weiterentwicklung von Simons' Basic und wurde 1986 erstmals herausgegeben. Die Quellcodes zu TSB finden sich auf Github. In der folgenden History erscheinen die neuesten Updates oben.


2.40417 neo Es konnte passieren, dass das Verwenden des DIR-Befehls dazu führte, dass DIR mit einer Fehlermeldung abbrach ("file open error"). Das lag daran, dass DIR selber unter Dateinummer #1 auf die Diskette zugriff. Behoben. Außerdem gibt es jetzt nach MEM und INST beim Aufruf der nun temporär deaktivierten Befehle RENUMBER und PLACE die (gegenüber dem bisherigen "bad mode error") sinnvollere Meldung "not yet active error".
2.40329 neo Durch eine kurze Diskussion im Forum64 ist ein neues FIND (Genaueres zu FIND hier) entstanden. Es kann jetzt zwischen tokenisierten und literalen Suchanforderungen unterscheiden, einfach, indem man an das Befehlswort ein Anführungszeichen und dann das zu suchende Wort anhängt. Das Anführungszeichen darf sogar vom Befehlswort abgesetzt werden.
2.40323 neo Der Befehl SCRLD hat bei einem "File Not Found"-Error keine Fehlermeldung ausgeworfen und einfach weitergemacht, als wäre nichts gewesen. Behoben.
2.40227 neo Eine kleine Änderung bringt mehr JiffyDOS-Vergnügen: Ab jetzt braucht man dieses ominöse SYS $E4C2 nicht mehr, um die F-Tastenbelegung von JiffyDOS abzuschalten. Sie ist nun automatisch nach dem Booten von TSB aus. Damit ist der einschlägige Trick von Peter Hagemann (†) im C64Wiki endlich nicht mehr erforderlich.
2.40215 neo Wieder einmal etwas völlig Neues: MOBCOL! Eine neuer Befehl, der die individuelle Spritefarbe setzt, ohne den MOB-SET-Overhead zu bemühen! Für die Einrichtung dieses Befehls hat ein anderer dran glauben müssen: DISAPA (ein völlig unnützes Kommando!) gibt es nicht mehr.

Und noch eine Änderung: Der Befehl PAUSE hatte in TSB inzwischen einen starken PRINT-Charakter angenommen, der dazu führte, dass er mit einem Semikolon abgeschlossen werden musste, wenn kein Zeilenvorschub nach einem einfachen PAUSE 1 erfolgen sollte. Dieses Verhalten haben wir hiermit zurückgenommen. Ein Semikolon hat bei PAUSE nichts mehr zu suchen, PRINT-Parameter auch nicht, das war zuviel des Guten.
2.40212 neo Kleine Änderung in der JOY-Funktion: Mit dem (bei entsprechenden Programmen vorzunehmenden) Eingriff POKE $91a2,203 wartet JOY in Zukunft auf Veränderungen beim Joystick. TSB setzt eine Joystick-Abfrage nach diesem POKE (genau wie KEYGET bei der Tastatur) nur dann fort, wenn ein Rückgabewert anliegt, der Joystick also irgendwie betätigt wurde. Daher ist nach dem POKE eine gleichzeitige Abfrage von Keyboard und Joystick nicht mehr möglich. Normalwert an $91a2 ist 98, dann (wenn TSB sich im Normalzustand befindet) muss man den Joystick in einer Schleife abfragen, um eine Veränderung zu bemerken.
2.40131 neo TSB verabschiedet sich hiermit ein weiteres Stückchen von Simons' Basic: Die Funktionen AT(..), INSERT(..) und INST(..) arbeiten ab jetzt anders als unter SB. Für AT gilt nun auch (wie für alle anderen - insgesamt 14 - Textscreen-Befehle) die Argument- bzw. Parameterreihenfolge Zeile/Spalte. Und bei INSERT und INST werden jetzt die tatsächlichen Positionen der Zeichen im String entgegengenommen, nicht wie bisher die "Zwischenräume" zwischen den Zeichen. Das erste Zeichen hat also Position 1, eine Position 0 gibt es nicht mehr (0 als Positionsangabe wirft jetzt einen Illegal Quantity Error aus). Diese beiden Änderungen bitte beim Nachvollziehen der Programmierhinweise auf diesen Seiten (vor allem bei der Beschreibung des Sokoban-Spiels) beachten!

 

2.40118 neo @Omega schlägt wieder zu! In RENUMBER ist ein Fehler, der nur dann auftritt, wenn man TSB.MEM nachgeladen hat. Wie der Byte-Fehler da hineinkam, ist mir schleierhaft, aber wir haben ja eben @Omega für sowas. Behoben.
2.40116 neo Wieder ein Bugfix: Das Nachladen von TSB.MEM nach einem MEM/NRM gelang nicht einwandfrei (es wurde ein falscher Wiedereinsprungvektor gesetzt, der sich bei den Befehlen RENUMBER und PLACE fatal auswirkte). Behoben.
2.31205 neo Und noch einmal ein Bugfix, der mit der Umstellung auf TSBneo zu tun hat: der Befehl LIN führte zum Absturz des Systems. Behoben.
2.31125 neo Bugfix beim Befehl ON KEY, der das System zum Absturz brachte (intensiv verwendet im Spiel ByPixx).
2.31113 neo Mit dieser neuen Version bricht TSB endgültig mit seiner Simons'-Basic-Vergangenheit. Die gesamte innere Organisation des Codes wurde überarbeitet. Die vielen, sich im Lauf der Jahre angehäuft habenden, sogenannten Rucksäcke (Code-Erweiterungen an Stellen, die nicht dafür vorgesehen sind) gibt es nicht mehr, was zusammengehört, steht jetzt auch zusammen. Grund genug für einen neuen Namen: TSBneo! Natürlich führt die Umorganisation dazu, dass alle Tipps und Tricks ebenfalls überarbeitet werden müssen, die alten gelten nur für TSB, für TSBneo lauten die Patch-Adressen anders.

 

2.30930 Dieses Update bringt nach v2.20806 nach langer Zeit wieder einmal eine wesentliche interne Veränderung mit sich, die aber nach außen hin nicht auffallen dürfte (TSB könnte allerdings etwas schneller "arbeiten"). Jedenfalls hat sich für Programmierer der Aufruf der VARPNTR-Routine geändert. Statt $80BD heißt die Adresse jetzt $8096.
2.30920 Ein ungeheuerlicher Vorgang! Das Update 2.30818 muss zurückgenommen werden! Und warum? Die VICE-Version, auf der ich TSB weiterentwickele, hat einen fehlerhaften Druckertreiber, der eben Grafikpixel auf den Kopf gestellt auswirft! Unfassbar! - Hiermit also ein wieder korrekt druckendes TSB!
2.30910 Neuer Befehl: MEMCLR. Er dient dazu, beliebige Speicherbereiche in beliebig großem Umfang (bis 65536 Bytes) mit einem überall gleichen Wert zu beschreiben (Defaultwert: 0), den Bereich also definitiv zu löschen. Das ist sehr nützlich für alle Bearbeitungsvorgänge, bei denen es darauf ankommt, schnell eine gewünschte Ausgangssituation zu erzeugen. Beispiel Zurücksetzen des SID: MEMCLR SOUND, 29 oder Löschen eines Sprites: MEMCLR 13*64,64 oder des ganzen Bildschirms: MEMCLR DISPLAY, 1000, 32. Die allgemeine Syntax lautet: MEMCLR adr, umfang [,wert].
2.30818 Der Befehl COPY war lange Zeit unbrauchbar, er druckte die Ausgabezeilen auf dem Kopf. Das ist nun behoben, Ausdrucke werden zudem - anders als in Simons' Basic - auf dem Papier zentriert (wie bei HRDCPY auch).
2.30816 Tja, wenn man am Code was verändert, können sich immer auch neue Bugs einschleichen. Wie hier geschehen: Bei TEXT funktionierten zwei Sachen nicht mehr korrekt: eine Textgrößenangabe von 0 (die bisher automatisch auf 1 gesetzt wurde) ist unzulässig, wurde aber nicht mehr abgefangen. Und der Steuercode für RVS (on/off) sollte nichts weiter tun als steuern und nicht auch noch angezeigt werden. Beide Fehler behoben.
2.30815 Bei der Arbeit an "Sternenhimmel TSB" fiel auf, dass der Befehl TEXT immer noch den alten Simons'-Basic-Bug mit sich führte (mit dem mehrere andere Befehle schon zu kämpfen hatten), der bei der Angabe von Leerstrings bis zu 255 scheinbar sinnlose Zeichen auswarf. Behoben.
Was mir ebenfalls negativ an TEXT auffiel, war, dass die drei letzten Parameter (Textmodus, Zeichengröße und Zeichenabstand) praktisch zu 99 Prozent immer identisch ausfallen. Was für eine Verschwendung von Zeit und Platz! Diese drei Parameter sind nun optional, man kann sie von rechts nach links auch weglassen (einen, zwei oder alle drei), sodass die Schreibweise TEXT x,y,"beispieltext" völlig ausreicht, die Parameter werden dabei auf die Standardwerte 1, 1 und 8 initialisiert.
Diese Änderung ist auch beim Befehl CHAR eingebaut worden. Bei ihm kann man die letzten zwei Parameter weglassen (denn einen Zeichenabstand gibt es da ja nicht).
(14.08.2023) Die Anwendung "Sternenhimmel" (ursprünglich ein Simons'-Basic-Programm aus der 64'er) nun in einer TSB-Version mit ein paar Verbesserungen gegenüber dem Original.
2.30803 Neuer Befehl: D!POKE. Analog zur Funktion D!PEEK zum Auslesen von (16Bit-) Adressen nun also auch der entsprechende 16Bit-Schreibbefehl. D!POKE schreibt den als zweiten Parameter angegebenen 16Bit-Wert in die zwei aufeinanderfolgenden Speicherstellen, die vom ersten Parameter anvisiert werden: mit D!POKE 55,28672 setzt man zum Beispiel das Ende des freien RAM für Basic auf den neuen Wert $7000 (man könnte natürlich auch direkt die Hexwerte $37 und $7000 hinter D!POKE verwenden). Einige Tricks auf den Seiten hier werden nun noch darauf angepasst (z.B. Block-Copy).
(24.07.2023) Um aus seinem TSB-Programm, das zum Betrieb eben TSB benötigt, eine Version zu machen, die ohne weiteren Aufwand durch den Anwender TSB gleich mitinstalliert und alles zusammen startet, gibt es jetzt die TSB-Anwendung BLinker. Wenn man dazu noch Exomizer zum Komprimieren einsetzt, ist für einfachsten Einsatz auf jedem C64 gesorgt.
2.30525 TSB wurde etwas umorganisiert, denn mit dieser Version wird zum ersten Mal die Möglichkeitt eröffnet, TSB mit (ein bis drei) eigenen neuen Befehlen zu erweitern. Das erste Beispiel dazu ist der Befehl MAP, mit dem man blitzartig Spiele-Screens auf den Bildschirm bringen kann. Erweiterungsbefehle müssen nachgeladen werden, was wir unter Tipps&Tricks genauer beschreiben.
(12.05.2023) Das Hilfsprogramm BLister zum strukturierten Ausgeben eines TSB-Programms auf Bildschirm oder/und auf Papier kann jetzt auch mit der Verwendung von PROC als Label-Halter umgehen (bisher ging ich immer davon aus, dass eine komplette Prozedur damit eingeleitet werden sollte). Labels werden nach links um zwei Zeichen ausgerückt eingetragen, damit sie sofort ins Auge fallen. Außerdem ist der Bug beseitigt, der fälschlich einen Strukturfehler anzeigte, wenn der Befehl END innerhalb einer Prozedur verwendet wurde.
2.30426 Opimierung des Codes für CIRCLE und ARC bei ausführlicherer Kommentierung.
2.30410 Neu in dieser Version: USE kann jetzt auch als Systemvariable eingesetzt werden. Mit u=USE oder PRINT USE findet man schnell heraus, welches Laufwerk aktuell von TSB als Bezugslaufwerk eingesetzt ist.
(17.04.2023) Noch einmal: Anwendungsprogramm ReadMe Generator (diesmal v1.04). Ein paar Bugs wurden gefixt (teilweise bereits sehr lang bestehende) und die Suchfunktion (für Punkte) findet nun alle Punkte und nicht nur den ersten pro Textzeile.
(15.04.2023) Das Anwendungsprogramm ReadMe Generator (v1.03) kann seine Texte (und andere GoDot-ReadMe-Dateien) jetzt auch einlesen. Es befindet sich auf der vierten GoDot-Diskette.
2.30406 Umorganisieren der TSB-Variablen im $CB00-Bereich, was rund 200 Bytes freien Speicher gebrachht hat. Und: KEYGET meldet sofort, wenn es im Direktmodus arbeiten soll (was nicht geht).
2.30325 Neu in dieser Version ist, dass die Bewegungsgeschwindigkeit und die Sprite-Größe für jedes Sprite individuell eingestellt (in MOB SET) und geändert werden können (in MMOB und RLOCMOB). Bei der Arbeit an diesem Feature fiel auf, dass es in den Druckbefehlen COPY und HRDCPY Optimierungs- und Verbesserungsbedarf gibt. Vor allem HRDCPY hat davon profitiert: Der Ausdruck wird nunmehr zentriert und das Zeichen für PI wird jetzt sicher erkannt und richtig ausgegeben. Außerdem hat man mit einem einfachen POKE die Möglichkeit, Bildschirme, die mit den PETSCII-Grafikzeichen arbeiten, korrekt abzubilden, ohne dass zwischen untereinander liegenden Zeichen ein trennender Abstand entsteht. Durch den hierfür nötigen Umbau hat sich ein POKE-Trick in MEMPEEK geändert, siehe Tipps und Tricks - ROM-Zeichensatz auslesen.
2.30220 Schwerer Fehler in ENVELOPE: die beiden ersten Parameter (Attack und Decay) wurden bei der Abarbeitung einfach verworfen und traten dadurch nicht in Kraft! Behoben.
2.30219 Da die Tonhöhen aller Töne des Befehls MUSIC unter SB (und bis jetzt auch unter TSB) zu tief klangen, musste da endlich einmal korrigiert werden, der Bug ist behoben.
Außerdem hat der Befehl SOUND eine Erweiterung erfahren: Er besitzt nunmehr eine neue "Stimme" 4, mit der die Frequenz für die Filtereinstellung des SID gesetzt werden kann.
2.30215 Bugfix im Befehl MUSIC. Die Stimme 3 konnte bisher nicht mit Noten versorgt werden. Behoben.
2.30211 Am TSB-Code selbst ist nur ein Byte geändert worden (ein kleinerer Bug in der Initialisierung), aber die Cartridge-Version von TSB enthält ab jetzt automatisch den SMON. Man muss nur direkt nach dem Booten des Moduls den Befehl SYS $7000 (und natürlich <Return>) eingeben. Auch die F9-Taste ist hier noch unbelegt, mit KEY9,"SYS$7000:⇐" ist das aber schnell getan.
2.30131 Der geänderte PAUSE-Befehl (v2.30122) führte dazu, dass einige auf Simons' Basic beruhende Programme sich anders verhielten als gewollt. Mit dieser TSB-Version lässt sich das SB-Verhalten mit einem einmaligen Patch-POKE (POKE $a806,$24 beim Initialisieren eines solchen Programms) wiederherstellen. PAUSE reagiert dann nur noch auf <Return>.
(26.01.2023) Neu hinzugekommen: Die Einbindung des berühmten Maschinensprache-Monitors SMON (Datei "tsb.mon" auf der TSB-Disk). Einfach das Launchprogramm "smon" laden und RUN eingeben. Nun kann man also mal auf die Schnelle Maschinen-Code anschauen, eingeben oder in Basic-DATAs umwandeln, oder sich die Innereien von TSB vornehmen. Bedienung: siehe C64-Wiki. Diese SMON-Version ist speziell auf TSB abgestimmt.
2.30122 Feature-Update: Der Befehl PAUSE kann jetzt mit einer beliebigen Taste abgebrochen werden. Kleinere Optimierungen bei CLS.
2.30117 Bugfix im Befehl BLOCK. Wenn im Multicolor-Modus, hat BLOCK seine Arbeit verweigert. Behoben. Bugfix in CLS. Im Quote-Mode wurde der Bildschirm bei CLS oder DIV nicht gelöscht. Behoben. Bugfix in DIR. Wenn man die Ausgabe anhielt, wurden die dafür vorgenommenen Tastendrücke nach DIR auf dem Bildschirm ausgegeben. Behoben.
2.30113 Bugfix bei REC. Wenn man REC in TSB mit einem Wert von 0 für Höhe aufrief, verhielt es sich nicht so, wie unter Simons' Basic (es entsteht dort eine einfache Linie mit der Dicke 1 Pixel). Behoben. Zusätzlich werden jetzt im Revers-Modus alle vier Ecken gezeichnet, der Workaround mit PLOT bei v2.21230 ist damit obsolet. Und vor allem: Der "Überhang-Bug" (Rechtecke am rechten und/oder unteren Rand des Bildschirms, die über den Rand hinausragen würden, wurden unvollständig gezeichnet), ist ebenfalls behoben.
2.30101 Schwerer Fehler in WAVE plus Pulsbreite: die Werte für die Pulsbreite wurden in falsche SID-Register geschrieben und damit die Aktivierung eines Tons u.U. sogar verhindert. Behoben.
2.21230 Wenn man den Befehl REC (zum Zeichnen von Rechtecken) im Revers-Modus aufrief (Modus 2), verschwanden alle vier Ecken des Rechtecks. Das hat sich jetzt reduziert auf nur noch ein einziges Loch in der rechten unteren Ecke. Diese Stelle kann man ohne Umstände mit  PLOT x+b, y+h, 2  füllen (B für Breite, H für Höhe, Parameter 3 und 4 bei REC).
2.21228 Im Befehl DISPLAY gab es - wie schon an anderen Stellen (s. v2.20903, v2.20830 oder v2.20829) - einen üblen Stack-Fehler. Behoben.
2.21220 Nochmalige Komplettrevision von CHECK. Jetzt arbeitet es wirklich so, wie eigentlich zu erwarten: es liefert zurück, ob die zwei in der Funktion angegebenen Sprites kollidiert sind. (Funktioniert hardwarebedingt nicht eindeutig, wenn mehr als drei Sprites kollidieren. In dem Fall kommen nicht aussagekräftige Ergebnisse zustande und man muss auf anderem Wege differenzieren.)
2.21219 Das Gespann DETECT (Befehl) und CHECK (Funktion) zum Erkennen von Sprite-Kollisionen arbeitete fehlerhaft. Das ist jetzt behoben. Wichtig ist es, zu wissen, dass die eigentliche Kollisionsabfrage mit DETECT durchgeführt wird, die Funktion CHECK verwendet dann das Ergebnis von DETECT. Daher sollten beide immer kombiniert in Programmen auftauchen. Auch ein leeres DETECT beim Start einer Abfrageaktion ist sinnvoll, da dadurch das Kollisionsregister und der von TSB zwischengespeicherte Arbeitswert ($c514) initialisiert werden.
2.21212 Eine weitere Verbesserung bei MMOB and RLOCMOB: Die beiden Parameter für die Sprite-Größe und die Sprite-Geschwindigkeit sind nun optional. Wenn man sie bei MOB SET festgelegt hat, können sie bei allen folgenden Bewegungsbefehlen weggelassen werden. Wird eine der beiden Einstellungen irgendwo geändert, gilt diese solange für alle weiteren Bewegungsbefehle, bis sie erneut geändert wird.
2.21207 P. Hagemann hat entdeckt, dass der Befehl ERROR seit dem Einfügen des Drive-Checks (v2.10324) nicht mehr korrekt arbeitet (er prüft zunächst auf das Vorhandensein des Diskettenlaufwerks und liest erst dann den Fehlerkanal aus, damit sich der Befehl nicht aufhängt - bisher war dann aber der Fehlerkanal bereits wieder geschlossen, sodass die eigentliche Fehlermeldung schon verworfen war). Peter hat auch gleich für Abhilfe gesorgt. Fehler behoben!
2.21206 Peter Hagemann hat MMOB und RLOCMOB nochmalig verbessert: Die Default-Geschwindigkeit eines Sprites wird nun von MOB SET bestimmt. Was dort eingegeben wurde, gilt dann für alle Sprite-Move-Befehle.
2.21202 Manche Simons'-Basic-Eigenschaften waren mir von Anfang an ein Dorn im Auge, z.B. die inkonsequente Verteilung der Definitionsparameter beim Festlegen der Sprite-Eigenschaften (diese Verwunderung kann man dementsprechend auch im C64-Wiki nachlesen: MMOB, dritter Absatz). Ab jetzt ist diese Inkonsequenz vorbei. Der Befehl MOB SET definiert als neues Feature nun wirklich fast alle Sprite-Eigenschaften, auch die Größe eines Sprites und seine Reaktionsgeschwindigkeit, die bisher nur MMOB bzw. RLOCMOB mitgegeben werden konnten, was sowohl deren Eingabelänge als auch deren Abarbeitungsgeschwindigkeit negativ beeinflusste.
2.21125 Ein bereits von Anfang an bekannter Fehler in Simons' Basic ist Geschichte: Das gelegentliche Auftreten von falschen Zeichen am linken bzw. oberen Bildschirmrand bei den Befehlen DOWNW und RIGHTW existiert nicht mehr. Der Befehl INV zum Invertieren von Bildschirmbereichen arbeitet zusätzlich ab jetzt doppelt so schnell.
2.21116 Bugfix im Befehl FETCH. Es konnte passieren, dass sich FETCH nach einer leeren Eingabe einfach aufhängt. Behoben.
2.21108 Bugfix in den Befehlen FETCH und INSERT: bei beiden wurde nicht darauf geachtet, ob der angegebene String ein Leerstring ist. Liefert jetzt einen "Illegal Quantity Error", wenn was schiefgeht.
2.21026 Es gibt jetzt (als neues Feature) eine verkürzte Version des Befehls MMOB, mit der man ein Sprite ohne weitere Umschweife einfach nur positioniert: MMOB n, x, y.
2.21022 Mit diesem Update ist auch der Befehl USE positionierfähig, genau wie FETCH (v2.21009) und CENTRE (v2.21010): USE AT(x,y) "<format>", var.
2.21016 Bugfix beim Befehl ON KEY. Bisher wurde der Befehl, der auf den Aktivierungsbefehl folgt (der Was-tun-wenn-ON-KEY-zutrifft-Befehl), fälschlicherweise auch bei der Aktivierung ausgeführt (wenn der Interpreter das erste Mal dort vorbeikommt). Behoben.
Und noch eine zweite Änderung bei ON KEY: Er ist jetzt wieder kompatibel zu Simons' Basic! In diesem Punkt ist keine Anpassung von SB-Programmen für TSB mehr erforderlich!
2.21013 Neues Feature bei MOB SET. Lange Zeit war den Simons'-Basic-Programmierern gar nicht klar, dass dieser Befehl die Eigenschaften von Sprites nicht nur definiert, sondern das Sprite auch einschaltet. Wenn vorher keine anderen Koordinaten verwendet wurden, erscheinen die Sprites dann an Position 0,0 außerhalb des sichtbaren Bildschirms und müssen erst an die eigentlich gewünschte Position transportiert werden. Dafür muss man den Befehl MMOB bemühen, damit der Wechsel der Sprite-Position unsichtbar erfolgt. Das ist jetzt vorbei. Man kann MOB SET jetzt so anwenden, dass die Sprites nicht gleichzeitig auch eingeschaltet werden. Damit kann man (mit dem kürzeren RLOCMOB statt mit MMOB) Sprites jetzt vor ihrem Erscheinen unsichtbar an ihren Zielort verlagern:
MOB SET <n>, <block>, <farbe>, [ 128 + ] <prio>, <rendertype>
2.21010 Das neue Feature beim Befehl FETCH (v2.21009) lässt sich ohne Probleme auch beim Befehl CENTRE integrieren. Vorbei also das umständliche Positionieren mit PRINT AT... : CENTRE...! Jetzt geht das auch so: CENTRE AT(x,y) <string>[,width]. Das Feature ist hier noch nützlicher als bei FETCH!
2.21009 Ein Bugfix, der zusätzlich ein bisher unbekanntes neues Feature freilegt, ist doch ein Glückfall! So geschehen beim Befehl FETCH: Es gab eine (sehr selten eintretende) Kombination von Parametern, die ein TSB-Programm zum Absturz brachte, und zwar, wenn man die FETCH-Parameter einfach (unerlaubterweise) um den Passus AT(x,y) erweiterte. Durch den Bugfix nun hat sich dieser Passus als nützliches Feature herausgestellt. Man kann also jetzt FETCH aufrufen und - wenn man will - gleichzeitig festlegen, an welcher Stelle auf dem Bildschirm das geschehen soll! Also so:
FETCH AT(x,y) <ctrl-string>,len,var. Super!
2.21007 PAUSE wurde noch erweitert um die neue Fähigkeit, Texte genauso ausgeben zu können wie PRINT (mit allen seinen Eigenschaften). Beim Befehl OUT gab es einen Bug zu beklagen: gerade seine ursprüngliche Schreibweise (ohne Semikolon oder Zahlenparameter) erzeugte einen Syntax Error. Ergänzt und behoben.
2.21005 Bei den Befehlen OUT und PAUSE führt jetzt ein Anhängen eines Semikolons dazu, dass der Cursor hinter der Textausgabe des Befehls stehenbleibt und nicht zur nächsten Bildschirmzeile vorrückt.
2.21001 Beim Verwenden von verschachtelten DO..DONE-Konstruktionen (die nicht erlaubt sind) gibt es jetzt die Fehlermeldung "STACK OVERFLOW ERROR".
2.20919
MD-Cartridge
Die Magic-Desk-Cartridge von TSB ließ nicht zu, dass der Emulator VICE aus dem Editor C64Studio heraus mit dem in Arbeit befindlichen Basic-Programm versorgt wurde ("Device not present Error"). Behoben.
2.20919 Der USE-Befehl hatte doch noch einen Bug, der nur unter bestimmten Bedingungen auftrat und dann zu falschen Anzeigen führte. Behoben.
2.20918 Beim letzten Update gab es einen neuen Bug (im Befehl MOB SET), der hiermit behoben ist. Auch wichtig: Mit v2.20917 muss auch die Datei "tsb.mem" auf allen Disketten, die diese Version verwenden, erneuert werden.
2.20917 Es gibt einen neuen Befehl! Weil mir Hilfskonstruktion DIV (zum Löschen des Bildschirms) nicht wirklich gefiel, haben wir jetzt den für diesen Zweck üblichen Befehl CLS. Programme mit dem Keyword DIV funktionieren aber (natürlich) weiterhin. Hinter dieser Aktion steckt eine nochmalige Änderung an den Tokenizer-/Detokenizer-Routinen, die es ermöglicht, (noch mehr) neue Befehlsworte zu integrieren.
2.20915 Der Zahlenformatierungsbefehl USE (ausgeliehen bei Exbasic Level II) war seit Urzeiten fehlerhaft: Zahlen, bei denen eine Rundung mehr als zwei Ziffern betroffen hätte, wurden falsch gerundet und Zahlen, die mit einer am Ende befindlichen Neun versehen waren, gar nicht! Zahlen, bei denen eine Rundung einen Übertrag erzeugt (99.999 auf zwei Vor- und Nachkommastellen), erhalten jetzt den üblichen Fehlerhinweis (Formatstring statt Ziffern). Fehler alle behoben.
2.20908 Noch mal ein neues Feature bei WAVE: Die Pulsbreite für die Rechteckwellenform kann an den WAVE-Befehl angehängt werden, z.B. so: WAVE 1,$41,2048. Der Puls-Parameter ist optional.
Neuer Befehl: SOUND! Man kann jetzt unabhängig von den fest vorgegebenen Noten des MUSIC-Befehls variable Tonhöhen vom SID produzieren lassen: SOUND 1,3000 (mit Konstante), SOUND 1,fr (mit Variable).
2.20906 Diesmal ist ein neues Feature dazugekommen: Der WAVE-Befehl konnte bislang nur nur mit einem konstanten Parameter für die Auswahl der Schwingungsform bedient werden. Das ist ab jetzt anders, statt des "Switch-Panels" 00000000 zum Ein- und Ausschalten der Schwingungsformen und Steuerbits reicht jetzt eine einfache Variable: WAVE <n>,<var>.
2.20904 Dieses Update behebt einen uralten Simons'-Basic-Fehler im Befehl MUSIC. Sollte man dem Befehl im zweiten Parameter nicht eine String-Konstante, sondern einen (z.B. mit CHR$) zusammengesetzten String übergeben, dann stellt sich bei PLAY 2 (lässt die Musik im Interruptbetrieb laufen) der letzte Ton nicht mehr ab. War ganz schön nervig!
2.20903 Schon wieder ein Stack-Fehler, diesmal entdeckt im Befehl NRM (Anweisung). Behoben.
2.20902 Beim RENUMBERn ohne Programm im Speicher erschien bisher eine möglicherweise verwirrende Meldung. Behoben, jetzt erscheint nur noch der Basic-Prompt.
2.20830 Bugfixes im Befehl KEY. Einerseits gab es einen schweren Fehler bei der Stack-Bereinigung, der verhinderte, dass der Befehl in einer FOR-NEXT-Schleife eingesetzt werden konnte. Andererseits führte das Anhängen von Parametern an den Befehl KEY 0 (der synonym zu KEY OFF die F-Tastenbelegung ausschaltet) zu zerstörtem TSB-Code mit Absturz, wenn man danach den Befehl PAINT benutzte. KEY 0, "string" führt nun zu einem BAD MODE ERROR.
2.20829 Bugfixes in den SCR-Befehlen (ernsthafte Probleme mit dem Stack!), aber auch neue Features: Der Reparatur-POKE nach den DMA-Befehlen (MEMLOAD usw., siehe v2.20826) ist nicht mehr erforderlich!
2.20826 Durch die User im Forum64 erfährt man immer wieder Neues. Diesmal war es die Information, dass das FF00-Feature beim REU-DMA (das den DMA-Zugriff auf das RAM unter dem IO-Bereich ermöglicht) nicht ausschließlich dem C128 vorbehalten ist (was ich immer geglaubt hatte), sondern auch am C64 funktioniert. Nun ist es in TSB verfügbar. Man muss nicht mehr mühsam die Bytes aus dem IO-Bereich an andere RAM-Positionen verschieben, um sie in die REU übertragen zu können (oder aus der REU ins RAM unter dem IO). Wenn man mit dem Color-RAM arbeiten will, macht MEMRESTORE die Magie: ist Bit 7 im Parameter gesetzt, greift TSB aufs Color-RAM zu, sonst aufs freie RAM darunter. Einziger Wermutstropfen: Die Speicherstelle $FF00 liegt im TSB-Grafikbereich und muss eventuell repariert werden (direkt nach dem MEMLOAD der Bitmap ein x=mempeek($ff00) durchführen und nach dem letzten DMA ein poke $ff00,x).
2.20821 In dieser Version ist das letzte bekannte ELSE-Problem (das fehlerhafte Verhalten TSBs in IF-Verschachtelungen, bei denen ELSE im Spiel ist) hoffentlich endgültig Vergangenheit. Die ELSE-Anweisung, die zusammen mit IF auf einer Zeile steht, hat hiermit einen Stack erhalten, der (zunächst einmal) eine Tiefe von 20 Verschachtelungen zulässt. Das zu DO..DONE gehörige freie ELSE ist darin nicht involviert.
2.20818 Es gab noch ein Problem mit ELSE in Zusammenhang mit DO..DONE: War die letzte Anweisung vor dem alleinstehenden ELSE eine IF-Klausel ohne ELSE, dann wurde das alleinstehende ELSE als zur IF-Klausel gehörig behandelt und fälschlicherweise der Unwahr-Zweig von DO..DONE abgearbeitet. Behoben.
2.20816 Durch die Umstellung auf neue Tokenizer- und Detokenizer-Routinen in Version 806 führte beim TRACE-Befehl ein zurückgebliebener Code-Brocken zu "Hustenreizungen". Der jeweils letzte Buchstabe eines TSB-Befehlswortes blieb TRACE bei der Ausführung im Halse stecken und wurde in der TRACE-Zeile nicht ausgegeben. Behoben.
Die andere Neuerung ist mehr kosmetischer Natur. Die F-Tasten-Texte konnten theoretisch 16 Zeichen lang sein, waren aber programmiertechnisch auf 15 Zeichen begrenzt. Behoben.
2.20806 Diese Version stellt die Systemroutinen Tokenizer und Detokenizer um, so dass sie nun genauso funktionieren wie die ROM-Ausgaben davon für Basic V2, was vor allem platzsparend ist.
Gleichzeitig wurde das Zusammenspiel der Tasten Shift, CRTL und C= während des LISTens verbessert: Shift ist dafür zuständig, die LIST-Ausgabe anzuhalten (solange Shift gedrückt ist). Mit CTRL wird die Ausgabegeschwindigkeit auf die Einstellung von DELAY reduziert (ein Wert zwischen 30 und 40 bei DELAY ist bequem verfolgbar). Drückt man Shift und danach CTRL dazu, wird mit DELAY-Verzögerung weitergeLISTet, lässt man CTRL wieder los, stoppt die Anzeige. Drückt man zu Shift die C=-Taste, wird in Normalgeschwindigkeit geLISTet (bis man wieder loslässt). Sehr praktisch.
Hat man mit PAGE auf seitenweise Ausgabe geschaltet, hilft C= außerdem, das Anhalten der Ausgabe auch mal auszusetzen und trotz PAGE durchzuLISTen.
Außerdem enthält diese Version einen Bugfix in DO..DONE.
2.20805 Eine ganz wichtige Änderung: Der NMI war (über lange Zeit!) kompromittiert und konnte nach Drücken der RESTORE-Taste zu unvorhersehbaren Runtime-Zuständen führen! Durch unermüdliches und standhaftes Austesten (durch Forum64-User @Omega) ist dieser Riesenfehler von TSB ans Licht gekommen! Danke dafür! Und noch ein kleinerer Bug ist in dieser Version behoben: Wer nach MEM und PAGE ein Programm geLISTet hat, hat sich vielleicht gewundert, dass die Zeilennummer der allerersten Zeile links oben nicht angezeigt wurde. Genau, ist jetzt gefixt.
2.20803 Die Stringfunktionen INST, INSERT und PLACE liefern im Direktmodus falsche Ergebnisse. Deshalb ist dieser Modus nun für die drei Funktionen außer Kraft gesetzt (melden bei Verwendung einen "?illegal direct error")
2.20801 Mit dieser Version kann man innerhalb einer IF..THEN DO..ELSE..DONE-Konstruktion weitere IF..THEN..ELSE verwenden, was bisher nicht funktionierte. Außerdem lässt sich jetzt ein DO NULL an jeder beliebigen (sinnvollen) Stelle einfügen, auch innerhalb DO..DONE (aber nicht in einer IF-Zeile). Weiter gibt es einen Bugfix im Befehl DELAY (ließ sich nicht mit DELAY OFF abschalten). Weiter macht RENUMBER bei Überschreiten der höchstmöglichen Zeilennummer wieder das, was es soll (Fehlermeldung, ohne Änderungen vorzunehmen) und SCRLD zerstört nicht mehr ein bereits vorhandenes Bild, wenn die angegebene Datei nicht vorhanden ist.
2.20714 Bugfix in der Funktion INST. Man konnte keine Zeichen mit CHR$(x) in einen String hineinschreiben. Außerdem ist bei allen Sprite-Befehlen eine Überprüfung der angegebenen Sprite-Nummer eingebaut worden. Sprite-Nummern über 7 erzeugen jetzt einen "Bad Mode Error".
2.20711 Beim Befehl MOB war bisher ausschließlich der Parameter OFF (plus Spritenummer) möglich (war Teil des Befehlswortes). Das ist nun geändert, mit MOB ON <nr> kann man (vorher mit MOB SET definierte) Sprites ohne weitere Umstände ebenfalls einschalten (das ging bisher ausschließlich über den Befehl MOB SET).
2.20702 Neue Funktion MEMPEEK. Mit ihr kann man das komplette RAM des C64 auslesen, auch unterhalb des I/O-Bereichs $D000.
2.20627 Bugfix im Kommando VERIFY
2.20605 Neue Funktion D!PEEK zugefügt
2.20528 DESIGN für Multicolor-Zeichen oder -Sprites kann jetzt auch mit Doppelpixeln definiert werden
2.20523 Bugfix in KEYGET
2.20521 Neuen Befehl KEYGET zugefügt (P. Hagemann)
2.20515 Neue Befehle SCRSV/LD DEF und SCRSV/LD RESTORE zugefügt (P. Hagemann)
2.20416 FETCH zeigt jetzt auch im RVS-Modus korrekt an
2.20405 Befehl CENTRE um optionalen Parameter Breite erweitert
2.20324 Bei Befehl LOW COL kann Parameter 3 (ändert Farbram) optional unwirksam gemacht werden
2.20313 Bugfix im Warmstart nach ON ERROR bei END
2.20220 SCRLD und SCRSV um Sekundäradresse 5 erweitert (P. Hagemann)
2.20121 RETRACE zeigt jetzt die aktuelle Versionsnummer an
2.20116 Bugfix bei OLD, FETCH jetzt begrenzt auf die systembedingte maximale Eingabelänge von 88 Zeichen
2.11229 Bugfix in Befehl INST
2.11218 Bugfix bei OUT (Wert 0 wird abgewiesen), Bugfix bei INSERT, die Funktionstaste 1 hat jetzt die Belegung "page23"
2.11207 Code-Optimierung, BFLASH verbessert (startet unmittelbar, Rahmenfarbe wird rekonstruiert)
2.11203 Bei RENUMBER wird eine Stepangabe von 0 jetzt mit Fehlermeldung abgewiesen
2.11129 DIR hält die Ausgabe jetzt auf beliebigen Tastendruck an
2.11122 Bugfix in Befehl LOCAL, HRDCPY optimiert
2.11107 Bei PRINT AT wird jetzt auf Überschreiten der höchstzulässigen Werte (39/24) getestet
2.11005 Neuen Befehl DIV (für Clear Screen) zugefügt
2.10825 Alle auf OPEN beruhenden Befehle auf die Einstellung bei USE ausgerichtet
2.10816 Bugfix in RENUMBER
2.10718 LIST optimiert
2.10606 Befehl LOAD erweitert um die optionale Angabe einer Zieladresse (Sekundäradresse 0)
2.10529 Bugfix in DRAW TO
2.10522 Bugfix in EXEC, Optimierungen bei HIRES, PLOT und MULTI
2.10506 Neuer Befehl DRAW TO zugefügt
2.10504 Bugfix in Funktion CHECK
2.10503 DUMP und PLACE optimiert
2.10420 Bugfix in Funktion $ (Hexzahl)
2.10414 PAUSE optimiert, BCKGNDS kann jetzt die Farben für den Multi-Textmodus setzen
2.10412 AUTO und RENUMBER jetzt mit (optionalen) Default-Werten 100,10
2.10407 Befehl DESIGN optimiert
2.10404 Kommando COLD, DO, CSET, MEM und NRM optimiert (CSET kann jetzt auch nach MEM verwendet werden)
2.10324 Bei Zugriffen auf Diskettenlaufwerke wird jetzt auf deren Präsenz überprüft (kein Aufhängen mehr)
2.10319 Bugfix in EXEC
2.10313 Kommando COLD, der Reset-Vorgang und die Behandlung von Stop/Restore überarbeitet
2.10125 TSB-Tabellen umgeordnet und überarbeitet, Interpreter, EXEC, CALL, EXIT und PROC optimiert, neuen Befehl CHECK zugefügt
2.10113 Befehle BFLASH, FLASH, OPTION, PAGE, PLAY, TRACE, KEY, DELAY, SECURE und VOL um (optionalen) Parameter ON/OFF erweitert, GLOBAL und LOCAL optimiert
2.10104 DIR geht jetzt auch ohne weitere Parameter
2.00308 Der Befehl INSERT kann jetzt auch invertierte Zeichen darstellen
2.00211 Die Funktion INSERT kann jetzt auch Text an einen String anhängen
2.00112 Verwendung von COLOUR mit nur einem Parameter setzt jetzt die Hintergrundfarbe
2.00111 Die Funktion $ (Hexzahl) erkennt jetzt auch zweistellige Ziffern.
2.0 Beginn der Versionskontrolle via Github im Januar 2020
1.91223 Die neuen Befehle MEMLOAD, MEMSAVE, MEMDEF, MEMCONT, MEMLEN, MEMOR, MEMPOS, MEMREAD und MEMRESTORE zugefügt, Wiederbeginn der TSB-Entwicklung
1.0 Erste Patches zu Simons' Basic im November 1984, erste Patch-Veröffentlichungen als Tipps im 64'er Magazin, vorläufige Fertigstellung 1986


TSB unterliegt der MIT-Lizenz.