Diskussion:TEXT

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Man kann den Fehler, dass die letzten drei Parameter nicht als Variablen eingegeben werden können, patchen, sofern man die Simons' Basic - Diskettenversion benutzt. Dazu gibt man in seinem Programm vor der ersten Verwendung von TEXT (am besten am Programmanfang) die folgenden Poke's ein:

POKE $B245,36:POKE $B304,36:POKE $B357,36 

--Petrus 22:14, 15. Apr. 2008 (CEST)

Wenn ich das richtig verfolgt habe, gibt es nicht nur eine einzige Diskettenversion von Simons' Basic, sondern noch eine andere, bei der es geringfügige Unterschiede gibt. Allerdings bin ich gerade nicht wirklich sicher, ob das stimmt. Kann einer meine Informationen bestätigen? Ergänzung: Ich hab jetzt nicht nachgeschaut, aber es sind wirklich nur die letzten zwei Parameter, die aus Konstanten bestehen müssen!

--GoDot 23:12, 15. Apr. 2008 (CEST)

"... es sind wirklich nur die letzten zwei Parameter ..."
Es gibt zwei Gründe, die dagegen sprechen:
1. Gibt man das Demo von TEXT ein und dabei (nur) den drittletzten Parameter <f> als Variable mit einem Wert, der in einer Extrazeile vorgegeben ist, so wird der Text nur gekürzt ausgegeben. Bei konstantem Parameter ist es aber o.k.
2. Der Fehler mit den Variablen wird verursacht durch das Zwischenspeichern der Stringlänge des Parameters <string> im Zeropage-Speicher $23. Beim Holen der nächsten Parameter-Werte von TEXT wird diese Speicherstelle aber auch benutzt, falls eine Variable vorliegt. Deshalb müssen logischerweise alle Werte nach dem <string> von dem Fehler betroffen sein.
--Petrus 23:58, 15. Apr. 2008 (CEST)
"...gibt es nicht nur eine einzige Diskettenversion von Simons' Basic ..."
Das ist interessant. Ich dachte bisher, die Version wie die im Buch von Schneider/Eberl behandelte wäre die einzige (offizielle). Der obige Patch funktoniert nur bei einer Version, die (jedenfalls in dem Bereich, in den gepokt wird) der in "Das Commodore 64 Buch - Ein Leitfaden durch Simons' Basic" gelisteten entspricht.
Den Tipp mit dem Patch habe ich mit Bedacht nur auf die Diskussions-Seite gestellt, da im TEXT-Artikel mit dem Hinweis auf TSB bereits eine (viel bessere) Lösung des Problems mit den Variablen in den Parametern angegeben wurde. Allerdings ist dies - soweit ich weiß - der einzige schwerwiegende Fehler im Simons' Basic, der sich mit nur 3 Poke's ev. reparieren lässt. Deshalb ist er IMHO hier eine Erwähnung wert.
Übrigens: Bei der Modulversion kann man natürlich nicht ins ROM poken. Der Tipp funktioniert hier aber auch sowieso nicht, weil die Verteilung der Routinen im Speicher der Modulversion anders ist als in der Diskettenversion.
--Petrus 08:25, 16. Apr. 2008 (CEST)

Ich hab's mir jetzt nun doch noch mal genauer reingezogen, und du hast recht! Der eigentliche Fehler ist der, den du da wegPOKEst. Der POKE bewirkt, dass der Wert für die Stringlänge an einem sicheren Platz festgehalten wird, die Originalspeicherstelle war in Simons' Basic nämlich $23. Und just diese Speicherstelle wird verwendet, wenn einer der nächsten Parameter nach dem String als Variable eingetragen wurde! Speicherstelle $23 wird nämlich von FRMEVL (was für das Einlesen von Werten aus dem BASIC-Text verantwortlich ist) verwendet (löscht daher den von SB eingetragenen Wert für die Stringlänge), falls FRMEVL auf eine Variable trifft (in einem der letzten drei Parameter des Befehls). Sieht FRMEVL Konstanten, bleibt der Inhalt von $23 unangetastet. Somit liegt der Fehler gar nicht bei diesen drei Parametern, sondern er wirkt sich nur auf sie aus. Aber eben auf alle drei! Prima! Das haben wir geklärt! grins

--GoDot 17:47, 16. Apr. 2008 (CEST)