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.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