Die Hauptsache ist, die CRTC-Register R12 und R13 auf den Beginn des Bildschirms zu setzen. Das kannst du von BASIC aus so machen:
OUT &BC00,12:OUT &BD00,&30:OUT &BC00,13:OUT &BD00,10
Das Wichtigste dabei ist: Wenn du viele dieser Befehle eingibst, scrollt BASIC den Bildschirm, sodass es schwer zu erkennen sein kann, was gerade passiert. Packe diese Zeile daher am besten in ein BASIC-Programm und ändere den letzten Wert dort (die „10“) – dann siehst du schon etwas besser, wie das Ganze funktioniert.
Durch das Ändern von R12 und R13 änderst du, ab welcher Stelle der Bildschirminhalt angezeigt wird. Basierend auf der Bildschirmbreite bricht die Anzeige dann in die nächste Zeile um und so weiter. Sobald das Ende des Bildschirms erreicht ist, bricht es wieder nach vorne um. Wenn du also die Werte für R13 und R12 erhöhst (aber denk daran, hier +&30 hinzuzurechnen, damit es im Bereich &c000-&ffff bleibt), siehst du, wie die Werte zusammenspielen: Addieren, Subtrahieren, um wie viel ganze Zeilen verschoben werden etc.
Der Plus bietet dann zusätzlich zwei weitere Register. Damit kannst du den Bildschirm pixelweise horizontal und vertikal verschieben. Im Grunde änderst du den Verschiebewert von 0 bis 15. Dann setzt du ihn wieder auf 0 zurück und aktualisierst R12 und R13. Das erzeugt ein weiches Pixel-Scrolling. Dasselbe Muster lässt sich vertikal mit dem Wert für das vertikale Soft-Scrolling anwenden.
Sobald du das draufhast, scrollt dein Bildschirm. Der nächste Schritt ist das Aktualisieren der Grafik.
Beim horizontalen Scrollen aktualisierst du eine Spalte der Grafik auf einer Seite des Bildschirms – welche Seite, ist aufgrund des Screen-Wrappings nicht wirklich wichtig – und fügst hier die neuen Grafikdaten ein. Wenn du scrollst und dabei kontinuierlich neue Grafik einblendest, kannst du eine komplette Map scrollen.
Wenn du vertikal scrollen willst, aktualisierst du entsprechend eine einzelne Zeile, entweder ganz oben oder ganz unten (auch hier ist es nicht so wichtig, wo), und blendest neue Grafikdaten ein, um die Map zu scrollen.
Wenn du das alles erst einmal hast, kannst du auf dem Plus Hardware-Sprites völlig frei an jeder beliebigen Stelle darüber positionieren – ganz ohne Probleme.
Wenn du für den normalen CPC programmierst, berechnest du anhand der Bildschirmbasisadresse und den X/Y-Koordinaten deines Sprites, wo es gezeichnet werden soll. Du zeichnest es genau wie auf einem statischen Bildschirm (auch wenn es eine Stelle gibt, an der INC HL nicht wie erwartet zum nächsten Bildschirm-Byte weiterspringt; du kannst dir das Disassembly der Firmware-Routine SCR_NEXT_BYTE ansehen, um eine Lösungsmöglichkeit zu sehen; eine andere wäre, das Sprite in Spalten zu zeichnen und das Problem so zu umgehen – es gibt da verschiedene Methoden).
Nachdem du das Sprite gezeichnet hast, musst du es wieder löschen. Auch hierfür gibt es verschiedene Wege: Du könntest die Kacheln dahinter neu zeichnen, beim Zeichnen den Bildschirmbereich kopieren und wiederherstellen, ihn aus einer anderen, sauberen Version des Bildschirms kopieren … das variiert.
Das weichere Scrollen auf dem CPC (ohne Plus) lässt sich auf unterschiedliche Weise umsetzen. Erwarte aber nicht, dass du horizontal so ohne Weiteres an die Geschmeidigkeit des Plus herankommst; vertikal ist es über verschiedene Wege machbar.
Gibt es bestimmte Punkte, bei denen du Hilfe brauchst? Sag einfach Bescheid, dann finden wir hoffentlich einen Weg, damit alles verständlich wird.