Ah, da gibt es schon eine Zeile 10. Die wird (wenn man `10?""` eingibt) gelöscht und dann die neue hingeschrieben. Das kann man (mit etwas Glück) sogar kurz sehen: Der Zeichensatz verändert sich zweimal. Wenn man eine andere Zeile nimmt, beispielsweise `20?""` und dann als nächstes `20` zum wieder löschen eingibt, hat man genau den Effekt, dass der Zeichensatz wieder zurückkommt. Witzig! ![]()
Beiträge von berni im Thema „Charset nicht stabil (oder ist es die Screen-Memory?)“
-
-
Ich dachte erst, dass du damit meinst, dass die Zeichensatz-Daten damit geladen werden und dachte: "Aber Skar1984 macht das ja gar nicht mit LOAD". Nach einigem Nachdenken habe ich es dann so verstanden, dass das gesamte Programm von Skar1984 bei dir "ZEICHENSATZ" heißt und natürlich reingeladen wird. Dann macht alles Sinn.
Naja, ganz klar wird aus dem ersten Posting nicht, was Skar1984 genau macht. Aber aus den Symptomen, die er beschreibt, ist es naheliegend, das zuvor der Zeichensatz durch einen LOAD-Befehl geladen wurde. Ob das nur der Zeichensatz war, oder ein BASIC-Programm mit angehängtem Zeichensatz, spielt dabei keine Rolle. Wichtig ist nur, dass das BASIC-ROM danach denkt, dass der Zeichensatz Teil des BASIC-Programms ist und ihn deswegen (mit) verschiebt, wenn sich das Programm verändert.
-
Nach dem Laden des Zeichensatzes mit `LOAD"ZEICHENSATZ",8,1` zeigt das BASIC-Ende auf das Ende des Zeichensatzes, also auf $4000 (man könnte das auch als BUG im C64-BASIC bezeichnen). Der Anfang ist weiterhin bei $0801. Wenn du jetzt `10?""` eingibst, wird alles in diesem Bereich um 8 Bytes verschoben, damit die neue Zeile Platz hat, auch der Zeichensatz: Aus B wird A, aus C wird B und so weiter. Gibst du dann `10` ein, um die Zeile wieder zu löschen, ist wieder alles richtig.
Das `NEW` setzt das BASIC-Ende zurück auf $0803 und der Zeichensatz ist erst mal nicht mehr betroffen. (Aber er kann überschrieben werden, wenn du viele Zeile eingibst, und beim Laufen lassen des Programms auch durch Variablen.) Um das zu verhinden, kannst du das BASIC-Ende mit POKE56,56 vor den Zeichensatz setzen. Allerdings hast du dann weniger Platz für das BASIC-Programm über (12287 BASIC BYTES FREE).