Wie schon erwähnt wenden die meisten Spiele einen modifizierten Zeichensatz für die Darstellung an, also ist das ganze eine Tilemap (englisch: Tile -> Kachel, also eine Karte aus kleinen Kacheln)
Das Spiel selbst lädt also den modifizierten Zeichensatz und setzt die Register des VIC passend damit dieser Zeichensatz statt des originalen aus dem ROM verwendet wird.
Dann lädt das Spiel noch eine Karte ein, die im Prinzip aus nichts mehr als den Zeichencodes der verwendeten Zeichen besteht. Bei einem feststehenden Bild was so groß ist wie der Bildschirminhalt wären das 1000 Bytes - 40*25 Zeichen. Die können dann auch direkt in das ScreenRAM geladen werden. Wenn es sich um seinen Scroller handelt wird die Karte an anderer Stelle vorgeladen und stückweise ins ScreenRAM kopiert.
Wenn Du zB einen Level hast der zwei Bildschirme breit ist werden also 2000 Byte eingeladen. (80*25 Zeichen).
Die Position die in das Screenram kopiert wird ist dann per simpler Mathe herauszufinden:
Speicheradresse des Zeichens = Startadresse im Speicher+(start_des_auschnittes_x+x-Position+((start_des_ausschnittes_y+y-position)*Kartenbreite))
Dein Spiel verschiebt also (in obigem Beispiel) nur die Startposition des Ausschnittes von 0-40 und setzt diese in die Formel ein, der Start des y-Ausschnittes ist immer bei 0, da ja nicht hoch und runter gescrollt wird.
Die Formel oben wird dann für alle Positionen des Bildschirmes in einer verschachtelten Schleife aufgerufen, also x-position von 0-39 und y-position von 0-24, damit alle Zeichen des aktuellen Ausschnittes kopiert werden.
Einkopiert wird das ermittelte zeichen ebenso:
Position am Screen = start des Screens (bei frisch eingeschaltetem C64:1024) + x-position+(y-position*40) ;vierzig, weil der Screen des C64 ja 40 Zeichen breit ist.
Nun hast Du dann ein erstes Scrolling, welches aber sehr rucken wird, da immer um komplette Zeichen verschoben wird. Um feieneres Scrolling zu ermöglichen musst Du dich dann noch mit den Scroll-Registern des VIC beschäftigen, da hiermit pixelweise verschoben werden kann und erst alle 8 verschiebungen ein kopieren der Zeichen erfolgen muss.