La cosa principale è impostare i registri CRTC R12 e R13 all’inizio dello schermo. Puoi farlo da BASIC in questo modo:
OUT &BC00,12:OUT &BD00,&30:OUT &BC00,13:OUT &BD00,10
La cosa fondamentale da ricordare qui è che se inserisci molti di questi comandi, il BASIC farà scorrere lo schermo, quindi potrebbe essere difficile capire cosa sta succedendo. Perciò inserisci quella riga in un programma BASIC e modifica l’ultimo valore, quel «10», per vedere un po’ meglio come funziona.
Modificando R12 e R13 cambi il punto a partire dal quale viene mostrata la visualizzazione a schermo. Poi, in base alla larghezza dello schermo, va a capo alla riga successiva e così via. Quando arriva alla fine dello schermo torna di nuovo all’inizio, quindi se aumenti il valore di R13 e R12 (ma ricordati di aggiungere +&30 qui per mantenerlo nell’intervallo &c000-&ffff) puoi vedere come funzionano i numeri. Aggiungere, sottrarre, di quanto spostare intere righe, ecc.
Ciò che fa il Plus, poi, è fornire altri due registri. In questo modo puoi traslare lo schermo in pixel sia orizzontalmente che verticalmente. In sostanza modifichi il valore di shift da 0 fino a 15. Poi lo reimposti a 0 e aggiorni R12 e R13. Facendo così ottieni uno scorrimento fluido (soft pixel scroll). Lo stesso pattern può essere usato verticalmente con il valore di soft scroll verticale.
Una volta ottenuto questo, hai lo scorrimento dello schermo. Il passo successivo è aggiornare la grafica.
Quando scorri orizzontalmente, aggiorni una colonna di grafica su un lato dello schermo — il quale non ha molta importanza per via del modo in cui lo schermo fa il wrap — e introduci qui la nuova grafica. Se scorri e introduci nuova grafica, puoi scorrere un’intera mappa.
Se vuoi scorrere di nuovo verticalmente, aggiorni una singola riga in alto o in basso — anche qui non importa molto quale — e introduci nuova grafica per far scorrere la mappa.
Quindi, una volta fatto tutto questo, sul Plus puoi posizionare liberamente gli sprite hardware dove preferisci sopra di esso senza problemi.
Se stai scrivendo per CPC, allora calcoli dove disegnare lo sprite in base alla base dello schermo e alle coordinate x,y del tuo sprite. Lo disegni come faresti per uno schermo statico (anche se c’è un punto in cui INC HL non avanza al byte dello schermo successivo come previsto; puoi ispezionare il disassemblato della routine firmware SCR_NEXT_BYTE per vedere un metodo, un altro è disegnare lo sprite a colonne ed evitarlo, i metodi ci sono).
Dopo aver disegnato lo sprite dovrai cancellarlo; anche qui esistono vari metodi: potresti ridisegnare le tile sottostanti, copiare lo schermo durante il disegno e ripristinarlo, copiarlo da un’altra versione pulita dello schermo… varia.
Lo scroll più morbido sul CPC (senza usare il Plus) può essere fatto in vari modi; non aspettarti di eguagliare facilmente la fluidità del Plus orizzontalmente, mentre verticalmente si può fare in diversi modi.
C’è qualche aspetto specifico su cui hai bisogno di aiuto? Fammi sapere e spero che riusciremo a trovare un modo per chiarire ogni cosa.