Manchmal findet man auf seinen Disketten alte Schätzchen, die man sich gerne noch einmal anschauen würde. Dann wäre es wünschenswert (um umfangreiche Editiervorgänge zu vermeiden), dass TSB auf ältere Zustände zurückgestellt wird. Ein solcher Fall ist die Anpassung der AT-Funktion zum Positionieren von Text ab v2.40.131, bei der die Argumente der Funktion AT umgedreht wurden.
TSB-Befehl | Fehlersymptom | Abhilfe |
PRINT AT() | Die Positionierung der Screen-Ausgaben sieht chaotisch aus oder führt zu Fehlermeldungen und Abstürzen. | Man hat also ein altes TSB-Programm oder gar ein Simons'-Basic-Programm und die Bildschirmausgabe sieht falsch aus oder führt zu Fehlern. Zeit, old-at einzusetzen: MERGE "old-at",use,0. Routine für ein aktuelles TSB ab v2.40.428 (auch auf der TSB-Disk): 8 .old-at: if ax=25 then sys mp 8885 proc .old-at 8886 ax=0:what:ifax=1thenprint"TSB zu alt!":keygetmp$:end proc 8887 ifax=25thendo 8888 mp$=dup(".",21):mp=0*len(mp$)+d!peek(71):mp=d!peek(mp+1) 8889 reset8892 :fori=0to20:readx$:pokemp+i,nrm(x$):next:restore 8890 done 8891 end proc 8892 data ad,86,94,ae,7d,94,8d,7d,94,8e,86,94,ad,8b,94,49,02,8d,8b,94,60 8893 rem"---------------------- 8894 proc what 8895 mp$=dup(".",5):mp=0*len(mp$)+d!peek(71):mp=d!peek(mp+1) 8896 fori=0to4:pokemp+i,peek($8b18+i):next 8897 ifval(mp$)<40428thenax=1:end proc 8898 ax=peek($947d) 8899 end procDer aktuelle Zustand von AT lässt sich mit peek($947d) ermitteln. Ist der Wert dort 25, muss für ein altes TSB-Programm sys mp ausgeführt werden, ist er dagegen 40 (oder sonstwie), ist das nicht erforderlich. Die Zeile 8 in "old-at" macht das automatisch. Am Ende des Programms stellt man mit einem weiteren sys mp alles wieder auf den Sollzustand zurück. Die Routine what ermittelt die Revisionsnummer des laufenden TSB-Systems und meldet mit dem Wert 1 in AX, ob das System zu alt ist für den Eingriff (der damit auch gar nicht erforderlich wäre). ----- Verwendet man ein TSB älter als v2.40.428, aber nicht älter als v2.40.131 (der Version, mit der die AT-Funktion verändert wurde), muss die DATA-Zeile so lauten:8892 data ad,79,94,ae,70,94,8d,70,94,8e,79,94,ad,7e,94,49,02,8d,7e,94,60Die Überprüfungsadresse ist in diesem Fall: $9470. |
FIND" | Literale Strings werden nicht mehr gefunden. | In zwei Zeilen (zeigt die Positionen aller Stringkonstanten im aktuellen Programm, $f2 macht den Patch rückgängig):poke $c8e9,0: FIND" poke $c8e9,$f2 |