L’essentiel est de régler les registres R12 et R13 du CRTC sur le début de l’écran. Tu peux le faire depuis le BASIC comme ceci :
OUT &BC00,12:OUT &BD00,&30:OUT &BC00,13:OUT &BD00,10
Le point clé à retenir ici, c’est que si tu entres un grand nombre de ces commandes, le BASIC va faire défiler l’écran (scroll), et il sera donc difficile de voir ce qui se passe. Mets plutôt cette ligne dans un programme BASIC et modifie la dernière valeur, ici « 10 », pour mieux comprendre le fonctionnement.
En modifiant R12 et R13, tu changes l’adresse de départ à partir de laquelle l’écran s’affiche. Ensuite, selon la largeur de l’écran, l’affichage passe à la ligne suivante, et ainsi de suite. Arrivé à la fin de la mémoire vidéo, il reboucle au début ; ainsi, si tu augmentes les valeurs de R13 et R12 (en pensant bien à ajouter +&30 ici pour rester dans la plage &c000-&ffff), tu pourras observer le comportement des nombres : additions, soustractions, de combien décaler des lignes entières, etc.
Ce que le Plus apporte ensuite, ce sont deux registres supplémentaires. Cela te permet de décaler l’écran au pixel près, horizontalement et verticalement. En gros, tu fais varier la valeur de décalage de 0 à 15, puis tu la remets à 0 tout en mettant à jour R12 et R13. Procéder ainsi produit un scrolling fluide au pixel (soft pixel scroll). Le même principe s’applique verticalement avec la valeur de scroll doux vertical.
Une fois cela maîtrisé, tu fais défiler l’écran. L’étape suivante consiste à mettre à jour les graphismes.
Pour un scrolling horizontal, tu mets à jour une colonne de graphismes d’un côté de l’écran — le côté importe peu en raison de la façon dont l’écran reboucle — et c’est là que tu injectes les nouveaux graphismes. En faisant défiler tout en injectant de nouveaux graphismes, tu peux ainsi faire défiler une carte entière.
Si tu souhaites faire un scrolling vertical, là encore, tu mets à jour une seule ligne, en haut ou en bas (peu importe laquelle), et tu injectes de nouveaux graphismes pour faire défiler la carte.
Une fois tout cela en place sur le Plus, tu peux positionner librement des sprites matériels n’importe où par-dessus, sans aucun souci.
Si tu développes pour le CPC standard, tu dois calculer l’emplacement où dessiner le sprite en te basant sur l’adresse de base de l’écran et sur les coordonnées x, y de ton sprite. Tu le dessines comme tu le ferais pour un écran statique (bien qu’il y ait un cas où INC HL ne passe pas à l’octet d’écran suivant comme prévu ; tu peux examiner le désassemblage de la routine firmware SCR_NEXT_BYTE pour voir une méthode, ou bien dessiner le sprite par colonnes pour contourner le problème, diverses méthodes existent).
Après avoir dessiné le sprite, il faudra l’effacer ; là encore, il y a plusieurs approches : redessiner les tuiles situées en dessous, sauvegarder la zone d’écran avant de dessiner pour la restaurer ensuite, la copier depuis une autre version intacte de l’écran… les possibilités varient.
Un scrolling plus fluide sur CPC (sans utiliser le Plus) peut être réalisé de différentes manières, mais ne t’attends pas à obtenir facilement la même fluidité horizontale que sur Plus ; sur le plan vertical, plusieurs approches existent.
Y a-t-il des points précis sur lesquels tu as besoin d’aide ? Dis-le-moi, et avec un peu de chance, on trouvera une solution pour que tout devienne limpide.