Manchmal ist es nötig, sehr schnell sehr viele Bytes an andere Stellen im Speicher umzulagern. Zwar kann man mit einer FOR..NEXT-Schleife sehr viele Bytes bewegen, aber eine hohe Geschwindigkeit darf man davon nicht erwarten. Zum Glück bringt der C64 selbst solch eine Routine mit, die er vor allem beim Editieren eines Programms verwendet: die Blockverschiebroutine (BLTUC).
Die Daten, die die Blockverschieberoutine für ihre Arbeit benötigt, sind ein wenig undurchschaubar, darum haben wir uns gedacht, dass ein fertiges "PROC kopieren" dem einen oder anderen ganz gelegen kommen könnte.
Die Prozedur braucht drei Eingangswerte: in Q die Anfangsadresse der Daten, die verschoben werden sollen, in Z die Zieladresse dieser Daten und in L die Anzahl Bytes, die übertragen werden sollen, ein Wert zwischen 1 und 65535 (alles definiert in Zeile 120 im folgenden Code). Da wir aus Vereinfachungsgründen nicht den vorgesehenen Systemeinsprung für die Routine verwenden, muss man wissen, dass diese Implementation die Daten von hinten nach vorne kopiert (wichtig bei sich überlappenden Daten).
100 cls 110 : 120 l= 920: q=$c700: z=$0400: kopieren 130 : 140 print at(0,22)""; 999 end 1000 proc kopieren 1010 ql=mod(q,256): qh=div(q,256) 1020 zl=mod(z,256): zh=div(z,256) 1025 ll=mod(l,256): lh=div(l,256) 1030 if lh then qh=qh+lh: zh=zh+lh 1040 poke$5a,ql:poke$5b,qh:poke$58,zl:poke$59,zh:poke782,ll:poke781,lh+1 1045 sys $a3ec 1050 end proc
In diesem Fall zeigt das Programm einen Bereich von 920 Bytes aus TSB auf dem Bildschirm an, in dem ganz links unten (viertletzte Bildschirmzeile) die Versionsnummer von TSB zu erkennen ist. Der Rest ist visualisierter Code.