Grundlage des Tips entstand hier.
Aufgrund der Erklärung von Mac Bacon und nach "Studieren" der Systemroutine und des Kopierverfahrens aus anderen Snippets hier einmal die allgemeine Anleitung. Das Verfahren funktioniert für das Kopieren von ROM ins RAM, Bildschirme oder alle anderen Speicherbereiche.
ABER ACHTUNG: die Systemroutine kopiert von hinten nach vorne und benutzt keinen Puffer. Es ist bei überlappenden Bereichen streng darauf zu achten, dass die Speicherbereiche sich nicht in der Weise überlappen, daß der ZIELbereich kleiner als der Quellbereich ist, dann schreiben die ersten Kopieraktionen mitten in den Quellbereich. Wenn der Zielbereich größer als der Quellbereich ist, geht es.
Und so geht es: ihr benötigt die Anzahl der zu kopierenden Bytes PLUS 256! Der Einsprung in die Systemroutine erniedrigt zunächst den Blockzähler (Indexregister X) um 1.
Also, um die 1000 Bytes des Textschirms zu sichern, im Beispiel nach 49152, berechnet ihr 1000 + 256 = 1256! Das Highbyte wird in das X-Register, das Lowbyte in das Y-Register geschrieben:
10 POKE 781, 4 : POKE 782, 232 : REM 781 UND 782 SIND X UND Y REGISTER
Dann braucht ihr die ENDadressen vom Quell- und vom Zielbereich + 1. Der Textschirm geht bekanntlich von 1024 bis 2023. 2024 (2023 + 1) sind LOWbyte = 232 und HIbyte = 7:
20 POKE 90, 232 : POKE 91, 7
Sichern wollen wir den Textschirm nach 49152. Plus 1000 Bytes ist 50151. Plus 1 = 50152 mit LOWbyte = 232 und HIbyte = 195:
30 POKE 88, 232 : POKE 89, 195
Jetzt nur noch in die Systemroutine BLTUC gegen Ende einspringen. Ein in vielen Büchern veröffentlichter Tip verwendet die Zeropageadresse 95/96, die aber vom Basicinterpreter beim Einlesen von Zahlenwerten überschrieben wird. Daher diese Alternative:
40 SYS 41971
Selbst große Datenmengen werden so in Basic in Sekundenbruchteilen umkopiert, viel Spaß!